рд╡реЗрд╡реНрд╕ рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯреНрд╕: рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдФрд░ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ, рдЕрдВрддрд░рд╛рд▓ рдЯреНрд░реЗрдбрд┐рдВрдЧ

рд╡реЗрд╡реНрд╕ рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯреНрд╕: рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдФрд░ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ, рдЕрдВрддрд░рд╛рд▓ рдЯреНрд░реЗрдбрд┐рдВрдЧ

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

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

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

рд╕реНрдорд╛рд░реНрдЯ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдВрддрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ:

  1. рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯ рдХреЗ рдХреЛрдб рдореЗрдВ, рд╕рдмреВрддреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рд╣рдордиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА)ред рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ).
  2. рд╕реНрдорд╛рд░реНрдЯ рдЕрдХрд╛рдЙрдВрдЯ рдХреЛрдб рдореЗрдВ, рдЖрдк рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рддрднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдкрдХрд╛ рдЕрдХрд╛рдЙрдВрдЯ рдореИрдЪрд░ рдЕрдХрд╛рдЙрдВрдЯ рд╣реЛред рдЕрдиреНрдпрдерд╛, рдХреЗрд╡рд▓ рдСрд░реНрдбрд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯ рдХреЛрдб рдореЗрдВ, рдЖрдк рд╕реАрдзреЗ рдСрд░реНрдбрд░ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЖрдк рдПрдХреНрд╕рдЪреЗрдВрдЬрдЯреНрд░рд╛рдВрдЬрд╝реЗрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕рд╕реЗ рдСрд░реНрдбрд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
  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
}

рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рд┐рдХреНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рдордп рдХрд░реЗрдВ

рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рд┐рдХреНрдХреЛрдВ рдХреЗ рдмрджрд▓реЗ рд╡рд┐рдирд┐рдордп рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдмрд┐рдЯрдХреЙрдЗрди рдХреЗ рд╡рд┐рдирд┐рдордп рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ