рд╡рд┐рддреНрддреАрдп рд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд▓рд╣рд░реЛрдВ рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЛрдВ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЫрд╡рд┐

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

рд╡рд┐рдХрд▓реНрдк

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

рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

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

рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯ рдХреЗ рдХреЛрдб рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддрд┐рдд рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рд░реЛрдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯ рдХреЛрдб:

let expirationStart = 100000 let expirationEnd = 101440 match tx { case some : ExchangeTransaction | TransferTransaction => height > expirationStart && height <= expirationEnd case _ => false } 

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

рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЗ рдХреЗ рдХреЛрдб рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдВрддрд┐рдо рдЦрд░реАрдж-рдмрд┐рдХреНрд░реА рдЕрдзрд┐рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА ExchangeTransaction рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧреА рдареАрдХ рдЙрд╕реА рдЗрдХрд╛рдИ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЦрд░реАрджрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рднреЗрдЬреА рдереАред рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрд░реАрджрд╛рд░ рдХреЛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА DataTransaction рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рд╡рд┐рдирд┐рдордп рд╕рджрд╕реНрдп рджреЛрд╣рд░реЗ рдЦрд░реНрдЪ рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред рдЗрд╕ DataTransaction рдореЗрдВ, рдЦрд░реАрджрд╛рд░ рдЕрдкрдиреЗ рдкрддреЗ рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдХреБрдВрдЬреА рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╕рджрд╕реНрдп рдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдореВрд▓реНрдп рд╣реИ, рдпрд╛рдиреА рд╡рд╣ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╡рд╣ рдЦрд░реАрдж рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддрд╛ рдХреЛрдб:

 #         #  sellPrice    expirationStart  expirationEnd let expirationStart = 100000 let expirationEnd = 101440 let sellPrice = 10000 let amountAsset = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' let priceAsset = base58'9jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' #ID - let optionsAsset = base58'7jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' #     let this = extract(tx.sender) match tx { case dataTx : DataTransaction => #    -   (ID ) let units = extract(getInteger(dataTx.data, dataTx.data[0].key)) # -    let e = transactionById(dataTx.proofs[2]) # match e { case transferTx : TransferTransaction => #,       (transferTx.recipient == this) && #,         ID dataTx.data[0].key == toBase58String(transferTx.sender.bytes) && sigVerify(dataTx.bodyBytes, dataTx.proofs[0], transferTx.senderPublicKey) && #,         (units == transferTx.amount) && #,     - (transferTx.assetId == optionsAsset) case _ => false } && size(dataTx.data) == 1 && !isDefined(getInteger(this, dataTx.data[0].key)) && height > expirationStart && height <= expirationEnd case order : Order => #,         let correctAssetPair = order.assetPair.amountAsset == amountAsset && order.assetPair.priceAsset == priceAsset let correctPrice = order.price == sellPrice # -   let d = transactionById(order.proofs[2]) match d{ case dataTx : DataTransaction => let buyOrderSender = dataTx.data[0].key toBase58String(order.sender.bytes) == buyOrderSender && order.amount == extract(getInteger(dataTx.data, buyOrderSender)) case _ => false } && order.sender == this && correctAssetPair && correctPrice && height > expirationStart && height <= expirationEnd case _ => false } 

рд╕реНрдорд╛рд░реНрдЯ рдЕрдХрд╛рдЙрдВрдЯ рдлреНрдпреВрдЪрд░реНрд╕

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╛рдпрджрд╛ (рд╡рд╛рдпрджрд╛ рдЕрдиреБрдмрдВрдз) рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдкрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░реАрджрд╛рд░ рдХрд╛ рджрд╛рдпрд┐рддреНрд╡ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╛рдпрджрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣рд╛рдВ, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╡рд╛рдпрджрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред

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

рд╕реНрдорд╛рд░реНрдЯ рдПрд╕реЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рднреА TransferTransaction рдФрд░ ExchangeTransaction рдПрд╕реЗрдЯ рдлреНрдпреВрдЪрд░реНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддрднреА рдордВрдЬреВрд░реА рджреЗрддрд╛ рд╣реИ рдЬрдм рдЦрд╝рд░реАрдж рд╕рджрд╕реНрдп рдиреЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╕рджрд╕реНрдп рд╕реЗ рдПрд╕реЗрдЯ рдлреНрдпреВрдЪрд░реНрд╕ рдХреА рднрд╡рд┐рд╖реНрдп рдХреА рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдбрд░ рдмрдирд╛рдпрд╛ рд╣реИред

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

рдлрд┐рд▓рд╣рд╛рд▓, RIDE рдореЗрдВ рд▓реЗрди-рджреЗрди рдмрд╛рдЗрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЦрд╛рддрд╛ / рдПрд╕реНрдХреНрд░реЛ

рдПрдХ рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓рд╛ рдЦрд╛рддрд╛ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдХреЗрд╡рд▓ рддрднреА рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЪрд╛рд░ рдореЗрдВ рд╕реЗ рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ)ред RIDE рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдЦрд╛рддреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓реЗрди-рджреЗрди рдХреЗ рдкреНрд░рдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрд╕реНрдХреНрд░реЛ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдзрди рддрдм рддрдХ рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рдордЭреМрддреЗ рдХреЗ рдкрдХреНрд╖рдХрд╛рд░ рдЕрдкрдиреЗ рджрд╛рдпрд┐рддреНрд╡реЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

 let alicePubKey = base58'5AzfA9UfpWVYiwFwvdr77k6LWupSTGLb14b24oVdEpMM' let bobPubKey = base58'2KwU4vzdgPmKyf7q354H9kSyX9NZjNiq4qbnH2wi2VDF' let cooperPubKey = base58'GbrUeGaBfmyFJjSQb9Z8uTCej5GzjXfRDVGJGrmgt5cD' #,     let aliceSigned = if(sigVerify(tx.bodyBytes, tx.proofs[0], alicePubKey)) then 1 else 0 let bobSigned = if(sigVerify(tx.bodyBytes, tx.proofs[1], bobPubKey)) then 1 else 0 let cooperSigned = if(sigVerify(tx.bodyBytes, tx.proofs[2], cooperPubKey)) then 1 else 0 #        aliceSigned + bobSigned + cooperSigned >= 2 

рдЯреЛрдХрди-рдкреНрд░рдмрдВрдзрд┐рдд рд░рдЬрд┐рд╕реНрдЯреНрд░реА (TCR)

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

рдЯреЛрдХрди рдзрд╛рд░рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЯреЛрдХрди рдХреНрдпреВрд░реЗрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА (TCR) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдмреНрд▓реЙрдХрдЪреИрди рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред

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

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдореЗрдВ рдЯреЛрдХрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ ("рдЪреБрдиреМрддреА" рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди) рдХреБрдВрдЬреА = рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐_рдирд╛рдо рд░рд╛рдЬреНрдп рдХреА рдХреБрдВрдЬреА рдХреЗ рджреНрд╡рд╛рд░рд╛, рдХреЗрд╡рд▓ рддрднреА рдЬрдм рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп = 0 рд╣реЛред

рд╕рд╛рде рд╣реА, рд╡реЙрд▓реЗрдЯ рдореЗрдВ рдореМрдЬреВрдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЯреЛрдХрди рдХрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдВрддреБрд▓рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж рдорддрджрд╛рди рдХреА рдЕрд╡рдзрд┐ рдЖрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╡реЙрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░, 1 рд╕реЗ 10. рддрдХ рдХреА рд░реЗрдЯрд┐рдВрдЧ рджреЗрдХрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╛рдЬрд╝реЗрдВ рдлреЙрд░реНрдо user_address + рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдИ рдЬрд╛рддреА рд╣реИрдВред

 let asset = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' let addingStartHeight = 1000 let votingStartHeight = 2000 let votingEndHeight = 3000 let this = extract(tx.sender) #     let address = addressFromPublicKey(tx.proofs[1]) match tx { case t: DataTransaction => if(height > addingStartHeight) then( if(height < votingStartHeight) then( #adding #,        let hasTokens = assetBalance(address, asset) > 0 size(t.data) == 1 #,        && !isDefined(getInteger(this, toBase58String(asset))) #,   -    0 && extract(getInteger(t.data, toBase58String(asset))) == 0 && hasTokens ) else( if(height < votingEndHeight) then ( #voting #          let currentAmount = extract(getInteger(this, toBase58String(asset))) let newAmount = extract(getInteger(t.data, toBase58String(asset))) let betString = toBase58String(address.bytes) + toBase58String(asset) #,          let noBetBefore = !isDefined(getInteger(this, betString)) let isBetCorrect = extract(getInteger(t.data, betString)) > 0 && extract(getInteger(t.data, betString)) <= 10 #,       let hasTokens = assetBalance(address, asset) > 0 #    size(t.data) == 2 && isDefined(getInteger(this, toBase58String(asset))) && newAmount == currentAmount + 1 && noBetBefore && isBetCorrect && hasTokens ) else false ) && sigVerify(tx.bodyBytes, tx.proofs[0], tx.proofs[1]) ) else false case _ => false } 

рд╕рджрд╕реНрдпрддрд╛ рд╢реБрд▓реНрдХ

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдПрдХ рдЙрддреНрдкрд╛рдж рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - "рдорд╛рд╕рд┐рдХ рд╢реБрд▓реНрдХ"ред
рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдзрдирд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдПрдХ ID TransferTransaction рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддрд╛ (рд▓реЗрди-рджреЗрди рдкреНрд░рдорд╛рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЦрд╛рддрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ {рдХреБрдВрдЬреА: рдкрддрд╛, рдореВрд▓реНрдп: рд╕рддреНрдп } рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрддреНрдкрд╛рдж рдпрд╛ рд╕реЗрд╡рд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

 let subscriptionPeriod = 44000 let signature = tx.proofs[0] let pk = tx.proofs[1] let requiredAmount = 100000 let this = extract(tx.sender) match tx { case d: DataTransaction => #    let lastPaymentHeight = extract(getInteger(this, d.data[0].key + "_lastPayment")) size(d.data) == 1 && d.data[0].value == "false" && lastPaymentHeight + subscriptionPeriod < height || ( let address = d.data[0].key # -  ID,    let ttx = transactionById(d.proofs[0]) size(d.data) == 2 && d.data[0].value == "true" && d.data[1].key == address + "_lastPayment" && match ttx { case purchase : TransferTransaction => d.data[1].value == transactionHeightById(purchase.id) && toBase58String(purchase.sender.bytes) == address && purchase.amount == requiredAmount && purchase.recipient == this #,   waves && !isDefined(purchase.assetId) case _ => false } ) case _ => false } 

рд╡реЛрдЯ

рдмреНрд▓реЙрдХрдЪреИрди рдкрд░ рд╡реЛрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд░рд╛рдЬрджреВрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд░рд╛рдЬрджреВрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЛрдЯ рд╣реЛрдЧрд╛ред рдЦрд╛рддрд╛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╡реЛрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреЛ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ "рд╡реЛрдЯрд┐рдВрдЧ" рдЯреЛрдХрди рдЦрд░реАрджреЗ рд╣реИрдВред рдкреНрд░рддрд┐рднрд╛рдЧреА (рдХреА, рд╡реИрд▓реНрдпреВ) = (buyTransactionId, buyTransactionId) рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ DataTransaction рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдЕрдкрдиреЗ рдкрддреЗ рдФрд░ рдорддрджрд╛рди рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ DataEntry рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд╛рдкрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рд╣реА рдорддрджрд╛рди рд╕рдВрднрд╡ рд╣реИред

 let asset = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' let address = addressFromPublicKey(tx.proofs[1]) let votingStartHeight = 2000 let votingEndHeight = 3000 let this = extract(tx.sender) match tx { case t: DataTransaction => (height > votingStartHeight && height < votingEndHeight) && #,      sigVerify(tx.bodyBytes, tx.proofs[0], tx.proofs[1]) && #,         if (t.data[0].key == toBase58String(address.bytes)) then ( #       let purchaseTx = transactionById(t.proofs[7]) match purchaseTx { case purchase : TransferTransaction => let correctSender = purchase.sender == t.sender let correctAsset = purchase.assetId == asset let correctPrice = purchase.amount == 1 let correctProof = extract(getBinary(this, toBase58String(purchase.id))) == t.id correctSender && correctAsset && correctPrice && correctProof case _ => false } ) else size(t.data) == 1 && !isDefined(getBinary(this, t.data[0].key)) case _ => false } 

рд╡рд┐рдирд┐рдордп рдХрд╛ рдмрд┐рд▓

рд╡рд┐рдирд┐рдордп рдмрд┐рд▓ рдПрдХ рд▓рд┐рдЦрд┐рдд рджрд╛рдпрд┐рддреНрд╡ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдХ рдкрдХреНрд╖ рдХреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рдпрд╛ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддрд┐рдерд┐ рдкрд░ рдЕрдиреНрдп рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рд╢рд┐ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдмрд┐рд▓ рдХреЗ рднреБрдЧрддрд╛рди рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

 let expiration = 100000 let amount = 10 let asset = base58'9jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf' let Bob = Address(base58'3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8') let Alice = Address(base58'3PNX6XwMeEXaaP1rf5MCk8weYeF7z2vJZBg') match tx { case t: TransferTransaction => (t.assetId == asset)&& (t.amount == amount)&& (t.sender == Bob)&& (t.recipient == Alice)&& (sigVerify(t.bodyBytes, t.proofs[0], t.senderPublicKey))&& (height >= expiration) case _ => false } 

рдЬрдорд╛

рдЬрдорд╛ - рдХреБрдЫ рд╢рд░реНрддреЛрдВ (рдЕрд╡рдзрд┐, рдкреНрд░рддрд┐рд╢рдд) рдкрд░ рдПрдХ рдмреИрдВрдХ рдореЗрдВ рдзрди рдХреА рдирд┐рдпреБрдХреНрддрд┐ред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмреИрдВрдХ рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЦрд╛рддреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд▓реЙрдХреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рдж, рдЬреЛ рдЬрдорд╛ рдХреА рдЕрд╡рдзрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреИрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреНрд▓реЙрдХ (рдЕрдВрддрд┐рдо рдКрдВрдЪрд╛рдИ) рдХреА рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рд╕реЗ рдкреИрд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

heightUnit - рд╕рдордп рдХреА рдПрдХ рдЗрдХрд╛рдИ рдореЗрдВ рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╣реАрдиреЗ, рд╡рд░реНрд╖, рдЖрджрд┐)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЬреЛрдбрд╝реА (рдХреБрдВрдЬреА, рдореВрд▓реНрдп) = (initialTransferTransaction, FutureDataTransaction) рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрдорд╛ рдХреА рд░рд╛рд╢рд┐ рдФрд░ рдЬрдорд╛ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрд░реНрдЬрд┐рдд рдмреНрдпрд╛рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде TransferTransaction рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╡рд░реНрддрдорд╛рди TransferTransaction рд╕рдмреВрдд рдореЗрдВ рдирд┐рд╣рд┐рдд рдореВрд▓ TransferTransaction рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдбрд┐рдкреЙрдЬрд╝рд┐рдЯрд╡рд╛рдЗрдЬрд╝рд░ рдбрд┐рдкреЙрдЬрд╝рд┐рдЯ рдХреЗ рд╢реЗрдпрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рдпрджрд┐ рдбрд┐рдкреЙрдЬрд╝рд┐рдЯ 10% рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдкреЙрдЬрд╝рд┐рдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ 0.1 рд╣реИ, рдФрд░ рдбрд┐рдкреЙрдЬрд╝рд┐рдЯрд╡рд╛рдЗрдЬрд╝рд░ = 1 / 0.1 = 10)ред

 let depositDivisor = 10 let heightUnit = 1000 let finalHeight = 100000 let this = extract(tx.sender) match tx { case e : TransferTransaction => #    ID     let depositHeight = extract(transactionHeightById(e.proofs[7])) #   let purchaseTx = transactionById(e.proofs[7]) match purchaseTx { case deposit : TransferTransaction => let correctSender = deposit.sender == e.sender #,        +  let correctAmount = deposit.amount + deposit.amount / depositDivisor * (height - depositHeight) / heightUnit == e.amount let correctProof = extract(getBinary(this, toBase58String(deposit.id))) == e.id correctSender && correctProof && correctAmount case _ => false } && finalHeight <= height case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) } 

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

Source: https://habr.com/ru/post/hi443836/


All Articles