tx · 9Ujssntm6VUwkU6M9BvAmKGChWaGMeuwzP5uKaBzJzci

3MuB15FfT7QUriD1R24GFbMPHz82NQ1Bm8X:  -0.01400000 Waves

2023.02.23 10:31 [2462000] smart account 3MuB15FfT7QUriD1R24GFbMPHz82NQ1Bm8X > SELF 0.00000000 Waves

{ "type": 13, "id": "9Ujssntm6VUwkU6M9BvAmKGChWaGMeuwzP5uKaBzJzci", "fee": 1400000, "feeAssetId": null, "timestamp": 1677137365142, "version": 2, "chainId": 84, "sender": "3MuB15FfT7QUriD1R24GFbMPHz82NQ1Bm8X", "senderPublicKey": "7qxgAGEdFEuaxkfo1V6qHhBmhHqHkYmiow76yMaFuQBx", "proofs": [ "2Nn2nFXh95HqJaitxjjt5qQUTZZHLNwR6ebCcFRsqsmVJCqLS1T6AA24ge3ehynuJL5VxMetnEL9yciDAhaozQJ8" ], "script": "base64:BgIrCAISBQoDCAEIEgsKCQgIGAEBAQgICBIFCgMICAgSABIAEgMKAQgSAwoBCCIACVNFUEFSQVRPUgICX18ACEtFWV9JTklUAgRJTklUAAxLRVlfTVVMVElTSUcCCE1VTFRJU0lHAApLRVlfU1RBVFVTAgZTVEFUVVMACktFWV9QQVVTRUQCBlBBVVNFRAAKS0VZX1BBVVNFUgIGUEFVU0VSAAxLRVlfQ0hBSU5fSUQCCENIQUlOX0lEABVLRVlfU0lHTkVSX1BVQkxJQ19LRVkCEVNJR05FUl9QVUJMSUNfS0VZAA1LRVlfREFUQV9IQVNIAglEQVRBX0hBU0gAB01BWF9JTlQA//////////9/ARBfdmFsaWRhdGVBZGRyZXNzAghhZGRyZXNzXwRlcnJfBAckbWF0Y2gwCQCmCAEFCGFkZHJlc3NfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGCQACAQUEZXJyXwESX3ZhbGlkYXRlUHVibGljS2V5AgpwdWJsaWNLZXlfBGVycl8DCQECIT0CCQDIAQEJANkEAQUKcHVibGljS2V5XwAgCQACAQUEZXJyXwYBDF92YWxpZGF0ZUludAQEdmFsXw5sb3dlckJvdW5kYXJ5Xw51cHBlckJvdW5kYXJ5XwRlcnJfAwMJAGYCBQ5sb3dlckJvdW5kYXJ5XwUEdmFsXwYJAGYCBQR2YWxfBQ51cHBlckJvdW5kYXJ5XwkAAgEFBGVycl8GAQlfbG9hZEluaXQABAckbWF0Y2gwCQCgCAEFCEtFWV9JTklUAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQlfc2F2ZUluaXQBB2lzSW5pdF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCEtFWV9JTklUBQdpc0luaXRfBQNuaWwBCl9sb2FkUGF1c2UABAckbWF0Y2gwCQCgCAEFCktFWV9QQVVTRUQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCl9zYXZlUGF1c2UBCWlzUGF1c2VkXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUKS0VZX1BBVVNFRAUJaXNQYXVzZWRfBQNuaWwBC19sb2FkUGF1c2VyAAQHJG1hdGNoMAkAoggBBQpLRVlfUEFVU0VSAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABC19zYXZlUGF1c2VyAQdwYXVzZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9QQVVTRVIJAKUIAQUHcGF1c2VyXwUDbmlsAQ1fbG9hZE11bHRpc2lnAAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAENX3NhdmVNdWx0aXNpZwEJbXVsdGlzaWdfCQDMCAIJAQtTdHJpbmdFbnRyeQIFDEtFWV9NVUxUSVNJRwkApQgBBQltdWx0aXNpZ18FA25pbAEMX2xvYWRDaGFpbklkAAQHJG1hdGNoMAkAnwgBBQxLRVlfQ0hBSU5fSUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABDF9zYXZlQ2hhaW5JZAEIY2hhaW5JZF8JAMwIAgkBDEludGVnZXJFbnRyeQIFDEtFWV9DSEFJTl9JRAUIY2hhaW5JZF8FA25pbAEUX2xvYWRTaWduZXJQdWJsaWNLZXkABAckbWF0Y2gwCQCiCAEFFUtFWV9TSUdORVJfUFVCTElDX0tFWQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJANkEAQUBYQEAARRfc2F2ZVNpZ25lclB1YmxpY0tleQEQc2lnbmVyUHVibGljS2V5XwkAzAgCCQELU3RyaW5nRW50cnkCBRVLRVlfU0lHTkVSX1BVQkxJQ19LRVkJANgEAQUQc2lnbmVyUHVibGljS2V5XwUDbmlsAQ1fbG9hZERhdGFIYXNoAQlkYXRhSGFzaF8EByRtYXRjaDAJAJ8IAQkAuQkCCQDMCAIFDUtFWV9EQVRBX0hBU0gJAMwIAgkA2AQBBQlkYXRhSGFzaF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAQ1fc2F2ZURhdGFIYXNoAglkYXRhSGFzaF8HaGVpZ2h0XwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFDUtFWV9EQVRBX0hBU0gJAMwIAgkA2AQBBQlkYXRhSGFzaF8FA25pbAUJU0VQQVJBVE9SBQdoZWlnaHRfBQNuaWwBEV9vbmx5VGhpc0NvbnRyYWN0AQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwUEdGhpcwkAAgECGV9vbmx5VGhpc0NvbnRyYWN0OiByZXZlcnQGARBfd2hlbk11bHRpc2lnU2V0AAMJAAACCQENX2xvYWRNdWx0aXNpZwAJAQdBZGRyZXNzAQEACQACAQIYX3doZW5NdWx0aXNpZ1NldDogcmV2ZXJ0BgETX3doZW5Ob3RJbml0aWFsaXplZAADCQEJX2xvYWRJbml0AAkAAgECG193aGVuTm90SW5pdGlhbGl6ZWQ6IHJldmVydAYBEF93aGVuSW5pdGlhbGl6ZWQAAwkBASEBCQEJX2xvYWRJbml0AAkAAgECGF93aGVuSW5pdGlhbGl6ZWQ6IHJldmVydAYBDl93aGVuTm90UGF1c2VkAAMJAQpfbG9hZFBhdXNlAAkAAgECFl93aGVuTm90UGF1c2VkOiByZXZlcnQGAQtfd2hlblBhdXNlZAADCQEBIQEJAQpfbG9hZFBhdXNlAAkAAgECE193aGVuUGF1c2VkOiByZXZlcnQGAQtfb25seVBhdXNlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQtfbG9hZFBhdXNlcgAJAAIBAhNfb25seVBhdXNlcjogcmV2ZXJ0BgcBaQEEaW5pdAMHcGF1c2VyXwhjaGFpbklkXxBzaWduZXJQdWJsaWNLZXlfBANlcnIDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQETX3doZW5Ob3RJbml0aWFsaXplZAAHCQEQX3doZW5NdWx0aXNpZ1NldAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CFGluaXQ6IGludmFsaWQgcGF1c2VyBwkBDF92YWxpZGF0ZUludAQFCGNoYWluSWRfAAAFB01BWF9JTlQCFmluaXQ6IGludmFsaWQgY2hhaW4gaWQHCQESX3ZhbGlkYXRlUHVibGljS2V5AgUQc2lnbmVyUHVibGljS2V5XwIfaW5pdDogaW52YWxpZCBzaWduZXIgcHVibGljIGtleQcDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzggCCQDOCAIJAM4IAgkBCV9zYXZlSW5pdAEGCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfCQEMX3NhdmVDaGFpbklkAQUIY2hhaW5JZF8JARRfc2F2ZVNpZ25lclB1YmxpY0tleQEJANkEAQUQc2lnbmVyUHVibGljS2V5XwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdleGVjdXRlCQljb250cmFjdF8NZnVuY3Rpb25OYW1lXw1mdW5jdGlvbkFyZ3NfDmNhbGxlckNoYWluSWRfEWV4ZWN1dGlvbkNoYWluSWRfBm5vbmNlXw9jYWxsZXJDb250cmFjdF8HdHhIYXNoXwpzaWduYXR1cmVfBANlcnIDAwMJARBfd2hlbkluaXRpYWxpemVkAAkBDl93aGVuTm90UGF1c2VkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUJY29udHJhY3RfAhlleGVjdXRlOiBpbnZhbGlkIGNvbnRyYWN0BwMJAQIhPQIJAQxfbG9hZENoYWluSWQABRFleGVjdXRpb25DaGFpbklkXwkAAgECI2V4ZWN1dGU6IGludmFsaWQgZXhlY3V0aW9uIGNoYWluIGlkBgcDCQAAAgUDZXJyBQNlcnIKAQhmb2xkRnVuYwIDYWNjBGVsZW0JAMsBAgUDYWNjCQCbAwEFBGVsZW0ECWFyZ3NCeXRlcwoAAiRsBQ1mdW5jdGlvbkFyZ3NfCgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmb2xkRnVuYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgQEZGF0YQkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQCaAwEFDmNhbGxlckNoYWluSWRfCQCaAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQCaAwEFBm5vbmNlXwkAmwMBBQ9jYWxsZXJDb250cmFjdF8JAJsDAQUHdHhIYXNoXwkA2QQBBQljb250cmFjdF8JAJsDAQUNZnVuY3Rpb25OYW1lXwUJYXJnc0J5dGVzBAhkYXRhSGFzaAkAjRUBBQRkYXRhBARlcnIxAwkBASEBCQD0AwMFCGRhdGFIYXNoCQDZBAEFCnNpZ25hdHVyZV8JARRfbG9hZFNpZ25lclB1YmxpY0tleQAJAAIBAhpleGVjdXRlOiBpbnZhbGlkIHNpZ25hdHVyZQMJAGYCCQENX2xvYWREYXRhSGFzaAEFCGRhdGFIYXNoAAAJAAIBAhdleGVjdXRlOiBkdXBsaWNhdGUgZGF0YQUEdW5pdAMJAAACBQRlcnIxBQRlcnIxBAppbnZvY2F0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWNvbnRyYWN0XwUNZnVuY3Rpb25OYW1lXwkAzAgCBQ9jYWxsZXJDb250cmFjdF8FDWZ1bmN0aW9uQXJnc18FA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uCQCUCgIJAQ1fc2F2ZURhdGFIYXNoAgUIZGF0YUhhc2gFBmhlaWdodAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQx1cGRhdGVTaWduZXIDE25ld1NpZ25lclB1YmxpY0tleV8Nb2xkU2lnbmF0dXJlXw1uZXdTaWduYXR1cmVfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQESX3ZhbGlkYXRlUHVibGljS2V5AgUTbmV3U2lnbmVyUHVibGljS2V5XwIndXBkYXRlU2lnbmVyOiBpbnZhbGlkIHNpZ25lciBwdWJsaWMga2V5BwMJAAACBQNlcnIFA2VycgQSb2xkU2lnbmVyUHVibGljS2V5CQEUX2xvYWRTaWduZXJQdWJsaWNLZXkABAdvbGREYXRhCQDLAQIJAMsBAgkAmwMBAiU8PDxQVUJMSUMtLUtFWS0tTUlHUkFUSU9OLS1BTExPV0VEPj4+BRJvbGRTaWduZXJQdWJsaWNLZXkJANkEAQUTbmV3U2lnbmVyUHVibGljS2V5XwQSbmV3U2lnbmVyUHVibGljS2V5CQDZBAEFE25ld1NpZ25lclB1YmxpY0tleV8EB25ld0RhdGEJAMsBAgkAywECCQCbAwECJzw8PFBVQkxJQy0tS0VZLS1NSUdSQVRJT04tLUNPTkZJUk1FRD4+PgUSb2xkU2lnbmVyUHVibGljS2V5CQCbAwEFE25ld1NpZ25lclB1YmxpY0tleV8EBGVycjEDCQEBIQEJAMQTAwUHb2xkRGF0YQkA2QQBBQ1vbGRTaWduYXR1cmVfBRJvbGRTaWduZXJQdWJsaWNLZXkJAAIBAiN1cGRhdGVTaWduZXI6IGludmFsaWQgb2xkIHNpZ25hdHVyZQMJAQEhAQkAxBMDBQduZXdEYXRhCQDZBAEFDW5ld1NpZ25hdHVyZV8FEm5ld1NpZ25lclB1YmxpY0tleQkAAgECI3VwZGF0ZVNpZ25lcjogaW52YWxpZCBuZXcgc2lnbmF0dXJlBQR1bml0AwkAAAIFBGVycjEFBGVycjEJAJQKAgkBFF9zYXZlU2lnbmVyUHVibGljS2V5AQUSbmV3U2lnbmVyUHVibGljS2V5BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBDl93aGVuTm90UGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQd1bnBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBC193aGVuUGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQx1cGRhdGVQYXVzZXIBB3BhdXNlcl8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCW11bHRpc2lnXwIlc2V0TXVsdGlzaWc6IGludmFsaWQgbXVsdGlzaWcgYWRkcmVzcwcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDV9zYXZlTXVsdGlzaWcBCQERQGV4dHJOYXRpdmUoMTA2MikBBQltdWx0aXNpZ18FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleVTpyM8=", "height": 2462000, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4NPV2tWcrFhto2a4JhLT9orRxMTheEcVnB1ujBwxMx4X Next: none Diff:
OldNewDifferences
202202
203203 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
204204 }
205- let data = (((((((toBytes(callerChainId_) + toBytes(executionChainId_)) + toBytes(nonce_)) + fromBase58String(callerContract_)) + toBytes(txHash_)) + fromBase58String(contract_)) + toBytes(functionName_)) + argsBytes)
205+ let data = (((((((toBytes(callerChainId_) + toBytes(executionChainId_)) + toBytes(nonce_)) + toBytes(callerContract_)) + toBytes(txHash_)) + fromBase58String(contract_)) + toBytes(functionName_)) + argsBytes)
206206 let dataHash = keccak256_32Kb(data)
207207 let err1 = if (!(sigVerify(dataHash, fromBase58String(signature_), _loadSignerPublicKey())))
208208 then throw("execute: invalid signature")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let KEY_INIT = "INIT"
77
88 let KEY_MULTISIG = "MULTISIG"
99
1010 let KEY_STATUS = "STATUS"
1111
1212 let KEY_PAUSED = "PAUSED"
1313
1414 let KEY_PAUSER = "PAUSER"
1515
1616 let KEY_CHAIN_ID = "CHAIN_ID"
1717
1818 let KEY_SIGNER_PUBLIC_KEY = "SIGNER_PUBLIC_KEY"
1919
2020 let KEY_DATA_HASH = "DATA_HASH"
2121
2222 let MAX_INT = 9223372036854775807
2323
2424 func _validateAddress (address_,err_) = match addressFromString(address_) {
2525 case a: Address =>
2626 true
2727 case _ =>
2828 throw(err_)
2929 }
3030
3131
3232 func _validatePublicKey (publicKey_,err_) = if ((size(fromBase58String(publicKey_)) != 32))
3333 then throw(err_)
3434 else true
3535
3636
3737 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
3838 then true
3939 else (val_ > upperBoundary_))
4040 then throw(err_)
4141 else true
4242
4343
4444 func _loadInit () = match getBoolean(KEY_INIT) {
4545 case a: Boolean =>
4646 a
4747 case _ =>
4848 false
4949 }
5050
5151
5252 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
5353
5454
5555 func _loadPause () = match getBoolean(KEY_PAUSED) {
5656 case a: Boolean =>
5757 a
5858 case _ =>
5959 false
6060 }
6161
6262
6363 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
6464
6565
6666 func _loadPauser () = match getString(KEY_PAUSER) {
6767 case a: String =>
6868 addressFromStringValue(a)
6969 case _ =>
7070 Address(base58'')
7171 }
7272
7373
7474 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
7575
7676
7777 func _loadMultisig () = match getString(KEY_MULTISIG) {
7878 case a: String =>
7979 addressFromStringValue(a)
8080 case _ =>
8181 Address(base58'')
8282 }
8383
8484
8585 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
8686
8787
8888 func _loadChainId () = match getInteger(KEY_CHAIN_ID) {
8989 case a: Int =>
9090 a
9191 case _ =>
9292 0
9393 }
9494
9595
9696 func _saveChainId (chainId_) = [IntegerEntry(KEY_CHAIN_ID, chainId_)]
9797
9898
9999 func _loadSignerPublicKey () = match getString(KEY_SIGNER_PUBLIC_KEY) {
100100 case a: String =>
101101 fromBase58String(a)
102102 case _ =>
103103 base58''
104104 }
105105
106106
107107 func _saveSignerPublicKey (signerPublicKey_) = [StringEntry(KEY_SIGNER_PUBLIC_KEY, toBase58String(signerPublicKey_))]
108108
109109
110110 func _loadDataHash (dataHash_) = match getInteger(makeString([KEY_DATA_HASH, toBase58String(dataHash_)], SEPARATOR)) {
111111 case a: Int =>
112112 a
113113 case _ =>
114114 0
115115 }
116116
117117
118118 func _saveDataHash (dataHash_,height_) = [IntegerEntry(makeString([KEY_DATA_HASH, toBase58String(dataHash_)], SEPARATOR), height_)]
119119
120120
121121 func _onlyThisContract (caller_) = if ((caller_ != this))
122122 then throw("_onlyThisContract: revert")
123123 else true
124124
125125
126126 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
127127 then throw("_whenMultisigSet: revert")
128128 else true
129129
130130
131131 func _whenNotInitialized () = if (_loadInit())
132132 then throw("_whenNotInitialized: revert")
133133 else true
134134
135135
136136 func _whenInitialized () = if (!(_loadInit()))
137137 then throw("_whenInitialized: revert")
138138 else true
139139
140140
141141 func _whenNotPaused () = if (_loadPause())
142142 then throw("_whenNotPaused: revert")
143143 else true
144144
145145
146146 func _whenPaused () = if (!(_loadPause()))
147147 then throw("_whenPaused: revert")
148148 else true
149149
150150
151151 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
152152 then throw("_onlyPauser: revert")
153153 else true
154154
155155
156156 @Callable(i)
157157 func init (pauser_,chainId_,signerPublicKey_) = {
158158 let err = if (if (if (if (if (_onlyThisContract(i.caller))
159159 then _whenNotInitialized()
160160 else false)
161161 then _whenMultisigSet()
162162 else false)
163163 then _validateAddress(pauser_, "init: invalid pauser")
164164 else false)
165165 then _validateInt(chainId_, 0, MAX_INT, "init: invalid chain id")
166166 else false)
167167 then _validatePublicKey(signerPublicKey_, "init: invalid signer public key")
168168 else false
169169 if ((err == err))
170170 then $Tuple2((((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveChainId(chainId_)) ++ _saveSignerPublicKey(fromBase58String(signerPublicKey_))), unit)
171171 else throw("Strict value is not equal to itself.")
172172 }
173173
174174
175175
176176 @Callable(i)
177177 func execute (contract_,functionName_,functionArgs_,callerChainId_,executionChainId_,nonce_,callerContract_,txHash_,signature_) = {
178178 let err = if (if (if (_whenInitialized())
179179 then _whenNotPaused()
180180 else false)
181181 then _validateAddress(contract_, "execute: invalid contract")
182182 else false)
183183 then if ((_loadChainId() != executionChainId_))
184184 then throw("execute: invalid execution chain id")
185185 else true
186186 else false
187187 if ((err == err))
188188 then {
189189 func foldFunc (acc,elem) = (acc + toBytes(elem))
190190
191191 let argsBytes = {
192192 let $l = functionArgs_
193193 let $s = size($l)
194194 let $acc0 = base58''
195195 func $f0_1 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else foldFunc($a, $l[$i])
198198
199199 func $f0_2 ($a,$i) = if (($i >= $s))
200200 then $a
201201 else throw("List size exceeds 22")
202202
203203 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22)
204204 }
205- let data = (((((((toBytes(callerChainId_) + toBytes(executionChainId_)) + toBytes(nonce_)) + fromBase58String(callerContract_)) + toBytes(txHash_)) + fromBase58String(contract_)) + toBytes(functionName_)) + argsBytes)
205+ let data = (((((((toBytes(callerChainId_) + toBytes(executionChainId_)) + toBytes(nonce_)) + toBytes(callerContract_)) + toBytes(txHash_)) + fromBase58String(contract_)) + toBytes(functionName_)) + argsBytes)
206206 let dataHash = keccak256_32Kb(data)
207207 let err1 = if (!(sigVerify(dataHash, fromBase58String(signature_), _loadSignerPublicKey())))
208208 then throw("execute: invalid signature")
209209 else if ((_loadDataHash(dataHash) > 0))
210210 then throw("execute: duplicate data")
211211 else unit
212212 if ((err1 == err1))
213213 then {
214214 let invocation = invoke(addressFromStringValue(contract_), functionName_, callerContract_ :: functionArgs_, nil)
215215 if ((invocation == invocation))
216216 then $Tuple2(_saveDataHash(dataHash, height), unit)
217217 else throw("Strict value is not equal to itself.")
218218 }
219219 else throw("Strict value is not equal to itself.")
220220 }
221221 else throw("Strict value is not equal to itself.")
222222 }
223223
224224
225225
226226 @Callable(i)
227227 func updateSigner (newSignerPublicKey_,oldSignature_,newSignature_) = {
228228 let err = if (if (_onlyThisContract(i.caller))
229229 then _whenInitialized()
230230 else false)
231231 then _validatePublicKey(newSignerPublicKey_, "updateSigner: invalid signer public key")
232232 else false
233233 if ((err == err))
234234 then {
235235 let oldSignerPublicKey = _loadSignerPublicKey()
236236 let oldData = ((toBytes("<<<PUBLIC--KEY--MIGRATION--ALLOWED>>>") + oldSignerPublicKey) + fromBase58String(newSignerPublicKey_))
237237 let newSignerPublicKey = fromBase58String(newSignerPublicKey_)
238238 let newData = ((toBytes("<<<PUBLIC--KEY--MIGRATION--CONFIRMED>>>") + oldSignerPublicKey) + toBytes(newSignerPublicKey_))
239239 let err1 = if (!(sigVerify_8Kb(oldData, fromBase58String(oldSignature_), oldSignerPublicKey)))
240240 then throw("updateSigner: invalid old signature")
241241 else if (!(sigVerify_8Kb(newData, fromBase58String(newSignature_), newSignerPublicKey)))
242242 then throw("updateSigner: invalid new signature")
243243 else unit
244244 if ((err1 == err1))
245245 then $Tuple2(_saveSignerPublicKey(newSignerPublicKey), unit)
246246 else throw("Strict value is not equal to itself.")
247247 }
248248 else throw("Strict value is not equal to itself.")
249249 }
250250
251251
252252
253253 @Callable(i)
254254 func pause () = {
255255 let err = if (if (_onlyPauser(i.caller))
256256 then _whenInitialized()
257257 else false)
258258 then _whenNotPaused()
259259 else false
260260 if ((err == err))
261261 then $Tuple2(_savePause(true), unit)
262262 else throw("Strict value is not equal to itself.")
263263 }
264264
265265
266266
267267 @Callable(i)
268268 func unpause () = {
269269 let err = if (if (_onlyPauser(i.caller))
270270 then _whenInitialized()
271271 else false)
272272 then _whenPaused()
273273 else false
274274 if ((err == err))
275275 then $Tuple2(_savePause(false), unit)
276276 else throw("Strict value is not equal to itself.")
277277 }
278278
279279
280280
281281 @Callable(i)
282282 func updatePauser (pauser_) = {
283283 let err = if (if (_onlyThisContract(i.caller))
284284 then _whenInitialized()
285285 else false)
286286 then _validateAddress(pauser_, "init: invalid pauser")
287287 else false
288288 if ((err == err))
289289 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
290290 else throw("Strict value is not equal to itself.")
291291 }
292292
293293
294294
295295 @Callable(i)
296296 func setMultisig (multisig_) = {
297297 let err = if (_onlyThisContract(i.caller))
298298 then _validateAddress(multisig_, "setMultisig: invalid multisig address")
299299 else false
300300 if ((err == err))
301301 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
302302 else throw("Strict value is not equal to itself.")
303303 }
304304
305305
306306 @Verifier(tx)
307307 func verify () = match getString(KEY_MULTISIG) {
308308 case multisig: String =>
309309 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
310310 case _ =>
311311 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
312312 }
313313

github/deemru/w8io/873ac7e 
36.40 ms