tx · 3XQTdkT9vwstyExYtVmb4X6CNQ9ENdDo61WLcryyndAC

3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM:  -0.01000000 Waves

2023.11.02 12:38 [2825548] smart account 3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM > SELF 0.00000000 Waves

{ "type": 13, "id": "3XQTdkT9vwstyExYtVmb4X6CNQ9ENdDo61WLcryyndAC", "fee": 1000000, "feeAssetId": null, "timestamp": 1698917936940, "version": 2, "chainId": 84, "sender": "3N8kB3UEjWWvTRBtGpGUErAevaK2q6u2eCM", "senderPublicKey": "6ybktvseycJDGHTjJm3tz9iT2SKaTNtLLCZsJZRemtoM", "proofs": [ "36gK1aAdkLH2kMrR4nQe97oPVWHVmkbhEc4jCYmtUmX2G7X3vPTdHYvRHiQGrDcgWc4AJEhE18Vn2yxdqCjAKJHa" ], "script": "base64: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dE51bGxpZmllcktleQEJbnVsbGlmaWVyCQCsAgICAk46CQDYBAEFCW51bGxpZmllcgENZ2V0RGVwb3NpdEtleQEHYWRkcmVzcwkArAICAgJEOgkA2AQBBQdhZGRyZXNzAAxwb29sSW5kZXhLZXkCCVBvb2xJbmRleAASYWxsTWVzc2FnZXNIYXNoS2V5Ag9BbGxNZXNzYWdlc0hhc2gAC29wZXJhdG9yS2V5AgpPcGVyYXRvclBrAQd0YWtlRXh0AwF2BGZyb20CdG8JAMoBAgkAyQECBQF2BQJ0bwUEZnJvbQEMc3BlbmREZXBvc2l0AgdhZGRyZXNzBmFtb3VudAQKY3VycmVudEtleQkBDWdldERlcG9zaXRLZXkBCAUHYWRkcmVzcwVieXRlcwQNY3VycmVudEFtb3VudAQHJG1hdGNoMAkAnwgBBQpjdXJyZW50S2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGUCBQ1jdXJyZW50QW1vdW50BQZhbW91bnQDCQBmAgAABQZhbW91bnQJAAIBAhtDYW4ndCBzcGVuZCBuZWdhdGl2ZSBhbW91bnQDCQBmAgAABQluZXdBbW91bnQJAAIBAhJOb3QgZW5vdWdoIGJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCmN1cnJlbnRLZXkFCW5ld0Ftb3VudAUDbmlsAQ1nZXRPcGVyYXRvclBrAAQHJG1hdGNoMAkAoQgBBQtvcGVyYXRvcktleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwBQFhBQdvd25lclBrBAFpAQ1zZXRPcGVyYXRvclBrAQJwawMJAQIhPQIJAMgBAQUCcGsAIAkAAgECKU9wZXJhdG9yIHB1YmxpYyBrZXkgbXVzdCBiZSAzMiBieXRlcyBsb25nCQDMCAIJAQtCaW5hcnlFbnRyeQIFC29wZXJhdG9yS2V5BQJwawUDbmlsAWkBB2RlcG9zaXQABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAIBAiNPbmx5IFdBVkVTIGlzIGFsbG93ZWQgYXQgdGhlIG1vbWVudAQKY3VycmVudEtleQkBDWdldERlcG9zaXRLZXkBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFCmN1cnJlbnRLZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAECW5ld0Ftb3VudAkAZAIFDWN1cnJlbnRBbW91bnQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpjdXJyZW50S2V5BQluZXdBbW91bnQFA25pbAFpAQh3aXRoZHJhdwEGYW1vdW50BApjdXJyZW50S2V5CQENZ2V0RGVwb3NpdEtleQEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwUKY3VycmVudEtleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUGYW1vdW50AwkAZgIAAAUGYW1vdW50CQACAQIeQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50AwkAZgIAAAUJbmV3QW1vdW50CQACAQISTm90IGVub3VnaCBiYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpjdXJyZW50S2V5BQluZXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFBHVuaXQFA25pbAFpAQh0cmFuc2FjdAECdHgECm9wZXJhdG9yUGsJAQ1nZXRPcGVyYXRvclBrAAQPb3BlcmF0b3JBZGRyZXNzCQCnCAEFCm9wZXJhdG9yUGsECW51bGxpZmllcgkBB3Rha2VFeHQDBQJ0eAAAACAECW91dENvbW1pdAkBB3Rha2VFeHQDBQJ0eAAgAEAEB2Fzc2V0SWQJAQd0YWtlRXh0AwUCdHgAQABgBAVkZWx0YQkBB3Rha2VFeHQDBQJ0eABgAIABBAxuYXRpdmVBbW91bnQJALEJAQkBB3Rha2VFeHQDBQVkZWx0YQAAAAgEDG5hdGl2ZUVuZXJneQkAsQkBCQEHdGFrZUV4dAMFBWRlbHRhAAgAFgQHdHhJbmRleAkAsQkBCQEHdGFrZUV4dAMFBWRlbHRhABYAHAQHX3Bvb2xJZAkBB3Rha2VFeHQDBQVkZWx0YQAcAB8EB3R4UHJvb2YJAQd0YWtlRXh0AwUCdHgAgAEAgAMECXRyZWVQcm9vZgkBB3Rha2VFeHQDBQJ0eACAAwCABQQJcm9vdEFmdGVyCQEHdGFrZUV4dAMFAnR4AIAFAKAFBAZ0eFR5cGUJALEJAQkBB3Rha2VFeHQDBQJ0eACgBQCiBQQLJHQwNjAzOTY0MDEDCQAAAgUGdHhUeXBlAAAED2RlcG9zaXREYXRhU2l6ZQkAZAIAIABABAlkZXBvc2l0UGsJAM0BAgkAzAECBQJ0eAUPZGVwb3NpdERhdGFTaXplAEAEEGRlcG9zaXRTaWduYXR1cmUJAMwBAgUCdHgAQAkAlQoDCQEHdGFrZUV4dAMFAnR4AKIFCQBlAgkAyAEBBQJ0eAUPZGVwb3NpdERhdGFTaXplBQlkZXBvc2l0UGsFEGRlcG9zaXRTaWduYXR1cmUJAJUKAwkBB3Rha2VFeHQDBQJ0eACiBQkAyAEBBQJ0eAUEdW5pdAUEdW5pdAQEbWVtbwgFCyR0MDYwMzk2NDAxAl8xBAlkZXBvc2l0UGsIBQskdDA2MDM5NjQwMQJfMgQQZGVwb3NpdFNpZ25hdHVyZQgFCyR0MDYwMzk2NDAxAl8zBANmZWUJALEJAQkBB3Rha2VFeHQDBQRtZW1vAAAACAQPYWxsTWVzc2FnZXNIYXNoCQELdmFsdWVPckVsc2UCCQChCAEFEmFsbE1lc3NhZ2VzSGFzaEtleQkAnQMBCQC2AgEAAAQIbWVtb0hhc2gJAPUDAQUEbWVtbwQGaGFzaGVzCQDLAQIFD2FsbE1lc3NhZ2VzSGFzaAUIbWVtb0hhc2gEEm5ld0FsbE1lc3NhZ2VzSGFzaAkA9QMBBQZoYXNoZXMECnJvb3RCZWZvcmUJAQt2YWx1ZU9yRWxzZQIJAKEIAQkBCmdldFJvb3RLZXkBBQd0eEluZGV4BQtpbml0aWFsUm9vdAMJAAACBQpyb290QmVmb3JlBQpyb290QmVmb3JlBAlwb29sSW5kZXgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUMcG9vbEluZGV4S2V5AAAECHBvb2xSb290CQELdmFsdWVPckVsc2UCCQChCAEJAQpnZXRSb290S2V5AQUJcG9vbEluZGV4BQtpbml0aWFsUm9vdAQPbnVsbGlmaWVyRXhpc3RzBAckbWF0Y2gwCQChCAEJAQ9nZXROdWxsaWZpZXJLZXkBBQludWxsaWZpZXIDCQABAgUHJG1hdGNoMAIEVW5pdAQBYQUHJG1hdGNoMAcGBA50cmFuc2ZlcklucHV0cwkAywECCQDLAQIJAMsBAgkAywECBQhtZW1vSGFzaAUJbnVsbGlmaWVyBQlvdXRDb21taXQFBWRlbHRhBQhtZW1vSGFzaAQKdHJlZUlucHV0cwkAywECCQDLAQIFCHBvb2xSb290BQlyb290QWZ0ZXIFCW91dENvbW1pdAQHZGF0YU9wcwkAzAgCCQELQmluYXJ5RW50cnkCCQEKZ2V0Um9vdEtleQEFB3R4SW5kZXgFCXJvb3RBZnRlcgkAzAgCCQELQmluYXJ5RW50cnkCCQEPZ2V0TnVsbGlmaWVyS2V5AQUJbnVsbGlmaWVyCQD1AwEJAMsBAgUJb3V0Q29tbWl0BQVkZWx0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgUMcG9vbEluZGV4S2V5CQBkAgUJcG9vbEluZGV4AIABCQDMCAIJAQtCaW5hcnlFbnRyeQIFEmFsbE1lc3NhZ2VzSGFzaEtleQUSbmV3QWxsTWVzc2FnZXNIYXNoBQNuaWwEBXR4T3BzBAckbWF0Y2gwBQZ0eFR5cGUDCQAAAgAABQckbWF0Y2gwBA5kZXBvc2l0UGtWYWx1ZQkBBXZhbHVlAQUJZGVwb3NpdFBrBA5kZXBvc2l0QWRkcmVzcwkApwgBBQ5kZXBvc2l0UGtWYWx1ZQMJAGYCAAAFDG5hdGl2ZUFtb3VudAkAAgECHUNhbid0IGRlcG9zaXQgbmVnYXRpdmUgYW1vdW50AwkBASEBCQDEEwMJAMsBAgUJbnVsbGlmaWVyBQ5kZXBvc2l0UGtWYWx1ZQkBBXZhbHVlAQUQZGVwb3NpdFNpZ25hdHVyZQUOZGVwb3NpdFBrVmFsdWUJAAIBAhlJbnZhbGlkIGRlcG9zaXQgc2lnbmF0dXJlCQEMc3BlbmREZXBvc2l0AgUOZGVwb3NpdEFkZHJlc3MJAGgCBQxuYXRpdmVBbW91bnQFC2Rlbm9taW5hdG9yAwkAAAIAAQUHJG1hdGNoMAMJAQIhPQIFDG5hdGl2ZUFtb3VudAAACQACAQIoTmF0aXZlIGFtb3VudCBtdXN0IGJlIHplcm8gZm9yIHRyYW5zZmVycwUDbmlsAwkAAAIAAgUHJG1hdGNoMAQOd2l0aGRyYXdBbW91bnQJAGgCCQCxCQEJAQd0YWtlRXh0AwUEbWVtbwAIABAFC2Rlbm9taW5hdG9yAwkAZgIFDndpdGhkcmF3QW1vdW50AAAJAAIBAiBXaXRoZHJhdyBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAQEtAQUOd2l0aGRyYXdBbW91bnQFBHVuaXQFA25pbAkAAgECD1Vua25vd24gdHggdHlwZQQGZmVlT3BzAwkAZgIFA2ZlZQAABAh0b3RhbEZlZQkAaAIFA2ZlZQULZGVub21pbmF0b3IJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPb3BlcmF0b3JBZGRyZXNzBQNmZWUFBHVuaXQFA25pbAUDbmlsAwkAZgIFB3R4SW5kZXgFCXBvb2xJbmRleAkAAgECGUludmFsaWQgdHJhbnNhY3Rpb24gaW5kZXgDCQEBIQEJAJYTAwUKdHJhbnNmZXJWawUHdHhQcm9vZgUOdHJhbnNmZXJJbnB1dHMJAAIBAhNUeCBwcm9vZiBpcyBpbnZhbGlkAwkBASEBCQCUEwMFBnRyZWVWawUJdHJlZVByb29mBQp0cmVlSW5wdXRzCQACAQIVVHJlZSBwcm9vZiBpcyBpbnZhbGlkAwUPbnVsbGlmaWVyRXhpc3RzCQACAQIMRG91YmxlIHNwZW5kCQDOCAIJAM4IAgUFdHhPcHMFB2RhdGFPcHMFBmZlZU9wcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBAFkBQckbWF0Y2gwCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQdvd25lclBrAwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAFkBQckbWF0Y2gwBAckbWF0Y2gxCAUBZAhmdW5jdGlvbgMJAAACAg1zZXRPcGVyYXRvclBrBQckbWF0Y2gxCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQdvd25lclBrAwkAAAICCHRyYW5zYWN0BQckbWF0Y2gxBApvcGVyYXRvclBrCQENZ2V0T3BlcmF0b3JQawAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCm9wZXJhdG9yUGsJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkHFmmpng==", "height": 2825548, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6VnwRiznJbm2wm3FFpwUmQi9fN8Bo25so8dhNKFFaoJo Next: 9bgCno2uV9NBNaan1MSRAjVzoY9Yidpe6MKPf2XUEbae Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = base58'6ybktvseycJDGHTjJm3tz9iT2SKaTNtLLCZsJZRemtoM'
55
6-let b = addressFromPublicKey(a)
6+let b = 100000000
77
8-let c = 100000000
8+let c = 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
10-let d = 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='
10+let d = 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
12-let e = 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'
12+let e = toBytes(parseBigIntValue("11469701942666298368112882412133877458305516134926649826543144744382391691533"))
1313
14-let f = toBytes(parseBigIntValue("11469701942666298368112882412133877458305516134926649826543144744382391691533"))
15-
16-func g (h) = ("R:" + toString(h))
14+func f (g) = ("R:" + toString(g))
1715
1816
19-func i (j) = ("N:" + toBase58String(j))
17+func h (i) = ("N:" + toBase58String(i))
2018
2119
22-func k (l) = ("D:" + toBase58String(l))
20+func j (k) = ("D:" + toBase58String(k))
2321
2422
25-let m = "PoolIndex"
23+let l = "PoolIndex"
2624
27-let n = "AllMessagesHash"
25+let m = "AllMessagesHash"
26+
27+let n = "OperatorPk"
2828
2929 func o (p,q,r) = drop(take(p, r), q)
3030
3131
32-func s (l,t) = {
33- let u = k(l.bytes)
32+func s (k,t) = {
33+ let u = j(k.bytes)
3434 let v = {
3535 let w = getInteger(u)
3636 if ($isInstanceOf(w, "Int"))
4949 }
5050
5151
52-@Callable(z)
52+func z () = {
53+ let w = getBinary(n)
54+ if ($isInstanceOf(w, "ByteVector"))
55+ then {
56+ let x = w
57+ x
58+ }
59+ else a
60+ }
61+
62+
63+@Callable(A)
64+func setOperatorPk (B) = if ((size(B) != 32))
65+ then throw("Operator public key must be 32 bytes long")
66+ else [BinaryEntry(n, B)]
67+
68+
69+
70+@Callable(A)
5371 func deposit () = {
54- let A = value(z.payments[0])
55- if (isDefined(A.assetId))
72+ let C = value(A.payments[0])
73+ if (isDefined(C.assetId))
5674 then throw("Only WAVES is allowed at the moment")
5775 else {
58- let u = k(z.caller.bytes)
76+ let u = j(A.caller.bytes)
5977 let v = {
6078 let w = getInteger(this, u)
6179 if ($isInstanceOf(w, "Int"))
6583 }
6684 else 0
6785 }
68- let y = (v + A.amount)
86+ let y = (v + C.amount)
6987 [IntegerEntry(u, y)]
7088 }
7189 }
7290
7391
7492
75-@Callable(z)
93+@Callable(A)
7694 func withdraw (t) = {
77- let u = k(z.caller.bytes)
95+ let u = j(A.caller.bytes)
7896 let v = {
7997 let w = getInteger(this, u)
8098 if ($isInstanceOf(w, "Int"))
89107 then throw("Can't withdraw negative amount")
90108 else if ((0 > y))
91109 then throw("Not enough balance")
92- else [IntegerEntry(u, y), ScriptTransfer(z.caller, t, unit)]
110+ else [IntegerEntry(u, y), ScriptTransfer(A.caller, t, unit)]
93111 }
94112
95113
96114
97-@Callable(z)
98-func transact (B) = {
99- let j = o(B, 0, 32)
100- let C = o(B, 32, 64)
101- let D = o(B, 64, 96)
102- let E = o(B, 96, 128)
103- let F = toInt(o(E, 0, 8))
104- let G = toInt(o(E, 8, 22))
105- let H = toInt(o(E, 22, 28))
106- let I = o(E, 28, 31)
107- let J = o(B, 128, 384)
108- let K = o(B, 384, 640)
109- let L = o(B, 640, 672)
110- let M = toInt(o(B, 672, 674))
111- let N = if ((M == 0))
115+@Callable(A)
116+func transact (D) = {
117+ let E = z()
118+ let F = addressFromPublicKey(E)
119+ let i = o(D, 0, 32)
120+ let G = o(D, 32, 64)
121+ let H = o(D, 64, 96)
122+ let I = o(D, 96, 128)
123+ let J = toInt(o(I, 0, 8))
124+ let K = toInt(o(I, 8, 22))
125+ let L = toInt(o(I, 22, 28))
126+ let M = o(I, 28, 31)
127+ let N = o(D, 128, 384)
128+ let O = o(D, 384, 640)
129+ let P = o(D, 640, 672)
130+ let Q = toInt(o(D, 672, 674))
131+ let R = if ((Q == 0))
112132 then {
113- let O = (32 + 64)
114- let P = dropRight(takeRight(B, O), 64)
115- let Q = takeRight(B, 64)
116- $Tuple3(o(B, 674, (size(B) - O)), P, Q)
133+ let S = (32 + 64)
134+ let T = dropRight(takeRight(D, S), 64)
135+ let U = takeRight(D, 64)
136+ $Tuple3(o(D, 674, (size(D) - S)), T, U)
117137 }
118- else $Tuple3(o(B, 674, size(B)), unit, unit)
119- let R = N._1
120- let P = N._2
121- let Q = N._3
122- let S = toInt(o(R, 0, 8))
123- let T = valueOrElse(getBinary(n), toBytes(toBigInt(0)))
124- let U = keccak256(R)
125- let V = (T + U)
126- let W = keccak256(V)
127- let X = valueOrElse(getBinary(g(H)), f)
128- if ((X == X))
138+ else $Tuple3(o(D, 674, size(D)), unit, unit)
139+ let V = R._1
140+ let T = R._2
141+ let U = R._3
142+ let W = toInt(o(V, 0, 8))
143+ let X = valueOrElse(getBinary(m), toBytes(toBigInt(0)))
144+ let Y = keccak256(V)
145+ let Z = (X + Y)
146+ let aa = keccak256(Z)
147+ let ab = valueOrElse(getBinary(f(L)), e)
148+ if ((ab == ab))
129149 then {
130- let Y = valueOrElse(getInteger(m), 0)
131- let Z = valueOrElse(getBinary(g(Y)), f)
132- let aa = {
133- let w = getBinary(i(j))
150+ let ac = valueOrElse(getInteger(l), 0)
151+ let ad = valueOrElse(getBinary(f(ac)), e)
152+ let ae = {
153+ let w = getBinary(h(i))
134154 if ($isInstanceOf(w, "Unit"))
135155 then {
136156 let x = w
138158 }
139159 else true
140160 }
141- let ab = ((((U + j) + C) + E) + U)
142- let ac = ((Z + L) + C)
143- let ad = [BinaryEntry(g(H), L), BinaryEntry(i(j), keccak256((C + E))), IntegerEntry(m, (Y + 128)), BinaryEntry(n, W)]
144- let ae = {
145- let w = M
161+ let af = ((((Y + i) + G) + I) + Y)
162+ let ag = ((ad + P) + G)
163+ let ah = [BinaryEntry(f(L), P), BinaryEntry(h(i), keccak256((G + I))), IntegerEntry(l, (ac + 128)), BinaryEntry(m, aa)]
164+ let ai = {
165+ let w = Q
146166 if ((0 == w))
147167 then {
148- let af = value(P)
149- let ag = addressFromPublicKey(af)
150- if ((0 > F))
168+ let aj = value(T)
169+ let ak = addressFromPublicKey(aj)
170+ if ((0 > J))
151171 then throw("Can't deposit negative amount")
152- else if (!(sigVerify_8Kb((j + af), value(Q), af)))
172+ else if (!(sigVerify_8Kb((i + aj), value(U), aj)))
153173 then throw("Invalid deposit signature")
154- else s(ag, (F * c))
174+ else s(ak, (J * b))
155175 }
156176 else if ((1 == w))
157- then if ((F != 0))
177+ then if ((J != 0))
158178 then throw("Native amount must be zero for transfers")
159179 else nil
160180 else if ((2 == w))
161181 then {
162- let ah = (toInt(o(R, 8, 16)) * c)
163- if ((ah > 0))
182+ let al = (toInt(o(V, 8, 16)) * b)
183+ if ((al > 0))
164184 then throw("Withdraw amount must be positive")
165- else [ScriptTransfer(z.caller, -(ah), unit)]
185+ else [ScriptTransfer(A.caller, -(al), unit)]
166186 }
167187 else throw("Unknown tx type")
168188 }
169- let ai = if ((S > 0))
189+ let am = if ((W > 0))
170190 then {
171- let aj = (S * c)
172-[ScriptTransfer(b, S, unit)]
191+ let an = (W * b)
192+[ScriptTransfer(F, W, unit)]
173193 }
174194 else nil
175- if ((H > Y))
176- then throw("Transaction index is too big")
177- else if (!(bn256Groth16Verify_5inputs(d, J, ab)))
195+ if ((L > ac))
196+ then throw("Invalid transaction index")
197+ else if (!(bn256Groth16Verify_5inputs(c, N, af)))
178198 then throw("Tx proof is invalid")
179- else if (!(bn256Groth16Verify_3inputs(e, K, ac)))
199+ else if (!(bn256Groth16Verify_3inputs(d, O, ag)))
180200 then throw("Tree proof is invalid")
181- else if (aa)
201+ else if (ae)
182202 then throw("Double spend")
183- else ((ae ++ ad) ++ ai)
203+ else ((ai ++ ah) ++ am)
184204 }
185205 else throw("Strict value is not equal to itself.")
186206 }
187207
188208
189-@Verifier(B)
190-func ak () = {
191- let w = B
209+@Verifier(D)
210+func ao () = {
211+ let w = D
192212 if ($isInstanceOf(w, "SetScriptTransaction"))
193213 then {
194- let al = w
195- sigVerify(B.bodyBytes, B.proofs[0], a)
214+ let ap = w
215+ sigVerify(D.bodyBytes, D.proofs[0], a)
196216 }
197- else false
217+ else if ($isInstanceOf(w, "InvokeScriptTransaction"))
218+ then {
219+ let ap = w
220+ let aq = ap.function
221+ if (("setOperatorPk" == aq))
222+ then sigVerify(D.bodyBytes, D.proofs[0], a)
223+ else if (("transact" == aq))
224+ then {
225+ let E = z()
226+ sigVerify(D.bodyBytes, D.proofs[0], E)
227+ }
228+ else sigVerify(D.bodyBytes, D.proofs[0], D.senderPublicKey)
229+ }
230+ else false
198231 }
199232
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = base58'6ybktvseycJDGHTjJm3tz9iT2SKaTNtLLCZsJZRemtoM'
55
6-let b = addressFromPublicKey(a)
6+let b = 100000000
77
8-let c = 100000000
8+let c = 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
10-let d = 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='
10+let d = 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
12-let e = 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'
12+let e = toBytes(parseBigIntValue("11469701942666298368112882412133877458305516134926649826543144744382391691533"))
1313
14-let f = toBytes(parseBigIntValue("11469701942666298368112882412133877458305516134926649826543144744382391691533"))
15-
16-func g (h) = ("R:" + toString(h))
14+func f (g) = ("R:" + toString(g))
1715
1816
19-func i (j) = ("N:" + toBase58String(j))
17+func h (i) = ("N:" + toBase58String(i))
2018
2119
22-func k (l) = ("D:" + toBase58String(l))
20+func j (k) = ("D:" + toBase58String(k))
2321
2422
25-let m = "PoolIndex"
23+let l = "PoolIndex"
2624
27-let n = "AllMessagesHash"
25+let m = "AllMessagesHash"
26+
27+let n = "OperatorPk"
2828
2929 func o (p,q,r) = drop(take(p, r), q)
3030
3131
32-func s (l,t) = {
33- let u = k(l.bytes)
32+func s (k,t) = {
33+ let u = j(k.bytes)
3434 let v = {
3535 let w = getInteger(u)
3636 if ($isInstanceOf(w, "Int"))
3737 then {
3838 let x = w
3939 x
4040 }
4141 else 0
4242 }
4343 let y = (v - t)
4444 if ((0 > t))
4545 then throw("Can't spend negative amount")
4646 else if ((0 > y))
4747 then throw("Not enough balance")
4848 else [IntegerEntry(u, y)]
4949 }
5050
5151
52-@Callable(z)
52+func z () = {
53+ let w = getBinary(n)
54+ if ($isInstanceOf(w, "ByteVector"))
55+ then {
56+ let x = w
57+ x
58+ }
59+ else a
60+ }
61+
62+
63+@Callable(A)
64+func setOperatorPk (B) = if ((size(B) != 32))
65+ then throw("Operator public key must be 32 bytes long")
66+ else [BinaryEntry(n, B)]
67+
68+
69+
70+@Callable(A)
5371 func deposit () = {
54- let A = value(z.payments[0])
55- if (isDefined(A.assetId))
72+ let C = value(A.payments[0])
73+ if (isDefined(C.assetId))
5674 then throw("Only WAVES is allowed at the moment")
5775 else {
58- let u = k(z.caller.bytes)
76+ let u = j(A.caller.bytes)
5977 let v = {
6078 let w = getInteger(this, u)
6179 if ($isInstanceOf(w, "Int"))
6280 then {
6381 let x = w
6482 x
6583 }
6684 else 0
6785 }
68- let y = (v + A.amount)
86+ let y = (v + C.amount)
6987 [IntegerEntry(u, y)]
7088 }
7189 }
7290
7391
7492
75-@Callable(z)
93+@Callable(A)
7694 func withdraw (t) = {
77- let u = k(z.caller.bytes)
95+ let u = j(A.caller.bytes)
7896 let v = {
7997 let w = getInteger(this, u)
8098 if ($isInstanceOf(w, "Int"))
8199 then {
82100 let x = w
83101 x
84102 }
85103 else 0
86104 }
87105 let y = (v - t)
88106 if ((0 > t))
89107 then throw("Can't withdraw negative amount")
90108 else if ((0 > y))
91109 then throw("Not enough balance")
92- else [IntegerEntry(u, y), ScriptTransfer(z.caller, t, unit)]
110+ else [IntegerEntry(u, y), ScriptTransfer(A.caller, t, unit)]
93111 }
94112
95113
96114
97-@Callable(z)
98-func transact (B) = {
99- let j = o(B, 0, 32)
100- let C = o(B, 32, 64)
101- let D = o(B, 64, 96)
102- let E = o(B, 96, 128)
103- let F = toInt(o(E, 0, 8))
104- let G = toInt(o(E, 8, 22))
105- let H = toInt(o(E, 22, 28))
106- let I = o(E, 28, 31)
107- let J = o(B, 128, 384)
108- let K = o(B, 384, 640)
109- let L = o(B, 640, 672)
110- let M = toInt(o(B, 672, 674))
111- let N = if ((M == 0))
115+@Callable(A)
116+func transact (D) = {
117+ let E = z()
118+ let F = addressFromPublicKey(E)
119+ let i = o(D, 0, 32)
120+ let G = o(D, 32, 64)
121+ let H = o(D, 64, 96)
122+ let I = o(D, 96, 128)
123+ let J = toInt(o(I, 0, 8))
124+ let K = toInt(o(I, 8, 22))
125+ let L = toInt(o(I, 22, 28))
126+ let M = o(I, 28, 31)
127+ let N = o(D, 128, 384)
128+ let O = o(D, 384, 640)
129+ let P = o(D, 640, 672)
130+ let Q = toInt(o(D, 672, 674))
131+ let R = if ((Q == 0))
112132 then {
113- let O = (32 + 64)
114- let P = dropRight(takeRight(B, O), 64)
115- let Q = takeRight(B, 64)
116- $Tuple3(o(B, 674, (size(B) - O)), P, Q)
133+ let S = (32 + 64)
134+ let T = dropRight(takeRight(D, S), 64)
135+ let U = takeRight(D, 64)
136+ $Tuple3(o(D, 674, (size(D) - S)), T, U)
117137 }
118- else $Tuple3(o(B, 674, size(B)), unit, unit)
119- let R = N._1
120- let P = N._2
121- let Q = N._3
122- let S = toInt(o(R, 0, 8))
123- let T = valueOrElse(getBinary(n), toBytes(toBigInt(0)))
124- let U = keccak256(R)
125- let V = (T + U)
126- let W = keccak256(V)
127- let X = valueOrElse(getBinary(g(H)), f)
128- if ((X == X))
138+ else $Tuple3(o(D, 674, size(D)), unit, unit)
139+ let V = R._1
140+ let T = R._2
141+ let U = R._3
142+ let W = toInt(o(V, 0, 8))
143+ let X = valueOrElse(getBinary(m), toBytes(toBigInt(0)))
144+ let Y = keccak256(V)
145+ let Z = (X + Y)
146+ let aa = keccak256(Z)
147+ let ab = valueOrElse(getBinary(f(L)), e)
148+ if ((ab == ab))
129149 then {
130- let Y = valueOrElse(getInteger(m), 0)
131- let Z = valueOrElse(getBinary(g(Y)), f)
132- let aa = {
133- let w = getBinary(i(j))
150+ let ac = valueOrElse(getInteger(l), 0)
151+ let ad = valueOrElse(getBinary(f(ac)), e)
152+ let ae = {
153+ let w = getBinary(h(i))
134154 if ($isInstanceOf(w, "Unit"))
135155 then {
136156 let x = w
137157 false
138158 }
139159 else true
140160 }
141- let ab = ((((U + j) + C) + E) + U)
142- let ac = ((Z + L) + C)
143- let ad = [BinaryEntry(g(H), L), BinaryEntry(i(j), keccak256((C + E))), IntegerEntry(m, (Y + 128)), BinaryEntry(n, W)]
144- let ae = {
145- let w = M
161+ let af = ((((Y + i) + G) + I) + Y)
162+ let ag = ((ad + P) + G)
163+ let ah = [BinaryEntry(f(L), P), BinaryEntry(h(i), keccak256((G + I))), IntegerEntry(l, (ac + 128)), BinaryEntry(m, aa)]
164+ let ai = {
165+ let w = Q
146166 if ((0 == w))
147167 then {
148- let af = value(P)
149- let ag = addressFromPublicKey(af)
150- if ((0 > F))
168+ let aj = value(T)
169+ let ak = addressFromPublicKey(aj)
170+ if ((0 > J))
151171 then throw("Can't deposit negative amount")
152- else if (!(sigVerify_8Kb((j + af), value(Q), af)))
172+ else if (!(sigVerify_8Kb((i + aj), value(U), aj)))
153173 then throw("Invalid deposit signature")
154- else s(ag, (F * c))
174+ else s(ak, (J * b))
155175 }
156176 else if ((1 == w))
157- then if ((F != 0))
177+ then if ((J != 0))
158178 then throw("Native amount must be zero for transfers")
159179 else nil
160180 else if ((2 == w))
161181 then {
162- let ah = (toInt(o(R, 8, 16)) * c)
163- if ((ah > 0))
182+ let al = (toInt(o(V, 8, 16)) * b)
183+ if ((al > 0))
164184 then throw("Withdraw amount must be positive")
165- else [ScriptTransfer(z.caller, -(ah), unit)]
185+ else [ScriptTransfer(A.caller, -(al), unit)]
166186 }
167187 else throw("Unknown tx type")
168188 }
169- let ai = if ((S > 0))
189+ let am = if ((W > 0))
170190 then {
171- let aj = (S * c)
172-[ScriptTransfer(b, S, unit)]
191+ let an = (W * b)
192+[ScriptTransfer(F, W, unit)]
173193 }
174194 else nil
175- if ((H > Y))
176- then throw("Transaction index is too big")
177- else if (!(bn256Groth16Verify_5inputs(d, J, ab)))
195+ if ((L > ac))
196+ then throw("Invalid transaction index")
197+ else if (!(bn256Groth16Verify_5inputs(c, N, af)))
178198 then throw("Tx proof is invalid")
179- else if (!(bn256Groth16Verify_3inputs(e, K, ac)))
199+ else if (!(bn256Groth16Verify_3inputs(d, O, ag)))
180200 then throw("Tree proof is invalid")
181- else if (aa)
201+ else if (ae)
182202 then throw("Double spend")
183- else ((ae ++ ad) ++ ai)
203+ else ((ai ++ ah) ++ am)
184204 }
185205 else throw("Strict value is not equal to itself.")
186206 }
187207
188208
189-@Verifier(B)
190-func ak () = {
191- let w = B
209+@Verifier(D)
210+func ao () = {
211+ let w = D
192212 if ($isInstanceOf(w, "SetScriptTransaction"))
193213 then {
194- let al = w
195- sigVerify(B.bodyBytes, B.proofs[0], a)
214+ let ap = w
215+ sigVerify(D.bodyBytes, D.proofs[0], a)
196216 }
197- else false
217+ else if ($isInstanceOf(w, "InvokeScriptTransaction"))
218+ then {
219+ let ap = w
220+ let aq = ap.function
221+ if (("setOperatorPk" == aq))
222+ then sigVerify(D.bodyBytes, D.proofs[0], a)
223+ else if (("transact" == aq))
224+ then {
225+ let E = z()
226+ sigVerify(D.bodyBytes, D.proofs[0], E)
227+ }
228+ else sigVerify(D.bodyBytes, D.proofs[0], D.senderPublicKey)
229+ }
230+ else false
198231 }
199232

github/deemru/w8io/873ac7e 
80.93 ms