Hojerentsika izao ny fananana marani-tsaina sy tranga maro amin'ny fampiasana azy, ao anatin'izany ny fananana mangatsiaka sy ny famoronana famerana ny fifampiraharahana amin'ny adiresy voafaritra.
Ny Waves Smart Assets dia ahafahan'ny mpampiasa manarona sora-baventy amin'ny fananana, manaraka ny mekanika mitovy amin'ny Smart Accounts. Ny fifanakalozana vaovao tsirairay noforonina tamin'ny fampiasana fananana hendry dia hohamafisin'ny script aloha, ary avy eo amin'ny blockchain.
Tsara ny manamarika ireto fahasamihafana manaraka ireto eo amin'ny fananana marani-tsaina sy ny kaonty marani-tsaina:
Ao amin'ny fehezan-dalàna momba ny fananana hendry dia tsy azo atao ny manamarina porofo (niresaka momba azy ireo izahay ao amin'ny lahatsoratra voalohany).
Ao amin'ny kaody kaonty hendry, azonao atao ny manamarina ny ExchangeTransaction raha toa ka kaonty matcher ny kaontinao. Raha tsy izany dia ny baiko ihany no jerena. Ao amin'ny kaody manan-tsaina, tsy afaka manamarina mivantana ny baiko ianao; azonao atao ny manamarina ny ExchangeTransaction, ary, raha ilaina, manaisotra baiko avy aminy.
Ny fananana marani-tsaina, tsy toy ny kaonty marani-tsaina, dia tsy manana fanjakana, saingy mbola afaka miditra amin'ny fanjakana kaonty avy amin'ny script izahay.
Ny fananana Smart dia manamora ny fanoratana fifanarahana, ka mahatonga ny fampiharana tranga maro ho fohy sy kanto.
let targetHeight = 1500000
height >= targetHeight
height - функция языка, возращающая текущую высоту.
Fepetra manokana matcher
Mba hametrahana mpifaninana manokana ho toy ny tiana dia azonao atao ny mametraka ny adiresiny ho mpandefa amin'ny sora-baventy manan-tsaina toa izao:
match tx {
case t : ExchangeTransaction =>
t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
case _ => true
}
"Lisitra fotsy" an'ny mpandray
Mba hamelana ny mari-pamantarana halefa any amin'ny kaonty sasany ihany - mba hamoronana "lisitra fotsy" an'ny mpandray - azonao atao ny mampiasa fananana marani-tsaina miaraka amin'ity tetika manaraka ity izay manamarina ny fampidirana ao anaty lisitra:
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
}
Noho ny antony ara-piarovana sy ny fahafenoan'ny fiteny, ny lisitra dia tsy misy fampiharana fampitaovana. Noho izany dia faritana ho fitambarana singa mivaingana izy io.
"Lisitra mainty" ny mpandray
Toy izany koa, mba handrara ny fandefasana famantarana amin'ny kaonty sasany, azonao atao ny mamorona "lisitra mainty". Amin'ity tranga ity, ny fananana manan-tsaina mitovy amin'izany ihany no ampiasaina, fa miaraka amin'ny adiresy voamarina mba hahazoana antoka fa tsy ao anaty lisitra mainty izy io:
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
}
Mandefa nahazoana alalana avy amin'ny mpamatsy
Amin'ny fampiasana fananana hendry dia azonao atao ihany koa ny mametraka ny safidy handefasana fananana hendry raha tsy mahazo alalana avy amin'ny mpanome (mariky ny fanoloran-tena/trosa). Ny mpanome dia maneho ny fanekeny amin'ny fametrahana ny kaody ID amin'ny toetry ny kaontiny:
match tx {
case t : TransferTransaction =>
let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
#убеждаемся, что в стейте эмитента содержится ID текущей транзакции
isDefined(getInteger(issuer, toBase58String(t.id)))
case _ => false
}
Takalo amin'ny vola madinika sasany
Ny fananana hendry dia manome alalana hanakalo izany amin'ny vola madinika sasany. Ohatra, raha tsy mamela ny fifanakalozana amin'ny Bitcoins fotsiny ianao dia azonao ampiasaina ity code manaraka ity:
let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
case t : ExchangeTransaction =>
t.sellOrder.assetPair.priceAsset == BTCId ||
t.sellOrder.assetPair.amountAsset == BTCId
case _ => true
}
Ny varotra amin'ny vidiny avy amin'ny oracle
Ao amin'ny script asset smart, azonao atao ny mametraka fahazoan-dàlana hivarotra raha tsy amin'ny vidiny voafetra amin'ny toetry ny oracle azo antoka. Ity misy ohatra amin'ny script toy izany:
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
}
Eto isika dia miatrika teboka tsy mazava rehefa manamarina ny ID ny fananana izay anaovana varotra. Ny tiana holazaina dia raha tsy voafaritra ny ID ID dia ny WAVES no resahina. Ao amin'ny script, ataontsika antoka fa ny varotra dia tanterahana miaraka amin'ny WAVES, amin'izany fomba izany.
Fisondrotry ny vidiny raikitra
Azonao atao ny mametraka vidiny raikitra ho an'ny fananana hendry, izay hampitombo tsikelikely amin'ny ampahany nomena. Ity misy ohatra amin'ny script fananana izay hitombo 5% ny vidiny isaky ny sakana 1000:
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
}
Varotra elanelam-potoana
Ary koa, noho ny script, ny varotra fananana hendry dia mety ho voafetra amin'ny elanelana efa voafaritra mialoha. Ity misy ohatra amin'ny script toy izany:
let startHeight = 10000
let interval = 44000
let limit = 1500
match tx {
case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
(height - startHeight) % interval < limit
case _ => true
}
Ao amin'ny script dia ataontsika antoka fa hatramin'ny fiandohan'ny varotra startHeight tsy mihoatra ny fetra elanelana. Ny halavan'ny elanelana dia mitovy amin'ny isan'ny sakana voatondro ao amin'ny saha elanelana.