Blockchain inta badan waxay la xiriirtaa oo kaliya lacagaha loo yaqaan 'cryptocurrencies', laakiin aagagga adeegsiga tignoolajiyada DLT ayaa aad u ballaaran. Mid ka mid ah meelaha ugu rajo-gelinta badan ee isticmaalka blockchain waa qandaraas caqli-gal ah oo si toos ah loo fuliyo oo aan u baahnayn kalsooni ka dhaxaysa dhinacyada galay.
RIDE β luqad loogu talagalay qandaraasyada smart
Mowjadaha ayaa sameeyay luuqad gaar ah oo loogu talagalay qandaraasyada caqliga leh - RIDE. Dukumeentigeeda oo dhammaystiran ayaa yaalla
Qandaraaska RIDE waa saadaal wuxuuna soo celiyaa "run" ama "been" sidii wax soo saar ahaan. Sidaas awgeed, wax kala iibsiga waxaa lagu diiwaangeliyaa blockchain ama waa la diiday. Qandaraaska smart ayaa si buuxda u dammaanad qaadaya buuxinta shuruudaha la cayimay. Ka abuurista wax kala iibsiga qandaraaska RIDE hadda suurtagal maaha.
Maanta waxaa jira laba nooc oo qandaraasyada Waves smart: xisaabaadka smart iyo hantida smart. Koontada casriga ah waa akoon isticmaale oo joogto ah, laakiin qoraal ayaa loo dejiyay kaas oo maamula dhammaan wax kala iibsiga. Qoraal xisaabeedka smart wuxuu u ekaan karaa sidan, tusaale:
match tx {
case t: TransferTransaction | MassTransferTransaction => false
case _ => true
}
tx waa macaamil ganacsi oo la farsameeyo oo aan u oggolaano isticmaalka habka isbarbardhigga qaabka kaliya haddii aysan ahayn macaamil wareejin. U dhigma qaabka RIDE waxaa loo isticmaalaa in lagu hubiyo nooca wax kala iibsiga. Dhammaan xisaabaadka jira waxaa lagu farsamayn karaa qoraalka xisaabta smart
Qoraalku waxa kale oo uu ku dhawaaqi karaa doorsoomayaasha, isticmaal "haddii-ka dibna-kale" dhismooyinka iyo habab kale si aad si buuxda u hubiso xaaladaha. Si loo hubiyo in qandaraasyadu ay leeyihiin dhammaystir la taaban karo iyo kakanaanta (qiimaha) oo ay fududahay in la saadaaliyo ka hor intaan la bilaabin fulinta qandaraaska, RIDE kuma jiraan wareegyo ama weedho boodi ah.
Tilmaamaha kale ee xisaabaadka Waves waxaa ka mid ah joogitaanka "state", taas oo ah, xaaladda xisaabta. Waxaad ku qori kartaa tiro aan xadidnayn oo lammaane ah (furaha, qiimaha) gobolka koontada adiga oo isticmaalaya macaamilka xogta (DataTransaction). Macluumaadkan ayaa markaa laga baaraandegi karaa labadaba REST API iyo si toos ah qandaraaska smart.
Wax kala iibsi kastaa waxa uu ka koobnaan karaa cadaymo kala duwan, kaas oo saxeexa ka qaybqaataha, aqoonsiga macaamilka loo baahan yahay, iwm.
La shaqaynta RIDE iyada oo loo marayo
Wareeg buuxa, oo ay ku jiraan abuurista akoon, ku rakibida qandaraas caqli gal ah iyo diritaanka macaamil ganacsi, waxaad sidoo kale u isticmaali kartaa maktabad si aad ula falgasho API REST (tusaale, C #, C, Java, JavaScript, Python, Rust, Elixir) . Si aad u bilowdo la shaqaynta IDE, kaliya dhagsii badhanka CUSUB.
Suurtagalnimada isticmaalka qandaraasyada smart waa ballaaran: laga bilaabo mamnuucista wax kala iibsiga ilaa ciwaanada qaarkood ("liiska madow") ilaa dApps adag.
Hadda aynu eegno tusaalooyin gaar ah oo ku saabsan isticmaalka qandaraasyada caqliga leh ee ganacsiga: marka la samaynayo xaraashka, caymiska, iyo abuurista barnaamijyada daacadnimada.
Xaraashka
Mid ka mid ah shuruudaha xaraashka guuleysta ayaa ah daahfurnaan: kaqeybgalayaashu waa inay ku kalsoonaadaan inaysan suurtagal ahayn in la maareeyo dalabaadka. Tan waxaa lagu gaari karaa iyadoo loo mahadcelinayo blockchain, halkaasoo xogta aan la beddeli karin ee ku saabsan dhammaan khamaarka iyo waqtiga la sameeyay ay heli doonaan dhammaan ka qaybgalayaasha.
Marka la eego blockchain ee Waves, dalabyada waxaa lagu qori karaa xisaabta xaraashka iyada oo loo marayo DataTransaction.
Waxa kale oo aad dejin kartaa bilowga iyo dhammaadka wakhtiga xaraashka adiga oo isticmaalaya tirooyinka xannibaadda: inta jeer ee jiilka xannibaadda ee blockchain Waves waxay la mid tahay qiyaastii 60 ilbiriqsi
1. Xaraashka qiimaha kor u kaca ee Ingiriisiga
Ka qaybgalayaasha xaraash Ingiriisi waxay ku tartamayaan midba midka kale. sharad kasta oo cusub waa in uu ka badan yahay kii hore. Xaraashku wuxuu dhamaanayaa marka aysan jirin shirkado kale oo ka badan tartanka ugu dambeeya. Xaaladdan oo kale, qandaraaslaha ugu sarreeya waa inuu bixiyaa qaddarka la sheegay.
Waxa kale oo jira ikhtiyaar xaraash kaas oo iibiyuhu dejiyo qiimaha ugu yar ee fara badan, qiimaha ugu dambeeyana waa inuu ka badan yahay. Haddii kale, bakhtiyaa nasiibku wuu jiraa.
Tusaalahan, waxaanu kula shaqaynaynaa akoon si gaar ah loogu sameeyay xaraashka. Muddada xaraashku waa 3000 baloog, qiimaha bilawga ah ee alaabtuna waa 0,001 WAVES. Ka qaybqaataha wuxuu soo diri karaa dalab isagoo soo diraya DataTransaction oo wata furaha "qiimaha" iyo qiimaha dalabkooda.
Qiimaha qandaraaska cusubi waa inuu ka sarreeyaa qiimaha hadda furaha, ka qaybqaatahana waa inuu akoonkiisa ku hayaa ugu yaraan [new_bid + commission] tokens. Ciwaanka qandaraaslaha waa in lagu diwaan galiyo goobta "diraha" ee DataTransaction, iyo dhererka xannibaadda qandaraasku waa in uu ku jiraa xilliga xaraashka.
Haddii dhamaadka xaraashka ka qaybqaataha uu dejiyo qiimaha ugu sarreeya, wuxuu soo diri karaa ExchangeTransaction si uu ugu bixiyo saamiga u dhigma qiimaha iyo lacagta la cayimay.
let startHeight = 384120
let finishHeight = startHeight + 3000
let startPrice = 100000
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
match tx {
case d : DataTransaction =>
#ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π·Π°Π΄Π°Π½Π° Π»ΠΈ Π² ΡΡΠ΅ΠΉΡΠ΅ ΡΠ΅Π½Π°
let currentPrice = if isDefined(getInteger(this, "price"))
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠ΅Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΉΡΠ°
then extract(getInteger(this, "price"))
else startPrice
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠ΅Π½Ρ ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let newPrice = extract(getInteger(d.data, "price"))
let priceIsBigger = newPrice > currentPrice
let fee = 700000
let hasMoney = wavesBalance(tx.sender) + fee >= newPrice
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄Π²Π° ΠΏΠΎΠ»Ρ ΠΈ ΡΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let correctFields = size(d.data) == 2 &&
d.sender == addressFromString(extract(getString(d.data,"sender")))
startHeight <= height && height <= finishHeight && priceIsBigger && hasMoney && correctFields
case e : ExchangeTransaction =>
let senderIsWinner = e.sender == addressFromString(extract(getString(this, "sender"))) #ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π»ΠΎΡ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ ΡΠΎΡ, ΠΊΡΠΎ Π΅Π³ΠΎ Π²ΡΠΈΠ³ΡΠ°Π»
let correctAssetPair = e.sellOrder.assetPair.amountAsset == token && ! isDefined(e.sellOrder.assetPair.priceAsset)
let correctAmount = e.amount == 1
let correctPrice = e.price == extract(getInteger(this, "price"))
height > finishHeight && senderIsWinner && correctAssetPair && correctAmount && correctPrice
case _ => false
}
2. Xaraashka Nederlandka ee hoos u dhaca qiimaha
Xaraashka Nederlandka, wax badan ayaa marka hore lagu bixiyaa qiimo ka sarreeya waxa iibsaduhu doonayo inuu bixiyo. qiimuhu wuxuu hoos u dhacayaa talaabo-tallaabo ilaa mid ka mid ah ka qaybgalayaasha uu ogolaado inuu ku iibsado baadka qiimaha hadda jira.
Tusaalahan waxaanu isticmaalnaa isla joogtooyinkii kii hore, iyo sidoo kale talaabada qiimaha marka delta hoos u dhacdo. Qoraalka akoonku wuxuu hubinayaa in ka qaybqaataha uu runtii yahay kan ugu horreeya ee sharad dhiga. Haddii kale, DataTransaction ma aqbalayo blockchain.
let startHeight = 384120
let finishHeight = startHeight + 3000
let startPrice = 100000000
let delta = 100
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
match tx {
case d : DataTransaction =>
let currentPrice = startPrice - delta * (height - startHeight)
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ Π΄Π°ΡΠ°-ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎΠ»Π΅ "price"
let newPrice = extract(getInteger(d.data, "price"))
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π² ΡΡΠ΅ΠΉΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΏΠΎΠ»Ρ "sender"
let noBetsBefore = !isDefined(getInteger(this, "sender"))
let fee = 700000
let hasMoney = wavesBalance(tx.sender) + fee >= newPrice
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΏΠΎΠ»Ρ
let correctFields = size(d.data) == 2 && newPrice == currentPrice && d.sender == addressFromString(extract(getString(d.data, "sender")))
startHeight <= height && height <= finishHeight && noBetsBefore && hasMoney && correctFields
case e : ExchangeTransaction =>
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΠΊΠ°Π·Π°Π½ Π² ΡΡΠ΅ΠΉΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΡ sender
let senderIsWinner = e.sender == addressFromString(extract(getString(this, "sender")))
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π°mount Π°ΡΡΠ΅ΡΠ° ΡΠΊΠ°Π·Π°Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΈ ΡΡΠΎ ΠΏΡΠ°ΠΉΡ-Π°ΡΡΠ΅Ρ - waves
let correctAssetPair = e.sellOrder.assetPair.amountAsset == token && ! isDefined(e.sellOrder.assetPair.priceAsset)
let correctAmount = e.amount == 1
let correctPrice = e.price == extract(getInteger(this, "price"))
height > finishHeight && senderIsWinner && correctAssetPair && correctAmount && correctPrice
case _ => false
}
3. Xaraashka "dhammaan bixinta"
"All-pay" waa xaraash ay dhammaan ka qaybgalayaashu bixiyaan tartanka, iyada oo aan loo eegin cidda ku guulaysata saamiga. Ka qaybgale kasta oo cusub ayaa bixiya dalab, ka qaybqaataha sameeya dalabka ugu badana wuxuu ku guulaystaa saamiga.
Tusaalahayaga, ka qaybgale xaraash kastaa wuxuu ku shubaa dalab isagoo adeegsanaya DataTransaction leh (furaha, qiimaha)* = ("guuleeyaha", ciwaanka), ("qiimaha", qiimaha). DataTransaction noocan oo kale ah ayaa la ansixiyay kaliya haddii ka qaybqaatahani uu hore u lahaa Transfer TransferTransaction oo saxiixiisa iyo dalabkiisu uu ka sarreeyo dhammaan kuwii hore. Xaraashka ayaa socon doona ilaa dhamaadkaHeight laga gaarayo.
let startHeight = 1000
let endHeight = 2000
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
match tx {
case d: DataTransaction =>
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ Π΄Π°ΡΠ°-ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎΠ»Π΅ "price"
let newPrice = extract(getInteger(d.data, "price"))
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΠΏΡΡΡΠΎΠ² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
let pk = d.proofs[1]
let address = addressFromPublicKey(pk)
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΈΠ· ΠΏΡΡΡΠΎΠ² ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ Π΄Π°ΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let proofTx = extract(transactionById(d.proofs[2]))
height > startHeight && height < endHeight
&& size(d.data) == 2
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΡΠΉ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΡΠΌ ΠΈΠ· ΠΏΡΡΡΠΎΠ²
&& extract(getString(d.data, "winner")) == toBase58String(address.bytes)
&& newPrice > extract(getInteger(this, "price"))
#ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π°
&& sigVerify(d.bodyBytes, d.proofs[0], d.proofs[1])
#ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΏΡΡΡΠ°Ρ
&& match proofTx {
case tr : TransferTransaction =>
tr.sender == address &&
tr.amount == newPrice
case _ => false
}
case t: TransferTransaction =>
sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
|| (
height > endHeight
&& extract(getString(this, "winner")) == toBase58String((addressFromRecipient(t.recipient)).bytes)
&& t.assetId == token
&& t.amount == 1
)
case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}
Caymiska / Crowdfunding
Aynu ka fiirsanno xaalad aad u baahan tahay inaad ka caymiso hantida isticmaalayaasha ka dhanka ah khasaaraha maaliyadeed. Tusaale ahaan, isticmaaluhu wuxuu rabaa dammaanad ah in haddii calaamaduhu hoos u dhacaan, uu awoodi doono inuu dib u soo celiyo lacagta buuxda ee lagu bixiyay calaamadahan, oo uu diyaar u yahay inuu bixiyo qaddar macquul ah oo caymis ah.
Si taas loo hirgeliyo, "calaamadaha caymiska" waxay u baahan yihiin in la soo saaro. Kadibna qoraal ayaa lagu rakibay koontada sharci-hayaha, taas oo u oggolaanaysa kaliya ExchangeTransactions ee buuxiya shuruudaha qaarkood in la fuliyo.
Si aad uga hortagto kharashaadka labanlaabka ah, waxaad u baahan tahay inaad ka codsato adeegsadaha inuu horay ugu soo diro DataTransaction akoontada siyaasad-hayaha oo wata (furaha, qiimaha) = (purchaseTransactionId, sellOrderId) oo aad mamnuucdo diritaanka DataTransactions fure hore loo isticmaalay.
Sidaa darteed, caddaynta isticmaaluhu waa inay ku jiraan aqoonsiga macaamil ganacsi ee calaamada caymiska iibsashada. Lammaanaha lacaguhu waa inay la mid noqdaan kuwa wax iibsiga. Kharashku sidoo kale waa inuu la mid noqdaa kan go'an wakhtiga iibka, laga jaray qiimaha caymiska.
Waxaa la fahamsan yahay in markaa ka dib koontada caymisku ay ka iibsato calaamadihii caymiska ee isticmaalaha qiimo aan ka yarayn kii uu ku iibsaday: xisaabta caymiska waxay abuurtaa ExchangeTransaction, isticmaaluhu wuxuu saxeexaa amarka (haddii macaamilka si sax ah loo dhammeeyo), Koontada caymisku waxay saxeexdaa amarka labaad iyo macaamilka oo dhan waxayna u dirtaa blockchain .
Haddii wax iibsi ah uusan dhicin, isticmaaluhu wuxuu abuuri karaa ExchangeTransaction si waafaqsan xeerarka lagu qeexay qoraalka oo u diro macaamilka blockchain. Sidan ayuu isticmaaluhu u soo celin karaa lacagta ku baxday iibsashada calaamado caymis ah.
let insuranceToken = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ
let this = extract(tx.sender)
let freezePeriod = 150000
let insurancePrice = 10000
match tx {
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΡΠΏΠΈΠ»Π° Π΄Π°ΡΠ°-ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΡΠΎ Ρ Π½Π΅Π΅ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ ΠΈ Π² ΡΡΠ΅ΠΉΡΠ΅ Π΅ΡΠ΅ Π½Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°
case d : DataTransaction => size(d.data) == 1 && !isDefined(getBinary(this, d.data[0].key))
case e : ExchangeTransaction =>
#Π΅ΡΠ»ΠΈ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅Ρ ΡΠ΅Π΄ΡΠΌΠΎΠ³ΠΎ ΠΏΡΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
if !isDefined(e.proofs[7]) then
sigVerify(e.bodyBytes, e.proofs[0], e.senderPublicKey)
else
#Π΅ΡΠ»ΠΈ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΅ΡΡΡ ΡΠ΅Π΄ΡΠΌΠΎΠΉ ΠΏΡΡΡ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈ ΡΠ·Π½Π°ΡΠΌ Π΅Ρ Π²ΡΡΠΎΡΡ
let purchaseTx = transactionById(e.proofs[7])
let purchaseTxHeight = extract(transactionHeightById(e.proofs[7]))
#ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈΠ· ΠΏΡΡΡΠ°
match purchaseTx {
case purchase : ExchangeTransaction =>
let correctSender = purchase.sender == e.sellOrder.sender
let correctAssetPair = e.sellOrder.assetPair.amountAsset == insuranceToken &&
purchase.sellOrder.assetPair.amountAsset == insuranceToken &&
e.sellOrder.assetPair.priceAsset == purchase.sellOrder.assetPair.priceAsset
let correctPrice = e.price == purchase.price - insurancePrice && e.amount == purchase.amount
let correctHeight = height > purchaseTxHeight + freezePeriod
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ-ΠΏΡΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½ Π²Π΅ΡΠ½ΡΠΉ ID ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let correctProof = extract(getBinary(this, toBase58String(purchase.id))) == e.sellOrder.id
correctSender && correctAssetPair && correctPrice && correctHeight && correctProof
case _ => false
}
case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}
Calaamadda caymiska waxaa la samayn karaa hanti caqli-gal ah, tusaale ahaan, si loo mamnuuco u wareejinta dhinacyada saddexaad.
Nidaamkan waxa kale oo loo hirgelin karaa calaamado badan oo lacag ururin ah, kuwaas oo lagu celiyo mulkiilayaasha haddii aan la soo qaadin qaddarka loo baahan yahay.
Canshuuraha wax kala iibsiga
Qandaraasyada casriga ah ayaa sidoo kale lagu dabaqi karaa kiisaska ay lagama maarmaan tahay in la ururiyo canshuurta macaamil kasta oo leh dhowr nooc oo hanti ah. Tan waxa lagu samayn karaa hanti cusub oo la rakibay
1. Waxaanu bixinaa FeeCoin, kaas oo loogu diri doono isticmaalayaasha qiimo go'an: 0,01 WAVES = 0,001 FeeCoin.
2. U deji kafaala-qaadka FeeCoin iyo heerka sarrifka: 0,001 WAVES = 0,001 FeeCoin.
3. U deji qoraalka soo socda ee hantida caqliga leh:
let feeAssetId = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
let taxDivisor = 10
match tx {
case t: TransferTransaction =>
t.feeAssetId == feeAssetId && t.fee == t.amount / taxDivisor
case e: ExchangeTransaction | MassTransferTransaction => false
case _ => true
}
Hadda mar kasta oo uu qof wareejiyo N hantida smart, waxay ku siin doonaan FeeCoin qaddarka N/taxDivisor (taas oo laga iibsan karo 10 *N/taxDivisor WAVES), waxaadna siin doontaa macdanta N/taxDivisor WAVES. Natiijo ahaan, faa'iidadaada (canshuurta) waxay noqon doontaa 9*N / cashuur qaybiye WAVES.
Waxa kale oo aad samayn kartaa canshuur adiga oo isticmaalaya qoraalka hantida smart iyo MassTransferTransaction:
let taxDivisor = 10
match tx {
case t : MassTransferTransaction =>
let twoTransfers = size(t.transfers) == 2
let issuerIsRecipient = t.transfers[0].recipient == addressFromString("3MgkTXzD72BTfYpd9UW42wdqTVg8HqnXEfc")
let taxesPaid = t.transfers[0].amount >= t.transfers[1].amount / taxDivisor
twoTransfers && issuerIsRecipient && taxesPaid
case _ => false
}
Lacag celinta iyo barnaamijyada daacadnimada
Cashback waa nooc ka mid ah barnaamijka daacadnimada kaas oo iibsaduhu uu dib ugu soo celiyo qayb ka mid ah qaddarka ku baxay badeecad ama adeeg.
Marka la fulinayo kiiskan adoo isticmaalaya xisaab caqli-gal ah, waa inaan hubinnaa caddaynta si la mid ah sidii aan ku samaynay kiiska caymiska. Si looga hortago kharaj laba jibaaran, isticmaaluhu waa inuu soo diraa DataTransaction leh (furaha, qiimaha) = (purchaseTransactionId, cashbackTransactionId) ka hor intaysan helin lacag caddaan ah.
Waa inaan sidoo kale dhigno mamnuucida furayaasha jira anagoo adeegsanayna DataTransaction. cashbackDivisor - unug loo qaybiyay saamiga dib u celinta. Kuwaas. Haddii saamiga cashback uu yahay 0.1, ka dibna cashbackDivisor 1 / 0.1 = 10.
let cashbackToken = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
#ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π°Π΄ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ
let this = extract(tx.sender)
let cashbackDivisor = 10
match tx {
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΡΠΏΠΈΠ»Π° Π΄Π°ΡΠ°-ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΡΠΎ Ρ Π½Π΅Π΅ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ ΠΈ Π² ΡΡΠ΅ΠΉΡΠ΅ Π΅ΡΠ΅ Π½Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°
case d : DataTransaction => size(d.data) == 1 && !isDefined(getBinary(this, d.data[0].key))
case e : TransferTransaction =>
#Π΅ΡΠ»ΠΈ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅Ρ ΡΠ΅Π΄ΡΠΌΠΎΠ³ΠΎ ΠΏΡΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
if !isDefined(e.proofs[7]) then
sigVerify(e.bodyBytes, e.proofs[0], e.senderPublicKey)
else
#Π΅ΡΠ»ΠΈ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΅ΡΡΡ ΡΠ΅Π΄ΡΠΌΠΎΠΉ ΠΏΡΡΡ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈ ΡΠ·Π½Π°ΡΠΌ Π΅Ρ Π²ΡΡΠΎΡΡ
let purchaseTx = transactionById(e.proofs[7])
let purchaseTxHeight = extract(transactionHeightById(e.proofs[7]))
#ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈΠ· ΠΏΡΡΡΠ°
match purchaseTx {
case purchase : TransferTransaction =>
let correctSender = purchase.sender == e.sender
let correctAsset = e.assetId == cashbackToken
let correctPrice = e.amount == purchase.amount / cashbackDivisor
#ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ-ΠΏΡΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½ Π²Π΅ΡΠ½ΡΠΉ ID ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let correctProof = extract(getBinary(this, toBase58String(purchase.id))) == e.id
correctSender && correctAsset && correctPrice && correctProof
case _ => false
}
case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}
Atomikada is dhaafsiga
Isku beddelka atomiga wuxuu u oggolaanayaa isticmaaleyaasha inay beddelaan hantida iyaga oo aan gacan ka helin beddelka. Isku beddelashada atomiga, labada ka qaybgalayaasha wax kala iibsiga waxa looga baahan yahay inay ku xaqiijiyaan muddo cayiman gudaheed.
Haddii ugu yaraan mid ka mid ah ka qaybgalayaashu aanu bixin caddayn sax ah oo ku saabsan macaamilka wakhtiga loo qoondeeyey macaamilka, macaamilku waa la joojiyay oo sarrifka ma dhicin.
Tusaalahayaga, waxaanu isticmaali doonaa qoraalka akoonka smart ee soo socda:
let Bob = Address(base58'3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8')
let Alice = Address(base58'3PNX6XwMeEXaaP1rf5MCk8weYeF7z2vJZBg')
let beforeHeight = 100000
let secret = base58'BN6RTYGWcwektQfSFzH8raYo9awaLgQ7pLyWLQY4S4F5'
match tx {
case t: TransferTransaction =>
let txToBob = t.recipient == Bob && sha256(t.proofs[0]) == secret && 20 + beforeHeight >= height
let backToAliceAfterHeight = height >= 21 + beforeHeight && t.recipient == Alice
txToBob || backToAliceAfterHeight
case _ => false
}
Maqaalka soo socda waxaan ku eegi doonaa isticmaalka xisaabaadka smart ee agabka maaliyadeed sida xulashooyinka, mustaqbalka iyo biilasha.
Source: www.habr.com