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:
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).
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.
ʻ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.