Blockchain feem ntau tsuas yog cuam tshuam nrog cryptocurrencies, tab sis thaj chaw ntawm kev siv DLT thev naus laus zis ntau dua. Ib qho kev cog lus zoo tshaj plaws rau kev siv blockchain yog daim ntawv cog lus ntse uas tau ua tiav thiab tsis tas yuav muaj kev ntseeg siab ntawm ob tog uas nkag mus rau hauv nws.
RIDE - ib hom lus rau kev cog lus ntse
Waves tau tsim cov lus tshwj xeeb rau kev cog lus ntse - RIDE. Nws cov ntaub ntawv tiav yog nyob
Daim ntawv cog lus RIDE yog ib qho piv txwv thiab xa rov qab "tseeb" lossis "tsis tseeb" raws li cov zis. Raws li, qhov kev sib pauv yog sau tseg hauv blockchain lossis tsis lees paub. Daim ntawv cog lus ntse tau lees paub qhov ua tiav ntawm cov xwm txheej tshwj xeeb. Tsim kev lag luam los ntawm daim ntawv cog lus hauv RIDE tam sim no tsis tuaj yeem ua tau.
Niaj hnub no muaj ob hom Waves ntse daim ntawv cog lus: cov nyiaj ntse thiab cov cuab tam ntse. Ib tus as khauj ntse yog tus neeg siv nyiaj tsis tu ncua, tab sis tsab ntawv raug teeb tsa rau nws uas tswj txhua qhov kev hloov pauv. Ib daim ntawv sau nyiaj ntse yuav zoo li qhov no, piv txwv li:
match tx {
case t: TransferTransaction | MassTransferTransaction => false
case _ => true
}
tx yog kev ua lag luam uas peb tso cai siv cov qauv sib txuam tsuas yog tias nws tsis yog kev hloov pauv. Cov qauv sib txuam hauv RIDE yog siv los kuaj xyuas hom kev lag luam. Tag nrho cov nyiaj uas twb muaj lawm tuaj yeem ua tiav hauv daim ntawv sau nyiaj ntse
Tsab ntawv kuj tseem tuaj yeem tshaj tawm cov kev hloov pauv, siv "yog-tom qab-lwm" tsim thiab lwm txoj hauv kev rau kev kuaj xyuas tag nrho. Txhawm rau kom ntseeg tau tias cov ntawv cog lus muaj qhov ua tiav tiav thiab qhov nyuaj (tus nqi) uas yooj yim los twv ua ntej kev cog lus pib ua tiav, RIDE tsis muaj cov voj voog lossis cov lus dhia.
Lwm yam nta ntawm Waves accounts muaj xws li muaj lub "xeev", uas yog, lub xeev ntawm tus account. Koj tuaj yeem sau tus lej tsis kawg ntawm cov khub (qhov tseem ceeb, tus nqi) rau tus account lub xeev siv cov ntaub ntawv pauv (DataTransaction). Cov ntaub ntawv no tuaj yeem ua tiav ob qho tib si los ntawm REST API thiab ncaj qha hauv daim ntawv cog lus ntse.
Txhua qhov kev sib pauv tuaj yeem muaj cov ntaub ntawv pov thawj, uas kos npe ntawm tus neeg koom nrog, ID ntawm qhov yuav tsum tau ua, thiab lwm yam tuaj yeem nkag mus.
Ua haujlwm nrog RIDE ntawm
Rau tag nrho lub voj voog, suav nrog kev tsim ib tus as-qhauj, txhim kho daim ntawv cog lus ntse rau nws thiab xa cov khoom lag luam, koj tuaj yeem siv lub tsev qiv ntawv rau kev cuam tshuam nrog REST API (piv txwv li, C#, C, Java, JavaScript, Python, Rust, Elixir) . Txhawm rau pib ua haujlwm nrog IDE, tsuas yog nyem lub pob tshiab.
Cov muaj peev xwm siv cov ntawv cog lus ntse yog qhov dav: los ntawm kev txwv kev lag luam rau qee qhov chaw nyob ("dub npe") mus rau dApps nyuaj.
Tam sim no cia peb saib cov piv txwv tshwj xeeb ntawm kev siv cov ntawv cog lus ntse hauv kev lag luam: thaum ua kev sib tw, kev tuav pov hwm, thiab tsim cov kev pabcuam ncaj ncees.
Kev muag khoom
Ib qho ntawm cov xwm txheej rau kev sib tw ua tiav yog pob tshab: cov neeg tuaj koom yuav tsum ntseeg siab tias nws tsis tuaj yeem tswj hwm qhov kev sib tw. Qhov no tuaj yeem ua tiav ua tsaug rau blockchain, qhov twg cov ntaub ntawv tsis hloov pauv ntawm txhua qhov kev twv txiaj thiab lub sijhawm uas lawv tau ua yuav muaj rau txhua tus neeg koom.
Ntawm Waves blockchain, kev twv yuav raug kaw nyob rau hauv lub xeev tus account auction ntawm DataTransaction.
Koj tuaj yeem teeb tsa lub sijhawm pib thiab xaus ntawm kev sib tw siv cov lej thaiv: qhov zaus ntawm kev tsim thaiv hauv Waves blockchain yog kwv yees li sib npaug. 60 vib nas this.
1. English ascending price auction
Cov neeg koom nrog hauv kev sib tw Askiv qhov chaw twv hauv kev sib tw nrog ib leeg. Txhua tus thawj koom ruam tshiab yuav tsum tshaj qhov dhau los. Qhov kev sib tw xaus thaum tsis muaj cov neeg sib tw ntxiv kom dhau qhov kev sib tw zaum kawg. Hauv qhov no, tus neeg sib tw siab tshaj plaws yuav tsum muab tus nqi teev tseg.
Kuj tseem muaj kev xaiv auction uas tus neeg muag khoom tau teev tus nqi tsawg kawg nkaus rau qhov ntau, thiab tus nqi kawg yuav tsum tshaj nws. Txwv tsis pub, qhov ntau tseem tsis tau muag.
Hauv qhov piv txwv no, peb tab tom ua haujlwm nrog tus account tshwj xeeb tsim rau kev sib tw. Lub sijhawm sib tw yog 3000 blocks, thiab tus nqi pib ntawm qhov ntau yog 0,001 WAVES. Ib tus neeg tuaj koom tuaj yeem tso qhov kev sib tw los ntawm kev xa cov DataTransaction nrog tus yuam sij "nqi" thiab tus nqi ntawm lawv qhov kev twv.
Tus nqi ntawm qhov kev sib tw tshiab yuav tsum siab dua tus nqi tam sim no rau tus yuam sij no, thiab tus neeg koom yuav tsum muaj tsawg kawg [new_bid + commission] tokens hauv nws tus account. Tus neeg sib tw qhov chaw nyob yuav tsum tau sau tseg rau hauv "sender" teb hauv DataTransaction, thiab tam sim no qhov siab thaiv qhov siab yuav tsum nyob rau hauv lub sijhawm sib tw.
Yog tias thaum kawg ntawm qhov kev sib tw, tus neeg tuaj koom tau teeb tsa tus nqi siab tshaj plaws, nws tuaj yeem xa ib qho ExchangeTransaction los them rau qhov sib thooj ntawm tus nqi teev thiab cov txiaj ntsig.
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. Dutch auction ntawm tus nqi txo
Hauv kev sib tw Dutch, ntau qhov pib pib ntawm tus nqi siab dua li tus neeg yuav khoom txaus siab them. Tus nqi txo qis zuj zus mus txog thaum ib tus neeg koom nrog pom zoo yuav ntau ntawm tus nqi tam sim no.
Hauv qhov piv txwv no peb siv tib qhov tsis tu ncua ib yam li yav dhau los, nrog rau tus nqi kauj ruam thaum delta txo. Cov ntawv sau nyiaj txheeb xyuas seb tus neeg koom puas yog thawj tus thawj koom ruam. Txwv tsis pub, DataTransaction tsis tau txais los ntawm 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. Auction "tag nrho-them"
"Tag nrho-them" yog qhov kev sib tw uas txhua tus neeg koom them tus nqi sib tw, tsis hais leej twg yeej qhov ntau. Txhua tus neeg tuaj koom tshiab them tus nqi sib tw, thiab tus neeg koom nrog uas ua rau qhov siab tshaj plaws tau yeej qhov ntau.
Hauv peb qhov piv txwv, txhua tus neeg koom nrog kev sib tw muab qhov kev sib tw ntawm DataTransaction nrog (qhov tseem ceeb, tus nqi) * = ("yeej", chaw nyob), ("nqi", nqe). Xws li DataTransaction tsuas yog pom zoo yog tias tus neeg koom nrog no twb muaj Kev Hloov Pauv nrog nws kos npe thiab nws qhov kev sib tw siab dua tag nrho cov yav dhau los. Lub auction tseem mus txog qhov kawg Height.
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)
}
Insurance / Crowdfunding
Cia peb xav txog qhov xwm txheej uas koj yuav tsum tau pov hwm cov neeg siv khoom muaj nqis tiv thaiv kev poob nyiaj txiag. Piv txwv li, tus neeg siv xav tau kev lees paub tias yog tias tus token depreciates, nws yuav tuaj yeem rov qab tau tag nrho cov nyiaj them rau cov tokens, thiab txaus siab them tus nqi pov hwm tsim nyog.
Yuav kom siv tau qhov no, "insurance tokens" yuav tsum tau muab tawm. Tom qab ntawd ib tsab ntawv raug ntsia rau ntawm tus tuav ntaub ntawv tus account, tso cai rau tsuas yog cov ExchangeTransactions uas ua tau raws li qee yam xwm txheej kom ua tiav.
Txhawm rau tiv thaiv kev siv nyiaj ob npaug, koj yuav tsum thov kom tus neeg siv xa daim DataTransaction rau tus tuav tswj tus account ua ntej nrog (qhov tseem ceeb, tus nqi) = (purchaseTransactionId, sellOrderId) thiab txwv tsis pub xa DataTransactions nrog tus yuam sij uas twb tau siv lawm.
Yog li ntawd, tus neeg siv cov ntaub ntawv pov thawj yuav tsum muaj tus lej ID ntawm kev tuav pov hwm token muas. Tus khub txiaj yuav tsum zoo ib yam li hauv kev yuav khoom. Tus nqi kuj yuav tsum sib npaug li qhov ruaj thaum lub sijhawm yuav khoom, rho tawm tus nqi ntawm kev tuav pov hwm.
Nws tau nkag siab tias tom qab ntawd tus account tuav pov hwm yuav cov ntawv pov hwm tokens los ntawm tus neeg siv ntawm tus nqi tsis qis dua qhov uas nws tau yuav lawv: cov nyiaj tuav pov hwm tsim ib qho ExchangeTransaction, tus neeg siv kos npe rau qhov kev txiav txim (yog tias qhov kev sib pauv tiav lawm), lub kev tuav pov hwm tus account kos npe rau qhov kev txiav txim thib ob thiab tag nrho cov kev sib pauv thiab xa mus rau blockchain.
Yog tias tsis muaj kev yuav khoom tshwm sim, tus neeg siv tuaj yeem tsim qhov ExchangeTransaction raws li cov cai tau piav qhia hauv tsab ntawv thiab xa cov kev pauv mus rau blockchain. Txoj kev no tus neeg siv tuaj yeem xa rov qab cov nyiaj siv los ntawm kev yuav cov ntawv pov hwm tokens.
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)
}
Ib qho kev tuav pov hwm token tuaj yeem ua ib qho cuab tam ntse, piv txwv li, txwv tsis pub nws hloov mus rau lwm tus neeg.
Cov tswv yim no tseem tuaj yeem siv tau rau cov neeg coob coob tokens, uas tau xa rov qab mus rau cov tswv yog tias qhov xav tau tsis tau sau.
Cov se ua lag luam
Cov ntawv cog lus ntse kuj tseem siv tau rau hauv rooj plaub uas yuav tsum tau sau se ntawm txhua qhov kev sib pauv nrog ntau hom khoom muaj nqis. Qhov no tuaj yeem ua tiav los ntawm cov cuab yeej tshiab nrog kev teeb tsa
1. Peb muab FeeCoin, uas yuav raug xa mus rau cov neeg siv ntawm tus nqi ruaj khov: 0,01 WAVES = 0,001 FeeCoin.
2. Teem kev txhawb nqa rau FeeCoin thiab pauv tus nqi: 0,001 WAVES = 0,001 FeeCoin.
3. Teem cov ntawv hauv qab no rau cov cuab yeej ntse:
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
}
Tam sim no txhua zaus ib tug neeg hloov N cov cuab tam ntse, lawv yuav muab FeeCoin rau koj hauv tus nqi ntawm N / taxDivisor (uas tuaj yeem yuav los ntawm koj ntawm 10 * N / taxDivisor WAVES), thiab koj yuav muab cov miner N / taxDivisor WAVES. Yog li ntawd, koj cov nyiaj tau los (se) yuav yog 9 * N / taxDivisor WAVES.
Koj tseem tuaj yeem ua se siv cov khoom vaj khoom tsev ntse thiab 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
}
Cashback thiab loyalty programs
Cashback yog ib hom kev pabcuam ncaj ncees uas tus neeg yuav khoom tau rov qab ib feem ntawm cov nyiaj siv rau cov khoom lossis kev pabcuam.
Thaum ua raws li cov ntaub ntawv no siv tus account ntse, peb yuav tsum xyuas cov ntaub ntawv pov thawj zoo ib yam li peb tau ua hauv cov ntaub ntawv pov hwm. Txhawm rau tiv thaiv kev siv nyiaj ob npaug, tus neeg siv yuav tsum xa DataTransaction nrog (qhov tseem ceeb, tus nqi) = (purchaseTransactionId, cashbackTransactionId) ua ntej tau txais nyiaj rov qab.
Peb kuj yuav tsum teeb tsa txwv tsis pub siv cov yuam sij uas twb muaj lawm siv DataTransaction. cashbackDivisor - chav faib faib los ntawm cov nyiaj rov qab. Cov. yog tias qhov sib faib nyiaj rov qab yog 0.1, ces 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)
}
Atomic swb
Atomic swap tso cai rau cov neeg siv pauv cov cuab tam yam tsis muaj kev sib pauv. Nrog rau kev sib pauv atomic, ob tus neeg koom hauv kev sib pauv yuav tsum tau lees paub nws nyob rau hauv ib lub sijhawm.
Yog tias tsawg kawg yog ib qho ntawm cov neeg koom tsis tau muab kev lees paub tseeb ntawm qhov kev sib pauv hauv lub sijhawm muab rau kev sib pauv, kev hloov pauv raug muab tso tseg thiab kev pauv pauv tsis tshwm sim.
Hauv peb qhov piv txwv, peb yuav siv cov ntawv sau nyiaj ntse hauv qab no:
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
}
Hauv tsab xov xwm tom ntej no peb yuav saib kev siv cov nyiaj ntse hauv cov cuab yeej nyiaj txiag xws li kev xaiv, yav tom ntej thiab cov nqi.
Tau qhov twg los: www.hab.com