рддрд░рдВрдЧрд╣рд░реВ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐рд╣рд░реВ: рдХрд╛рд▓реЛ рд░ рд╕реЗрддреЛ рд╕реВрдЪреАрд╣рд░реВ, рдЕрдиреНрддрд░рд╛рд▓ рд╡реНрдпрд╛рдкрд╛рд░

рддрд░рдВрдЧрд╣рд░реВ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐рд╣рд░реВ: рдХрд╛рд▓реЛ рд░ рд╕реЗрддреЛ рд╕реВрдЪреАрд╣рд░реВ, рдЕрдиреНрддрд░рд╛рд▓ рд╡реНрдпрд╛рдкрд╛рд░

рдЕрдШрд┐рд▓реНрд▓рд╛ рджреБрдИ рд▓реЗрдЦрд╣рд░реВрдорд╛ рд╣рд╛рдореАрд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддрд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдпреМрдВ рд▓рд┐рд▓рд╛рдореА рд╣реЛрд▓реНрдб рдЧрд░реНрди рд░ рд╡рдлрд╛рджрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирд░ рдорджреНрджрдд рдкрдирд┐ рд╡рд┐рддреНрддреАрдп рд╕рд╛рдзрдирдХреЛ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреЗ.

рдЕрдм рд╣рд╛рдореА рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд╛ рдзреЗрд░реИ рдХреЗрд╕рд╣рд░реВ рд╣реЗрд░реНрдиреЗрдЫреМрдВ, рд╕рдореНрдкрддреНрддрд┐ рдлреНрд░рд┐рдЬ рдЧрд░реНрдиреЗ рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдорд╛ рд▓реЗрдирджреЗрдирдорд╛ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд╕рд╣рд┐рддред

Waves Smart Assets рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдореНрдкрддреНрддрд┐рд╣рд░реВрдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдУрднрд░рд▓реЗ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддрд╛рд╣рд░реВ рдЬрд╕реНрддреИ рдореЗрдХрд╛рдирд┐рдХрд╣рд░реВ рдкрдЫреНрдпрд╛рдЙрдБрджреИред рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд▓реЗрдирджреЗрди рдкрд╣рд┐рд▓реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐ рдЧрд░рд┐рдиреЗрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдорд╛рддреНрд░ рдмреНрд▓рдХрдЪреЗрди рджреНрд╡рд╛рд░рд╛ред

рдпреЛ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐ рд░ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддрд╛рд╣рд░реВ рдмреАрдЪ рдирд┐рдореНрди рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫ:

  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
}

рдЬрд╛рд░реАрдХрд░реНрддрд╛рдХреЛ рдЕрдиреБрдорддрд┐ рд▓рд┐рдПрд░ рдкрдард╛рдЙрдиреЗ

рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрдкрд╛рдИрдВрд▓реЗ рдЬрд╛рд░реАрдХрд░реНрддрд╛рдХреЛ рдЕрдиреБрдорддрд┐рдорд╛ рдорд╛рддреНрд░ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐ рдкрдард╛рдЙрдиреЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред (рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛/рдЛрдг рд▓реЗрдмрд▓)ред рдЬрд╛рд░реАрдХрд░реНрддрд╛рд▓реЗ рдЖрдлреНрдиреЛ рдЦрд╛рддрд╛рдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рд▓реЗрдирджреЗрди 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
}

рдУрд░реЗрдХрд▓ рдмрд╛рдЯ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкрд╛рд░

рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдкрддреНрддрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рднрд░рдкрд░реНрджреЛ рдУрд░реЗрдХрд▓рдХреЛ рд░рд╛рдЬреНрдпрдорд╛ рддреЛрдХрд┐рдПрдХреЛ рдореВрд▓реНрдпрдорд╛ рдорд╛рддреНрд░ рд╡реНрдпрд╛рдкрд╛рд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рдпрд╕реНрддреЛ рд▓рд┐рдкрд┐ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЫ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди