tx · 955pwN2gQ3KaUdziNw2bwgV3tEjTWLRwvT2BbqbeG6Qz

3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM:  -0.01000000 Waves

2023.11.02 18:09 [2825880] smart account 3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM > SELF 0.00000000 Waves

{ "type": 13, "id": "955pwN2gQ3KaUdziNw2bwgV3tEjTWLRwvT2BbqbeG6Qz", "fee": 1000000, "feeAssetId": null, "timestamp": 1698937872714, "version": 2, "chainId": 84, "sender": "3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM", "senderPublicKey": "6ybktvseycJDGHTjJm3tz9iT2SKaTNtLLCZsJZRemtoM", "proofs": [ "4ihaRfiFspC72nFWnUBNWrPEFmCfW4Afj5bAqMMaog8bhrv7kMSJ92zH9c44GE2j1SBRiyPPiPR9Xfu95VKa5Ga2" ], "script": "base64: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dE51bGxpZmllcktleQEJbnVsbGlmaWVyCQCsAgICAk46CQDYBAEFCW51bGxpZmllcgENZ2V0RGVwb3NpdEtleQEHYWRkcmVzcwkArAICAgJEOgkA2AQBBQdhZGRyZXNzAAxwb29sSW5kZXhLZXkCCVBvb2xJbmRleAASYWxsTWVzc2FnZXNIYXNoS2V5Ag9BbGxNZXNzYWdlc0hhc2gAC29wZXJhdG9yS2V5AgpPcGVyYXRvclBrAQd0YWtlRXh0AwF2BGZyb20BbgkAyQECCQDKAQIFAXYFBGZyb20FAW4BDHNwZW5kRGVwb3NpdAIHYWRkcmVzcwZhbW91bnQECmN1cnJlbnRLZXkJAQ1nZXREZXBvc2l0S2V5AQgFB2FkZHJlc3MFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJ8IAQUKY3VycmVudEtleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUGYW1vdW50AwkAZgIAAAUGYW1vdW50CQACAQIbQ2FuJ3Qgc3BlbmQgbmVnYXRpdmUgYW1vdW50AwkAZgIAAAUJbmV3QW1vdW50CQACAQISTm90IGVub3VnaCBiYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpjdXJyZW50S2V5BQluZXdBbW91bnQFA25pbAENZ2V0T3BlcmF0b3JQawAEByRtYXRjaDAJAKEIAQULb3BlcmF0b3JLZXkDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYQUHJG1hdGNoMAUBYQUHb3duZXJQawQBaQENc2V0T3BlcmF0b3JQawECcGsDCQECIT0CCQDIAQEFAnBrACAJAAIBAilPcGVyYXRvciBwdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMgbG9uZwkAzAgCCQELQmluYXJ5RW50cnkCBQtvcGVyYXRvcktleQUCcGsFA25pbAFpAQdkZXBvc2l0AAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkCQACAQIjT25seSBXQVZFUyBpcyBhbGxvd2VkIGF0IHRoZSBtb21lbnQECmN1cnJlbnRLZXkJAQ1nZXREZXBvc2l0S2V5AQgIBQFpBmNhbGxlcgVieXRlcwQNY3VycmVudEFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBQpjdXJyZW50S2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGQCBQ1jdXJyZW50QW1vdW50CAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKY3VycmVudEtleQUJbmV3QW1vdW50BQNuaWwBaQEId2l0aGRyYXcBBmFtb3VudAQKY3VycmVudEtleQkBDWdldERlcG9zaXRLZXkBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFCmN1cnJlbnRLZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAECW5ld0Ftb3VudAkAZQIFDWN1cnJlbnRBbW91bnQFBmFtb3VudAMJAGYCAAAFBmFtb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCAAAFCW5ld0Ftb3VudAkAAgECEk5vdCBlbm91Z2ggYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKY3VycmVudEtleQUJbmV3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQR1bml0BQNuaWwBaQEIdHJhbnNhY3QBAnR4BAludWxsaWZpZXIJAMkBAgUCdHgAIAQJb3V0Q29tbWl0CQEHdGFrZUV4dAMFAnR4ACAAIAQHYXNzZXRJZAkBB3Rha2VFeHQDBQJ0eABAACAEBWRlbHRhCQEHdGFrZUV4dAMFAnR4AGAAIAQMbmF0aXZlQW1vdW50CQCxCQEJAMkBAgUFZGVsdGEACAQMbmF0aXZlRW5lcmd5CQCeAwEJAQd0YWtlRXh0AwUFZGVsdGEACAAOBAd0eEluZGV4CQCxCQEJAMsBAgED0000CQEHdGFrZUV4dAMFBWRlbHRhABYABgQHX3Bvb2xJZAkBB3Rha2VFeHQDBQVkZWx0YQAcAAMEB3R4UHJvb2YJAQd0YWtlRXh0AwUCdHgAgAEAgAIECXRyZWVQcm9vZgkBB3Rha2VFeHQDBQJ0eACAAwCAAgQJcm9vdEFmdGVyCQEHdGFrZUV4dAMFAnR4AIAFACAEBnR4VHlwZQkAsQkBCQDLAQIBCdNNNNNNNNNNNAkBB3Rha2VFeHQDBQJ0eACgBQACBAhmdWxsTWVtbwkAygECBQJ0eACiBQQLJHQwNTk5NjYzNDQDCQAAAgUGdHhUeXBlAAAED2RlcG9zaXREYXRhU2l6ZQkAZAIAIABABAlkZXBvc2l0UGsJAM0BAgkAzAECBQhmdWxsTWVtbwUPZGVwb3NpdERhdGFTaXplAEAEEGRlcG9zaXRTaWduYXR1cmUJAMwBAgUIZnVsbE1lbW8AQAkAlQoDCQDNAQIFCGZ1bGxNZW1vBQ9kZXBvc2l0RGF0YVNpemUFCWRlcG9zaXRQawUQZGVwb3NpdFNpZ25hdHVyZQkAlQoDBQhmdWxsTWVtbwUEdW5pdAUEdW5pdAQEbWVtbwgFCyR0MDU5OTY2MzQ0Al8xBAlkZXBvc2l0UGsIBQskdDA1OTk2NjM0NAJfMgQQZGVwb3NpdFNpZ25hdHVyZQgFCyR0MDU5OTY2MzQ0Al8zBANmZWUJALEJAQkAyQECBQRtZW1vAAgED2FsbE1lc3NhZ2VzSGFzaAkBC3ZhbHVlT3JFbHNlAgkAoQgBBRJhbGxNZXNzYWdlc0hhc2hLZXkJAJ0DAQkAtgIBAAAECG1lbW9IYXNoCQD1AwEFBG1lbW8EBmhhc2hlcwkAywECBQ9hbGxNZXNzYWdlc0hhc2gFCG1lbW9IYXNoBBJuZXdBbGxNZXNzYWdlc0hhc2gJAPUDAQUGaGFzaGVzBApyb290QmVmb3JlCQELdmFsdWVPckVsc2UCCQChCAEJAQpnZXRSb290S2V5AQUHdHhJbmRleAULaW5pdGlhbFJvb3QDCQAAAgUKcm9vdEJlZm9yZQUKcm9vdEJlZm9yZQQJcG9vbEluZGV4CQELdmFsdWVPckVsc2UCCQCfCAEFDHBvb2xJbmRleEtleQAABAhwb29sUm9vdAkBC3ZhbHVlT3JFbHNlAgkAoQgBCQEKZ2V0Um9vdEtleQEFCXBvb2xJbmRleAULaW5pdGlhbFJvb3QED251bGxpZmllckV4aXN0cwQHJG1hdGNoMAkAoQgBCQEPZ2V0TnVsbGlmaWVyS2V5AQUJbnVsbGlmaWVyAwkAAQIFByRtYXRjaDACBFVuaXQEAWEFByRtYXRjaDAHBgQOdHJhbnNmZXJJbnB1dHMJAMsBAgkAywECCQDLAQIJAMsBAgUIbWVtb0hhc2gFCW51bGxpZmllcgUJb3V0Q29tbWl0BQVkZWx0YQUIbWVtb0hhc2gECnRyZWVJbnB1dHMJAMsBAgkAywECBQhwb29sUm9vdAUJcm9vdEFmdGVyBQlvdXRDb21taXQEB2RhdGFPcHMJAMwIAgkBC0JpbmFyeUVudHJ5AgkBCmdldFJvb3RLZXkBBQd0eEluZGV4BQlyb290QWZ0ZXIJAMwIAgkBC0JpbmFyeUVudHJ5AgkBD2dldE51bGxpZmllcktleQEFCW51bGxpZmllcgkA9QMBCQDLAQIFCW91dENvbW1pdAUFZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIFDHBvb2xJbmRleEtleQkAZAIFCXBvb2xJbmRleACAAQkAzAgCCQELQmluYXJ5RW50cnkCBRJhbGxNZXNzYWdlc0hhc2hLZXkFEm5ld0FsbE1lc3NhZ2VzSGFzaAUDbmlsBAV0eE9wcwQHJG1hdGNoMAUGdHhUeXBlAwkAAAIAAAUHJG1hdGNoMAQOZGVwb3NpdFBrVmFsdWUJAQV2YWx1ZQEFCWRlcG9zaXRQawQOZGVwb3NpdEFkZHJlc3MJAKcIAQUOZGVwb3NpdFBrVmFsdWUDCQBmAgAABQxuYXRpdmVBbW91bnQJAAIBAh1DYW4ndCBkZXBvc2l0IG5lZ2F0aXZlIGFtb3VudAMJAQEhAQkAxBMDCQDLAQIFCW51bGxpZmllcgUOZGVwb3NpdFBrVmFsdWUJAQV2YWx1ZQEFEGRlcG9zaXRTaWduYXR1cmUFDmRlcG9zaXRQa1ZhbHVlCQACAQIZSW52YWxpZCBkZXBvc2l0IHNpZ25hdHVyZQkBDHNwZW5kRGVwb3NpdAIFDmRlcG9zaXRBZGRyZXNzCQBoAgUMbmF0aXZlQW1vdW50BQtkZW5vbWluYXRvcgMJAAACAAEFByRtYXRjaDADCQECIT0CBQxuYXRpdmVBbW91bnQAAAkAAgECKE5hdGl2ZSBhbW91bnQgbXVzdCBiZSB6ZXJvIGZvciB0cmFuc2ZlcnMFA25pbAMJAAACAAIFByRtYXRjaDAEDndpdGhkcmF3QW1vdW50CQBoAgkAsQkBCQEHdGFrZUV4dAMFBG1lbW8ACAAIBQtkZW5vbWluYXRvcgMJAGYCBQ53aXRoZHJhd0Ftb3VudAAACQACAQIgV2l0aGRyYXcgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFDndpdGhkcmF3QW1vdW50BQR1bml0BQNuaWwJAAIBAg9Vbmtub3duIHR4IHR5cGUEBmZlZU9wcwMJAGYCBQNmZWUAAAQIdG90YWxGZWUJAGgCBQNmZWUFC2Rlbm9taW5hdG9yBApvcGVyYXRvclBrCQENZ2V0T3BlcmF0b3JQawAED29wZXJhdG9yQWRkcmVzcwkApwgBBQpvcGVyYXRvclBrCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD29wZXJhdG9yQWRkcmVzcwUDZmVlBQR1bml0BQNuaWwFA25pbAMJAGYCBQd0eEluZGV4BQlwb29sSW5kZXgJAAIBAhlJbnZhbGlkIHRyYW5zYWN0aW9uIGluZGV4AwkBASEBCQCWEwMFCnRyYW5zZmVyVmsFB3R4UHJvb2YFDnRyYW5zZmVySW5wdXRzCQACAQITVHggcHJvb2YgaXMgaW52YWxpZAMJAQEhAQkAlBMDBQZ0cmVlVmsFCXRyZWVQcm9vZgUKdHJlZUlucHV0cwkAAgECFVRyZWUgcHJvb2YgaXMgaW52YWxpZAMFD251bGxpZmllckV4aXN0cwkAAgECDERvdWJsZSBzcGVuZAkAzggCCQDOCAIFBXR4T3BzBQdkYXRhT3BzBQZmZWVPcHMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQBZAUHJG1hdGNoMAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUHb3duZXJQawMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQBZAUHJG1hdGNoMAQHJG1hdGNoMQgFAWQIZnVuY3Rpb24DCQAAAgINc2V0T3BlcmF0b3JQawUHJG1hdGNoMQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUHb3duZXJQawMJAAACAgh0cmFuc2FjdAUHJG1hdGNoMQQKb3BlcmF0b3JQawkBDWdldE9wZXJhdG9yUGsACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQpvcGVyYXRvclBrCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BzqUbK4=", "height": 2825880, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9bgCno2uV9NBNaan1MSRAjVzoY9Yidpe6MKPf2XUEbae Next: 5yNpcWxTAPstoVdiyMwVvrtgUcuVY7k1tys44B7KNxJ Diff:
OldNewDifferences
102102
103103 @Callable(i)
104104 func transact (tx) = {
105- let operatorPk = getOperatorPk()
106- let operatorAddress = addressFromPublicKey(operatorPk)
107- let nullifier = takeExt(tx, 0, 32)
105+ let nullifier = take(tx, 32)
108106 let outCommit = takeExt(tx, 32, 32)
109107 let assetId = takeExt(tx, 64, 32)
110108 let delta = takeExt(tx, 96, 32)
111- let nativeAmount = toInt(takeExt(delta, 0, 8))
112- let nativeEnergy = toInt(takeExt(delta, 8, 14))
113- let txIndex = toInt(takeExt(delta, 22, 6))
109+ let nativeAmount = toInt(take(delta, 8))
110+ let nativeEnergy = toBigInt(takeExt(delta, 8, 14))
111+ let txIndex = toInt((base58'2DyVD' + takeExt(delta, 22, 6)))
114112 let _poolId = takeExt(delta, 28, 3)
115113 let txProof = takeExt(tx, 128, 256)
116114 let treeProof = takeExt(tx, 384, 256)
117115 let rootAfter = takeExt(tx, 640, 32)
118- let txType = toInt(takeExt(tx, 672, 2))
119- let $t060316423 = if ((txType == 0))
116+ let txType = toInt((base58'3gznry4ApWXU7' + takeExt(tx, 672, 2)))
117+ let fullMemo = drop(tx, 674)
118+ let $t059966344 = if ((txType == 0))
120119 then {
121- let fullMemo = drop(tx, 674)
122120 let depositDataSize = (32 + 64)
123- let depositPk = dropRight(takeRight(tx, depositDataSize), 64)
124- let depositSignature = takeRight(tx, 64)
125- $Tuple3(takeExt(tx, 674, (size(fullMemo) - depositDataSize)), depositPk, depositSignature)
121+ let depositPk = dropRight(takeRight(fullMemo, depositDataSize), 64)
122+ let depositSignature = takeRight(fullMemo, 64)
123+ $Tuple3(dropRight(fullMemo, depositDataSize), depositPk, depositSignature)
126124 }
127- else $Tuple3(drop(tx, 674), unit, unit)
128- let memo = $t060316423._1
129- let depositPk = $t060316423._2
130- let depositSignature = $t060316423._3
131- let fee = toInt(takeExt(memo, 0, 8))
125+ else $Tuple3(fullMemo, unit, unit)
126+ let memo = $t059966344._1
127+ let depositPk = $t059966344._2
128+ let depositSignature = $t059966344._3
129+ let fee = toInt(take(memo, 8))
132130 let allMessagesHash = valueOrElse(getBinary(allMessagesHashKey), toBytes(toBigInt(0)))
133131 let memoHash = keccak256(memo)
134132 let hashes = (allMessagesHash + memoHash)
165163 else nil
166164 else if ((2 == $match0))
167165 then {
168- let withdrawAmount = (toInt(takeExt(memo, 8, 16)) * denominator)
166+ let withdrawAmount = (toInt(takeExt(memo, 8, 8)) * denominator)
169167 if ((withdrawAmount > 0))
170168 then throw("Withdraw amount must be positive")
171169 else [ScriptTransfer(i.caller, -(withdrawAmount), unit)]
175173 let feeOps = if ((fee > 0))
176174 then {
177175 let totalFee = (fee * denominator)
176+ let operatorPk = getOperatorPk()
177+ let operatorAddress = addressFromPublicKey(operatorPk)
178178 [ScriptTransfer(operatorAddress, fee, unit)]
179179 }
180180 else nil
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let ownerPk = base58'6ybktvseycJDGHTjJm3tz9iT2SKaTNtLLCZsJZRemtoM'
55
66 let denominator = 100000000
77
88 let transferVk = base64'SYrHhkeDrw+dFMD6Yr/Vrvr2pPyDHCWoMO8w9LxFaQABrVkxqK1PRfgZw0t9bDNsxFEJNHhErc9XHTkkU1OiEYYWiz2VdqW6jQewS86Z3lshxW6Fdf1MU0MDPt1NoikSf2YEIBvI+gscAfqmtvJxZbkVA/Lrr7r+HyVUoZGt1QB46Zv9umeZBwmTWiDHaLPPgOVOWQAVYLMCwpEzEzIdF2C8KzI/CsCeCv3raf56RXmhFAWuJCbMtO6My12PxFQDRv98IWP0FGhY/m6sQ/9r58GInq4bSVYWKlGucbXbayaYF35Fp3o6VaRXVWzJ6FesrH8dS+DxeadscnAN4IQEB4J5YcwZvAX/fjE5JEHNC4WrNfiUe+fe6FAQ4ttHlRgKS+PbN1butH1dDkfQkBKC5Om0WI3D45eaRbN6Taxt7ha5xCUwGVh0LQ+Wf/j9bY+un1Cwur9wx+HmB6PPGC2pEFLSQhkZjtvNJTs6e1c0i3FAOhFDSNqEjcqORSer2aUGdJMXhB6YEv/XcumUDyQbem+f0wX2qOgtwVFLtGOq7S65sHzNcHpdJP/htHnhqkQErwmjDG/JTs9oc1mu5jOsGAYAAAAovMt7vHGhKq+EA+6JlSFfVMj7aU/V67EpBI64f73xJKTpnqCOEMhaQMegFHTJ/W5Cp9iTd4i3AqnoTQj+L1UOXKmddpvHhg0WJHFbosaPhv8EY7+cAaHmn1JPO30BBRPqTsN53lfykgE2oF9vGPyU4u0Y3Oh8YG2p7I2Oz+NaKkzrJo2SamjhbLOofkEX14HbjdZLWD5T07/J4qfaYb8Eervvcr/H2IS0GJ7UFTdqJGwWa/1IZZF6RN8rj5y8xg2BoioqwyhpS3I7gROorvBg6hMSFh4eYXROfzISFgWiF5eouqLDFV3P8geZwxSRDnzOaDyCe3Y7EaxhPBjHbtYA/DLJnfWLC6H6AnAA+fLxTZHjtEL/7Mcc+8MYPzH1mAf9gA0UiXxfzFWLSiAzWDBF+Uzpxn2XO25DNREAiZeYIHqYaq6iaMlcNtk5iiSMm+aO6VPqh1tuPoIND/ry5aALN3TlgjnOoDOTGpJIlakKGfGnRHaM/Jd0vbiJ723UUAM='
99
1010 let treeVk = base64'qGBPhudr70q2hdpdMHxxPVdk+MJDazUwWbBTl+eJCx/zUEagbSAhrTUc40Jajsexh+ThMSv1ZlKhNgbjvc8GFwfScaiOtcM0fDjNcUeChr2NpgbQV+y4XTvC8sjwVXEareR6FvrGlyEdKcFx+vIagiT77lQ3MK/EfxwlNHsEdAy0sWThEjpDykFPiYWG6T5IJWIGtdhrcPdePYv1GX0wCakWmTMh9NWYby1erGRPnDxWxeFcOBN4DPhkSQKg/DMH1LkY/GlCqIdfdX5Mr+0CMQWnmr8oECA5QgeOJ1ZnSQmO18Jg9rclNx9mhqD3iux0b+o293HkYg4d75ZOBeUqLdx63/eIe/VEuwIkGFBs4sU9WHEsdqpx8QKpByl6ZKgiOcx/wrW0cwTvm34cq5pRVGunz+qu90se2PqAjOjiIRoDvrcCR7qlN0iTvBedZRTlOtbOxAiXOb/nwFrsmf8wFiebpKkjbNkNvTiLGRiea53xusmuNwANOZtfYMT03Kwf1bgRFrkM6TqgEVZq1Vl7wjFhGu3CFrk5popRZ0X8zhJqn5IPLt6g/0ImUPee8frB6VtMYYkmQ7ZCWTwKEPGDIgQAAACMoBtyPY40yogNVj5bF/LbEe5QGKZjwyfMj58AY5ocK00CEsC3Nm1wSKR6xi8NSbjhPZRw0/zChVK9K8ceAO4ijNFpOFuOpTO6aEq0o7spO/E0JTwTStxF0jdD9NCydSTLZi4DdtHHkcph4Sao8AwV4qd50wavb0/hxCXkVWTvErgnIWCgjrfgzQBDfa99z0alUbwyBBd8odwfJU7bERsH/SfhNempxiwEU1uq6TPQ2NxgN3fgXo5i9dHrSaI2ZQd7R9hyJVeMlBaz6uP4gS1XYlt5LkT+TFGT/vidKlcMHQx945x1Iivq728eKgJ4aBI5Ja1nxj7QC7d98xukukQl'
1111
1212 let initialRoot = toBytes(parseBigIntValue("11469701942666298368112882412133877458305516134926649826543144744382391691533"))
1313
1414 func getRootKey (index) = ("R:" + toString(index))
1515
1616
1717 func getNullifierKey (nullifier) = ("N:" + toBase58String(nullifier))
1818
1919
2020 func getDepositKey (address) = ("D:" + toBase58String(address))
2121
2222
2323 let poolIndexKey = "PoolIndex"
2424
2525 let allMessagesHashKey = "AllMessagesHash"
2626
2727 let operatorKey = "OperatorPk"
2828
2929 func takeExt (v,from,n) = take(drop(v, from), n)
3030
3131
3232 func spendDeposit (address,amount) = {
3333 let currentKey = getDepositKey(address.bytes)
3434 let currentAmount = match getInteger(currentKey) {
3535 case a: Int =>
3636 a
3737 case _ =>
3838 0
3939 }
4040 let newAmount = (currentAmount - amount)
4141 if ((0 > amount))
4242 then throw("Can't spend negative amount")
4343 else if ((0 > newAmount))
4444 then throw("Not enough balance")
4545 else [IntegerEntry(currentKey, newAmount)]
4646 }
4747
4848
4949 func getOperatorPk () = match getBinary(operatorKey) {
5050 case a: ByteVector =>
5151 a
5252 case _ =>
5353 ownerPk
5454 }
5555
5656
5757 @Callable(i)
5858 func setOperatorPk (pk) = if ((size(pk) != 32))
5959 then throw("Operator public key must be 32 bytes long")
6060 else [BinaryEntry(operatorKey, pk)]
6161
6262
6363
6464 @Callable(i)
6565 func deposit () = {
6666 let pmt = value(i.payments[0])
6767 if (isDefined(pmt.assetId))
6868 then throw("Only WAVES is allowed at the moment")
6969 else {
7070 let currentKey = getDepositKey(i.caller.bytes)
7171 let currentAmount = match getInteger(this, currentKey) {
7272 case a: Int =>
7373 a
7474 case _ =>
7575 0
7676 }
7777 let newAmount = (currentAmount + pmt.amount)
7878 [IntegerEntry(currentKey, newAmount)]
7979 }
8080 }
8181
8282
8383
8484 @Callable(i)
8585 func withdraw (amount) = {
8686 let currentKey = getDepositKey(i.caller.bytes)
8787 let currentAmount = match getInteger(this, currentKey) {
8888 case a: Int =>
8989 a
9090 case _ =>
9191 0
9292 }
9393 let newAmount = (currentAmount - amount)
9494 if ((0 > amount))
9595 then throw("Can't withdraw negative amount")
9696 else if ((0 > newAmount))
9797 then throw("Not enough balance")
9898 else [IntegerEntry(currentKey, newAmount), ScriptTransfer(i.caller, amount, unit)]
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func transact (tx) = {
105- let operatorPk = getOperatorPk()
106- let operatorAddress = addressFromPublicKey(operatorPk)
107- let nullifier = takeExt(tx, 0, 32)
105+ let nullifier = take(tx, 32)
108106 let outCommit = takeExt(tx, 32, 32)
109107 let assetId = takeExt(tx, 64, 32)
110108 let delta = takeExt(tx, 96, 32)
111- let nativeAmount = toInt(takeExt(delta, 0, 8))
112- let nativeEnergy = toInt(takeExt(delta, 8, 14))
113- let txIndex = toInt(takeExt(delta, 22, 6))
109+ let nativeAmount = toInt(take(delta, 8))
110+ let nativeEnergy = toBigInt(takeExt(delta, 8, 14))
111+ let txIndex = toInt((base58'2DyVD' + takeExt(delta, 22, 6)))
114112 let _poolId = takeExt(delta, 28, 3)
115113 let txProof = takeExt(tx, 128, 256)
116114 let treeProof = takeExt(tx, 384, 256)
117115 let rootAfter = takeExt(tx, 640, 32)
118- let txType = toInt(takeExt(tx, 672, 2))
119- let $t060316423 = if ((txType == 0))
116+ let txType = toInt((base58'3gznry4ApWXU7' + takeExt(tx, 672, 2)))
117+ let fullMemo = drop(tx, 674)
118+ let $t059966344 = if ((txType == 0))
120119 then {
121- let fullMemo = drop(tx, 674)
122120 let depositDataSize = (32 + 64)
123- let depositPk = dropRight(takeRight(tx, depositDataSize), 64)
124- let depositSignature = takeRight(tx, 64)
125- $Tuple3(takeExt(tx, 674, (size(fullMemo) - depositDataSize)), depositPk, depositSignature)
121+ let depositPk = dropRight(takeRight(fullMemo, depositDataSize), 64)
122+ let depositSignature = takeRight(fullMemo, 64)
123+ $Tuple3(dropRight(fullMemo, depositDataSize), depositPk, depositSignature)
126124 }
127- else $Tuple3(drop(tx, 674), unit, unit)
128- let memo = $t060316423._1
129- let depositPk = $t060316423._2
130- let depositSignature = $t060316423._3
131- let fee = toInt(takeExt(memo, 0, 8))
125+ else $Tuple3(fullMemo, unit, unit)
126+ let memo = $t059966344._1
127+ let depositPk = $t059966344._2
128+ let depositSignature = $t059966344._3
129+ let fee = toInt(take(memo, 8))
132130 let allMessagesHash = valueOrElse(getBinary(allMessagesHashKey), toBytes(toBigInt(0)))
133131 let memoHash = keccak256(memo)
134132 let hashes = (allMessagesHash + memoHash)
135133 let newAllMessagesHash = keccak256(hashes)
136134 let rootBefore = valueOrElse(getBinary(getRootKey(txIndex)), initialRoot)
137135 if ((rootBefore == rootBefore))
138136 then {
139137 let poolIndex = valueOrElse(getInteger(poolIndexKey), 0)
140138 let poolRoot = valueOrElse(getBinary(getRootKey(poolIndex)), initialRoot)
141139 let nullifierExists = match getBinary(getNullifierKey(nullifier)) {
142140 case a: Unit =>
143141 false
144142 case _ =>
145143 true
146144 }
147145 let transferInputs = ((((memoHash + nullifier) + outCommit) + delta) + memoHash)
148146 let treeInputs = ((poolRoot + rootAfter) + outCommit)
149147 let dataOps = [BinaryEntry(getRootKey(txIndex), rootAfter), BinaryEntry(getNullifierKey(nullifier), keccak256((outCommit + delta))), IntegerEntry(poolIndexKey, (poolIndex + 128)), BinaryEntry(allMessagesHashKey, newAllMessagesHash)]
150148 let txOps = match txType {
151149 case _ =>
152150 if ((0 == $match0))
153151 then {
154152 let depositPkValue = value(depositPk)
155153 let depositAddress = addressFromPublicKey(depositPkValue)
156154 if ((0 > nativeAmount))
157155 then throw("Can't deposit negative amount")
158156 else if (!(sigVerify_8Kb((nullifier + depositPkValue), value(depositSignature), depositPkValue)))
159157 then throw("Invalid deposit signature")
160158 else spendDeposit(depositAddress, (nativeAmount * denominator))
161159 }
162160 else if ((1 == $match0))
163161 then if ((nativeAmount != 0))
164162 then throw("Native amount must be zero for transfers")
165163 else nil
166164 else if ((2 == $match0))
167165 then {
168- let withdrawAmount = (toInt(takeExt(memo, 8, 16)) * denominator)
166+ let withdrawAmount = (toInt(takeExt(memo, 8, 8)) * denominator)
169167 if ((withdrawAmount > 0))
170168 then throw("Withdraw amount must be positive")
171169 else [ScriptTransfer(i.caller, -(withdrawAmount), unit)]
172170 }
173171 else throw("Unknown tx type")
174172 }
175173 let feeOps = if ((fee > 0))
176174 then {
177175 let totalFee = (fee * denominator)
176+ let operatorPk = getOperatorPk()
177+ let operatorAddress = addressFromPublicKey(operatorPk)
178178 [ScriptTransfer(operatorAddress, fee, unit)]
179179 }
180180 else nil
181181 if ((txIndex > poolIndex))
182182 then throw("Invalid transaction index")
183183 else if (!(bn256Groth16Verify_5inputs(transferVk, txProof, transferInputs)))
184184 then throw("Tx proof is invalid")
185185 else if (!(bn256Groth16Verify_3inputs(treeVk, treeProof, treeInputs)))
186186 then throw("Tree proof is invalid")
187187 else if (nullifierExists)
188188 then throw("Double spend")
189189 else ((txOps ++ dataOps) ++ feeOps)
190190 }
191191 else throw("Strict value is not equal to itself.")
192192 }
193193
194194
195195 @Verifier(tx)
196196 func verify () = match tx {
197197 case d: SetScriptTransaction =>
198198 sigVerify(tx.bodyBytes, tx.proofs[0], ownerPk)
199199 case d: InvokeScriptTransaction =>
200200 match d.function {
201201 case _ =>
202202 if (("setOperatorPk" == $match1))
203203 then sigVerify(tx.bodyBytes, tx.proofs[0], ownerPk)
204204 else if (("transact" == $match1))
205205 then {
206206 let operatorPk = getOperatorPk()
207207 sigVerify(tx.bodyBytes, tx.proofs[0], operatorPk)
208208 }
209209 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
210210 }
211211 case _ =>
212212 false
213213 }
214214

github/deemru/w8io/169f3d6 
111.94 ms