A-nis seallaidh sinn ri so-mhaoin snasail agus grunn chùisean cleachdaidh, a’ gabhail a-steach reothadh maoin agus cruthachadh cuingeachaidhean air gnothaichean aig seòlaidhean sònraichte.
Tha Waves Smart Assets a’ leigeil le luchd-cleachdaidh ath-chòmhdach a dhèanamh air sgriobtaichean air maoin, a’ leantainn na h-aon meacanaig ri Smart Accounts. Thèid gach gnothach ùr a thèid a chruthachadh a’ cleachdadh so-mhaoin snasail a dhearbhadh an toiseach leis an sgriobt, agus dìreach an uairsin leis an blockchain.
Is fhiach toirt fa-near na h-eadar-dhealachaidhean a leanas eadar so-mhaoin smart agus cunntasan snasail:
Ann an còd so-mhaoin smart, tha e do-dhèanta dearbhadh a dhearbhadh (bhruidhinn sinn mun deidhinn anns a 'chiad artaigil).
Anns a’ chòd cunntais snasail, chan urrainn dhut sùil a thoirt air ExchangeTransaction ach ma tha an cunntas agad mar chunntas matcher. Rud eile, chan eil ach an òrdugh air a sgrùdadh. Anns a’ chòd so-mhaoin smart, chan urrainn dhut sùil a thoirt air an òrdugh gu dìreach; faodaidh tu sgrùdadh a dhèanamh air an ExchangeTransaction, agus, ma tha sin riatanach, òrdugh a thoirt bhuaithe.
Chan eil stàite aig so-mhaoin snasail, eu-coltach ri cunntas snasail, ach tha cothrom againn fhathast air stàitean cunntais bhon sgriobt.
Bidh so-mhaoin glic gu mòr a’ sìmpleachadh sgrìobhadh chùmhnantan, a’ dèanamh buileachadh mòran chùisean pongail agus eireachdail.
Reothadh maoin
Gus maoin a reothadh gu àirde bloca sònraichte àirde targaid, faodaidh tu dìreach an luach seo a shuidheachadh ann an sgriobt na so-mhaoin snasail a leanas:
let targetHeight = 1500000
height >= targetHeight
height - функция языка, возращающая текущую высоту.
Suidheachadh sònraichte Matcher
Gus maidsidh sònraichte a shuidheachadh mar an tè a tha thu ag iarraidh, faodaidh tu an seòladh aige a shuidheachadh mar an neach a chuir e ann an sgriobt so-mhaoin snasail a tha coltach ri seo:
match tx {
case t : ExchangeTransaction =>
t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
case _ => true
}
"Liosta geal" de luchd-faighinn
Gus leigeil le comharran a chuir gu cunntasan sònraichte a-mhàin - gus “liosta geal” de luchd-faighinn a chruthachadh - faodaidh tu so-mhaoin snasail a chleachdadh leis an sgeama a leanas a nì sgrùdadh airson a bhith air an liosta:
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
}
Airson adhbharan tèarainteachd agus iomlanachd a’ chànain, chan eil buileachadh iterator air an liosta. Mar sin tha e air a mhìneachadh mar sheata de eileamaidean concrait.
"Liosta dubh" de luchd-faighinn
San aon dòigh, gus casg a chuir air comharran a chuir gu cunntasan sònraichte, faodaidh tu “liosta dhubh” a chruthachadh. Anns a ’chùis seo, thathas a’ cleachdadh dìreach an aon mhaoin smart, ach leis an t-seòladh air a sgrùdadh gus dèanamh cinnteach nach eil e air an liosta dhubh:
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
}
A 'cur le cead an neach-lìbhrigidh
A’ cleachdadh so-mhaoin spaideil, faodaidh tu cuideachd an roghainn so-mhaoin snasail a chuir a-steach a-mhàin le cead bhon neach-lìbhrigidh (bileag gealltanas/fiachan). Bidh an neach-lìbhrigidh a’ cur an cèill a chead le bhith a’ cur ID a’ ghnothaich ann an staid a’ chunntais aige:
match tx {
case t : TransferTransaction =>
let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
#убеждаемся, что в стейте эмитента содержится ID текущей транзакции
isDefined(getInteger(issuer, toBase58String(t.id)))
case _ => false
}
Dèan iomlaid a-mhàin airson buinn sònraichte
Tha so-mhaoin snasail a 'toirt cead airson a mhalairt a-mhàin airson buinn sònraichte. Mar eisimpleir, gus leigeil le iomlaid airson Bitcoins a-mhàin, dh'fhaodadh tu a 'cleachdadh an còd a leanas:
let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
case t : ExchangeTransaction =>
t.sellOrder.assetPair.priceAsset == BTCId ||
t.sellOrder.assetPair.amountAsset == BTCId
case _ => true
}
Malairt a rèir prìs bhon oracle
Anns an sgriobt so-mhaoin smart, faodaidh tu cead a chuir a-steach airson malairt a-mhàin aig a ’phrìs a tha stèidhichte ann an staid oracle earbsach. Seo eisimpleir de leithid de sgriobt:
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
}
An seo tha sinn mu choinneimh puing nach eil follaiseach nuair a bhios sinn a’ sgrùdadh ID na so-mhaoin leis a bheil malairt air a dhèanamh. Is e a’ phuing mura h-eil ID na so-mhaoin air a mhìneachadh, tha sinn a ’bruidhinn mu dheidhinn WAVES. Anns an sgriobt, bidh sinn a’ dèanamh cinnteach gun tèid malairt a dhèanamh an co-bhonn ri WAVES, san dòigh seo.
Àrdachadh prìsean stèidhichte
Faodaidh tu prìs stèidhichte a shuidheachadh airson so-mhaoin snasail, a mheudaicheas ceum air cheum ann an cuibhreann sònraichte. Seo eisimpleir de sgriobt maoin a dh’ èiricheas a phrìs 5% gach 1000 bloc:
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
}
Malairt eadar-amail
Cuideachd, le taing don sgriobt, faodaidh malairt so-mhaoin snasail a bhith cuibhrichte gu amannan ro-shuidhichte. Seo eisimpleir de leithid de sgriobt:
let startHeight = 10000
let interval = 44000
let limit = 1500
match tx {
case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
(height - startHeight) % interval < limit
case _ => true
}
Anns an sgriobt bidh sinn a 'dèanamh cinnteach sin bho thoiseach malairt toiseach àirde ni 's mò na cuingealachadh eadar-ama. Tha fad an eadar-ama co-ionann ris an àireamh de bhlocaichean a tha air an sònrachadh san raon àm.