Waves smart เบŠเบฑเบšโ€‹เบชเบดเบ™โ€‹: เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบชเบตโ€‹เบ”เปเบฒโ€‹เปเบฅเบฐโ€‹เบชเบตโ€‹เบ‚เบฒเบงโ€‹, เบเบฒเบ™โ€‹เบŠเบทเป‰โ€‹เบ‚เบฒเบโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบซเปˆเบฒเบ‡โ€‹

Waves smart เบŠเบฑเบšโ€‹เบชเบดเบ™โ€‹: เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบชเบตโ€‹เบ”เปเบฒโ€‹เปเบฅเบฐโ€‹เบชเบตโ€‹เบ‚เบฒเบงโ€‹, เบเบฒเบ™โ€‹เบŠเบทเป‰โ€‹เบ‚เบฒเบโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบซเปˆเบฒเบ‡โ€‹

เปƒเบ™เบชเบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบŠเบต smart เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบทเบเบฒเบ™เบ›เบฐเบกเบนเบ™เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบชเบฑเบ”เบŠเบทเปˆเปเบฅเบฐเบเบฑเบ‡เบŠเปˆเบงเบ เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเป‚เบ›เปˆเบ‡เปƒเบชเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบเบฒเบ™เป€เบ‡เบดเบ™.

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเปเบฅเบฐเบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เปเบŠเปˆเปเบ‚เบ‡เบŠเบฑเบšเบชเบดเบ™เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰.

Waves Smart Assets เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เบ—เบฑเบšเบชเบฐเบ„เบฃเบดเบšเป€เบ—เบดเบ‡เบŠเบฑเบšเบชเบดเบ™, เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบปเบ™เป„เบเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบšเบฑเบ™เบŠเบตเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ. เปเบ•เปˆเบฅเบฐเบ—เบธเบฅเบฐเบเปเบฒเปƒเบซเบกเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบˆเบฐเบ–เบทเบเบขเบทเบ™เบขเบฑเบ™เบเปˆเบญเบ™เป‚เบ”เบเบชเบฐเบ„เบดเบš, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ”เบ blockchain.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบฑเบšเบชเบดเบ™ smart เปเบฅเบฐเบšเบฑเบ™เบŠเบต smart:

  1. เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเบงเบ”เบชเบญเบšเบซเบผเบฑเบเบ–เบฒเบ™ (เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™ เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ—เปเบฒเบญเบดเบ”).
  2. เปƒเบ™เบฅเบฐเบซเบฑเบ”เบšเบฑเบ™เบŠเบตเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบš ExchangeTransaction เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบšเบฑเบ™เบŠเบตเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ–เบทเบเบเบงเบ”เบชเบญเบš. เปƒเบ™เบฅเบฐเบซเบฑเบ”เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบชเบฑเปˆเบ‡เบŠเบทเป‰เป‚เบ”เบเบเบปเบ‡เป„เบ”เป‰; เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบš ExchangeTransaction, เปเบฅเบฐเบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบชเบฐเบเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบเบกเบฑเบ™.
  3. เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ, เบšเปเปˆเบ„เบทเบเบฑเบšเบšเบฑเบ™เบŠเบตเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ, เบšเปเปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบšเบฑเบ™เบŠเบตเบˆเบฒเบเบชเบฐเบ„เบฃเบดเบšเป„เบ”เป‰.

เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ‚เบฝเบ™เบชเบฑเบ™เบเบฒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบซเบผเบฒเบ, เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเปเบฅเบฐเบ™เบตเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™ เปเบฅเบฐเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบก.

เบŠเบฑเบšเบชเบดเบ™เบ–เบทเบเบขเบธเบ”

เป€เบžเบทเปˆเบญ freeze เบŠเบฑเบšเบชเบดเบ™เปƒเบซเป‰เบ„เบงเบฒเบกเบชเบนเบ‡เบ‚เบญเบ‡เบ•เบฑเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ เบ„เบงเบฒเบกเบชเบนเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบŠเบฑเบšเบชเบดเบ™ smart เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

let targetHeight = 1500000
height >= targetHeight
 
height - ั„ัƒะฝะบั†ะธั ัะทั‹ะบะฐ, ะฒะพะทั€ะฐั‰ะฐัŽั‰ะฐั ั‚ะตะบัƒั‰ัƒัŽ ะฒั‹ัะพั‚ัƒ.

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ Matcher

เป€เบžเบทเปˆเบญเบ•เบฑเป‰เบ‡เบ•เบปเบงเบˆเบฑเบšเบ„เบนเปˆเบชเบฐเป€เบžเบฒเบฐเป€เบ›เบฑเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบชเบปเปˆเบ‡เปƒเบ™เบชเบฐเบ„เบฃเบดเบšเบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

match tx {
    case t : ExchangeTransaction =>
        t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
    case _ => true
}

"เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบตเบ‚เบฒเบง" เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš

เป€เบžเบทเปˆเบญเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ tokens เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบšเบฑเบ™เบŠเบตเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ - เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ "เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบตเบ‚เบฒเบง" เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบชเบฐเบซเบฅเบฒเบ”เบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ—เบตเปˆเบเบงเบ”เบชเบญเบšเบเบฒเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ:

match tx {
  case t : TransferTransaction =>
    let trustedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let trustedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let trustedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient == trustedRecipient1 || t.recipient == trustedRecipient2 || t.recipient == trustedRecipient3
  case _ => false
}

เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ”เป‰เบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบžเบดเบชเบนเบ”เป„เบ”เป‰เบ‚เบญเบ‡เบžเบฒเบชเบฒ, เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบŠเปเป‰เบฒเบ„เบทเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบตเบกเบฑเบ‡.

"เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบตเบ”เปเบฒ" เบ‚เบญเบ‡เบœเบนเป‰เบฎเบฑเบš

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เป€เบžเบทเปˆเบญเบซเป‰เบฒเบกเบเบฒเบ™เบชเบปเปˆเบ‡ tokens เป„เบ›เบซเบฒเบšเบฑเบ™เบŠเบตเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ "เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบตเบ”เปเบฒ". เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰, เปเบ—เป‰เบˆเบดเบ‡เบŠเบฑเบšเบชเบปเบกเบšเบฑเบ” smart เบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เปเบ•เปˆเบกเบตเบ—เบตเปˆเบขเบนเปˆเบเบงเบ”เบชเบญเบšเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบ”เปเบฒ:

match tx {
  case t : TransferTransaction =>
    let bannedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let bannedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let bannedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient != bannedRecipient1 && t.recipient != bannedRecipient2 && t.recipient != bannedRecipient3
  case _ => false
}

เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบญเบญเบโ€‹

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบˆเบฒเบเบœเบนเป‰เบญเบญเบ (เบ›เป‰เบฒเบเบชเบฑเบ™เบเบฒ/เปœเบตเป‰เบชเบดเบ™). เบœเบนเป‰เบญเบญเบเบšเบฑเบ”เบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบเบดเบ™เบเบญเบกเป‚เบ”เบเบเบฒเบ™เบงเบฒเบ‡ ID เบ—เบธเบฅเบฐเบเปเบฒเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ•เบปเบ™:

match tx {
  case t : TransferTransaction =>
    let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
    #ัƒะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ะฒ ัั‚ะตะนั‚ะต ัะผะธั‚ะตะฝั‚ะฐ ัะพะดะตั€ะถะธั‚ัั ID ั‚ะตะบัƒั‰ะตะน ั‚ั€ะฐะฝะทะฐะบั†ะธะธ
    isDefined(getInteger(issuer, toBase58String(t.id)))
  case _ => false
}

เปเบฅเบเบ›เปˆเบฝเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบซเบผเบฝเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™

เบŠเบฑเบšเบชเบดเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปเบฅเบเบ›เปˆเบฝเบ™เบกเบฑเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฑเบšเบซเบผเบฝเบ™เบชเบฐเป€เบžเบฒเบฐเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบฝเบ‡เปเบ•เปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปเบฅเบเบ›เปˆเบฝเบ™เบชเปเบฒเบฅเบฑเบš Bitcoins, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
  case t : ExchangeTransaction =>
    t.sellOrder.assetPair.priceAsset == BTCId ||
     t.sellOrder.assetPair.amountAsset == BTCId
  case _ => true
}

เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเป‚เบ”เบเบฅเบฒเบ„เบฒเบˆเบฒเบ oracle

เปƒเบ™เบชเบฐเบ„เบดเบšเบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบŠเบทเป‰เบ‚เบฒเบเปƒเบ™เบฅเบฒเบ„เบฒเบ—เบตเปˆเบ„เบปเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡ oracle เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ script เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง:

let oracle = Address(base58'3PLNmokt22NrSiNvCLvwMUP84LCMJqbXwAD')
let assetId = toBase58String(base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd')
 
match tx {
  #ะทะฐะฟั€ะตั‰ะฐะตะผ ะฟะตั€ะตะดะฐั‡ัƒ ะฐััะตั‚ะฐ
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    #ัƒะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ั‚ะพั€ะณะพะฒะปั ะฟั€ะพะธัั…ะพะดะธั‚ ะฟะพ ั†ะตะฝะต, ะทะฐะดะฐะฝะฝะพะน ะฒ ัั‚ะตะนั‚ะต ะพั€ะฐะบะปะฐ ะดะปั ัั‚ะพะณะพ ะฐััะตั‚ะฐ
    let correctPrice = e.price == extract(getInteger(oracle, assetId))
    #ัƒะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ั‚ะพั€ะณะพะฒะปั ะฟั€ะพะธัั…ะพะดะธั‚ ะฒ ะพะฑะผะตะฝ ะฝะฐ WAVES
    let correctPriceAsset = !isDefined(e.sellOrder.assetPair.priceAsset) 
correctPrice && correctPriceAsset
  case _ => true
}

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบˆเบธเบ”เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบเบงเบ”เบชเบญเบš ID เบ‚เบญเบ‡เบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™. เบˆเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบ–เป‰เบฒ ID เบŠเบฑเบšเบชเบดเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš WAVES. เปƒเบ™เบชเบฐเบ„เบดเบš, เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป„เบ›เบžเป‰เบญเบกเป†เบเบฑเบš WAVES, เปƒเบ™เบ—เบฒเบ‡เบ™เบตเป‰เปเบ—เป‰เป†.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบฅเบฒเบ„เบฒเบ„เบปเบ‡เบ—เบตเปˆ

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบฅเบฒโ€‹เบ„เบฒโ€‹เบ„เบปเบ‡โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบŠเบฑเบšโ€‹เบชเบดเบ™ smart เป„เบ”เป‰โ€‹, เป€เบŠเบดเปˆเบ‡โ€‹เบˆเบฐโ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตโ€‹เปƒเบ™โ€‹เบญเบฑเบ”โ€‹เบ•เบฒโ€‹เบชเปˆเบงเบ™โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ script เบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบฅเบฒเบ„เบฒเบˆเบฐเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 5% เบ—เบธเบเป† 1000 เบ•เบฑเบ™:

let startPrice = 10
let startHeight = 1000
let interval = 1000
#ะฝะฐ ัะบะพะปัŒะบะพ ะฟั€ะพั†ะตะฝั‚ะพะฒ ั†ะตะฝะฐ ัƒะฒะตะปะธั‡ะธะฒะฐะตั‚ัั ะทะฐ ะพะดะธะฝ ัˆะฐะณ
let raise = 5
 
match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    e.price == startPrice + ((height - startHeight) / interval) * (100 + raise) / 100
    && !isDefined(e.sellOrder.assetPair.priceAsset)
  case _ => true
}


เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเป„เบฅเบเบฐเบซเปˆเบฒเบ‡

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบชเบฐเบ„เบดเบš, เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเบŠเบฑเบšเบชเบดเบ™เบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบเปˆเบญเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ script เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง:

let startHeight = 10000
let interval = 44000
let limit = 1500
 
match tx {
  case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
    (height - startHeight) % interval < limit
  case _ => true
}

เปƒเบ™เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบˆเบฒเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบ เบ„เบงเบฒเบกเบชเบนเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เบšเปเปˆเป€เบเบตเบ™ เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ” เป„เบฅเบเบฐเบซเปˆเบฒเบ‡. เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เป„เบฅเบเบฐเบซเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ•เบฑเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก เป„เบฅเบเบฐเบซเปˆเบฒเบ‡.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™