In code of hantida smart, waa wax aan macquul aheyn in la hubiyo cadeymaha (waxaan ka hadalnay iyaga maqaalka koowaad).
Koodhka koontada smart, waxaad ku hubin kartaa ExchangeTransaction kaliya haddii koontadaadu tahay akoon ku habboon. Haddii kale, kaliya amarka ayaa la hubiyaa. Koodhka hantida smart, si toos ah uma hubin kartid amarka; waxaad hubin kartaa ExchangeTransaction, iyo, haddii loo baahdo, ka soo saar dalab.
Hantida caqliga badan, oo ka duwan akoonka smart, ma laha dawlad, laakiin wali waxaan ka heli karnaa dawladaha xisaabta qoraalka.
Hantida casriga ah waxay si weyn u fududaysaa qorista qandaraasyada, taasoo ka dhigaysa hirgelinta kiisas badan mid kooban oo qurux badan.
Qabow hantida
Si aad u qaboojiso hantida ilaa dhererka go'an dhererka bartilmaameedka, waxaad si fudud u dejin kartaa qiimahan qoraalka hantida smart ee soo socota:
let targetHeight = 1500000
height >= targetHeight
height - функция языка, возращающая текущую высоту.
Xaaladda Gaarka ah ee Matcher
Si aad u dejiso ku habbooneeyaha sida la doonayo, waxaad u dejin kartaa ciwaankiisa sidii soo diraha qoraalka hantida smart ee sidan u eg:
match tx {
case t : ExchangeTransaction =>
t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
case _ => true
}
"Liiska cad" ee qaataha
Si aad u ogolaato in calaamada loo diro akoonnada qaarkood - si aad u abuurto "liiska cad" ee qaatahayaasha - waxaad isticmaali kartaa hanti caqli badan leh nidaamka soo socda kaas oo hubinaya ka mid noqoshada liiska:
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
}
Sababaha amniga iyo dhammaystirka luqadda ee macquulka ah awgeed, liisku kuma jiro hirgelinta ku celcelinta. Sidaa darteed waxaa lagu qeexaa inay tahay xubno la taaban karo.
"Liiska madow" ee qaataha
Sidoo kale, si loo mamnuuco dirista calaamadaha xisaabaadka qaarkood, waxaad samayn kartaa "liiska madow". Xaaladdan oo kale, isla hanti caqli leh ayaa la isticmaalaa, laakiin iyadoo cinwaanka la hubiyay si loo hubiyo inuusan ku jirin liiska madow:
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
}
Dirista ogolaanshaha soo saaraha
Adigoo isticmaalaya hanti caqli badan, waxaad sidoo kale dejin kartaa ikhtiyaarka aad ku diri karto hanti caqli badan oo keliya ogolaanshaha soo saaraha (calaamadaynta ballan qaadka/daynta). Soo saaraha wuxuu muujinayaa ogolaanshihiisa isagoo dhigaya aqoonsiga macaamil ganacsi ee gobolka koontada:
match tx {
case t : TransferTransaction =>
let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
#убеждаемся, что в стейте эмитента содержится ID текущей транзакции
isDefined(getInteger(issuer, toBase58String(t.id)))
case _ => false
}
Ku beddelo qadaadiicda qaarkood
Hantida caqliga leh waxay ogolaataa ogolaanshaha in lagu beddelo qadaadiicda qaarkood. Tusaale ahaan, si aad u oggolaato beddelka Bitcoins, waxaad isticmaali kartaa koodka soo socda:
let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
case t : ExchangeTransaction =>
t.sellOrder.assetPair.priceAsset == BTCId ||
t.sellOrder.assetPair.amountAsset == BTCId
case _ => true
}
Wax kaga beddelashada qiimaha afka
Qoraalka hantida smart, waxaad dejin kartaa ogolaanshaha ganacsiga ee kaliya qiimaha go'an ee gobolka oraah la isku halayn karo. Waa kan tusaale qoraalkan oo kale:
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
}
Halkan waxa ina soo food saartay meel aan caddayn marka la hubinayo aqoonsiga hantida lagu ganacsado. Ujeedadu waxay tahay in haddii aqoonsiga hantida aan la qeexin, markaa waxaan ka hadlaynaa MOwjadaha. Qoraalka, waxaan hubineynaa in ganacsiga lagu fuliyo mowjadaha, sida saxda ah sidaan.
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
}
Dhexdhexaad ganacsi
Sidoo kale, mahad qoraalka, ka ganacsiga hantida caqliga leh waxay ku koobnaan kartaa waqtiyo hore loo sii go'aamiyay. Waa kan tusaale qoraalkan oo kale:
let startHeight = 10000
let interval = 44000
let limit = 1500
match tx {
case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
(height - startHeight) % interval < limit
case _ => true
}
Qoraalka waxaan ku hubineynaa in laga bilaabo bilawga ganacsiga startHeight aan ka badnayn xadka durugsan Dhererka barqiga wuxuu la mid yahay tirada baloogyada lagu cayimay goobta bareeg.