tx · 9zKjLEPw6yyNPY7EBLd2gNHvMjoToBqVpi7QZUyFdYyf

3P8QmHemZAMwgpFL51Q9UawpE3WsybZN3ke:  -0.01400000 Waves

2023.03.22 17:13 [3566918] smart account 3P8QmHemZAMwgpFL51Q9UawpE3WsybZN3ke > SELF 0.00000000 Waves

{ "type": 13, "id": "9zKjLEPw6yyNPY7EBLd2gNHvMjoToBqVpi7QZUyFdYyf", "fee": 1400000, "feeAssetId": null, "timestamp": 1679494445650, "version": 2, "chainId": 87, "sender": "3P8QmHemZAMwgpFL51Q9UawpE3WsybZN3ke", "senderPublicKey": "82Zia2HEBCxTSdcjbcc31kVwRWcRPggvaNkkb3xmGGBD", "proofs": [ "5QtivyWJyBngtjAa4uM3YZvG1BAKJ2hD2AiL2mrELUK2SF4phh7xooEquzH9mVXiyR1YGuL6E5QyTUvnYDCP9HQM" ], "script": "base64:BgIqCAISBQoDCAEIEgoKCAgIGAEBAQgIEgUKAwgICBIAEgASAwoBCBIDCgEIIgAJU0VQQVJBVE9SAgJfXwAIS0VZX0lOSVQCBElOSVQADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwAKS0VZX1BBVVNFRAIGUEFVU0VEAApLRVlfUEFVU0VSAgZQQVVTRVIADEtFWV9DSEFJTl9JRAIIQ0hBSU5fSUQAFUtFWV9TSUdORVJfUFVCTElDX0tFWQIRU0lHTkVSX1BVQkxJQ19LRVkADUtFWV9EQVRBX0hBU0gCCURBVEFfSEFTSAAHTUFYX0lOVAD//////////38BEF92YWxpZGF0ZUFkZHJlc3MCCGFkZHJlc3NfBGVycl8EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYJAAIBBQRlcnJfARJfdmFsaWRhdGVQdWJsaWNLZXkCCnB1YmxpY0tleV8EZXJyXwMJAQIhPQIJAMgBAQkA2QQBBQpwdWJsaWNLZXlfACAJAAIBBQRlcnJfBgEMX3ZhbGlkYXRlSW50BAR2YWxfDmxvd2VyQm91bmRhcnlfDnVwcGVyQm91bmRhcnlfBGVycl8DAwkAZgIFDmxvd2VyQm91bmRhcnlfBQR2YWxfBgkAZgIFBHZhbF8FDnVwcGVyQm91bmRhcnlfCQACAQUEZXJyXwYBCV9sb2FkSW5pdAAEByRtYXRjaDAJAKAIAQUIS0VZX0lOSVQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCV9zYXZlSW5pdAEHaXNJbml0XwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIS0VZX0lOSVQFB2lzSW5pdF8FA25pbAEKX2xvYWRQYXVzZQAEByRtYXRjaDAJAKAIAQUKS0VZX1BBVVNFRAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEKX3NhdmVQYXVzZQEJaXNQYXVzZWRfCQDMCAIJAQxCb29sZWFuRW50cnkCBQpLRVlfUEFVU0VEBQlpc1BhdXNlZF8FA25pbAELX2xvYWRQYXVzZXIABAckbWF0Y2gwCQCiCAEFCktFWV9QQVVTRVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAELX3NhdmVQYXVzZXIBB3BhdXNlcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUKS0VZX1BBVVNFUgkApQgBBQdwYXVzZXJfBQNuaWwBDV9sb2FkTXVsdGlzaWcABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZU11bHRpc2lnAQltdWx0aXNpZ18JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHCQClCAEFCW11bHRpc2lnXwUDbmlsAQxfbG9hZENoYWluSWQABAckbWF0Y2gwCQCfCAEFDEtFWV9DSEFJTl9JRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEMX3NhdmVDaGFpbklkAQhjaGFpbklkXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUMS0VZX0NIQUlOX0lEBQhjaGFpbklkXwUDbmlsARRfbG9hZFNpZ25lclB1YmxpY0tleQAEByRtYXRjaDAJAKIIAQUVS0VZX1NJR05FUl9QVUJMSUNfS0VZAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkA2QQBBQFhAQABFF9zYXZlU2lnbmVyUHVibGljS2V5ARBzaWduZXJQdWJsaWNLZXlfCQDMCAIJAQtTdHJpbmdFbnRyeQIFFUtFWV9TSUdORVJfUFVCTElDX0tFWQkA2AQBBRBzaWduZXJQdWJsaWNLZXlfBQNuaWwBDV9sb2FkRGF0YUhhc2gBCWRhdGFIYXNoXwQHJG1hdGNoMAkAnwgBCQC5CQIJAMwIAgUNS0VZX0RBVEFfSEFTSAkAzAgCCQDYBAEFCWRhdGFIYXNoXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABDV9zYXZlRGF0YUhhc2gCCWRhdGFIYXNoXwdoZWlnaHRfCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQC5CQIJAMwIAgUNS0VZX0RBVEFfSEFTSAkAzAgCCQDYBAEFCWRhdGFIYXNoXwUDbmlsBQlTRVBBUkFUT1IFB2hlaWdodF8FA25pbAERX29ubHlUaGlzQ29udHJhY3QBB2NhbGxlcl8DCQECIT0CBQdjYWxsZXJfBQR0aGlzCQACAQIZX29ubHlUaGlzQ29udHJhY3Q6IHJldmVydAYBEF93aGVuTXVsdGlzaWdTZXQAAwkAAAIJAQ1fbG9hZE11bHRpc2lnAAkBB0FkZHJlc3MBAQAJAAIBAhhfd2hlbk11bHRpc2lnU2V0OiByZXZlcnQGARNfd2hlbk5vdEluaXRpYWxpemVkAAMJAQlfbG9hZEluaXQACQACAQIbX3doZW5Ob3RJbml0aWFsaXplZDogcmV2ZXJ0BgEQX3doZW5Jbml0aWFsaXplZAADCQEBIQEJAQlfbG9hZEluaXQACQACAQIYX3doZW5Jbml0aWFsaXplZDogcmV2ZXJ0BgEOX3doZW5Ob3RQYXVzZWQAAwkBCl9sb2FkUGF1c2UACQACAQIWX3doZW5Ob3RQYXVzZWQ6IHJldmVydAYBC193aGVuUGF1c2VkAAMJAQEhAQkBCl9sb2FkUGF1c2UACQACAQITX3doZW5QYXVzZWQ6IHJldmVydAYBC19vbmx5UGF1c2VyAQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwkBC19sb2FkUGF1c2VyAAkAAgECE19vbmx5UGF1c2VyOiByZXZlcnQGBwFpAQRpbml0AwdwYXVzZXJfCGNoYWluSWRfEHNpZ25lclB1YmxpY0tleV8EA2VycgMDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARNfd2hlbk5vdEluaXRpYWxpemVkAAcJARBfd2hlbk11bHRpc2lnU2V0AAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHCQEMX3ZhbGlkYXRlSW50BAUIY2hhaW5JZF8AAAUHTUFYX0lOVAIWaW5pdDogaW52YWxpZCBjaGFpbiBpZAcJARJfdmFsaWRhdGVQdWJsaWNLZXkCBRBzaWduZXJQdWJsaWNLZXlfAh9pbml0OiBpbnZhbGlkIHNpZ25lciBwdWJsaWMga2V5BwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJAM4IAgkAzggCCQEJX3NhdmVJbml0AQYJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8JAQxfc2F2ZUNoYWluSWQBBQhjaGFpbklkXwkBFF9zYXZlU2lnbmVyUHVibGljS2V5AQkA2QQBBRBzaWduZXJQdWJsaWNLZXlfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2V4ZWN1dGUICWNvbnRyYWN0Xw1mdW5jdGlvbk5hbWVfDWZ1bmN0aW9uQXJnc18OY2FsbGVyQ2hhaW5JZF8RZXhlY3V0aW9uQ2hhaW5JZF8Gbm9uY2VfB3R4SGFzaF8Kc2lnbmF0dXJlXwQIYXJnc1NpemUJAJADAQUNZnVuY3Rpb25BcmdzXwQDZXJyAwMDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQljb250cmFjdF8CGWV4ZWN1dGU6IGludmFsaWQgY29udHJhY3QHCQEMX3ZhbGlkYXRlSW50BAUIYXJnc1NpemUAAAAWAhpleGVjdXRlOiBpbnZhbGlkIGFyZ3Mgc2l6ZQcDCQECIT0CCQEMX2xvYWRDaGFpbklkAAURZXhlY3V0aW9uQ2hhaW5JZF8JAAIBAiNleGVjdXRlOiBpbnZhbGlkIGV4ZWN1dGlvbiBjaGFpbiBpZAYHAwkAAAIFA2VycgUDZXJyCgEIZm9sZEZ1bmMCA2FjYwRlbGVtCQDLAQIJAMsBAgUDYWNjCQCaAwEJALECAQUEZWxlbQkAmwMBBQRlbGVtBAlhcmdzQnl0ZXMKAAIkbAUNZnVuY3Rpb25BcmdzXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzABAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZm9sZEZ1bmMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYEBGRhdGEJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAMsBAgkAywECCQDLAQIJAJoDAQUOY2FsbGVyQ2hhaW5JZF8JAJoDAQURZXhlY3V0aW9uQ2hhaW5JZF8JAJoDAQUGbm9uY2VfCQCaAwEJALECAQUHdHhIYXNoXwkAmwMBBQd0eEhhc2hfCQDZBAEFCWNvbnRyYWN0XwkAmgMBCQCxAgEFDWZ1bmN0aW9uTmFtZV8JAJsDAQUNZnVuY3Rpb25OYW1lXwkAmgMBBQhhcmdzU2l6ZQUJYXJnc0J5dGVzBAhkYXRhSGFzaAkAjRUBBQRkYXRhBARlcnIxAwkBASEBCQD0AwMFCGRhdGFIYXNoCQDZBAEFCnNpZ25hdHVyZV8JARRfbG9hZFNpZ25lclB1YmxpY0tleQAJAAIBAhpleGVjdXRlOiBpbnZhbGlkIHNpZ25hdHVyZQMJAGYCCQENX2xvYWREYXRhSGFzaAEFCGRhdGFIYXNoAAAJAAIBAhdleGVjdXRlOiBkdXBsaWNhdGUgZGF0YQUEdW5pdAMJAAACBQRlcnIxBQRlcnIxBAppbnZvY2F0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWNvbnRyYWN0XwUNZnVuY3Rpb25OYW1lXwUNZnVuY3Rpb25BcmdzXwUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24JAJQKAgkBDV9zYXZlRGF0YUhhc2gCBQhkYXRhSGFzaAUGaGVpZ2h0BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHVwZGF0ZVNpZ25lcgMTbmV3U2lnbmVyUHVibGljS2V5Xw1vbGRTaWduYXR1cmVfDW5ld1NpZ25hdHVyZV8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARJfdmFsaWRhdGVQdWJsaWNLZXkCBRNuZXdTaWduZXJQdWJsaWNLZXlfAid1cGRhdGVTaWduZXI6IGludmFsaWQgc2lnbmVyIHB1YmxpYyBrZXkHAwkAAAIFA2VycgUDZXJyBBJvbGRTaWduZXJQdWJsaWNLZXkJARRfbG9hZFNpZ25lclB1YmxpY0tleQAEB29sZERhdGEJAMsBAgkAywECCQCbAwECJTw8PFBVQkxJQy0tS0VZLS1NSUdSQVRJT04tLUFMTE9XRUQ+Pj4FEm9sZFNpZ25lclB1YmxpY0tleQkA2QQBBRNuZXdTaWduZXJQdWJsaWNLZXlfBBJuZXdTaWduZXJQdWJsaWNLZXkJANkEAQUTbmV3U2lnbmVyUHVibGljS2V5XwQHbmV3RGF0YQkAywECCQDLAQIJAJsDAQInPDw8UFVCTElDLS1LRVktLU1JR1JBVElPTi0tQ09ORklSTUVEPj4+BRJvbGRTaWduZXJQdWJsaWNLZXkJANkEAQUTbmV3U2lnbmVyUHVibGljS2V5XwQEZXJyMQMJAQEhAQkAxBMDBQdvbGREYXRhCQDZBAEFDW9sZFNpZ25hdHVyZV8FEm9sZFNpZ25lclB1YmxpY0tleQkAAgECI3VwZGF0ZVNpZ25lcjogaW52YWxpZCBvbGQgc2lnbmF0dXJlAwkBASEBCQDEEwMFB25ld0RhdGEJANkEAQUNbmV3U2lnbmF0dXJlXwUSbmV3U2lnbmVyUHVibGljS2V5CQACAQIjdXBkYXRlU2lnbmVyOiBpbnZhbGlkIG5ldyBzaWduYXR1cmUFBHVuaXQDCQAAAgUEZXJyMQUEZXJyMQkAlAoCCQEUX3NhdmVTaWduZXJQdWJsaWNLZXkBBRJuZXdTaWduZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcGF1c2UABANlcnIDAwkBC19vbmx5UGF1c2VyAQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEOX3doZW5Ob3RQYXVzZWQABwMJAAACBQNlcnIFA2VycgkAlAoCCQEKX3NhdmVQYXVzZQEGBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3VucGF1c2UABANlcnIDAwkBC19vbmx5UGF1c2VyAQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQELX3doZW5QYXVzZWQABwMJAAACBQNlcnIFA2VycgkAlAoCCQEKX3NhdmVQYXVzZQEHBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHVwZGF0ZVBhdXNlcgEHcGF1c2VyXwQDZXJyAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdwYXVzZXJfAhRpbml0OiBpbnZhbGlkIHBhdXNlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBC19zYXZlUGF1c2VyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcGF1c2VyXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtzZXRNdWx0aXNpZwEJbXVsdGlzaWdfBANlcnIDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfdmFsaWRhdGVBZGRyZXNzAgUJbXVsdGlzaWdfAiVzZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZyBhZGRyZXNzBwMJAAACBQNlcnIFA2VycgkAlAoCCQENX3NhdmVNdWx0aXNpZwEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW11bHRpc2lnXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcJALkJAgkAzAgCBQpLRVlfU1RBVFVTCQDMCAIJAKUIAQUEdGhpcwkAzAgCCQDYBAEIBQJ0eAJpZAUDbmlsBQlTRVBBUkFUT1IHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5pavHcw==", "height": 3566918, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEPARATOR = "__"
5+
6+let KEY_INIT = "INIT"
7+
8+let KEY_MULTISIG = "MULTISIG"
9+
10+let KEY_STATUS = "STATUS"
11+
12+let KEY_PAUSED = "PAUSED"
13+
14+let KEY_PAUSER = "PAUSER"
15+
16+let KEY_CHAIN_ID = "CHAIN_ID"
17+
18+let KEY_SIGNER_PUBLIC_KEY = "SIGNER_PUBLIC_KEY"
19+
20+let KEY_DATA_HASH = "DATA_HASH"
21+
22+let MAX_INT = 9223372036854775807
23+
24+func _validateAddress (address_,err_) = match addressFromString(address_) {
25+ case a: Address =>
26+ true
27+ case _ =>
28+ throw(err_)
29+}
30+
31+
32+func _validatePublicKey (publicKey_,err_) = if ((size(fromBase58String(publicKey_)) != 32))
33+ then throw(err_)
34+ else true
35+
36+
37+func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
38+ then true
39+ else (val_ > upperBoundary_))
40+ then throw(err_)
41+ else true
42+
43+
44+func _loadInit () = match getBoolean(KEY_INIT) {
45+ case a: Boolean =>
46+ a
47+ case _ =>
48+ false
49+}
50+
51+
52+func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
53+
54+
55+func _loadPause () = match getBoolean(KEY_PAUSED) {
56+ case a: Boolean =>
57+ a
58+ case _ =>
59+ false
60+}
61+
62+
63+func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
64+
65+
66+func _loadPauser () = match getString(KEY_PAUSER) {
67+ case a: String =>
68+ addressFromStringValue(a)
69+ case _ =>
70+ Address(base58'')
71+}
72+
73+
74+func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
75+
76+
77+func _loadMultisig () = match getString(KEY_MULTISIG) {
78+ case a: String =>
79+ addressFromStringValue(a)
80+ case _ =>
81+ Address(base58'')
82+}
83+
84+
85+func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
86+
87+
88+func _loadChainId () = match getInteger(KEY_CHAIN_ID) {
89+ case a: Int =>
90+ a
91+ case _ =>
92+ 0
93+}
94+
95+
96+func _saveChainId (chainId_) = [IntegerEntry(KEY_CHAIN_ID, chainId_)]
97+
98+
99+func _loadSignerPublicKey () = match getString(KEY_SIGNER_PUBLIC_KEY) {
100+ case a: String =>
101+ fromBase58String(a)
102+ case _ =>
103+ base58''
104+}
105+
106+
107+func _saveSignerPublicKey (signerPublicKey_) = [StringEntry(KEY_SIGNER_PUBLIC_KEY, toBase58String(signerPublicKey_))]
108+
109+
110+func _loadDataHash (dataHash_) = match getInteger(makeString([KEY_DATA_HASH, toBase58String(dataHash_)], SEPARATOR)) {
111+ case a: Int =>
112+ a
113+ case _ =>
114+ 0
115+}
116+
117+
118+func _saveDataHash (dataHash_,height_) = [IntegerEntry(makeString([KEY_DATA_HASH, toBase58String(dataHash_)], SEPARATOR), height_)]
119+
120+
121+func _onlyThisContract (caller_) = if ((caller_ != this))
122+ then throw("_onlyThisContract: revert")
123+ else true
124+
125+
126+func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
127+ then throw("_whenMultisigSet: revert")
128+ else true
129+
130+
131+func _whenNotInitialized () = if (_loadInit())
132+ then throw("_whenNotInitialized: revert")
133+ else true
134+
135+
136+func _whenInitialized () = if (!(_loadInit()))
137+ then throw("_whenInitialized: revert")
138+ else true
139+
140+
141+func _whenNotPaused () = if (_loadPause())
142+ then throw("_whenNotPaused: revert")
143+ else true
144+
145+
146+func _whenPaused () = if (!(_loadPause()))
147+ then throw("_whenPaused: revert")
148+ else true
149+
150+
151+func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
152+ then throw("_onlyPauser: revert")
153+ else true
154+
155+
156+@Callable(i)
157+func init (pauser_,chainId_,signerPublicKey_) = {
158+ let err = if (if (if (if (if (_onlyThisContract(i.caller))
159+ then _whenNotInitialized()
160+ else false)
161+ then _whenMultisigSet()
162+ else false)
163+ then _validateAddress(pauser_, "init: invalid pauser")
164+ else false)
165+ then _validateInt(chainId_, 0, MAX_INT, "init: invalid chain id")
166+ else false)
167+ then _validatePublicKey(signerPublicKey_, "init: invalid signer public key")
168+ else false
169+ if ((err == err))
170+ then $Tuple2((((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveChainId(chainId_)) ++ _saveSignerPublicKey(fromBase58String(signerPublicKey_))), unit)
171+ else throw("Strict value is not equal to itself.")
172+ }
173+
174+
175+
176+@Callable(i)
177+func execute (contract_,functionName_,functionArgs_,callerChainId_,executionChainId_,nonce_,txHash_,signature_) = {
178+ let argsSize = size(functionArgs_)
179+ let err = if (if (if (if (_whenInitialized())
180+ then _whenNotPaused()
181+ else false)
182+ then _validateAddress(contract_, "execute: invalid contract")
183+ else false)
184+ then _validateInt(argsSize, 0, 22, "execute: invalid args size")
185+ else false)
186+ then if ((_loadChainId() != executionChainId_))
187+ then throw("execute: invalid execution chain id")
188+ else true
189+ else false
190+ if ((err == err))
191+ then {
192+ func foldFunc (acc,elem) = ((acc + toBytes(size(elem))) + toBytes(elem))
193+
194+ let argsBytes = {
195+ let $l = functionArgs_
196+ let $s = size($l)
197+ let $acc0 = base58''
198+ func $f0_1 ($a,$i) = if (($i >= $s))
199+ then $a
200+ else foldFunc($a, $l[$i])
201+
202+ func $f0_2 ($a,$i) = if (($i >= $s))
203+ then $a
204+ else throw("List size exceeds 22")
205+
206+ $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)
207+ }
208+ let data = (((((((((toBytes(callerChainId_) + toBytes(executionChainId_)) + toBytes(nonce_)) + toBytes(size(txHash_))) + toBytes(txHash_)) + fromBase58String(contract_)) + toBytes(size(functionName_))) + toBytes(functionName_)) + toBytes(argsSize)) + argsBytes)
209+ let dataHash = keccak256_32Kb(data)
210+ let err1 = if (!(sigVerify(dataHash, fromBase58String(signature_), _loadSignerPublicKey())))
211+ then throw("execute: invalid signature")
212+ else if ((_loadDataHash(dataHash) > 0))
213+ then throw("execute: duplicate data")
214+ else unit
215+ if ((err1 == err1))
216+ then {
217+ let invocation = invoke(addressFromStringValue(contract_), functionName_, functionArgs_, nil)
218+ if ((invocation == invocation))
219+ then $Tuple2(_saveDataHash(dataHash, height), unit)
220+ else throw("Strict value is not equal to itself.")
221+ }
222+ else throw("Strict value is not equal to itself.")
223+ }
224+ else throw("Strict value is not equal to itself.")
225+ }
226+
227+
228+
229+@Callable(i)
230+func updateSigner (newSignerPublicKey_,oldSignature_,newSignature_) = {
231+ let err = if (if (_onlyThisContract(i.caller))
232+ then _whenInitialized()
233+ else false)
234+ then _validatePublicKey(newSignerPublicKey_, "updateSigner: invalid signer public key")
235+ else false
236+ if ((err == err))
237+ then {
238+ let oldSignerPublicKey = _loadSignerPublicKey()
239+ let oldData = ((toBytes("<<<PUBLIC--KEY--MIGRATION--ALLOWED>>>") + oldSignerPublicKey) + fromBase58String(newSignerPublicKey_))
240+ let newSignerPublicKey = fromBase58String(newSignerPublicKey_)
241+ let newData = ((toBytes("<<<PUBLIC--KEY--MIGRATION--CONFIRMED>>>") + oldSignerPublicKey) + fromBase58String(newSignerPublicKey_))
242+ let err1 = if (!(sigVerify_8Kb(oldData, fromBase58String(oldSignature_), oldSignerPublicKey)))
243+ then throw("updateSigner: invalid old signature")
244+ else if (!(sigVerify_8Kb(newData, fromBase58String(newSignature_), newSignerPublicKey)))
245+ then throw("updateSigner: invalid new signature")
246+ else unit
247+ if ((err1 == err1))
248+ then $Tuple2(_saveSignerPublicKey(newSignerPublicKey), unit)
249+ else throw("Strict value is not equal to itself.")
250+ }
251+ else throw("Strict value is not equal to itself.")
252+ }
253+
254+
255+
256+@Callable(i)
257+func pause () = {
258+ let err = if (if (_onlyPauser(i.caller))
259+ then _whenInitialized()
260+ else false)
261+ then _whenNotPaused()
262+ else false
263+ if ((err == err))
264+ then $Tuple2(_savePause(true), unit)
265+ else throw("Strict value is not equal to itself.")
266+ }
267+
268+
269+
270+@Callable(i)
271+func unpause () = {
272+ let err = if (if (_onlyPauser(i.caller))
273+ then _whenInitialized()
274+ else false)
275+ then _whenPaused()
276+ else false
277+ if ((err == err))
278+ then $Tuple2(_savePause(false), unit)
279+ else throw("Strict value is not equal to itself.")
280+ }
281+
282+
283+
284+@Callable(i)
285+func updatePauser (pauser_) = {
286+ let err = if (if (_onlyThisContract(i.caller))
287+ then _whenInitialized()
288+ else false)
289+ then _validateAddress(pauser_, "init: invalid pauser")
290+ else false
291+ if ((err == err))
292+ then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
293+ else throw("Strict value is not equal to itself.")
294+ }
295+
296+
297+
298+@Callable(i)
299+func setMultisig (multisig_) = {
300+ let err = if (_onlyThisContract(i.caller))
301+ then _validateAddress(multisig_, "setMultisig: invalid multisig address")
302+ else false
303+ if ((err == err))
304+ then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
305+ else throw("Strict value is not equal to itself.")
306+ }
307+
308+
309+@Verifier(tx)
310+func verify () = match getString(KEY_MULTISIG) {
311+ case multisig: String =>
312+ valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
313+ case _ =>
314+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
315+}
316+

github/deemru/w8io/3ef1775 
20.73 ms