เชฌเซเชฒเซเชเชเซเชจ เชเชฃเซเชตเชพเชฐ เชซเชเซเชค เชเซเชฐเชฟเชชเซเชเซเชเชฐเชจเซเชธเซ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒเซเช เชนเซเชฏ เชเซ, เชชเชฐเชเชคเซ เชกเซเชเชฒเชเซ เชเซเชเซเชจเซเชฒเซเชเซเชจเชพ เชเชชเชฏเซเชเชจเชพ เชเซเชทเซเชคเซเชฐเซ เชตเชงเซ เชตเซเชฏเชพเชชเช เชเซ. เชฌเซเชฒเซเชเชเซเชจเชจเชพ เชเชชเชฏเซเช เชฎเชพเชเซเชจเชพ เชธเซเชฅเซ เชเชถเชพเชธเซเชชเชฆ เชเซเชทเซเชคเซเชฐเซเชฎเชพเชเชจเซเช เชเช เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชเซ เชเซ เชเชชเชฎเซเชณเซ เช
เชฎเชฒเชฎเชพเช เชเชตเซ เชเซ เช
เชจเซ เชคเซเชฎเชพเช เชชเซเชฐเชตเซเชถเซเชฒเชพ เชชเชเซเชทเชเชพเชฐเซ เชตเชเซเชเซ เชตเชฟเชถเซเชตเชพเชธเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชฐเชพเชเชก โ เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชฎเชพเชเซเชจเซ เชญเชพเชทเชพ
เชตเซเชตเซเชเซ เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชฎเชพเชเซ เชเช เชเชพเชธ เชญเชพเชทเชพ เชตเชฟเชเชธเชพเชตเซ เชเซ - RIDE. เชคเซเชจเชพ เชธเชเชชเซเชฐเซเชฃ เชฆเชธเซเชคเชพเชตเซเชเซ เชธเซเชฅเชฟเชค เชเซ
RIDE เชเซเชจเซเชเซเชฐเชพเชเซเช เช เชชเซเชฐเชฟเชกเชฟเชเซเช เชเซ เช
เชจเซ เชเชเชเชชเซเช เชคเชฐเซเชเซ "เชธเชพเชเซเช" เช
เชฅเชตเชพ "เชเซเชเซเช" เชเชชเซ เชเซ. เชคเชฆเชจเซเชธเชพเชฐ, เชตเซเชฏเชตเชนเชพเชฐ เชเชพเช เชคเซ เชฌเซเชฒเซเชเชเซเชจเชฎเชพเช เชฐเซเชเซเชฐเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช
เชฅเชตเชพ เชจเชเชพเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชเซเชเซเชเชธ เชถเชฐเชคเซเชจเซ เชชเชฐเชฟเชชเซเชฐเซเชฃเชคเชพเชจเซ เชธเชเชชเซเชฐเซเชฃ เชฌเชพเชเชฏเชงเชฐเซ เชเชชเซ เชเซ. RIDE เชฎเชพเช เชเชฐเชพเชฐเชฎเชพเชเชฅเซ เชตเซเชฏเชตเชนเชพเชฐเซ เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซเช เชนเชพเชฒเชฎเชพเช เชถเชเซเชฏ เชจเชฅเซ.
เชเชเซ เชฌเซ เชชเซเชฐเชเชพเชฐเชจเชพ เชตเซเชตเซเช เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชเซ: เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเชเซเชธ เช
เชจเซ เชธเซเชฎเชพเชฐเซเช เชเชธเซเช. เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเช เช เชจเชฟเชฏเชฎเชฟเชค เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชพเชคเซเช เชเซ, เชชเชฐเชเชคเซ เชคเซเชจเชพ เชฎเชพเชเซ เชเช เชธเซเชเซเชฐเชฟเชชเซเช เชธเซเช เชเชฐเซเชฒเซ เชเซ เชเซ เชคเชฎเชพเชฎ เชตเซเชฏเชตเชนเชพเชฐเซเชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเซ เชเซ. เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเช เชธเซเชเซเชฐเชฟเชชเซเช เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเช เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ:
match tx {
case t: TransferTransaction | MassTransferTransaction => false
case _ => true
}
tx เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชฐเชนเซเชฒ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชเซ เชเซเชจเซ เช
เชฎเซ เชชเซเชเชฐเซเชจ เชฎเซเชเชฟเชเช เชฎเชฟเชเซเชจเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซเช เชเซเช เชเซ เชคเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชจ เชนเซเชฏ. RIDE เชฎเชพเช เชชเซเชเชฐเซเชจ เชฎเซเชเชฟเชเชเชจเซ เชเชชเชฏเซเช เชตเซเชฏเชตเชนเชพเชฐเชจเชพ เชชเซเชฐเชเชพเชฐเชจเซ เชคเชชเชพเชธเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ. เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเช เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชนเชพเชฒเชจเชพ เชคเชฎเชพเชฎ เชเชเชพเชเชจเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชถเชเชพเชฏ เชเซ
เชธเซเชเซเชฐเชฟเชชเซเช เชเชฒเซเชจเซ เชชเชฃ เชเชพเชนเซเชฐ เชเชฐเซ เชถเชเซ เชเซ, "เชเซ-เชคเซ-เชฌเซเชเซเช" เชฐเชเชจเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชถเชฐเชคเซเชจเซ เชธเชเชชเซเชฐเซเชฃ เชฐเซเชคเซ เชคเชชเชพเชธเชตเชพ เชฎเชพเชเซ เช เชจเซเชฏ เชชเชฆเซเชงเชคเชฟเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. เชเซเชจเซเชเซเชฐเซเชเซเชเชจเซ เช เชฎเชฒเชตเชพเชฐเซ เชถเชฐเซ เชฅเชพเชฏ เชคเซ เชชเชนเซเชฒเชพเช เช เชจเซเชฎเชพเชจ เชฒเชเชพเชตเชตเซเช เชธเชฐเชณ เชเซ เชเซ เชเซเชจเซเชเซเชฐเซเชเซเชเชฎเชพเช เชธเชพเชฌเชฟเชค เชฅเช เชถเชเซ เชคเซเชตเซ เชธเชเชชเซเชฐเซเชฃเชคเชพ เช เชจเซ เชเชเชฟเชฒเชคเชพ (เชเชฐเซเช) เชเซ เชคเซเชจเซ เชเชพเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, RIDEเชฎเชพเช เชฒเซเชชเซเชธ เช เชฅเชตเชพ เชเชฎเซเชช เชธเซเชเซเชเชฎเซเชจเซเช เชจเชฅเซ.
เชตเซเชตเซเช เชเชเชพเชเชจเซเชเซเชธเชจเซ เช เชจเซเชฏ เชตเชฟเชถเซเชทเชคเชพเชเชฎเชพเช "เชธเซเชเซเช" เชเชเชฒเซ เชเซ เชเชพเชคเชพเชจเซ เชธเซเชฅเชฟเชคเชฟเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เชคเชฎเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเซเชธ (เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชเชพเชเชจเซเช เชธเซเชเซเชเชฎเชพเช เช เชจเชเชค เชธเชเชเซเชฏเชพเชฎเชพเช เชเซเชกเซ (เชเซ, เชฎเซเชฒเซเชฏ) เชฒเชเซ เชถเชเซ เชเซ. เช เชฎเชพเชนเชฟเชคเซ เชชเชเซ REST API เชฆเซเชตเชพเชฐเชพ เช เชจเซ เชธเซเชงเชพ เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเชเชฎเชพเช เชฌเชเชจเซ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชฆเชฐเซเช เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เชชเซเชฐเชพเชตเชพเชเชจเซ เชถเซเชฐเซเชฃเซ เชนเซเช เชถเชเซ เชเซ, เชเซเชฎเชพเช เชธเชนเชญเชพเชเซเชจเซ เชธเชนเซ, เชเชฐเซเชฐเซ เชตเซเชฏเชตเชนเชพเชฐเชจเซเช ID เชตเชเซเชฐเซ เชฆเชพเชเชฒ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชฆเซเชตเชพเชฐเชพ RIDE เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเซเช
เชเชเชพเชเชจเซเช เชฌเชจเชพเชตเชตเชพ, เชคเซเชจเชพ เชชเชฐ เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช เชจเซ เชตเซเชฏเชตเชนเชพเชฐเซ เชฎเซเชเชฒเชตเชพ เชธเชนเชฟเชค เชธเชเชชเซเชฐเซเชฃ เชเชเซเชฐ เชฎเชพเชเซ, เชคเชฎเซ REST API (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, C#, C, Java, JavaScript, Python, Rust, Elixir) เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเซ เชชเชฃ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. . IDE เชธเชพเชฅเซ เชเชพเชฎ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชจเชตเซเช เชฌเชเชจ เชเซเชฒเชฟเช เชเชฐเซ.
เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชถเชเซเชฏเชคเชพเช เชตเชฟเชถเชพเชณ เชเซ: เช เชฎเซเช เชธเชฐเชจเชพเชฎเชพเชเช ("เชฌเซเชฒเซเช เชฒเชฟเชธเซเช") เชฅเซ เชเชเชฟเชฒ dApps เชธเซเชงเซเชจเชพ เชตเซเชฏเชตเชนเชพเชฐเซ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเชเชง เชฎเซเชเชตเซ.
เชนเชตเซ เชเชพเชฒเซ เชตเซเชฏเชตเชธเชพเชฏเชฎเชพเช เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเชเชจเชพ เชเชชเชฏเซเชเชจเชพ เชเซเชเซเชเชธ เชเชฆเชพเชนเชฐเชฃเซ เชเซเชเช: เชเซเชฏเชพเชฐเซ เชนเชฐเชพเชเซ, เชตเซเชฎเซ เช
เชจเซ เชฒเซเชฏเชฒเซเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ.
เชนเชฐเชพเชเซ
เชธเชซเชณ เชนเชฐเชพเชเซ เชฎเชพเชเซเชจเซ เชถเชฐเชคเซเชฎเชพเชเชจเซ เชเช เชชเชพเชฐเชฆเชฐเซเชถเชฟเชคเชพ เชเซ: เชธเชนเชญเชพเชเซเชเชจเซ เชตเชฟเชถเซเชตเชพเชธ เชนเซเชตเซ เชเซเชเช เชเซ เชฌเชฟเชกเชฎเชพเช เชเชพเชฒเชพเชเซ เชเชฐเชตเซ เช เชถเชเซเชฏ เชเซ. เชฌเซเชฒเซเชเชเซเชจเชจเซ เชเชญเชพเชฐเซ เช เชนเชพเชเชธเชฒ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเซเชฏเชพเช เชคเชฎเชพเชฎ เชฌเซเชเซเชธ เช เชจเซ เชคเซ เชเชฏเชพ เชธเชฎเชฏเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ เชคเซ เช เชเชเซเชจเซ เช เชตเชฟเชเชฒเชฟเชค เชกเซเชเชพ เชฌเชงเชพ เชธเชนเชญเชพเชเซเชเชจเซ เชเชชเชฒเชฌเซเชง เชนเชถเซ.
เชตเซเชตเซเช เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ, เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชฌเชฟเชกเชจเซ เชเชเซเชถเชจ เชเชเชพเชเชจเซเช เชธเซเชเซเชเชฎเชพเช เชฐเซเชเซเชฐเซเชก เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชคเชฎเซ เชฌเซเชฒเซเช เชจเชเชฌเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชนเชฐเชพเชเซเชจเซ เชถเชฐเซเชเชค เช เชจเซ เชธเชฎเชพเชชเซเชคเชฟเชจเซ เชธเชฎเชฏ เชชเชฃ เชธเซเช เชเชฐเซ เชถเชเซ เชเซ: เชตเซเชตเซเชธ เชฌเซเชฒเซเชเชเซเชจเชฎเชพเช เชฌเซเชฒเซเช เชเชจเชฐเซเชถเชจเชจเซ เชเชตเชฐเซเชคเชจ เชฒเชเชญเช เชธเชฎเชพเชจ เชเซ 60 เชธเซเชเชจเซเชก
1. เช เชเชเซเชฐเซเชเซ เชเชกเชคเซ เชเชฟเชเชฎเชคเชจเซ เชนเชฐเชพเชเซ
เช เชเชเซเชฐเซเชเซ เชนเชฐเชพเชเซเชฎเชพเช เชธเชนเชญเชพเชเซเช เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชธเซเชชเชฐเซเชงเชพเชฎเชพเช เชฌเชฟเชก เชเชฐเซ เชเซ. เชฆเชฐเซเช เชจเชตเซ เชถเชฐเชค เช เชเชพเชเชจเชพ เชเช เชเชฐเชคเชพเช เชตเชงเซ เชเชตเซ เชเซเชเช. เชเซเชฏเชพเชฐเซ เชเซเชฒเซเชฒเซ เชฌเชฟเชก เชเชฐเชคเชพเช เชตเชงเซ เชฌเชฟเชกเชฐเซเชธ เชจ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชนเชฐเชพเชเซ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชธเซเชฅเซ เชตเชงเซ เชฌเซเชฒเซ เชฒเชเชพเชตเชจเชพเชฐเช เชเชฃเชพเชตเซเชฒ เชฐเชเชฎ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ.
เชเช เชนเชฐเชพเชเซ เชตเชฟเชเชฒเซเชช เชชเชฃ เชเซ เชเซเชฎเชพเช เชตเซเชเชจเชพเชฐ เชฒเซเช เชฎเชพเชเซ เชฒเชเซเชคเซเชคเชฎ เชเชฟเชเชฎเชค เชจเชเซเชเซ เชเชฐเซ เชเซ เช เชจเซ เช เชเชคเชฟเชฎ เชเชฟเชเชฎเชค เชคเซเชจเชพเชฅเซ เชตเชงเซ เชเชตเซ เชเซเชเช. เชจเชนเชฟเชเชคเชฐ, เชฒเซเช เชตเซเชเชพเชฏเชพ เชตเชเชฐ เชฐเชนเซ เชเซ.
เช เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชฎเซ เชนเชฐเชพเชเซ เชฎเชพเชเซ เชเชพเชธ เชฌเชจเชพเชตเซเชฒเชพ เชเชเชพเชเชจเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช. เชนเชฐเชพเชเซเชจเซ เช เชตเชงเชฟ 3000 เชฌเซเชฒเซเชเซเชธ เชเซ, เช เชจเซ เชฒเซเชเชจเซ เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชฟเชเชฎเชค 0,001 เชตเซเชตเซเชธ เชเซ. เชธเชนเชญเชพเชเซ เชเซ "เชเชฟเชเชฎเชค" เช เชจเซ เชคเซเชฎเชจเซ เชฌเชฟเชกเชจเซ เชเชฟเชเชฎเชค เชธเชพเชฅเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชเชฒเซเชจเซ เชฌเชฟเชก เชฎเซเชเซ เชถเชเซ เชเซ.
เชจเชตเซ เชฌเชฟเชกเชจเซ เชเชฟเชเชฎเชค เช เชเซ เชฎเชพเชเซ เชตเชฐเซเชคเชฎเชพเชจ เชเชฟเชเชฎเชค เชเชฐเชคเชพ เชตเชงเชพเชฐเซ เชนเซเชตเซ เชเซเชเช เช เชจเซ เชธเชนเชญเชพเชเซ เชชเชพเชธเซ เชคเซเชจเชพ เชเชพเชคเชพเชฎเชพเช เชเชเชพเชฎเชพเช เชเชเชพ [เชจเชตเซ_เชฌเชฟเชก + เชเชฎเชฟเชถเชจ] เชเซเชเชจเซเชธ เชนเซเชตเชพ เชเซเชเช. เชฌเชฟเชกเชฐเชจเซเช เชธเชฐเชจเชพเชฎเซเช เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชฎเชพเช "เชชเซเชฐเซเชทเช" เชซเซเชฒเซเชกเชฎเชพเช เชฐเซเชเซเชฐเซเชก เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ, เช เชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชฌเชฟเชก เชฌเซเชฒเซเช เชเชเชเชพเช เชนเชฐเชพเชเซเชจเชพ เชธเชฎเชฏเชเชพเชณเชพเชจเซ เช เชเชฆเชฐ เชนเซเชตเซ เชเซเชเช.
เชเซ เชนเชฐเชพเชเซเชจเชพ เช เชเชคเซ เชธเชนเชญเชพเชเซเช เชธเซเชฅเซ เชตเชงเซ เชเชฟเชเชฎเชค เชจเชเซเชเซ เชเชฐเซ เชนเซเชฏ, เชคเซ เชคเซ เชเซเชเซเชเชธ เชเชฟเชเชฎเชค เช เชจเซ เชเชฒเชฃ เชเซเชกเซ เชชเชฐ เชธเชเชฌเชเชงเชฟเชค เชฒเซเช เชฎเชพเชเซ เชเซเชเชตเชฃเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชเซเชธเชเซเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชเชฒเซ เชถเชเซ เชเซ.
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. เชเชเชคเซ เชเชฟเชเชฎเชคเซเชจเซ เชกเช เชนเชฐเชพเชเซ
เชกเช เชนเชฐเชพเชเซเชฎเชพเช, เชเชฐเซเชฆเชจเชพเชฐ เชเซ เชเซเชเชตเชตเชพ เชคเซเชฏเชพเชฐ เชนเซเชฏ เชคเซเชจเชพ เชเชฐเชคเชพเช เชตเชงเซ เชเชฟเชเชฎเชคเซ เชถเชฐเซเชเชคเชฎเชพเช เชเชฃเซ เชเชซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเซเชฏเชพเช เชธเซเชงเซ เชธเชนเชญเชพเชเซเชเชฎเชพเชเชฅเซ เชเซเช เชเช เชตเชฐเซเชคเชฎเชพเชจ เชญเชพเชตเซ เชฒเซเช เชเชฐเซเชฆเชตเชพ เชฎเชพเชเซ เชธเชเชฎเชค เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชเชฟเชเชฎเชคเชฎเชพเช เชเช-เชเช เชชเชเชฒเซเช เชเชเชพเชกเซ เชฅเชพเชฏ เชเซ.
เช เชเชฆเชพเชนเชฐเชฃเชฎเชพเช เชเชชเชฃเซ เชชเชนเซเชฒเชพเชจเชพ เชธเชฎเชพเชจ เชธเซเชฅเชฟเชฐเชพเชเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช, เชคเซเชฎเช เชเซเชฏเชพเชฐเซ เชกเซเชฒเซเชเชพ เชเชเซ เชเซ เชคเซเชฏเชพเชฐเซ เชเชฟเชเชฎเชคเชจเชพ เชชเชเชฒเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช. เชเชเชพเชเชจเซเช เชธเซเชเซเชฐเชฟเชชเซเช เชคเชชเชพเชธเซ เชเซ เชเซ เชถเซเช เชธเชนเชญเชพเชเซ เชเชฐเซเชเชฐ เชถเชฐเชค เชฒเชเชพเชตเชจเชพเชฐ เชชเซเชฐเชฅเชฎ เชเซ. เชจเชนเชฟเชเชคเชฐ, เชฌเซเชฒเซเชเชเซเชจ เชฆเซเชตเชพเชฐเชพ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชธเซเชตเซเชเชพเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เชจเชนเซเช.
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. เชนเชฐเชพเชเซ "เชฌเชงเชพ เชชเชเชพเชฐ"
"เชเชฒ-เชชเซ" เช เชเช เชนเชฐเชพเชเซ เชเซ เชเซเชฎเชพเช เชฌเชงเชพ เชธเชนเชญเชพเชเซเช เชฌเชฟเชก เชเซเชเชตเซ เชเซ, เชชเชเซ เชญเชฒเซ เชคเซ เชเซเชฃ เชเซเชคเซ. เชฆเชฐเซเช เชจเชตเชพ เชธเชนเชญเชพเชเซ เชฌเชฟเชก เชเซเชเชตเซ เชเซ, เช เชจเซ เชเซ เชธเชนเชญเชพเชเซ เชฎเชนเชคเซเชคเชฎ เชฌเชฟเชก เชเชฐเซ เชเซ เชคเซ เชฒเซเช เชเซเชคเซ เชเซ.
เช เชฎเชพเชฐเชพ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชฆเชฐเซเช เชนเชฐเชพเชเซ เชธเชนเชญเชพเชเซ (เชเซ, เชฎเซเชฒเซเชฏ)* = (โเชตเชฟเชเซเชคเชพโ, เชธเชฐเชจเชพเชฎเซเช), (โเชเชฟเชเชฎเชคโ, เชเชฟเชเชฎเชค) เชธเชพเชฅเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชฌเชฟเชก เชฎเซเชเซ เชเซ. เชเชตเชพ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชจเซ เชซเชเซเชค เชคเซเชฏเชพเชฐเซ เช เชฎเชเชเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เช เชธเชนเชญเชพเชเซ เชชเชพเชธเซ เชชเชนเซเชฒเซเชฅเซ เช เชคเซเชจเซ เชธเชนเซ เชธเชพเชฅเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชนเซเชฏ เช เชจเซ เชคเซเชจเซ เชฌเชฟเชก เช เชเชพเชเชจเชพ เชคเชฎเชพเชฎ เชเชฐเชคเชพ เชตเชงเชพเชฐเซ เชนเซเชฏ. เชเซเชฏเชพเช เชธเซเชงเซ เช เชเชคเชฟเชฎ เชเชเชเชพเช เชจ เชชเชนเซเชเชเซ เชเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชนเชฐเชพเชเซ เชเชพเชฒเซ เชฐเชนเซ เชเซ.
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)
}
เชตเซเชฎเซ / เชเซเชฐเชพเชเชกเชซเชเชกเชฟเชเช
เชเชพเชฒเซ เชเชตเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเชเช เชเซ เชเซเชฏเชพเช เชคเชฎเชพเชฐเซ เชจเชพเชฃเชพเชเซเชฏ เชจเซเชเชธเชพเชจ เชธเชพเชฎเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชธเชเชชเชคเซเชคเชฟเชจเซ เชตเซเชฎเซ เชฒเซเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซเชฐเชเชเซ เชฎเชพเชเชเซ เชเซ เชเซ เชเซ เชเซเชเชจเชจเซเช เช เชตเชฎเซเชฒเซเชฏเชจ เชฅเชพเชฏ เชเซ, เชคเซ เชคเซ เช เชเซเชเชจเซเชธ เชฎเชพเชเซ เชเซเชเชตเซเชฒ เชธเชเชชเซเชฐเซเชฃ เชฐเชเชฎ เชชเชพเชเซ เชฎเซเชณเชตเซ เชถเชเชถเซ, เช เชจเซ เชคเซ เชตเซเชฎเชพเชจเซ เชตเชพเชเชฌเซ เชฐเชเชฎ เชเซเชเชตเชตเชพ เชคเซเชฏเชพเชฐ เชเซ.
เชเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ, "เชตเซเชฎเชพ เชเซเชเชจเซเชธ" เชเชพเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชชเชเซ เชชเซเชฒเชฟเชธเซเชงเชพเชฐเชเชจเชพ เชเชพเชคเชพ เชชเชฐ เชเช เชธเซเชเซเชฐเชฟเชชเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชซเชเซเชค เชคเซ เช เชเชเซเชธเชเซเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเซเชธเชจเซ เช เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ เชเซ เช เชฎเซเช เชถเชฐเชคเซเชจเซ เชชเซเชฐเซเชฃ เชเชฐเซ เชเซ.
เชฌเซเชตเชกเชพ เชเชฐเซเชเชจเซ เชฐเซเชเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชชเซเชฒเชฟเชธเซเชงเชพเชฐเชเชจเชพ เชเชพเชคเชพเชฎเชพเช เช เชเชพเชเชฅเซ (เชเซ, เชฎเซเชฒเซเชฏ) = (purchaseTransactionId, sellOrderId) เชธเชพเชฅเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชเชฒเชตเชพเชจเซ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชฏเซเชฒเซ เชเซ เชตเชกเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชเชฒเชตเชพ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเชเชง เชฎเซเชเชตเซ เชชเชกเชถเซ.
เชคเซเชฅเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชชเซเชฐเชพเชตเชพเชเชฎเชพเช เชตเซเชฎเชพ เชเซเชเชจ เชเชฐเซเชฆเซเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ ID เชนเซเชตเซเช เชเชตเชถเซเชฏเช เชเซ. เชเชฒเชฃเชจเซ เชเซเชกเซ เชเชฐเซเชฆเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เชนเซเชฏ เชคเซเชตเซ เช เชนเซเชตเซ เชเซเชเช. เชเชฟเชเชฎเชค เชชเชฃ เชเชฐเซเชฆเชคเซ เชตเชเชคเซ เชจเชฟเชฏเชค เชเชฐเซเชฒ เชฐเชเชฎเชจเซ เชฌเชฐเชพเชฌเชฐ เชนเซเชตเซ เชเซเชเช, เชตเซเชฎเชพเชจเซ เชเชฟเชเชฎเชค เชฌเชพเชฆ เชเชฐเซ.
เชคเซ เชธเชฎเชเซ เชถเชเชพเชฏ เชเซ เชเซ เชชเชเซเชฅเซ เชตเซเชฎเชพ เชเชพเชคเซเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชชเชพเชธเซเชฅเซ เชตเซเชฎเชพ เชเซเชเชจเซเชธ เชเชฐเซเชฆเซ เชเซ เชเซ เชคเซเชฃเซ เชเชฐเซเชฆเซเชฏเชพ เชนเซเชฏ เชคเซเชจเชพ เชเชฐเชคเชพ เชเชเซ เชเชฟเชเชฎเชคเซ เชจ เชนเซเชฏ: เชตเซเชฎเชพ เชเชพเชคเซเช เชเชเซเชธเชเซเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฌเชจเชพเชตเซ เชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชฐเซเชกเชฐ เชชเชฐ เชธเชนเซ เชเชฐเซ เชเซ (เชเซ เชตเซเชฏเชตเชนเชพเชฐ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชชเซเชฐเซเชฃ เชฅเชฏเซ เชนเซเชฏ), เชตเซเชฎเชพ เชเชพเชคเซเช เชฌเซเชเชพ เชเชฐเซเชกเชฐ เช เชจเซ เชธเชฎเชเซเชฐ เชตเซเชฏเชตเชนเชพเชฐ เชชเชฐ เชธเชนเซ เชเชฐเซ เชเซ เช เชจเซ เชคเซเชจเซ เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ เชฎเซเชเชฒเซ เชเซ.
เชเซ เชเซเช เชเชฐเซเชฆเซ เชจ เชฅเชพเชฏ, เชคเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชจเชฟเชฏเชฎเซ เช เชจเซเชธเชพเชฐ เชเชเซเชธเชเซเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ เช เชจเซ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชจเซ เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ เชฎเซเชเชฒเซ เชถเชเซ เชเซ. เช เชฐเซเชคเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชตเซเชฎเชพเชตเชพเชณเชพ เชเซเชเชจเซเชธเชจเซ เชเชฐเซเชฆเซ เชชเชฐ เชเชฐเซเชเชตเชพเชฎเชพเช เชเชตเซเชฒ เชจเชพเชฃเชพเช เชชเชฐเชค เชเชฐเซ เชถเชเซ เชเซ.
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)
}
เชตเซเชฎเชพ เชเซเชเชจเชจเซ เชธเซเชฎเชพเชฐเซเช เชเชธเซเช เชฌเชจเชพเชตเซ เชถเชเชพเชฏ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเซเชคเซเชฏ เชชเชเซเชทเซเชจเซ เชคเซเชจเชพ เชเซเชฐเชพเชจเซเชธเชซเชฐเชจเซ เชชเซเชฐเชคเชฟเชฌเชเชงเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ.
เช เชธเซเชเซเชฎ เชเซเชฐเชพเชเชกเชซเชเชกเชฟเชเช เชเซเชเชจเซเชธ เชฎเชพเชเซ เชชเชฃ เชฒเชพเชเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเซ เชเซ เชเชฐเซเชฐเซ เชฐเชเชฎ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชจ เชเชตเซ เชนเซเชฏ เชคเซ เชฎเชพเชฒเชฟเชเซเชจเซ เชชเชฐเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชตเซเชฏเชตเชนเชพเชฐ เชเชฐ
เชธเซเชฎเชพเชฐเซเช เชเซเชจเซเชเซเชฐเชพเชเซเช เชเชตเชพ เชเชฟเชธเซเชธเชพเชเชฎเชพเช เชชเชฃ เชฒเชพเชเซ เชชเชกเซ เชเซ เชเซ เชเซเชฏเชพเช เชตเชฟเชตเชฟเชง เชชเซเชฐเชเชพเชฐเชจเซ เช
เชธเซเชเชฏเชพเชฎเชคเซ เชธเชพเชฅเซเชจเชพ เชฆเชฐเซเช เชตเซเชฏเชตเชนเชพเชฐ เชชเชฐ เชเซเชเซเชธ เชตเชธเซเชฒเชตเซ เชเชฐเซเชฐเซ เชนเซเชฏ. เช เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒ เชจเชตเซ เชธเชเชชเชคเซเชคเชฟ เชฆเซเชตเชพเชฐเชพ เชเชฐเซ เชถเชเชพเชฏ เชเซ
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 เชธเซเชฎเชพเชฐเซเช เชเชธเซเช เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชถเซ, เชคเซเชฏเชพเชฐเซ เชคเซเช เชคเชฎเชจเซ N/taxDivisor (เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซเชฅเซ 10 *N/taxDivisor WAVES เชชเชฐ เชเชฐเซเชฆเซ เชถเชเชพเชฏ เชเซ) เชจเซ เชฐเชเชฎเชฎเชพเช FeeCoin เชเชชเชถเซ, เช เชจเซ เชคเชฎเซ เชเชพเชฃเชฟเชฏเซเชจเซ N/taxDivisor WAVES เชเชชเชถเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชคเชฎเชพเชฐเซ เชจเชซเซ (เชเชฐ) 9*N / taxDivisor WAVES เชนเชถเซ.
เชคเชฎเซ เชธเซเชฎเชพเชฐเซเช เชเชธเซเช เชธเซเชเซเชฐเชฟเชชเซเช เช เชจเซ เชฎเชพเชธ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเชตเซเชฐเชพ เชชเชฃ เชเชฐเซ เชถเชเซ เชเซ:
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
}
เชเซเชถเชฌเซเช เช เชจเซ เชฒเซเชฏเชฒเซเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ
เชเซเชถเชฌเซเช เช เชฒเซเชฏเชฒเซเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเช เชชเซเชฐเชเชพเชฐ เชเซ เชเซเชฎเชพเช เชเชฐเซเชฆเชจเชพเชฐเชจเซ เชเชคเซเชชเชพเชฆเชจ เช เชฅเชตเชพ เชธเซเชตเชพ เชชเชฐ เชเชฐเซเชเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชฐเชเชฎเชจเซ เชญเชพเช เชชเชพเชเซ เชฎเชณเซ เชเซ.
เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชเซเชธเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชคเซ เชตเชเชคเซ, เชเชชเชฃเซ เชตเซเชฎเชพเชจเชพ เชเซเชธเชฎเชพเช เชเซ เชฐเซเชคเซ เชชเซเชฐเชพเชตเชพ เชคเชชเชพเชธเซเชฏเชพ เชนเชคเชพ เชคเซ เช เชฐเซเชคเซ เชคเชชเชพเชธเชตเชพ เชเซเชเช. เชฌเซเชตเชกเชพ เชเชฐเซเชเชจเซ เชฐเซเชเชตเชพ เชฎเชพเชเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชเซเชถเชฌเซเช เชฎเซเชณเชตเชคเชพ เชชเชนเซเชฒเชพ (เชเซ, เชฎเซเชฒเซเชฏ) = (เชชเชฐเชเซเชเชเซเชฐเชพเชจเซเชธเซเชเชถเชจเชเชเชกเซ, เชเซเชถเชฌเซเชเชเซเชฐเชพเชจเซเชธเซเชเชถเชจเชเชเชกเซ) เชธเชพเชฅเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชเชฒเชตเซเช เชเชตเชถเซเชฏเช เชเซ.
เชเชชเชฃเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชนเชพเชฒเชจเซ เชเซ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเชเชง เชชเชฃ เชธเซเช เชเชฐเชตเซ เชเซเชเช. cashbackDivisor - เชเซเชถเชฌเซเช เชถเซเชฐ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชเชฟเชค เชเชเชฎ. เชคเซ. เชเซ เชเซเชถเชฌเซเช เชถเซเชฐ 0.1 เชเซ, เชคเซ เชเซเชถเชฌเซเช เชกเชฟเชตเชฟเชเชฐ 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
}
เชเชเชพเชฎเซ เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เชตเชฟเชเชฒเซเชชเซ, เชซเซเชฏเซเชเชฐเซเชธ เช เชจเซ เชฌเชฟเชฒ เชเซเชตเชพ เชจเชพเชฃเชพเชเซเชฏ เชธเชพเชงเชจเซเชฎเชพเช เชธเซเชฎเชพเชฐเซเช เชเชเชพเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชเซเชเชถเซเช.
เชธเซเชฐเซเชธ: www.habr.com