เดตเต‡เดตเตเดธเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ: เดฒเต‡เดฒเด‚ เดฎเตเดคเตฝ เดฌเต‹เดฃเดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดตเดฐเต†

เดตเต‡เดตเตเดธเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ: เดฒเต‡เดฒเด‚ เดฎเตเดคเตฝ เดฌเต‹เดฃเดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดตเดฐเต†

เดฌเตเดฒเต‹เด•เตเด•เตโ€Œเดšเต†เดฏเดฟเตป เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด•เตเดฐเดฟเดชเตโ€Œเดฑเตเดฑเต‹เด•เดฑเตปเดธเดฟเด•เดณเตเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ DLT เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดŸเต† เดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เดฎเต‡เด–เดฒเด•เตพ เดตเดณเดฐเต† เดตเดฟเดถเดพเดฒเดฎเดพเดฃเต. เดฌเตเดฒเต‹เด•เตเด•เตโ€Œเดšเต†เดฏเดฟเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดตเดพเด—เตเดฆเดพเดจเดฎเดพเดฏ เดฎเต‡เด–เดฒเด•เดณเดฟเดฒเตŠเดจเตเดจเต เด’เดฐเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเดพเดฃเต, เด…เดคเต เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเตฝ เดชเตเดฐเดตเต‡เดถเดฟเดšเตเดš เด•เด•เตเดทเดฟเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดตเดฟเดถเตเดตเดพเดธเด‚ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เดฑเตˆเดกเต - เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณ เด’เดฐเต เดญเดพเดท

เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเต‡เดตเตเดธเต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดญเดพเดท เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต - RIDE. เด…เดคเดฟเดจเตเดฑเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เด‡เดตเดฟเดŸเต†. เดชเดฟเดจเตเดจเต† เด‡เดตเดฟเดŸเต† - เดˆ เดตเดฟเดทเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚ เดนเดฌเตเดฐเดฟเตฝ.

เดฑเตˆเดกเต เด•เดฐเดพเตผ เด’เดฐเต เดชเตเดฐเดตเดšเดจเดฎเดพเดฃเต เด•เต‚เดŸเดพเดคเต† เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเดพเดฏเดฟ "เดถเดฐเดฟ" เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ "เดคเต†เดฑเตเดฑเต" เดจเตฝเด•เตเดจเตเดจเต. เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เด‡เดŸเดชเดพเดŸเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเต‹ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเตผ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดŸเต† เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เด‰เดฑเดชเตเดชเต เดจเตฝเด•เตเดจเตเดจเต. RIDE-เดฒเต† เด’เดฐเต เด•เดฐเดพเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เดŸเดชเดพเดŸเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเดฒเดตเดฟเตฝ เดธเดพเดงเตเดฏเดฎเดฒเตเดฒ.

เด‡เดจเตเดจเต เดฐเดฃเตเดŸเต เดคเดฐเด‚ เดตเต‡เดตเตเดธเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เดณเตเดฃเตเดŸเต: เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเตเด‚ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เดธเดฑเตเดฑเตเด•เดณเตเด‚. เด’เดฐเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด…เด•เตเด•เต—เดฃเตเดŸเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดŽเดฒเตเดฒเดพ เด‡เดŸเดชเดพเดŸเตเด•เดณเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด…เดคเดฟเดจเดพเดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‡เดคเตเดชเต‹เดฒเต†เดฏเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case _ => true
}

tx เดŽเดจเตเดจเดคเต เด’เดฐเต เดŸเตเดฐเดพเตปเดธเตเดซเตผ เด‡เดŸเดชเดพเดŸเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เดชเดพเดฑเตเดฑเต‡เตบ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เดŸเดชเดพเดŸเดพเดฃเต. เด‡เดŸเดชเดพเดŸเดฟเดจเตเดฑเต† เดคเดฐเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป RIDE-เดฒเต† เดชเดพเดฑเตเดฑเต‡เตบ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเตเด‚ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ เด‡เดŸเดชเดพเดŸเต เดคเดฐเด™เตเด™เตพ.

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเดจเตเด‚ เดตเตเดฏเดตเดธเตเดฅเด•เตพ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต "if-then-else" เด•เตบเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเตเด•เดณเตเด‚ เดฎเดฑเตเดฑเต เดฐเต€เดคเดฟเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด•เดฐเดพเตผ เดจเดฟเตผเดตเตเดตเดนเดฃเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดชเตเดฐเดตเดšเดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณ, เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดธเดฎเตเดชเต‚เตผเดฃเตเดฃเดคเดฏเตเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเตเด‚ (เดšเต†เดฒเดตเต) เด•เดฐเดพเดฑเตเด•เตพเด•เตเด•เต เด‰เดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป, RIDE-เตฝ เดฒเต‚เดชเตเดชเตเด•เดณเต‹ เดœเดฎเตเดชเต เดชเตเดฐเดธเตเดคเดพเดตเดจเด•เดณเต‹ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ.

เดตเต‡เดตเตเดธเต เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเตเดŸเต† เดฎเดฑเตเดฑเต เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเดฟเตฝ เด’เดฐเต "เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเต" เดฏเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเตเดฑเต† เด…เดตเดธเตเดฅ. เดกเดพเดฑเตเดฑเดพ เด‡เดŸเดชเดพเดŸเตเด•เตพ (เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดจเดฟเดฒเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดจเดจเตเดคเดฎเดพเดฏ เดœเต‹เดกเดฟเด•เตพ (เด•เต€, เดฎเต‚เดฒเตเดฏเด‚) เดŽเดดเตเดคเดพเด‚. เดˆ เดตเดฟเดตเดฐเด™เตเด™เตพ REST API เดตเดดเดฟเดฏเตเด‚ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเดฟเดฒเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เด“เดฐเต‹ เด‡เดŸเดชเดพเดŸเดฟเดฒเตเด‚ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดคเต†เดณเดฟเดตเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚, เด…เดคเดฟเตฝ เดชเด™เตเด•เดพเดณเดฟเดฏเตเดŸเต† เด’เดชเตเดชเต, เด†เดตเดถเตเดฏเดฎเดพเดฏ เด‡เดŸเดชเดพเดŸเดฟเดจเตเดฑเต† เดเดกเดฟ เดฎเตเดคเดฒเดพเดฏเดต เดจเตฝเด•เดพเด‚.

RIDE เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เด‡เดตเดฟเดŸเต† เด•เดฐเดพเดฑเดฟเดจเตเดฑเต† เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เดพเดดเตเดš เด•เดพเดฃเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (เด…เดคเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ), เดชเตเดคเดฟเดฏ เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•, เด…เดคเดฟเดจเดพเดฏเดฟ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•, เด…เดคเตเดชเต‹เดฒเต† เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เดตเดดเดฟ เด‡เดŸเดชเดพเดŸเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเด•.

เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•, เด…เดคเดฟเตฝ เด’เดฐเต เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เต‹เตบเดŸเตเดฐเดพเด•เตโ€Œเดฑเตเดฑเต เด‡เตปเดธเตโ€Œเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•, เด‡เดŸเดชเดพเดŸเตเด•เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด• เดŽเดจเตเดจเดฟเดต เด‰เตพเดชเตเดชเต†เดŸเต†เดฏเตเดณเตเดณ เด’เดฐเต เดชเต‚เตผเดฃเตเดฃ เดธเตˆเด•เตเด•เดฟเดณเดฟเดจเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต REST API-เดฏเตเดฎเดพเดฏเดฟ เดธเด‚เดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, C#, C, Java, JavaScript, Python, Rust, Elixir) . IDE เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดชเตเดคเดฟเดฏ เดฌเดŸเตเดŸเตบ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•.

เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดคเด•เตพ เดตเดฟเดถเดพเดฒเดฎเดพเดฃเต: เดšเดฟเดฒ เดตเดฟเดฒเดพเดธเด™เตเด™เตพ ("เดฌเตเดฒเดพเด•เตเด•เต เดฒเดฟเดธเตเดฑเตเดฑเต") เดตเดฐเต†เดฏเตเดณเตเดณ เด‡เดŸเดชเดพเดŸเตเด•เตพ เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฎเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ dApps เดตเดฐเต†.

เด‡เดชเตเดชเต‹เตพ เดฌเดฟเดธเดฟเดจเดธเตเดธเดฟเตฝ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚: เดฒเต‡เดฒเด‚ เดจเดŸเดคเตเดคเตเดฎเตเดชเต‹เตพ, เด‡เตปเดทเตเดฑเตปเดธเต, เดฒเต‹เดฏเตฝเดฑเตเดฑเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ.

เดฒเต‡เดฒเด™เตเด™เตพ

เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดฒเต‡เดฒเดคเตเดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเดตเดธเตเดฅเด•เดณเดฟเดฒเตŠเดจเตเดจเต เดธเตเดคเดพเดฐเตเดฏเดคเดฏเดพเดฃเต: เดฒเต‡เดฒเดคเตเดคเดฟเตฝ เด•เตƒเดคเตเดฐเดฟเดฎเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดชเด™เตเด•เดพเดณเดฟเด•เตพเด•เตเด•เต เด‰เดฑเดชเตเดชเตเดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เดŽเดฒเตเดฒเดพ เดชเดจเตเดคเดฏเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดš เดธเดฎเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดกเดพเดฑเตเดฑ เดŽเดฒเตเดฒเดพ เดชเด™เตเด•เดพเดณเดฟเด•เตพเด•เตเด•เตเด‚ เดฒเดญเตเดฏเดฎเดพเด•เตเดจเตเดจ เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเดจเต เดจเดจเตเดฆเดฟ เด‡เดคเต เดจเต‡เดŸเดพเดจเดพเด•เตเด‚.

เดตเต‡เดตเตเดธเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเตฝ, เดฒเต‡เดฒ เด…เด•เตเด•เต—เดฃเตเดŸเต เด…เดตเดธเตเดฅเดฏเดฟเตฝ เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เดตเดดเดฟ เดฌเดฟเดกเตเดกเตเด•เตพ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚.

เดฌเตเดฒเต‹เด•เตเด•เต เดจเดฎเตเดชเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเต‡เดฒเดคเตเดคเดฟเดจเตเดฑเต† เด†เดฐเด‚เดญ เดธเดฎเดฏเดตเตเด‚ เด…เดตเดธเดพเดจ เดธเดฎเดฏเดตเตเด‚ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚: เดตเต‡เดตเตเดธเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเดฒเต† เดฌเตเดฒเต‹เด•เตเด•เต เดœเดจเดฑเต‡เดทเดจเตเดฑเต† เด†เดตเตƒเดคเตเดคเดฟ เดเด•เดฆเต‡เดถเด‚ เดคเตเดฒเตเดฏเดฎเดพเดฃเต 60 เดธเต†เด•เตเด•เดจเตเดฑเตเด•เตพ.

1. เด‡เด‚เด—เตเดฒเต€เดทเต เด†เดฐเต‹เดนเดฃ เดตเดฟเดฒ เดฒเต‡เดฒเด‚

เด’เดฐเต เด‡เด‚เด—เตเดฒเต€เดทเต เดฒเต‡เดฒเดคเตเดคเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดตเตผ เดชเดฐเดธเตเดชเดฐเด‚ เดฎเดคเตเดธเดฐเดคเตเดคเดฟเตฝ เดฒเต‡เดฒเด‚ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต. เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เดชเดจเตเดคเดฏเดตเตเด‚ เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด…เดตเดธเดพเดจเดคเตเดคเต† เดฌเดฟเดกเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเตฝ เดฒเต‡เดฒเด•เตเด•เดพเตผ เด‡เดฒเตเดฒเดพเดคเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดฒเต‡เดฒเด‚ เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเด‚. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฑเตเดฑเดตเตเด‚ เด‰เดฏเตผเดจเตเดจ เดฒเต‡เดฒเด•เตเด•เดพเดฐเตป เดชเดฑเดžเตเดž เดคเตเด• เดจเตฝเด•เดฃเด‚.

เด’เดฐเต เดฒเต‡เดฒ เด“เดชเตเดทเดจเตเด‚ เด‰เดฃเตเดŸเต, เด…เดคเดฟเตฝ เดตเดฟเตฝเดชเตเดชเดจเด•เตเด•เดพเดฐเตป เดฒเต‹เดŸเตเดŸเดฟเดจเต เด•เตเดฑเดžเตเดž เดตเดฟเดฒ เดจเดฟเดถเตเดšเดฏเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดธเดพเดจ เดตเดฟเดฒ เด…เดคเดฟเดจเต† เด•เดตเดฟเดฏเดฃเด‚. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดšเต€เดŸเตเดŸเต เดตเดฟเตฝเด•เตเด•เดชเตเดชเต†เดŸเดพเดคเต† เด•เดฟเดŸเด•เตเด•เตเด‚.

เดˆ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดฒเต‡เดฒเดคเตเดคเดฟเดจเดพเดฏเดฟ เดชเตเดฐเดคเตเดฏเต‡เด•เด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดžเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดฒเต‡เดฒ เด•เดพเดฒเดฏเดณเดตเต 3000 เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเดพเดฃเต, เดฒเต‹เดŸเตเดŸเดฟเดจเตเดฑเต† เด†เดฐเด‚เดญ เดตเดฟเดฒ 0,001 เดคเดฐเด‚เด—เด™เตเด™เดณเดพเดฃเต. เด’เดฐเต เดชเด™เตเด•เดพเดณเดฟเด•เตเด•เต "เดตเดฟเดฒ" เดŽเดจเตเดจ เด•เต€เดฏเตเด‚ เด…เดตเดฐเตเดŸเต† เดฌเดฟเดกเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเดตเตเด‚ เดธเดนเดฟเดคเด‚ เด’เดฐเต เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เด…เดฏเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด’เดฐเต เดฌเดฟเดกเต เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเด‚.

เดชเตเดคเดฟเดฏ เดฌเดฟเดกเตเดกเดฟเดจเตเดฑเต† เดตเดฟเดฒ เดˆ เด•เต€เดฏเตเดŸเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดตเดฟเดฒเดฏเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด•เต‚เดŸเดพเดคเต† เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดฏเดพเดณเตเดŸเต† เด…เด•เตเด•เต—เดฃเตเดŸเดฟเตฝ เด•เตเดฑเดžเตเดžเดคเต [new_bid + เด•เดฎเตเดฎเต€เดทเตป] เดŸเต‹เด•เตเด•เดฃเตเด•เดณเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เดฌเดฟเดกเตเดกเดฑเตเดŸเต† เดตเดฟเดฒเดพเดธเด‚ เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเดจเดฟเดฒเต† "เด…เดฏเด•เตเด•เตเดจเตเดจเดฏเดพเตพ" เดซเต€เตฝเดกเดฟเตฝ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด•เต‚เดŸเดพเดคเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดฌเดฟเดกเต เดฌเตเดฒเต‹เด•เตเด•เดฟเดจเตเดฑเต† เด‰เดฏเดฐเด‚ เดฒเต‡เดฒ เด•เดพเดฒเดฏเดณเดตเดฟเดจเตเดณเตเดณเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚.

เดฒเต‡เดฒเดคเตเดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเดคเตเดคเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดฏเดพเตพ เดเดฑเตเดฑเดตเตเด‚ เด‰เดฏเตผเดจเตเดจ เดตเดฟเดฒ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดตเดฟเดฒเดฏเดฟเดฒเตเด‚ เด•เดฑเตปเดธเดฟ เดœเต‹เดกเดฟเดฏเดฟเดฒเตเด‚ เด…เดจเตเดฌเดจเตเดง เดฒเต‹เดŸเตเดŸเดฟเดจเต เดชเดฃเดฎเดŸเดฏเตเด•เตเด•เดพเตป เด…เดฏเดพเตพเด•เตเด•เต เด’เดฐเต เดŽเด•เตเดธเตเดšเต‡เดžเตเดšเต เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เด…เดฏเดฏเตเด•เตเด•เดพเด‚.

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) เด•เต‚เดŸเดพเดคเต† เด‡เดคเดฟเดจเด•เด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เด’เดฐเต เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต DataTransactions เด…เดฏเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚.

เด…เดคเดฟเดจเดพเตฝ, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดคเต†เดณเดฟเดตเตเด•เดณเดฟเตฝ เด‡เตปเดทเตเดฑเตปเดธเต เดŸเต‹เด•เตเด•เตบ เดตเดพเด™เตเด™เดฒเดฟเดจเตเดฑเต† เด‡เดŸเดชเดพเดŸเต เดเดกเดฟ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด•เดฑเตปเดธเดฟ เดœเต‹เดกเดฟ เดตเดพเด™เตเด™เตฝ เด‡เดŸเดชเดพเดŸเดฟเดฒเต† เดชเต‹เดฒเต† เดคเดจเตเดจเต† เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด‡เตปเดทเตเดฑเตปเดธเดฟเดจเตเดฑเต† เดตเดฟเดฒเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตเดฑเดฏเตโ€Œเด•เตเด•เตเดฎเตเดชเต‹เตพ เดตเดพเด™เตเด™เตเดจเตเดจ เดธเดฎเดฏเดคเตเดคเต เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดคเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚ เดšเต†เดฒเดตเตเด‚.

เดชเดฟเดจเตเดจเต€เดŸเต เด‡เตปเดทเตเดฑเตปเดธเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เตปเดทเตเดฑเตปเดธเต เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดตเดพเด™เตเด™เดฟเดฏเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดžเตเดž เดตเดฟเดฒเดฏเตเด•เตเด•เต เดตเดพเด™เตเด™เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต: เด‡เตปเดทเตเดฑเตปเดธเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด’เดฐเต เดŽเด•เตโ€Œเดธเตโ€Œเดšเต‡เดžเตเดšเต เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด“เตผเดกเดฑเดฟเตฝ เด’เดชเตเดชเดฟเดŸเตเดจเตเดจเต (เด‡เดŸเดชเดพเดŸเต เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏเดพเตฝ), เด‡เตปเดทเตเดฑเตปเดธเต เด…เด•เตเด•เต—เดฃเตเดŸเต เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด“เตผเดกเดฑเตเด‚ เดฎเตเดดเตเดตเตป เด‡เดŸเดชเดพเดŸเตเด‚ เด’เดชเตเดชเดฟเดŸเตเดŸเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต.

เดตเดพเด™เตเด™เตฝ เด’เดจเตเดจเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดจเดฟเดฏเดฎเด™เตเด™เตพเด•เตเด•เดจเตเดธเตƒเดคเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด’เดฐเต เดŽเด•เตเดธเตเดšเต‡เดžเตเดšเต เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เด‡เดŸเดชเดพเดŸเต เดฌเตเดฒเต‹เด•เตเด•เตเดšเต†เดฏเดฟเดจเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด‡เดคเตเดตเดดเดฟ เด‡เตปเดทเตเดตเตผ เดšเต†เดฏเตเดค เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เดตเดพเด™เตเด™เตเดจเตเดจเดคเดฟเดจเต เดšเต†เดฒเดตเดดเดฟเดšเตเดš เดชเดฃเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดพเดจเดพเด•เตเด‚.

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 เดคเตเด•เดฏเดฟเตฝ FeeCoin เดจเตฝเด•เตเด‚ (เด‡เดคเต เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต 10 *N/taxDivisor WAVES-เตฝ เดตเดพเด™เตเด™เดพเด‚), เดจเดฟเด™เตเด™เตพ เดฎเตˆเดจเตผ 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
}

เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต, เดฒเต‹เดฏเตฝเดฑเตเดฑเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ

เด’เดฐเต เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเดจเต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเต‹ เดตเต‡เดฃเตเดŸเดฟ เดšเต†เดฒเดตเดดเดฟเดšเตเดš เดคเตเด•เดฏเตเดŸเต† เด’เดฐเต เดญเดพเด—เด‚ เดตเดพเด™เตเด™เตเดจเตเดจเดฏเดพเตพเด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดคเดฐเด‚ เดฒเต‹เดฏเตฝเดฑเตเดฑเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเดฃเต เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต.

เด’เดฐเต เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เด•เต‡เดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด‡เตปเดทเตเดฑเตปเดธเต เด•เต‡เดธเดฟเตฝ เดจเดฎเตเดฎเตพ เดšเต†เดฏเตโ€Œเดคเดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เดคเต†เดณเดฟเดตเตเด•เดณเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดฃเด‚. เด‡เดฐเดŸเตเดŸเดšเตเดšเต†เดฒเดตเต เดคเดŸเดฏเดพเตป, เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต (เด•เต€, เดฎเต‚เดฒเตเดฏเด‚) = (purchaseTransactionId, cashbackTransactionId) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เด…เดฏเดฏเตเด•เตเด•เดฃเด‚.

เดกเดพเดฑเตเดฑเดพ เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เด•เต€เด•เตพ เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต เดกเดฟเดตเดฟเดธเตผ - เดฏเต‚เดฃเดฟเดฑเตเดฑเต เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต เดทเต†เดฏเตผ เด•เตŠเดฃเตเดŸเต เดนเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด†. เด•เตเดฏเดพเดทเตเดฌเดพเด•เตเด•เต เดทเต†เดฏเตผ 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•