Waves akamai waiwai: blacklists and whitelists, interval trade

Waves akamai waiwai: blacklists and whitelists, interval trade

Ma nā ʻatikala ʻelua i hala, ua kamaʻilio mākou e pili ana i nā moʻokāki akamai a pehea e hoʻohana ai. no ka mālama ʻana i nā kudala a me ka hoʻokumu ʻana i nā papahana kūpaʻaa kokua no hoi e hōʻoia i ka maopopo o nā mea hana kālā.

I kēia manawa, e nānā mākou i nā waiwai akamai a me kekahi mau hihia hoʻohana no lākou, e komo pū ana i nā waiwai manuahi a me ka hana ʻana i nā mea paʻa i nā kālepa ma nā wahi i hāʻawi ʻia.

Hāʻawi nā Waves Smart Assets i nā mea hoʻohana e kākau i nā waiwai, e hahai ana i nā mechanics like me nā moʻokāki akamai. ʻO kēlā me kēia hana hou i hana ʻia me ka waiwai akamai e hōʻoia mua ʻia e ka palapala, a laila wale nō e ka blockchain.

Pono e ʻike i nā ʻokoʻa ma waena o nā waiwai akamai a me nā moʻokāki akamai:

  1. Ma ke code o kahi waiwai akamai, ʻaʻole hiki ke nānā i nā hōʻoia (ua kamaʻilio mākou e pili ana iā lākou i ka ʻatikala mua).
  2. Ma ka helu moʻokāki akamai, hiki iā ʻoe ke nānā iā ExchangeTransaction inā he moʻokāki matcher kāu moʻokāki. A i ʻole, nānā wale ʻia ke kauoha. Ma ka helu waiwai akamai, ʻaʻole hiki iā ʻoe ke nānā pololei i ke kauoha, hiki iā ʻoe ke nānā i ka ExchangeTransaction, a wehe i ke kauoha mai ia mea inā pono.
  3. ʻO kahi waiwai akamai, ʻaʻole like me ka moʻokāki akamai, ʻaʻohe mokuʻāina, akā hiki iā mākou ke komo i nā mokuʻāina moʻokāki mai ka palapala.

Maʻalahi loa nā waiwai akamai i ke kākau ʻana i nā ʻaelike, e hana i ka hoʻokō ʻana i nā hihia he nui a nani.

Paʻu waiwai

E hoʻokuʻu i nā waiwai a hiki i kekahi kiʻekiʻe poloka kiʻekiʻe kiʻekiʻe, hiki iā ʻoe ke hoʻonoho i kēia waiwai ma ka palapala o kēia waiwai akamai:

let targetHeight = 1500000
height >= targetHeight
 
height - функция языка, возращающая текущую высоту.

Kūlana hoʻohālikelike kikoʻī

No ka hoʻonohonoho ʻana i kahi mea hoʻokūkū kikoʻī e like me ka mea i makemake ʻia, hiki iā ʻoe ke hoʻonohonoho i kāna helu wahi ma ke ʻano he mea hoʻouna ma kahi palapala waiwai akamai e like me kēia:

match tx {
    case t : ExchangeTransaction =>
        t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
    case _ => true
}

"Papa keʻokeʻo" o nā mea loaʻa

No ka ʻae ʻana i nā hōʻailona e hoʻouna wale ʻia i kekahi mau moʻokāki - e hana i kahi "papa inoa keʻokeʻo" o ka poʻe loaʻa - hiki iā ʻoe ke hoʻohana i kahi waiwai akamai me kēia schema e nānā i ka hoʻokomo ʻana i ka papa inoa:

match tx {
  case t : TransferTransaction =>
    let trustedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let trustedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let trustedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient == trustedRecipient1 || t.recipient == trustedRecipient2 || t.recipient == trustedRecipient3
  case _ => false
}

No nā kumu palekana a me ka hopena o ka ʻōlelo i hōʻoia ʻia, ʻaʻole i loaʻa i ka papa inoa kahi hoʻokō iterator. No laila, ua kuhikuhi ʻia ma ke ʻano he hoʻonohonoho o nā mea koneki.

"Ka papa inoa ʻeleʻele" o nā mea loaʻa

Pēlā nō, no ka pale ʻana i ka hoʻouna ʻana i nā hōʻailona i kekahi mau moʻokāki, hiki iā ʻoe ke hana i kahi "papa inoa ʻeleʻele". I kēia hihia, hoʻohana ʻia ka waiwai akamai like, akā me ka nānā ʻana i ka helu wahi no ka loaʻa ʻole o kahi papa inoa ʻeleʻele:

match tx {
  case t : TransferTransaction =>
    let bannedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let bannedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let bannedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient != bannedRecipient1 && t.recipient != bannedRecipient2 && t.recipient != bannedRecipient3
  case _ => false
}

Hoʻouna me ka ʻae o ka mea hoʻopuka

Me kahi waiwai akamai, hiki iā ʻoe ke hoʻonohonoho i ke koho e hoʻouna i kahi waiwai akamai wale nō me ka ʻae o ka mea hoʻopuka (ka palapala hoʻohiki/ʻaiʻē). Hōʻike ka mea hoʻopuka i kona ʻae ma ke kau ʻana i ka ID kālepa ma ka mokuʻāina o kāna moʻokāki:

match tx {
  case t : TransferTransaction =>
    let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
    #убеждаемся, что в стейте эмитента содержится ID текущей транзакции
    isDefined(getInteger(issuer, toBase58String(t.id)))
  case _ => false
}

Hoʻololi wale no kekahi mau kālā

Hāʻawi ka waiwai akamai i ka ʻae e hoʻololi iā ia no kekahi mau kālā. No ka laʻana, no ka ʻae ʻana i ka hoʻololi no nā bitcoins wale nō, hiki iā ʻoe ke hoʻohana i kēia code:

let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
  case t : ExchangeTransaction =>
    t.sellOrder.assetPair.priceAsset == BTCId ||
     t.sellOrder.assetPair.amountAsset == BTCId
  case _ => true
}

Kālepa ma ke kumukūʻai mai ka ʻōlelo aʻoaʻo

Ma ka palapala waiwai akamai, hiki iā ʻoe ke hoʻonohonoho i ka ʻae e kālepa wale ma ke kumukūʻai i hoʻopaʻa ʻia ma ka mokuʻāina o kahi ʻōlelo ʻōlelo hilinaʻi. Eia kekahi laʻana o ia palapala:

let oracle = Address(base58'3PLNmokt22NrSiNvCLvwMUP84LCMJqbXwAD')
let assetId = toBase58String(base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd')
 
match tx {
  #запрещаем передачу ассета
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    #убеждаемся, что торговля происходит по цене, заданной в стейте оракла для этого ассета
    let correctPrice = e.price == extract(getInteger(oracle, assetId))
    #убеждаемся, что торговля происходит в обмен на WAVES
    let correctPriceAsset = !isDefined(e.sellOrder.assetPair.priceAsset) 
correctPrice && correctPriceAsset
  case _ => true
}

Eia mākou ke alo nei me kahi ʻike ʻole i ka wā e nānā ai i ka ID o ka waiwai e kūʻai ʻia nei. ʻO ka ʻoiaʻiʻo inā ʻaʻole i wehewehe ʻia ka ID waiwai, a laila ke kamaʻilio nei mākou no WAVES. Ma ka palapala, hōʻoia mākou e hana ʻia ke kālepa ʻana me WAVES, ma kēia ʻano.

Hoʻonui kumukūʻai paʻa

Hiki iā ʻoe ke hoʻonohonoho i kahi kumukūʻai paʻa no kahi waiwai akamai, kahi e hoʻonui ai i kēlā me kēia ʻanuʻu i kahi ʻāpana i hāʻawi ʻia. Eia kekahi laʻana o kahi palapala waiwai e hoʻonui i kona kumukūʻai e 5% i kēlā me kēia 1000 poloka:

let startPrice = 10
let startHeight = 1000
let interval = 1000
#на сколько процентов цена увеличивается за один шаг
let raise = 5
 
match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    e.price == startPrice + ((height - startHeight) / interval) * (100 + raise) / 100
    && !isDefined(e.sellOrder.assetPair.priceAsset)
  case _ => true
}


Kalepa waena

Eia kekahi, mahalo i ka palapala, hiki ke kaupalena ʻia ke kālepa waiwai akamai i nā wā i koho mua ʻia. Eia kekahi laʻana o ia palapala:

let startHeight = 10000
let interval = 44000
let limit = 1500
 
match tx {
  case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
    (height - startHeight) % interval < limit
  case _ => true
}

Ma ka palapala, hōʻoia mākou mai ka hoʻomaka ʻana o ke kālepa hoʻomakaHeight ʻaʻole i hala ma mua o kali nā wā āpau. Ua like ka lōʻihi o ka manawa me ka helu o nā poloka i kuhikuhi ʻia ma ke kahua wā mawaena.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka