tx · HhGjxLYigLXNQgoGmScJygUX1kvJEgak5VMAiqFLAPoN

3N8V3GS3Fc4SVQDbRNjgpaQYev9h33MhsYZ:  -0.01400000 Waves

2024.05.27 16:25 [3124455] smart account 3N8V3GS3Fc4SVQDbRNjgpaQYev9h33MhsYZ > SELF 0.00000000 Waves

{ "type": 13, "id": "HhGjxLYigLXNQgoGmScJygUX1kvJEgak5VMAiqFLAPoN", "fee": 1400000, "feeAssetId": null, "timestamp": 1716816300073, "version": 2, "chainId": 84, "sender": "3N8V3GS3Fc4SVQDbRNjgpaQYev9h33MhsYZ", "senderPublicKey": "BofRsVTKcytiv2fcmEoyMMeAd3YQ14uPZZdK5AbWk5eG", "proofs": [ "24jo2y1jpfByCRGNrCznqPVzZ8WN1kRMPSp3TVxdHVunV64EG6D3S1dCFotxw7vAGQo3XUXSaufFVNmiR6hbFRGz" ], "script": "base64:BgIoCAISBAoCCAESBgoEAQgICBIDCgEIEgMKAQgSABIAEgMKAQgSAwoBCCkACVNFUEFSQVRPUgICX18ADkZVTkNfU0VQQVJBVE9SAgQjIyMjAAhLRVlfSU5JVAIESU5JVAAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAApLRVlfUEFVU0VEAgZQQVVTRUQACktFWV9QQVVTRVICBlBBVVNFUgANS0VZX0FMTE9XQU5DRQIJQUxMT1dBTkNFABFLRVlfQ0FMTF9DSEFJTl9JRAINQ0FMTF9DSEFJTl9JRAAOS0VZX0VWRU5UX1NJWkUCCkVWRU5UX1NJWkUACUtFWV9FVkVOVAIFRVZFTlQACUtFWV9OT05DRQIFTk9OQ0UAB01BWF9JTlQA//////////9/ARBfdmFsaWRhdGVBZGRyZXNzAghhZGRyZXNzXwRlcnJfBAckbWF0Y2gwCQCmCAEFCGFkZHJlc3NfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGCQACAQUEZXJyXwEMX3ZhbGlkYXRlSW50BAR2YWxfDmxvd2VyQm91bmRhcnlfDnVwcGVyQm91bmRhcnlfBGVycl8DAwkAZgIFDmxvd2VyQm91bmRhcnlfBQR2YWxfBgkAZgIFBHZhbF8FDnVwcGVyQm91bmRhcnlfCQACAQUEZXJyXwYBD192YWxpZGF0ZVN0cmluZwIEdmFsXwRlcnJfAwMJAGcCAAAJALECAQUEdmFsXwYJAQhjb250YWlucwIFBHZhbF8FCVNFUEFSQVRPUgkAAgEFBGVycl8GAQlfbG9hZEluaXQABAckbWF0Y2gwCQCgCAEFCEtFWV9JTklUAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQlfc2F2ZUluaXQBB2lzSW5pdF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCEtFWV9JTklUBQdpc0luaXRfBQNuaWwBCl9sb2FkUGF1c2UABAckbWF0Y2gwCQCgCAEFCktFWV9QQVVTRUQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCl9zYXZlUGF1c2UBCWlzUGF1c2VkXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUKS0VZX1BBVVNFRAUJaXNQYXVzZWRfBQNuaWwBC19sb2FkUGF1c2VyAAQHJG1hdGNoMAkAoggBBQpLRVlfUEFVU0VSAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABC19zYXZlUGF1c2VyAQdwYXVzZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9QQVVTRVIJAKUIAQUHcGF1c2VyXwUDbmlsAQ5fbG9hZEFsbG93YW5jZQEHY2FsbGVyXwQHJG1hdGNoMAkAoAgBCQC5CQIJAMwIAgUNS0VZX0FMTE9XQU5DRQkAzAgCCQClCAEFB2NhbGxlcl8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQ5fc2F2ZUFsbG93YW5jZQIHY2FsbGVyXwR2YWxfCQDMCAIJAQxCb29sZWFuRW50cnkCCQC5CQIJAMwIAgUNS0VZX0FMTE9XQU5DRQkAzAgCCQClCAEFB2NhbGxlcl8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBDV9sb2FkTXVsdGlzaWcABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZU11bHRpc2lnAQltdWx0aXNpZ18JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHCQClCAEFCW11bHRpc2lnXwUDbmlsARBfbG9hZENhbGxDaGFpbklkAAQHJG1hdGNoMAkAnwgBBRFLRVlfQ0FMTF9DSEFJTl9JRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEQX3NhdmVDYWxsQ2hhaW5JZAEMY2FsbENoYWluSWRfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFLRVlfQ0FMTF9DSEFJTl9JRAUMY2FsbENoYWluSWRfBQNuaWwBDl9sb2FkRXZlbnRTaXplAAQHJG1hdGNoMAkAnwgBBQ5LRVlfRVZFTlRfU0laRQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEOX3NhdmVFdmVudFNpemUBBmluZGV4XwkAzAgCCQEMSW50ZWdlckVudHJ5AgUOS0VZX0VWRU5UX1NJWkUFBmluZGV4XwUDbmlsAQpfc2F2ZUV2ZW50AgZpbmRleF8GZXZlbnRfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBQlLRVlfRVZFTlQJAMwIAgkApAMBBQZpbmRleF8FA25pbAUJU0VQQVJBVE9SCQC5CQIJAMwIAgkApAMBCAUGZXZlbnRfAl8xCQDMCAIJAKQDAQgFBmV2ZW50XwJfMgkAzAgCCAUGZXZlbnRfAl8zCQDMCAIIBQZldmVudF8CXzQJAMwIAggFBmV2ZW50XwJfNQkAzAgCCQCkAwEIBQZldmVudF8CXzYJAMwIAggFBmV2ZW50XwJfNwkAzAgCCQCkAwEIBQZldmVudF8CXzgFA25pbAUJU0VQQVJBVE9SBQNuaWwBCl9sb2FkTm9uY2UABAckbWF0Y2gwCQCfCAEFCUtFWV9OT05DRQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEKX3NhdmVOb25jZQEEdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJS0VZX05PTkNFBQR2YWxfBQNuaWwBEV9vbmx5VGhpc0NvbnRyYWN0AQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwUEdGhpcwkAAgECGV9vbmx5VGhpc0NvbnRyYWN0OiByZXZlcnQGARBfd2hlbk11bHRpc2lnU2V0AAMJAAACCQENX2xvYWRNdWx0aXNpZwAJAQdBZGRyZXNzAQEACQACAQIYX3doZW5NdWx0aXNpZ1NldDogcmV2ZXJ0BgETX3doZW5Ob3RJbml0aWFsaXplZAADCQEJX2xvYWRJbml0AAkAAgECG193aGVuTm90SW5pdGlhbGl6ZWQ6IHJldmVydAYBEF93aGVuSW5pdGlhbGl6ZWQAAwkBASEBCQEJX2xvYWRJbml0AAkAAgECGF93aGVuSW5pdGlhbGl6ZWQ6IHJldmVydAYBDl93aGVuTm90UGF1c2VkAAMJAQpfbG9hZFBhdXNlAAkAAgECFl93aGVuTm90UGF1c2VkOiByZXZlcnQGAQtfd2hlblBhdXNlZAADCQEBIQEJAQpfbG9hZFBhdXNlAAkAAgECE193aGVuUGF1c2VkOiByZXZlcnQGAQtfb25seVBhdXNlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQtfbG9hZFBhdXNlcgAJAAIBAhNfb25seVBhdXNlcjogcmV2ZXJ0BgEMX3doZW5BbGxvd2VkAQdjYWxsZXJfAwkBASEBCQEOX2xvYWRBbGxvd2FuY2UBBQdjYWxsZXJfCQACAQIUX3doZW5BbGxvd2VkOiByZXZlcnQGCAFpAQRpbml0AgdwYXVzZXJfDGNhbGxDaGFpbklkXwQDZXJyAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQETX3doZW5Ob3RJbml0aWFsaXplZAAHCQEQX3doZW5NdWx0aXNpZ1NldAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CFGluaXQ6IGludmFsaWQgcGF1c2VyBwkBDF92YWxpZGF0ZUludAQFDGNhbGxDaGFpbklkXwAABQdNQVhfSU5UAhtpbml0OiBpbnZhbGlkIGNhbGwgY2hhaW4gaWQHAwkAAAIFA2VycgUDZXJyCQCUCgIJAM4IAgkAzggCCQEJX3NhdmVJbml0AQYJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8JARBfc2F2ZUNhbGxDaGFpbklkAQUMY2FsbENoYWluSWRfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBGNhbGwEEWV4ZWN1dGlvbkNoYWluSWRfEmV4ZWN1dGlvbkNvbnRyYWN0Xw1mdW5jdGlvbk5hbWVfDWZ1bmN0aW9uQXJnc18EA2VycgMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQxfd2hlbkFsbG93ZWQBCAUBaQZjYWxsZXIHCQEOX3doZW5Ob3RQYXVzZWQABwkBD192YWxpZGF0ZVN0cmluZwIFEmV4ZWN1dGlvbkNvbnRyYWN0XwIfY2FsbDogaW52YWxpZCBleGVjdXRpb25Db250cmFjdAcJAQ9fdmFsaWRhdGVTdHJpbmcCBQ1mdW5jdGlvbk5hbWVfAhpjYWxsOiBpbnZhbGlkIGZ1bmN0aW9uTmFtZQcJAQ9fdmFsaWRhdGVTdHJpbmcCBQ1mdW5jdGlvbkFyZ3NfAhpjYWxsOiBpbnZhbGlkIGZ1bmN0aW9uQXJncwcDCQAAAgUDZXJyBQNlcnIEBW5vbmNlCQEKX2xvYWROb25jZQAECWV2ZW50U2l6ZQkBDl9sb2FkRXZlbnRTaXplAAQFZXZlbnQJAJoKCAkBEF9sb2FkQ2FsbENoYWluSWQABRFleGVjdXRpb25DaGFpbklkXwUSZXhlY3V0aW9uQ29udHJhY3RfBQ1mdW5jdGlvbk5hbWVfCQCsAgIJAKwCAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBQ5GVU5DX1NFUEFSQVRPUgUNZnVuY3Rpb25BcmdzXwUFbm9uY2UJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUGaGVpZ2h0CQCUCgIJAM4IAgkAzggCCQEOX3NhdmVFdmVudFNpemUBCQBkAgUJZXZlbnRTaXplAAEJAQpfc2F2ZUV2ZW50AgUJZXZlbnRTaXplBQVldmVudAkBCl9zYXZlTm9uY2UBCQBkAgUFbm9uY2UAAQUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVhbGxvdwEHY2FsbGVyXwQDZXJyAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdjYWxsZXJfAhlhbGxvdzogaW52YWxpZCBjYWxsZXIgYXJnBwMJAAACBQNlcnIFA2VycgkAlAoCCQEOX3NhdmVBbGxvd2FuY2UCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdjYWxsZXJfBgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhkaXNhbGxvdwEHY2FsbGVyXwQDZXJyAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdjYWxsZXJfAhxkaXNhbGxvdzogaW52YWxpZCBjYWxsZXIgYXJnBwMJAAACBQNlcnIFA2VycgkAlAoCCQEOX3NhdmVBbGxvd2FuY2UCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdjYWxsZXJfBwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fd2hlbk5vdFBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5wYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQtfd2hlblBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMdXBkYXRlUGF1c2VyAQdwYXVzZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CFGluaXQ6IGludmFsaWQgcGF1c2VyBwMJAAACBQNlcnIFA2VycgkAlAoCCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF92YWxpZGF0ZUFkZHJlc3MCBQltdWx0aXNpZ18CJXNldE11bHRpc2lnOiBpbnZhbGlkIG11bHRpc2lnIGFkZHJlc3MHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ1fc2F2ZU11bHRpc2lnAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbXVsdGlzaWdfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkEE8Z5", "height": 3124455, "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 FUNC_SEPARATOR = "####"
7+
8+let KEY_INIT = "INIT"
9+
10+let KEY_MULTISIG = "MULTISIG"
11+
12+let KEY_STATUS = "STATUS"
13+
14+let KEY_PAUSED = "PAUSED"
15+
16+let KEY_PAUSER = "PAUSER"
17+
18+let KEY_ALLOWANCE = "ALLOWANCE"
19+
20+let KEY_CALL_CHAIN_ID = "CALL_CHAIN_ID"
21+
22+let KEY_EVENT_SIZE = "EVENT_SIZE"
23+
24+let KEY_EVENT = "EVENT"
25+
26+let KEY_NONCE = "NONCE"
27+
28+let MAX_INT = 9223372036854775807
29+
30+func _validateAddress (address_,err_) = match addressFromString(address_) {
31+ case a: Address =>
32+ true
33+ case _ =>
34+ throw(err_)
35+}
36+
37+
38+func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
39+ then true
40+ else (val_ > upperBoundary_))
41+ then throw(err_)
42+ else true
43+
44+
45+func _validateString (val_,err_) = if (if ((0 >= size(val_)))
46+ then true
47+ else contains(val_, SEPARATOR))
48+ then throw(err_)
49+ else true
50+
51+
52+func _loadInit () = match getBoolean(KEY_INIT) {
53+ case a: Boolean =>
54+ a
55+ case _ =>
56+ false
57+}
58+
59+
60+func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
61+
62+
63+func _loadPause () = match getBoolean(KEY_PAUSED) {
64+ case a: Boolean =>
65+ a
66+ case _ =>
67+ false
68+}
69+
70+
71+func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
72+
73+
74+func _loadPauser () = match getString(KEY_PAUSER) {
75+ case a: String =>
76+ addressFromStringValue(a)
77+ case _ =>
78+ Address(base58'')
79+}
80+
81+
82+func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
83+
84+
85+func _loadAllowance (caller_) = match getBoolean(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR)) {
86+ case a: Boolean =>
87+ a
88+ case _ =>
89+ false
90+}
91+
92+
93+func _saveAllowance (caller_,val_) = [BooleanEntry(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR), val_)]
94+
95+
96+func _loadMultisig () = match getString(KEY_MULTISIG) {
97+ case a: String =>
98+ addressFromStringValue(a)
99+ case _ =>
100+ Address(base58'')
101+}
102+
103+
104+func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
105+
106+
107+func _loadCallChainId () = match getInteger(KEY_CALL_CHAIN_ID) {
108+ case a: Int =>
109+ a
110+ case _ =>
111+ 0
112+}
113+
114+
115+func _saveCallChainId (callChainId_) = [IntegerEntry(KEY_CALL_CHAIN_ID, callChainId_)]
116+
117+
118+func _loadEventSize () = match getInteger(KEY_EVENT_SIZE) {
119+ case a: Int =>
120+ a
121+ case _ =>
122+ 0
123+}
124+
125+
126+func _saveEventSize (index_) = [IntegerEntry(KEY_EVENT_SIZE, index_)]
127+
128+
129+func _saveEvent (index_,event_) = [StringEntry(makeString([KEY_EVENT, toString(index_)], SEPARATOR), makeString([toString(event_._1), toString(event_._2), event_._3, event_._4, event_._5, toString(event_._6), event_._7, toString(event_._8)], SEPARATOR))]
130+
131+
132+func _loadNonce () = match getInteger(KEY_NONCE) {
133+ case a: Int =>
134+ a
135+ case _ =>
136+ 0
137+}
138+
139+
140+func _saveNonce (val_) = [IntegerEntry(KEY_NONCE, val_)]
141+
142+
143+func _onlyThisContract (caller_) = if ((caller_ != this))
144+ then throw("_onlyThisContract: revert")
145+ else true
146+
147+
148+func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
149+ then throw("_whenMultisigSet: revert")
150+ else true
151+
152+
153+func _whenNotInitialized () = if (_loadInit())
154+ then throw("_whenNotInitialized: revert")
155+ else true
156+
157+
158+func _whenInitialized () = if (!(_loadInit()))
159+ then throw("_whenInitialized: revert")
160+ else true
161+
162+
163+func _whenNotPaused () = if (_loadPause())
164+ then throw("_whenNotPaused: revert")
165+ else true
166+
167+
168+func _whenPaused () = if (!(_loadPause()))
169+ then throw("_whenPaused: revert")
170+ else true
171+
172+
173+func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
174+ then throw("_onlyPauser: revert")
175+ else true
176+
177+
178+func _whenAllowed (caller_) = if (!(_loadAllowance(caller_)))
179+ then throw("_whenAllowed: revert")
180+ else true
181+
182+
183+@Callable(i)
184+func init (pauser_,callChainId_) = {
185+ let err = if (if (if (if (_onlyThisContract(i.caller))
186+ then _whenNotInitialized()
187+ else false)
188+ then _whenMultisigSet()
189+ else false)
190+ then _validateAddress(pauser_, "init: invalid pauser")
191+ else false)
192+ then _validateInt(callChainId_, 0, MAX_INT, "init: invalid call chain id")
193+ else false
194+ if ((err == err))
195+ then $Tuple2(((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveCallChainId(callChainId_)), unit)
196+ else throw("Strict value is not equal to itself.")
197+ }
198+
199+
200+
201+@Callable(i)
202+func call (executionChainId_,executionContract_,functionName_,functionArgs_) = {
203+ let err = if (if (if (if (if (_whenInitialized())
204+ then _whenAllowed(i.caller)
205+ else false)
206+ then _whenNotPaused()
207+ else false)
208+ then _validateString(executionContract_, "call: invalid executionContract")
209+ else false)
210+ then _validateString(functionName_, "call: invalid functionName")
211+ else false)
212+ then _validateString(functionArgs_, "call: invalid functionArgs")
213+ else false
214+ if ((err == err))
215+ then {
216+ let nonce = _loadNonce()
217+ let eventSize = _loadEventSize()
218+ let event = $Tuple8(_loadCallChainId(), executionChainId_, executionContract_, functionName_, ((toBase58String(i.caller.bytes) + FUNC_SEPARATOR) + functionArgs_), nonce, toBase58String(i.transactionId), height)
219+ $Tuple2(((_saveEventSize((eventSize + 1)) ++ _saveEvent(eventSize, event)) ++ _saveNonce((nonce + 1))), unit)
220+ }
221+ else throw("Strict value is not equal to itself.")
222+ }
223+
224+
225+
226+@Callable(i)
227+func allow (caller_) = {
228+ let err = if (if (_onlyThisContract(i.caller))
229+ then _whenInitialized()
230+ else false)
231+ then _validateAddress(caller_, "allow: invalid caller arg")
232+ else false
233+ if ((err == err))
234+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), true), unit)
235+ else throw("Strict value is not equal to itself.")
236+ }
237+
238+
239+
240+@Callable(i)
241+func disallow (caller_) = {
242+ let err = if (if (_onlyThisContract(i.caller))
243+ then _whenInitialized()
244+ else false)
245+ then _validateAddress(caller_, "disallow: invalid caller arg")
246+ else false
247+ if ((err == err))
248+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), false), unit)
249+ else throw("Strict value is not equal to itself.")
250+ }
251+
252+
253+
254+@Callable(i)
255+func pause () = {
256+ let err = if (if (_onlyPauser(i.caller))
257+ then _whenInitialized()
258+ else false)
259+ then _whenNotPaused()
260+ else false
261+ if ((err == err))
262+ then $Tuple2(_savePause(true), unit)
263+ else throw("Strict value is not equal to itself.")
264+ }
265+
266+
267+
268+@Callable(i)
269+func unpause () = {
270+ let err = if (if (_onlyPauser(i.caller))
271+ then _whenInitialized()
272+ else false)
273+ then _whenPaused()
274+ else false
275+ if ((err == err))
276+ then $Tuple2(_savePause(false), unit)
277+ else throw("Strict value is not equal to itself.")
278+ }
279+
280+
281+
282+@Callable(i)
283+func updatePauser (pauser_) = {
284+ let err = if (if (_onlyThisContract(i.caller))
285+ then _whenInitialized()
286+ else false)
287+ then _validateAddress(pauser_, "init: invalid pauser")
288+ else false
289+ if ((err == err))
290+ then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
291+ else throw("Strict value is not equal to itself.")
292+ }
293+
294+
295+
296+@Callable(i)
297+func setMultisig (multisig_) = {
298+ let err = if (_onlyThisContract(i.caller))
299+ then _validateAddress(multisig_, "setMultisig: invalid multisig address")
300+ else false
301+ if ((err == err))
302+ then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
303+ else throw("Strict value is not equal to itself.")
304+ }
305+
306+
307+@Verifier(tx)
308+func verify () = match getString(KEY_MULTISIG) {
309+ case multisig: String =>
310+ valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
311+ case _ =>
312+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
313+}
314+

github/deemru/w8io/c3f4982 
21.10 ms