Blockchain เบกเบฑเบเบเบฐเบเปเบฝเบงเบเปเบญเบเบเบฑเบ cryptocurrencies, เปเบเปเบเบทเปเบเบเบตเปเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบฑเบเปเบเปเบฅเบขเบต DLT เปเบกเปเบเบเบงเปเบฒเบเบเบงเปเบฒ. เบซเบเบถเปเบเปเบเบเบทเปเบเบเบตเปเบเบตเปเปเบเบเปเบเบฑเปเบเบเบตเปเบชเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเป blockchain เปเบกเปเบเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฅเบฐเบเปเปเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบงเบฒเบกเปเบงเปเบงเบฒเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเปเบฒเบเบเบตเปเปเบเบปเปเบฒเปเบเปเบเบกเบฑเบ.
RIDE - เบเบฒเบชเบฒเบชเปเบฒเบฅเบฑเบเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบ
Waves เปเบเปเบเบฑเบเบเบฐเบเบฒเบเบฒเบชเบฒเบเบดเปเบชเบเบชเปเบฒเบฅเบฑเบเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบ โ RIDE. เปเบญเบเบฐเบชเบฒเบเบเบปเบเบเปเบงเบเบเบญเบเบกเบฑเบเบเบฑเปเบเบขเบนเป
เบชเบฑเบเบเบฒ RIDE เปเบกเปเบเบเบปเบงเบเบตเปเบเบญเบเปเบฅเบฐเบชเบปเปเบเบเบทเบ "เบเบงเบฒเบกเบเบดเบ" เบซเบผเบท "เบเบดเบ" เปเบเบฑเบเบเบปเบเบเบฐเบฅเบดเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฐเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเปเบ blockchain เบซเบผเบทเบเบทเบเบเบฐเบเบดเปเบชเบ. เบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบเบขเปเบฒเบเปเบเบฑเบกเบชเปเบงเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเปเบเบทเปเบญเบเปเบเบเบตเปเบฅเบฐเบเบธเปเบงเป. เบเบฒเบเบเบฐเบฅเบดเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบชเบฑเบเบเบฒเปเบ RIDE เปเบกเปเบเบเปเปเปเบเบฑเบเปเบเปเบเป.
เบกเบทเปเบเบตเปเบกเบตเบชเบญเบเบเบฐเปเบเบเบเบญเบเบชเบฑเบเบเบฒเบชเบฐเบซเบผเบฒเบ Waves: เบเบฑเบเบเบตเบญเบฑเบเบชเบฐเบฅเบดเบเบฐ เปเบฅเบฐเบเบฑเบเบชเบดเบเบญเบฑเบเบชเบฐเบฅเบดเบเบฐ. เบเบฑเบเบเบตเบญเบฑเบเบชเบฐเบฅเบดเบเบฐเปเบกเปเบเบเบฑเบเบเบตเบเบนเปเปเบเปเบเบปเบเบเบฐเบเบด, เปเบเปเบชเบฐเบเบฃเบดเบเบเบทเบเบเบฑเปเบเปเบซเปเบกเบฑเบเบเบงเบเบเบธเบกเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบเปเบปเบ. เบชเบฐเบเบฃเบดเบเบเบฑเบเบเบตเบญเบฑเบเบชเบฐเบฅเบดเบเบฐเบญเบฒเบเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบตเป, เบเบปเบงเบขเปเบฒเบ:
match tx {
case t: TransferTransaction | MassTransferTransaction => false
case _ => true
}
tx เปเบกเปเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบเปเบฒเบฅเบฑเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเปเบเปเบเบปเบเปเบเบเบฒเบเบเบฑเบเบเบนเปเบฎเบนเบเปเบเบเบเบฝเบเปเบเปเบเปเบฒเบงเปเบฒเบกเบฑเบเบเปเปเปเบกเปเบเบเบฒเบเปเบญเบเบเปเบฒเบ. เบเบฒเบเบเบฑเบเบเบนเปเบฎเบนเบเปเบเบเปเบ RIDE เปเบกเปเบเปเบเปเปเบเบทเปเบญเบเบงเบเบชเบญเบเบเบฐเปเบเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒ. เบเบฑเบโเบเบตโเบเบตเปโเบกเบตโเบขเบนเปโเบเบฑเบโเบซเบกเบปเบโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฐโเบกเบงเบโเบเบปเบโเปเบโเบชเบฐโเบเบฃเบดโเบโเบเบฑเบโเบเบต smartโ
เบชเบฐเบเบฃเบดเบเบเบฑเบเบชเบฒเบกเบฒเบเบเบฐเบเบฒเบเบเบปเบงเปเบเปเบเป, เปเบเปเปเบเบเบชเปเบฒเบ "เบเปเบฒเปเบฅเปเบง-เบญเบทเปเบ" เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเปเปเบเบทเปเบญเบเบงเบเบชเบญเบเปเบเบทเปเบญเบเปเบเบขเปเบฒเบเบชเบปเบกเบเบนเบ. เปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบชเบฑเบเบเบฒเบกเบตเบเบงเบฒเบกเบชเบปเบกเบเบนเบเบเบตเปเบเบดเบชเบนเบเปเบเป เปเบฅเบฐเบเบฑเบเบเปเบญเบ (เบเปเบฒเปเบเปเบเปเบฒเบ) เบเบตเปเบเปเบฒเบเบเปเปเบเบฒเบเบเบฒเบเบเบฐเปเบเบเปเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบฑเบเบเบฒเบเบฐเปเบฅเบตเปเบกเบเบปเปเบ, RIDE เบเปเปเบกเบตเบเปเบฒเบเบฐเปเบซเบผเบเบเบฒเบ loops เบซเบผเบท jumped.
เบฅเบฑเบเบชเบฐเบเบฐเบญเบทเปเบเปเบเบญเบเบเบฑเบเบเบต Waves เบเบฐเบเบญเบเบกเบตเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบ "เบฅเบฑเบ", เบเบฑเปเบเปเบกเปเบ, เบชเบฐเบเบฒเบเบฐเบเบญเบเบเบฑเบเบเบต. เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบเบฝเบโเบเปเบฒโเบเบงเบ infinite เบเบญเบโเบเบนเป (เบเบฐโเปเบโ, เบกเบนเบโเบเปเบฒโ) เบเบฑเบโเบชเบฐโเบเบฒโเบเบฐโเบเบฑเบโเบเบตโเปเบเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเบฒเบโเปเบญเบโเบเปเปโเบกเบนเบ (DataTransactionโ)โ. เบเปเปเบกเบนเบเบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบเบธเบเปเบเปเบเบเบฑเบเบเปเบฒเบ REST API เปเบฅเบฐเปเบเบเบเบปเบเปเบเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบ.
เปเบเปเบฅเบฐเบเบธเบฅเบฐเบเปเบฒเบชเบฒเบกเบฒเบเบกเบต array เบเบญเบเบซเบผเบฑเบเบเบฒเบ, เปเบเบปเปเบฒเปเบเปเบเบฅเบฒเบเปเบเบฑเบเบเบญเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบก, ID เบเบญเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบเปเบญเบเบเบฒเบ, เปเบฅเบฐเบญเบทเปเบเป.
เปเบฎเบฑเบเบงเบฝเบเบเบฑเบ RIDE เบเปเบฒเบ
เบชเปเบฒเบฅเบฑเบเบฎเบญเบเบงเบฝเบเปเบเบฑเบก, เบฅเบงเบกเบเบฑเบเบเบฒเบเบชเปเบฒเบเบเบฑเบเบเบต, เบเบฒเบเบเบดเบเบเบฑเปเบเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเปเบชเปเบกเบฑเบเปเบฅเบฐเบเบฒเบเบชเบปเปเบเบเบธเบฅเบฐเบเปเบฒ, เบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบงเบเบฑเบเบเบฑเบ REST API (เบเบปเบงเบขเปเบฒเบ: C#, C, Java, JavaScript, Python, Rust, Elixir) . เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ IDE, เบเบฝเบเปเบเปเบเบปเบเบเบธเปเบก NEW.
เบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเปเบกเปเบเบเบงเปเบฒเบ: เบเบฒเบเบเบฒเบเบซเปเบฒเบกเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบเบเบตเปเบขเบนเปเบเบตเปเปเบเปเบเบญเบ ("เบเบฑเบเบเบตเบเปเบฒ") เปเบเบซเบฒ dApps เบเบตเปเบชเบฑเบเบชเบปเบ.
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบชเบฐเปเบเบฒเบฐเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเปเบเบเบธเบฅเบฐเบเบดเบ: เปเบกเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฐเบกเบนเบ, เบเบฒเบเบเบฐเบเบฑเบเปเบ, เปเบฅเบฐเบเบฒเบเบชเปเบฒเบเปเบเบเบเบฒเบเบเบงเบฒเบกเบชเบฑเบเบเบทเป.
เบเบฒเบเบเบฐเบกเบนเบ
เบซเบเบถเปเบเปเบเปเบเบทเปเบญเบเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบนเบเบเบตเปเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเปเบกเปเบเบเบงเบฒเบกเปเบเปเบเปเบช: เบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเปเบญเบเบซเบกเบฑเปเบเปเบเบงเปเบฒเบกเบฑเบเปเบเบฑเบเปเบเบเปเปเปเบเปเบเบตเปเบเบฐเบเบฑเบเบเบฒเบเบเบฐเบกเบนเบ. เบเบตเปเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบธเปเบเปเบเปเบญเบ blockchain, เบเปเบญเบเบเบตเปเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเปเบฝเบเปเบเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบตเบกเบเบฑเบเบเบฑเบเบซเบกเบปเบเปเบฅเบฐเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบเบปเบฒเปเบเปเปเบฎเบฑเบเบเบฐเบกเบตเปเบซเปเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฑเบเบซเบกเบปเบ.
เปเบ Waves blockchain, เบเบฒเบเบเบฐเบกเบนเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเปเบเบชเบฐเบเบฒเบเบฐเบเบฑเบเบเบตเบเบฒเบเบเบฐเบกเบนเบเบเปเบฒเบ DataTransaction.
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเปเบงเบฅเบฒเปเบฅเบตเปเบกเบเบปเปเบเปเบฅเบฐเปเบงเบฅเบฒเบชเบดเปเบเบชเบธเบเบเบญเบเบเบฒเบเบเบฐเบกเบนเบเปเบเบเปเบเปเบเบปเบงเปเบฅเบเบเบฑเบ: เบเบงเบฒเบกเบเบตเปเบเบญเบเบเบฒเบเบเบฐเบฅเบดเบเบเบฑเบเปเบ Waves blockchain เปเบกเปเบเบเบฐเบกเบฒเบเปเบเบปเปเบฒเบเบฑเบ. 60 เบงเบดเบเบฒเบเบต.
1. English ascending price auction
เบเบนเปโเปเบเบปเปเบฒโเบฎเปเบงเบกโเปเบโเบเบฒเบโเบเบฐโเบกเบนเบโเบเบญเบโเบเบฒโเบชเบฒโเบญเบฑเบโเบเบดเบโเบชเบฐโเบเบฒเบโเบเบตเปโเบเบฐโเบกเบนเบโเปเบโเบเบฒเบโเปเบเปเบโเบเบฑเบโเบเบฑเบโ. เปเบเปเบฅเบฐเบเบฒเบเปเบเบตเบกเบเบฑเบเปเบซเบกเปเบเปเบญเบเปเบเบตเบเบญเบฑเบเบเบตเปเปเบฅเปเบง. เบเบฒเบเบเบฐเบกเบนเบเบเบฐเบชเบดเปเบเบชเบธเบเบฅเบปเบเปเบกเบทเปเบญเบเปเปเบกเบตเบเบนเปเบเบฐเบกเบนเบเบซเบผเบฒเบเบเบงเปเบฒเบเบฒเบเบเบฐเบกเบนเบเบเบฑเปเบเบชเบธเบเบเปเบฒเบ. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบนเปเบเบฐเบกเบนเบเบชเบนเบเบชเบธเบเบเปเบญเบเปเบซเปเบเปเบฒเบเบงเบเบเบตเปเบฅเบฐเบเบธเปเบงเป.
เบเบญเบเบเบฑเปเบเบเบฑเบเบกเบตเบเบฒเบเปเบฅเบทเบญเบเบเบฒเบเบเบฐเบกเบนเบเบเบตเปเบเบนเปเบเบฒเบเบเปเบฒเบเบปเบเบฅเบฒเบเบฒเบเปเบฒเปเบชเบธเบเบเบตเปเบชเปเบฒเบฅเบฑเบ lots, เปเบฅเบฐเบฅเบฒเบเบฒเบชเบธเบเบเปเบฒเบเบเปเบญเบเปเบเบตเบเบกเบฑเบ. เบเปเบฒโเบเปเปโเบเบฑเปเบโเบเบฑเปเบโ, lots เบเบฑเบโเบเปเปโเปเบเปโเบเบฒเบโ.
เปเบเบเบปเบงเบขเปเบฒเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฑเบเบเบตเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบเบเบชเบฐเปเบเบฒเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบนเบ. เปเบฅเบเบฐเปเบงเบฅเบฒเบเบฒเบเบเบฐเบกเบนเบเปเบกเปเบ 3000 เบเบฑเบ, เปเบฅเบฐเบฅเบฒเบเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบ lots เปเบกเปเบ 0,001 WAVES. เบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบชเบฒเบกเบฒเบเบงเบฒเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเปเบเบเบเบฒเบเบชเบปเปเบ DataTransaction เบเบตเปเบกเบตเบฅเบฐเบซเบฑเบ "เบฅเบฒเบเบฒ" เปเบฅเบฐเบกเบนเบเบเปเบฒเบเบญเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเบเบญเบเบเบงเบเปเบเบปเบฒ.
เบฅเบฒเบเบฒเบเบญเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเปเบซเบกเปเบเปเบญเบเบชเบนเบเบเบงเปเบฒเบฅเบฒเบเบฒเบเบฐเบเบธเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฐเปเบเบเบตเป, เปเบฅเบฐเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเปเบญเบเบกเบตเบขเปเบฒเบเบซเบเปเบญเบ [new_bid + commission] tokens เปเบเบเบฑเบเบเบตเบเบญเบเบฅเบฒเบง. เบเบตเปเบขเบนเปเบเบญเบเบเบนเปเบเบฐเบกเบนเบเบเบฐเบเปเบญเบเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเปเบเบเปเบญเบ "เบเบนเปเบชเบปเปเบ" เปเบ DataTransaction, เปเบฅเบฐเบเบงเบฒเบกเบชเบนเบเบเบญเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเปเบเบเบฐเบเบธเบเบฑเบเบเปเบญเบเบขเบนเปเปเบเปเบฅเบเบฐเปเบงเบฅเบฒเบเบฒเบเบเบฐเบกเบนเบ.
เบเปเบฒเปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฒเบเบเบฐเบกเบนเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบเปเบเปเบฒเบเบปเบเบฅเบฒเบเบฒเบเบตเปเบชเบนเบเบเบตเปเบชเบธเบ, เบฅเบฒเบงเบชเบฒเบกเบฒเบเบชเบปเปเบ ExchangeTransaction เปเบเบทเปเบญเบเปเบฒเบเบเปเบฒ lots เบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเปเบเบฅเบฒเบเบฒเบเบตเปเบเปเบฒเบเบปเบเปเบฅเบฐเบเบนเปเบชเบฐเบเบธเบเปเบเบดเบ.
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. เบเบฒเบเบเบฐเบกเบนเบเบเบญเบเปเบฎเบเบฅเบฑเบเบเบญเบเบเบฒเบเบซเบผเบธเบเบฅเบปเบเบเบญเบเบฅเบฒเบเบฒ
เปเบเบเบฒเบเบเบฐเบกเบนเบเบเบญเบเปเบฎเบเบฅเบฑเบ, เปเบเปเบเบทเปเบญเบเบเบปเปเบเบซเบผเบฒเบเปเบกเปเบเบชเบฐเปเบซเบเบตเปเบเบฅเบฒเบเบฒเบเบตเปเบชเบนเบเบเบงเปเบฒเบชเบดเปเบเบเบตเปเบเบนเปเบเบทเปเปเบเบฑเบกเปเบเบเบตเปเบเบฐเบเปเบฒเบ. เบฅเบฒเบเบฒเบซเบผเบธเบเบฅเบปเบเปเบเบทเปเบญเบฅเบฐเบเปเบฒเบงเบเบปเบเบเปเบงเบฒเบซเบเบถเปเบเปเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบปเบเบฅเบปเบเบเบตเปเบเบฐเบเบทเปเบซเบผเบฒเบเปเบเบฅเบฒเบเบฒเบเบฐเบเบธเบเบฑเบ.
เปเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบเปเบฒเบเบปเบเบเบตเปเบเบฝเบงเบเบฑเบเบเบฑเบเบเบปเบงเบเปเบญเบเบซเบเปเบฒ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฑเปเบเบเบญเบเบฅเบฒเบเบฒเปเบกเบทเปเบญ delta เบซเบผเบธเบเบฅเบปเบ. เบชเบฐเบเบฃเบดเบเบเบฑเบเบเบตเบเบฐเบเบงเบเบชเบญเบเบงเปเบฒเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบเบฑเบเบเบนเปเบเบณเบญเบดเบเบเบตเปเบงเบฒเบเปเบเบตเบกเบเบฑเบเปเบเป. เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ, DataTransaction เบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบญเบกเบฎเบฑเบเปเบเบ 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. เบเบฒเบเบเบฐเบกเบนเบ โเบเปเบฒเบเบเบฑเบเปเบปเบโ
โเบเบฒเบเบเปเบฒเบเบเบฑเบเปเบปเบโ เปเบกเปเบเบเบฒเบเบเบฐเบกเบนเบเบเบตเปเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฑเบเปเบปเบเบเบฐเบเปเบฒเบเบเบฒเบเบเบฐเบกเบนเบ, เปเบเบเบเปเปเบเปเบฒเบเบถเบเปเบเบดเบเบเบนเปเบเบตเปเบเบฐเบเบฐเบซเบผเบฒเบ. เบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบซเบกเปเปเบเปเบฅเบฐเบเบปเบเบเบฐเบเปเบฒเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒ, เปเบฅเบฐเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเบชเบนเบเบชเบธเบเปเบกเปเบเบเบฐเบเบฐเบซเบผเบฒเบ.
เปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฒเบเบเบฐเบกเบนเบเปเบเปเบฅเบฐเบเบปเบเบงเบฒเบเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเบเปเบฒเบ DataTransaction เบเปเบงเบ (key, value)* = ("เบเบนเปเบเบฐเบเบฐ", เบเบตเปเบขเบนเป), ("เบฅเบฒเบเบฒ", เบฅเบฒเบเบฒ). DataTransaction เบเบฑเปเบเบเปเบฒเบงเปเบเปเบฎเบฑเบเบเบฒเบเบญเบฐเบเบธเบกเบฑเบเบเบฝเบเปเบเปเบงเปเบฒเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบเบตเปเบกเบต TransferTransaction เบเบตเปเบกเบตเบฅเบฒเบเปเบเบฑเบเบเบญเบเบฅเบฒเบงเบขเบนเปเบเปเบญเบเปเบฅเปเบงเปเบฅเบฐเบเบฒเบเบชเบฐเปเบซเบเบตเบฅเบฒเบเบฒเบเบญเบเบฅเบฒเบงเปเบกเปเบเบชเบนเบเบเบงเปเบฒเบเบธเบเบญเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒ. เบเบฒเบเบเบฐเบกเบนเบเบเบฑเบเบชเบทเบเบเปเปเบเบปเบเบเปเบงเบฒ endHeight เปเบกเปเบเบเบฑเบเบฅเบธเปเบเป.
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)
}
เบเบฒเบเบเบฐเบเบฑเบเปเบ / Crowdfunding
เปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฎเบฑเบเบเบฐเบเบฑเบเบเบฑเบเบชเบดเบเบเบญเบเบเบนเปเปเบเปเบเปเปเบเบฑเบเบเบฒเบเบชเบนเบเปเบชเบเบเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบดเบ. เบเบปเบงเบขเปเบฒเบ, เบเบนเปเปเบเปเบเปเบญเบเบเบฒเบเบเบฒเบเบเปเปเบฒเบเบฐเบเบฑเบเบงเปเบฒเบเปเบฒ token depreciates, เบฅเบฒเบงเบเบฐเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบทเบเบเปเบฒเบเบงเบเปเบเบฑเบกเบเบตเปเบเปเบฒเบเบชเปเบฒเบฅเบฑเบ tokens เปเบซเบผเบปเปเบฒเบเบตเป, เปเบฅเบฐเปเบเบฑเบกเปเบเบเบตเปเบเบฐเบเปเบฒเบเบเปเบฒเบเบฐเบเบฑเบเปเบเบเบตเปเบชเบปเบกเปเบซเบเบชเบปเบกเบเบปเบ.
เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบกเบฑเบ, "เปเบเบทเปเบญเบเบซเบกเบฒเบเบเบฒเบเบเบฐเบเบฑเบเปเบ" เบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบญเบญเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, script เบเบฐเบเบทเบเบเบดเบเบเบฑเปเบเบขเบนเปเปเบเบเบฑเบเบเบตเบเบญเบเบเบนเปเบเบทเบเบฐเปเบเบเบฒเบ, เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบฐเบเบดเบเบฑเบเบเบฝเบเปเบเป ExchangeTransactions เบเบตเปเบเบญเบเบชเบฐเบซเบเบญเบเปเบเบทเปเบญเบเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ.
เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเบฒเบเปเบเปเบเปเบฒเบเบชเบญเบเปเบเบปเปเบฒ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฎเปเบญเบเบเปเปเบซเปเบเบนเปเปเบเปเบชเบปเปเบ DataTransaction เบเบฑเบเบเบฑเบเบเบตเบเบญเบเบเบนเปเบเบทเบเบฐเปเบเบเบฒเบเบฅเปเบงเบเบซเบเปเบฒเบเปเบงเบ (key, value) = (purchaseTransactionId, sellOrderId) เปเบฅเบฐเบซเปเบฒเบกเบชเบปเปเบ DataTransactions เบเปเบงเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบเปเปเบฅเปเบง.
เบเบฑเปเบเบเบฑเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบญเบเบเบนเปเปเบเปเบเปเบญเบเบกเบต ID เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบญเบเบเบฒเบเบเบทเปเปเบเบทเปเบญเบเบเบฐเบเบฑเบเปเบ. เบเบนเปเบชเบฐเบเบธเบเปเบเบดเบเบเบฐเบเปเบญเบเบเบทเบเบฑเบเบเบฑเบเปเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบเบทเป. เบเปเบฒโเปเบเปโเบเปเบฒเบโเบเบฑเบโเบเปเบญเบโเปเบเบปเปเบฒโเบเบฑเบโเบเบตเปโเบเปเบฒโเบเบปเบโเปเบงเปโเปเบโเปเบงโเบฅเบฒโเบเบญเบโเบเบฒเบโเบเบทเปโ, เบฅเบปเบโเบฅเบฒโเบเบฒโเบเบญเบโเบเบฒเบโเบเบฐโเบเบฑเบโเปเบโ.
เบกเบฑเบเปเบเบปเปเบฒเปเบเบงเปเบฒเบเปเปเบกเบฒเบเบฑเบเบเบตเบเบฐเบเบฑเบเปเบเบเบทเป tokens เบเบฐเบเบฑเบเปเบเบเบฒเบเบเบนเปเปเบเปเปเบเบฅเบฒเบเบฒเบเปเปเบเปเปเบฒเบเบงเปเบฒเบซเบเบถเปเบเบเบตเปเปเบเบปเบฒเบเบทเปเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ: เบเบฑเบเบเบตเบเบฐเบเบฑเบเปเบเบชเปเบฒเบ ExchangeTransaction, เบเบนเปเปเบเปเปเบเบฑเบเบเปเบฒเบชเบฑเปเบ (เบเปเบฒเบซเบฒเบเบงเปเบฒเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบชเปเบฒเปเบฅเบฑเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ), เปเบเป. เบเบฑเบเบเบตเบเบฐเบเบฑเบเปเบเปเบเบฑเบเบเปเบฒเบชเบฑเปเบเบเบตเบชเบญเบเปเบฅเบฐเบเบธเบฅเบฐเบเปเบฒเบเบฑเบเบซเบกเบปเบเปเบฅเบฐเบชเบปเปเบเบกเบฑเบเปเบ blockchain .
เบเปเบฒเบเปเปเบกเบตเบเบฒเบเบเบทเปเปเบเบตเบเบเบถเปเบ, เบเบนเปเปเบเปเบชเบฒเบกเบฒเบเบชเปเบฒเบ ExchangeTransaction เบเบฒเบกเบเบปเบเบฅเบฐเบเบฝเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบชเบฐเบเบดเบเปเบฅเบฐเบชเบปเปเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบ blockchain. เบงเบดเบเบตเบเบตเปเบเบนเปเปเบเปเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบทเบเปเบเบดเบเบเบตเปเปเบเปเปเบเบเบฒเบเบเบทเป 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)
}
เปเบเปเบเบฑเบเบเบฐเบเบฑเบเปเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบเบฑเบเบเบฑเบเบชเบดเบเบเบตเปเบชเบฐเบซเบผเบฒเบ, เบเบปเบงเบขเปเบฒเบ, เปเบเบทเปเบญเบซเปเบฒเบกเบเบฒเบเปเบญเบเปเบเบดเบเบเบญเบเบเบปเบเปเบซเปเบเบฑเบเบเบธเบเบเบปเบเบเบตเบชเบฒเบก.
เปเบเบเบเบฒเบเบเบตเปเบเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฐเบเบดเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบฐเบเบปเบกเบเบถเบ tokens, เปเบเบดเปเบเบเบฐเบเบทเบเบชเบปเปเบเบเบทเบเปเบซเปเปเบเบปเปเบฒเบเบญเบเบเปเบฒเบเปเบฒเบเบงเบเบเบตเปเบเปเบญเบเบเบฒเบเบเบฑเบเบเปเปเบเบฑเบเปเบเปเปเบเบฑเบเบเปเบฒ.
เบเบฒเบชเบตเบเบธเบฅเบฐเบเปเบฒ
เบชเบฑเบเบเบฒเบชเบฐเบซเบกเบฒเบเปเบกเปเบเบเบฑเบเปเบเปเปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบฑเบเบเบฒเบชเบตเปเบเปเบเปเบฅเบฐเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบกเบตเบเบฑเบเบชเบดเบเบซเบผเบฒเบเบเบฐเปเบเบ. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเบเปเบฒเบเบเบฑเบเบชเบดเบเปเบซเบกเปเบเบตเปเบกเบตเบเบฒเบเบเบดเบเบเบฑเปเบ
1. เบเบงเบเปเบฎเบปเบฒเบญเบญเบ FeeCoin, เปเบเบดเปเบเบเบฐเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบนเปเปเบเปเปเบเบฅเบฒเบเบฒเบเบปเบเบเบตเป: 0,01 WAVES = 0,001 FeeCoin.
2. เบเปเบฒเบเบปเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเปเบฒเบฅเบฑเบ FeeCoin เปเบฅเบฐเบญเบฑเบเบเบฒเปเบฅเบเบเปเบฝเบ: 0,001 WAVES = 0,001 FeeCoin.
3. เบเบฑเปเบเบชเบฐเบเบฃเบดเบเบเปเปเปเบเบเบตเปเบชเบณเบฅเบฑเบเบเบฑเบเบชเบดเบเบญเบฑเบเบชเบฐเบฅเบดเบเบฐ:
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
}
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบธเบเปเบเบฑเปเบเบเบตเปเบเบนเปเปเบเบเบนเปเบซเบเบถเปเบเปเบญเบเบเบฑเบเบชเบดเบ N smart, เบเบงเบเปเบเบปเบฒเบเบฐเปเบซเป FeeCoin เปเบซเปเบเปเบฒเบเปเบเบเปเบฒเบเบงเบ N / taxDivisor (เปเบเบดเปเบเบชเบฒเบกเบฒเบเบเบทเปเบเบฒเบเปเบเบปเปเบฒเปเบเปเบเบตเป 10 *N/taxDivisor WAVES), เปเบฅเบฐเบเปเบฒเบเบเบฐเปเบซเป N/taxDivisor WAVES เปเบฎเปเบเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเปเบฅ (เบเบฒเบชเบต) เบเบญเบเบเปเบฒเบเบเบฐเปเบเบฑเบ 9*N / taxDivisor WAVES.
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบฑเบเบเบฒเบชเบตเปเบเบเปเบเปเบชเบฐเบเบดเบเบเบฑเบเบชเบดเบเบญเบฑเบเบชเบฐเบฅเบดเบเบฐเปเบฅเบฐ 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 เปเบฅเบฐเปเบเบเบเบฒเบเบเบงเบฒเบกเบชเบฑเบเบเบทเป
Cashback เปเบกเปเบเบเบฐเปเบเบเบเบญเบเปเบเบเบเบฒเบเบเบงเบฒเบกเบชเบฑเบเบเบทเปเบเบตเปเบเบนเปเบเบทเปเปเบเปเบฎเบฑเบเบเบทเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเปเบฒเบเบงเบเปเบเบดเบเบเบตเปเปเบเปเปเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบซเบผเบทเบเบฒเบเบเปเบฅเบดเบเบฒเบ.
เปเบกเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเปเบฅเบฐเบเบตเบเบตเปเปเบเบเปเบเปเบเบฑเบเบเบต smart, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบงเบเปเบเบดเปเบเบซเบผเบฑเบเบเบฒเบเบชเบฐเปเบเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบฑเบเบเปเบฅเบฐเบเบตเบเบฐเบเบฑเบเปเบ. เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเบฒเบเปเบเปเบเปเบฒเบเบชเบญเบเปเบเบปเปเบฒ, เบเบนเปเปเบเปเบเปเบญเบเบชเบปเปเบ DataTransaction เบเบฑเบ (key, value) = (purchaseTransactionId, cashbackTransactionId) เบเปเบญเบเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเปเบเบดเบเบเบทเบ.
เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเบญเบเบเปเบฒเบเบปเบเบเบฒเบเบซเปเบฒเบกเบฅเบฐเบซเบฑเบเบเบตเปเบกเบตเบขเบนเปเปเบเบเปเบเป DataTransaction. cashbackDivisor - เบซเบปเบงเปเปเบงเบเปเบเปเบเบญเบญเบเปเบเบเบชเปเบงเบเปเบเปเบเปเบเบดเบเบเบทเบ. เปเบซเบผเบปเปเบฒเบเบฑเปเบ. เบเปเบฒเบเบฒเบเปเบเปเบเบเบฑเบ cashback เปเบกเปเบ 0.1, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ 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)
}
เปเบฅเบเบเปเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบน
เบเบฒเบเปเบฅเบเบเปเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบนเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบนเปเปเบเปเบชเบฒเบกเบฒเบเปเบฅเบเบเปเบฝเบเบเบฑเบเบชเบดเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเบญเบเบเบฒเบเปเบฅเบเบเปเบฝเบ. เบเปเบงเบเบเบฒเบเปเบฅเบเบเปเบฝเบเบเบฐเบฅเปเบฒเบกเบฐเบเบน, เบเบฑเบเบชเบญเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบเบเบธเบฅเบฐเบเปเบฒเปเบกเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเบขเบทเบเบขเบฑเบเบกเบฑเบเบเบฒเบเปเบเปเบฅเบเบฐเปเบงเบฅเบฒเบเบตเปเปเบเปเบเบญเบ.
เบเปเบฒเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเปเปเปเบเปเปเบซเปเบเบฒเบเบขเบทเบเบขเบฑเบเบเบตเปเบเบทเบเบเปเบญเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเบเบชเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบทเบเบเบปเบเปเบฅเบตเบเปเบฅเบฐเบเบฒเบเปเบฅเบเบเปเบฝเบเบเปเปเปเบเบตเบเบเบถเปเบ.
เปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบชเบฐเบเบดเบเบเบฑเบเบเบตเบญเบฑเบเบชเบฐเบฅเบดเบเบฐเบเปเปเปเบเบเบตเป:
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
}
เปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบเบต smart เปเบเปเบเบทเปเบญเบเบกเบทเบเบฒเบเบเปเบฒเบเบเบฒเบเปเบเบดเบเปเบเบฑเปเบ: เบเบฒเบเปเบฅเบทเบญเบ, เบญเบฐเบเบฒเบเบปเบเปเบฅเบฐเปเบเบเบดเบเบเปเบฒ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com