Waves แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜: แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒแƒœแƒฃแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒแƒ›แƒ“แƒ”

Waves แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜: แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒแƒœแƒฃแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒแƒ›แƒ“แƒ”

แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒ˜ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒกแƒแƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒ แƒ˜แƒžแƒขแƒแƒ•แƒแƒšแƒฃแƒขแƒ”แƒ‘แƒ—แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› DLT แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒคแƒ”แƒ แƒแƒ”แƒ‘แƒ˜ แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒคแƒแƒ แƒ—แƒแƒ. แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒ”แƒ แƒกแƒžแƒ”แƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ แƒกแƒคแƒ”แƒ แƒ แƒแƒ แƒ˜แƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ“แƒ แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒœแƒ“แƒแƒ‘แƒแƒก แƒ›แƒแƒกแƒจแƒ˜ แƒจแƒ”แƒกแƒฃแƒš แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก.

RIDE โ€“ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ

Waves-แƒ›แƒ แƒจแƒ”แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ”แƒœแƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - RIDE. แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒฅ. แฒ“แƒ แƒแƒฅ - แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ› แƒ—แƒ”แƒ›แƒแƒ–แƒ” แƒฐแƒแƒ‘แƒ แƒ–แƒ”.

RIDE แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒžแƒ แƒ”แƒ“แƒ˜แƒ™แƒแƒขแƒ˜ แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก "true" แƒแƒœ "false" แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒแƒœ แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒจแƒ˜, แƒแƒœ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ. แƒกแƒ›แƒแƒ แƒข แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜ แƒกแƒ แƒฃแƒš แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒแƒก แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก. RIDE-แƒจแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜แƒ“แƒแƒœ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ.

แƒ“แƒฆแƒ”แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก Waves-แƒ˜แƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜: แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒฅแƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜. แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก. แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ”แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

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

tx แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒ”แƒ‘แƒ— แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒขแƒงแƒ•แƒ˜แƒกแƒ˜ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ. แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒขแƒงแƒ•แƒ˜แƒกแƒ˜ RIDE-แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“. แƒงแƒ•แƒ”แƒšแƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜ แƒ’แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒก แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜.

แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ›แƒแƒแƒชแƒฎแƒแƒ“แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก โ€žif-then-elseโ€œ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“. แƒ˜แƒ›แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, แƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒก แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒ— แƒ“แƒแƒกแƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒ˜แƒกแƒ แƒฃแƒšแƒ” แƒ“แƒ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ” (แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ), แƒ แƒแƒ›แƒšแƒ˜แƒก แƒžแƒ แƒแƒ’แƒœแƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ”, RIDE แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ”แƒ‘แƒก แƒแƒœ แƒœแƒแƒฎแƒขแƒแƒ›แƒ˜แƒก แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒก.

Waves แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒ›แƒ˜แƒ”แƒ™แƒฃแƒ—แƒ•แƒœแƒ”แƒ‘แƒ โ€žแƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒกโ€œ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ, แƒแƒœแƒฃ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒฌแƒ”แƒ แƒแƒ— แƒฃแƒกแƒแƒกแƒ แƒฃแƒšแƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜ (แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ) แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒ–แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (DataTransaction). แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒก แƒ แƒแƒ’แƒแƒ แƒช REST API-แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒกแƒ›แƒแƒ แƒข แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒจแƒ˜.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒ—แƒ แƒ›แƒแƒกแƒ˜แƒ•แƒก, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ, แƒกแƒแƒญแƒ˜แƒ แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก ID แƒ“แƒ แƒ.แƒจ.

แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ RIDE-แƒ—แƒแƒœ แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— IDE แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒœแƒแƒฎแƒแƒ— แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒฎแƒ”แƒ“แƒ•แƒ (แƒ—แƒฃ แƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ), แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—.

แƒกแƒ แƒฃแƒšแƒ˜ แƒชแƒ˜แƒ™แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒ›แƒแƒกแƒ–แƒ” แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ, แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ REST API-แƒกแƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, C#, C, Java, JavaScript, Python, Rust, Elixir) . IDE-แƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒฆแƒ˜แƒšแƒแƒ™แƒก NEW.

แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒคแƒแƒ แƒ—แƒแƒ: แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ™แƒ แƒซแƒแƒšแƒ•แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒš แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒ›แƒ“แƒ” (โ€žแƒจแƒแƒ•แƒ˜ แƒกแƒ˜แƒโ€œ) แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒกแƒฃแƒ  dApp-แƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ‘แƒ˜แƒ–แƒœแƒ”แƒกแƒจแƒ˜ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒก: แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒšแƒแƒ˜แƒแƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก.

แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ”แƒ‘แƒ˜

แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒญแƒ•แƒ˜แƒ แƒ•แƒแƒšแƒแƒ‘แƒ: แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒ•แƒœแƒ”แƒœ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒœแƒ˜, แƒ แƒแƒ› แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒžแƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒกแƒแƒ“แƒแƒช แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒคแƒกแƒแƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

Waves แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒ–แƒ”, แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒแƒก แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜ DataTransaction-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—: แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ” Waves แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒจแƒ˜ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒขแƒแƒšแƒ˜แƒ 60 แƒฌแƒแƒ›แƒ˜.

1. แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ˜ แƒแƒฆแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒคแƒแƒกแƒ˜แƒก แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜

แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ  แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒจแƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒก แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒชแƒ˜แƒแƒก แƒฃแƒฌแƒ”แƒ•แƒ”แƒœ. แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒกแƒแƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒแƒ“แƒ”แƒก แƒฌแƒ˜แƒœแƒ แƒคแƒกแƒแƒœแƒก. แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜ แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒฆแƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ แƒ”แƒขแƒ”แƒœแƒ“แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ“แƒแƒแƒญแƒแƒ แƒ‘แƒ”แƒ‘แƒก แƒ‘แƒแƒšแƒ แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒแƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ›แƒ แƒžแƒ แƒ”แƒขแƒ”แƒœแƒ“แƒ”แƒœแƒขแƒ›แƒ แƒฃแƒœแƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ˜แƒœแƒแƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ—แƒแƒœแƒฎแƒ.

แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒ แƒแƒกแƒแƒช แƒ’แƒแƒ›แƒงแƒ˜แƒ“แƒ•แƒ”แƒšแƒ˜ แƒแƒ“แƒ’แƒ”แƒœแƒก แƒšแƒแƒขแƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒคแƒแƒกแƒก แƒ“แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒคแƒแƒกแƒ˜ แƒ›แƒแƒก แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒแƒ“แƒ”แƒก. แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒšแƒแƒขแƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ แƒ’แƒแƒฃแƒงแƒ˜แƒ“แƒ•แƒ”แƒšแƒ˜.

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ— แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒš แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ—แƒแƒœ. แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒแƒ 3000 แƒ‘แƒšแƒแƒ™แƒ˜, แƒฎแƒแƒšแƒ แƒšแƒแƒขแƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒคแƒแƒกแƒ˜ 0,001 WAVES. แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒแƒก แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ DataTransaction-แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ โ€žแƒคแƒแƒกแƒ˜โ€œ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒ˜แƒก แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ.

แƒแƒฎแƒแƒšแƒ˜ แƒ‘แƒ˜แƒ“แƒ˜แƒก แƒคแƒแƒกแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒ› แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒคแƒแƒกแƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒก แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› [new_bid + แƒกแƒแƒ™แƒแƒ›แƒ˜แƒกแƒ˜แƒแƒก] แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ—แƒแƒ•แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ–แƒ”. แƒžแƒ แƒ”แƒขแƒ”แƒœแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ DataTransaction-แƒ˜แƒก แƒ•แƒ”แƒšแƒจแƒ˜ โ€žแƒ’แƒแƒ›แƒ’แƒ–แƒแƒ•แƒœแƒ˜โ€œ, แƒฎแƒแƒšแƒ แƒกแƒแƒขแƒ”แƒœแƒ“แƒ”แƒ แƒ แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ” แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒจแƒ˜.

แƒ—แƒฃ แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ› แƒ“แƒแƒแƒฌแƒ”แƒกแƒ แƒฃแƒ›แƒแƒฆแƒšแƒ”แƒกแƒ˜ แƒคแƒแƒกแƒ˜, แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก ExchangeTransaction, แƒ แƒแƒ—แƒ แƒ’แƒแƒ“แƒแƒ˜แƒฎแƒแƒ“แƒแƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒšแƒแƒขแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒš แƒคแƒแƒกแƒแƒ“ แƒ“แƒ แƒกแƒแƒ•แƒแƒšแƒฃแƒขแƒ แƒฌแƒงแƒ•แƒ˜แƒšแƒจแƒ˜.

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. แƒ™แƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒคแƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒฐแƒแƒšแƒแƒœแƒ“แƒ˜แƒฃแƒ แƒ˜ แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜

แƒฐแƒแƒšแƒแƒœแƒ“แƒ˜แƒฃแƒ  แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ–แƒ” แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒกแƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ”แƒœ แƒฃแƒคแƒ แƒ แƒ›แƒแƒฆแƒแƒš แƒคแƒแƒกแƒก, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒงแƒ˜แƒ“แƒ•แƒ”แƒšแƒ˜ แƒ›แƒ–แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ˜แƒฎแƒแƒ“แƒแƒก. แƒคแƒแƒกแƒ˜ แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒกแƒแƒœแƒแƒ› แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ” แƒแƒ  แƒ“แƒแƒ—แƒแƒœแƒฎแƒ›แƒ“แƒ”แƒ‘แƒ แƒšแƒแƒขแƒ˜แƒก แƒงแƒ˜แƒ“แƒ•แƒแƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒคแƒแƒกแƒแƒ“.

แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒแƒจแƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒคแƒแƒกแƒ˜แƒก แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒ”แƒšแƒขแƒ แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ” แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ•แƒ˜แƒœแƒช แƒคแƒกแƒแƒœแƒก แƒ“แƒ”แƒ‘แƒก. แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, DataTransaction แƒแƒ  แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ .

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. แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜ โ€žแƒงแƒ•แƒ”แƒšแƒ-แƒแƒœแƒแƒ–แƒฆแƒแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ˜โ€œ

"All-pay" แƒแƒ แƒ˜แƒก แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ” แƒ˜แƒฎแƒ“แƒ˜แƒก แƒ‘แƒ˜แƒ“แƒก, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ—แƒฃ แƒ•แƒ˜แƒœ แƒ›แƒแƒ˜แƒ’แƒ”แƒ‘แƒก แƒšแƒแƒขแƒก. แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ” แƒ˜แƒฎแƒ“แƒ˜แƒก แƒ‘แƒ˜แƒ“แƒก, แƒฎแƒแƒšแƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒแƒก แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก, แƒ˜แƒ’แƒ”แƒ‘แƒก แƒšแƒแƒขแƒก.

แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ” แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒก แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒแƒก DataTransaction-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— (แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ)* = (โ€žแƒ’แƒแƒ›แƒแƒ แƒฏแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜โ€œ, แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜), (โ€žแƒคแƒแƒกแƒ˜โ€œ, แƒคแƒแƒกแƒ˜). แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ“แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒแƒ› แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒฅแƒ•แƒก แƒ’แƒแƒ“แƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒ— แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒคแƒแƒกแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒ˜แƒœแƒแƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜แƒ. แƒแƒฃแƒฅแƒชแƒ˜แƒแƒœแƒ˜ แƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ” แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ”แƒ›แƒ“แƒ”.

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

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ–แƒฆแƒ•แƒ˜แƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒฅแƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜ แƒคแƒ˜แƒœแƒแƒœแƒกแƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒแƒšแƒ˜แƒกแƒ’แƒแƒœ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒกแƒฃแƒ แƒก แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ—แƒฃ แƒขแƒแƒ™แƒ”แƒœแƒ˜ แƒ’แƒแƒฃแƒคแƒแƒกแƒฃแƒ แƒ“แƒ”แƒ‘แƒ, แƒ˜แƒก แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒ“แƒแƒ˜แƒ‘แƒ แƒฃแƒœแƒแƒก แƒแƒ› แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฎแƒ“แƒ˜แƒšแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒ—แƒแƒœแƒฎแƒ แƒ“แƒ แƒ›แƒ–แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ˜แƒฎแƒแƒ“แƒแƒก แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒšแƒ˜ แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ.

แƒแƒ›แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ โ€žแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ˜แƒก แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกโ€œ แƒ’แƒแƒชแƒ”แƒ›แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒฃแƒšแƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ–แƒ” แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› ExchangeTransactions, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ”แƒœ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒš แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒก.

แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒฎแƒแƒ แƒฏแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒกแƒ—แƒฎแƒแƒ•แƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒ›แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก DataTransaction แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒฃแƒšแƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ–แƒ” (แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜, แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ) = (purchaseTransactionId, sellOrderId) แƒ“แƒ แƒแƒ™แƒ แƒซแƒแƒšแƒแƒก DataTransactions แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ—.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒกแƒแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ แƒœแƒ˜แƒจแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒงแƒ˜แƒ“แƒ•แƒ˜แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก ID-แƒก. แƒ•แƒแƒšแƒฃแƒขแƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ˜แƒ’แƒ˜แƒ•แƒ”, แƒ แƒแƒช แƒจแƒ”แƒกแƒงแƒ˜แƒ“แƒ•แƒ˜แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜. แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒซแƒ”แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก แƒ“แƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒก แƒขแƒแƒšแƒ˜ แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ˜แƒก แƒคแƒแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ™แƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒกแƒแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜ แƒงแƒ˜แƒ“แƒฃแƒšแƒแƒ‘แƒก แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ˜แƒก แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ’แƒแƒœ แƒ˜แƒ› แƒคแƒแƒกแƒแƒ“, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ›แƒแƒœ แƒ˜แƒงแƒ˜แƒ“แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜: แƒกแƒแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜ แƒฅแƒ›แƒœแƒ˜แƒก ExchangeTransaction-แƒก, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฎแƒ”แƒšแƒก แƒแƒฌแƒ”แƒ แƒก แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒแƒก (แƒ—แƒฃ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒกแƒฌแƒแƒ แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜), แƒกแƒแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ–แƒ” แƒฎแƒ”แƒšแƒก แƒแƒฌแƒ”แƒ แƒก แƒ›แƒ”แƒแƒ แƒ” แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒแƒก แƒ“แƒ แƒ›แƒ—แƒ”แƒš แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒก แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒจแƒ˜.

แƒ—แƒฃ แƒจแƒ”แƒกแƒงแƒ˜แƒ“แƒ•แƒ แƒแƒ  แƒ›แƒแƒฎแƒ“แƒ, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก ExchangeTransaction แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ‘แƒšแƒแƒ™แƒฉแƒ”แƒ˜แƒœแƒจแƒ˜. แƒแƒ› แƒ’แƒ–แƒ˜แƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒแƒก แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒฃแƒšแƒ˜ แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒซแƒ”แƒœแƒแƒ–แƒ” แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒšแƒ˜ แƒ—แƒแƒœแƒฎแƒ.

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)
}

แƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ˜แƒก แƒœแƒ˜แƒจแƒแƒœแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒฅแƒขแƒ˜แƒ•แƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒ™แƒ แƒซแƒแƒšแƒแƒก แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒžแƒ˜แƒ แƒ”แƒ‘แƒ–แƒ”.

แƒแƒ› แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒกแƒ”แƒ•แƒ” crowdfunding แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ˜แƒแƒœ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ”แƒ‘แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ—แƒแƒœแƒฎแƒ˜แƒก แƒจแƒ”แƒฃแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜.

แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒฎแƒแƒ“แƒ”แƒ‘แƒ˜

แƒกแƒ›แƒแƒ แƒข แƒ™แƒแƒœแƒขแƒ แƒแƒฅแƒขแƒ”แƒ‘แƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ’แƒแƒ“แƒแƒกแƒแƒฎแƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒ–แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒ˜แƒžแƒ˜แƒก แƒแƒฅแƒขแƒ˜แƒ•แƒ˜แƒ—. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒแƒฎแƒแƒšแƒ˜ แƒแƒฅแƒขแƒ˜แƒ•แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒžแƒแƒœแƒกแƒแƒ แƒแƒ‘แƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒแƒฅแƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

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 แƒกแƒ›แƒแƒ แƒข แƒแƒฅแƒขแƒ˜แƒ•แƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— 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 แƒแƒ แƒ˜แƒก แƒšแƒแƒ˜แƒแƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒ แƒแƒกแƒแƒช แƒ›แƒงแƒ˜แƒ“แƒ•แƒ”แƒšแƒ˜ แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ–แƒ” แƒแƒœ แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒšแƒ˜ แƒ—แƒแƒœแƒฎแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒก.

แƒกแƒ›แƒแƒ แƒข แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒ“แƒแƒ–แƒฆแƒ•แƒ”แƒ•แƒ แƒกแƒแƒฅแƒ›แƒ”แƒจแƒ˜. แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒฎแƒแƒ แƒฏแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก DataTransaction (แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ) = (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
}

แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒกแƒ›แƒแƒ แƒข แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒคแƒ˜แƒœแƒแƒœแƒกแƒฃแƒ  แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒแƒคแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒคแƒ˜แƒฃแƒฉแƒ”แƒ แƒกแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒแƒฎแƒแƒ“แƒ”แƒ‘แƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ