αžšαž›αž€αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αŸ– αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αŸ… αž“αž·αž„αžŸ αž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›

αžšαž›αž€αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αŸ– αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αŸ… αž“αž·αž„αžŸ αž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž–αžΈαžšαž˜αž»αž“ αž™αžΎαž„αž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž‚αžŽαž“αžΈαž†αŸ’αž›αžΆαžαžœαŸƒ αž“αž·αž„αžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžΆαž“αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŠαŸαž‰αžαŸ’αž›αŸƒ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž—αž€αŸ’αžŠαžΈαž—αžΆαž–αž“αž·αž„αž‡αž½αž™αž•αž„αžŠαŸ‚αžšαŸ” αž’αžΆαž“αžΆαž“αžΌαžœαžαž˜αŸ’αž›αžΆαž—αžΆαž–αž“αŸƒαž§αž”αž€αžšαžŽαŸαž αž·αžšαž‰αŸ’αž‰αžœαžαŸ’αžαž».

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒ αž“αž·αž„αž€αžšαžŽαžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž”αž„αŸ’αž€αž€αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž›αžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ”

Waves Smart Assets αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αžαŸ’αžšαž½αžβ€‹αž›αžΎβ€‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”β€‹αž›αžΎβ€‹αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜ αžŠαŸ„αž™β€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αžαžΆαž˜β€‹αž™αž“αŸ’αžαž€αžΆαžšβ€‹αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆβ€‹αž“αžΉαž„β€‹αž‚αžŽαž“αžΈβ€‹αž†αŸ’αž›αžΆαžαžœαŸƒαŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž˜αžΈαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆαž˜αž»αž“αžŠαŸ„αž™αžŸαŸ’αž‚αŸ’αžšαžΈαž” αž αžΎαž™αž˜αžΆαž“αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ„αž™ blockchain αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž‚αž½αžšαž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹αž–αžΈαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžšαžœαžΆαž„αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒ αž“αž·αž„αž‚αžŽαž“αžΈαž†αŸ’αž›αžΆαžαžœαŸƒαŸ–

  1. αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž“αŸƒαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž—αžŸαŸ’αžαž»αžαžΆαž„ (αž™αžΎαž„αž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž–αž½αž€αž‚αŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αžŠαŸ†αž”αžΌαž„).
  2. αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸαžαž€αžΌαžŠαž‚αžŽαž“αžΈαž†αŸ’αž›αžΆαžαžœαŸƒ αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™ ExchangeTransaction αž”αžΆαž“αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž‚αžŽαž“αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‡αžΆαž‚αžŽαž“αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸαž˜αžΆαž“αžαŸ‚αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒ αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž”αžΆαž“αž‘αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž‘αžΆαž‰αž™αž€αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž–αžΈαžœαžΆαŸ”
  3. αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒ αž˜αž·αž“αžŠαžΌαž…αž‚αžŽαž“αžΈαž†αŸ’αž›αžΆαžαžœαŸƒ αž˜αž·αž“αž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αŸ…αžαŸ‚αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‚αžŽαž“αžΈαž–αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ”

αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒαž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αžŠαž›αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž™αŸ‰αžΆαž„αž…αŸ’αžšαžΎαž“ αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžŽαž»αŸ†αžšαžΏαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αžΆαž“αž—αžΆαž–αžŸαž„αŸ’αžαŸαž” αž“αž·αž„αž†αžΎαžαž†αžΆαž™αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αž€αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αž€αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‘αŸ…αž€αž˜αŸ’αž–αžŸαŸ‹αž”αŸ’αž›αž»αž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž€αž˜αŸ’αž–αžŸαŸ‹αž‚αŸ„αž›αžŠαŸ…αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž“αŸƒαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

let targetHeight = 1500000
height >= targetHeight
 
height - функция языка, Π²ΠΎΠ·Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ высоту.

αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž’αŸ’αž“αž€αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„

αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

"αž”αž‰αŸ’αž‡αžΈαžŸ" αž“αŸƒαž’αŸ’αž“αž€αž‘αž‘αž½αž›

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αŸ…αž‚αžŽαž“αžΈαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ - αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž "αž”αž‰αŸ’αž‡αžΈαžŸ" αž“αŸƒαž’αŸ’αž“αž€αž‘αž‘αž½αž› - αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ:

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
}

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„αž—αžΆαž–αž–αŸαž‰αž›αŸαž‰αžŠαŸ‚αž›αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αžΆαž“αž“αŸƒαž—αžΆαžŸαžΆ αž”αž‰αŸ’αž‡αžΈαž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžŠαŸ‚αž›αŸ—αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαžΆαž‡αžΆαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž’αžΆαžαž»αž”αŸαžαž»αž„αŸ”

"αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αŸ…" αž“αŸƒαž’αŸ’αž“αž€αž‘αž‘αž½αž›

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αžŠαžΎαž˜αŸ’αž”αžΈαž αžΆαž˜αžƒαžΆαžαŸ‹αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž‚αžŽαž“αžΈαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž "αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αŸ…" αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž†αŸ’αž›αžΆαžαžœαŸƒαžŠαžΌαž…αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαžœαžΆαž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αŸ…αž‘αŸαŸ–

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
}

αž•αŸ’αž‰αžΎαžŠαŸ„αž™αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž–αžΈαž’αŸ’αž“αž€αž…αŸαž‰

αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒ αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‰αžΎαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒαž”αžΆαž“αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž–αžΈαž’αŸ’αž“αž€αž…αŸαž‰ (αž”αŸαžŽαŸ’αžŽαžŸαž“αŸ’αž™αžΆ/αž”αŸ†αžŽαž»αž›) αž’αŸ’αž“αž€αž…αŸαž‰αž”αŸαžŽαŸ’αžŽαž”αž„αŸ’αž αžΆαž‰αž€αžΆαžšαž™αž›αŸ‹αž–αŸ’αžšαž˜αžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αžŠαŸ„αž™αžŠαžΆαž€αŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž‚αžŽαž“αžΈαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ–

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 αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž”αŸ‚αž”αž“αŸαŸ‡αŸ–

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
}

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αž…αŸ†αžŽαž»αž…αžŠαŸ‚αž›αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž“αŸ…αž–αŸαž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αžŠαŸ‚αž›αž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαŸ” αž…αŸ†αž“αž»αž…αž“αŸ„αŸ‡αž‚αžΊαžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ„αŸ‡αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ WAVES αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž” αž™αžΎαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ WAVES αžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ”

αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αžαž˜αŸ’αž›αŸƒαžαŸαžš

αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαžαŸαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒ αžŠαŸ‚αž›αž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„αž‡αžΆαž‡αŸ†αž αžΆαž“αŸ—αž€αŸ’αž“αž»αž„αžŸαž˜αžΆαž˜αžΆαžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžαž˜αŸ’αž›αŸƒαž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„ 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
}


αž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αžŸαŸ’αž‚αŸ’αžšαžΈαž” αž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαž‘αŸ’αžšαž–αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž†αŸ’αž›αžΆαžαžœαŸƒαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΉαž˜αž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αž»αž€αž‡αžΆαž˜αž»αž“αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž”αŸ‚αž”αž“αŸαŸ‡αŸ–

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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹