tx · 5EXZxsMvBwcNp8KhwnTy3HV1BMWC7k4WBmWPRzqWfSFy

3MxTLPY7MJxVDfpJcNy9Liq2r8pyZxNbjjU:  -0.01400000 Waves

2023.03.15 23:05 [2491594] smart account 3MxTLPY7MJxVDfpJcNy9Liq2r8pyZxNbjjU > SELF 0.00000000 Waves

{ "type": 13, "id": "5EXZxsMvBwcNp8KhwnTy3HV1BMWC7k4WBmWPRzqWfSFy", "fee": 1400000, "feeAssetId": null, "timestamp": 1678910586078, "version": 2, "chainId": 84, "sender": "3MxTLPY7MJxVDfpJcNy9Liq2r8pyZxNbjjU", "senderPublicKey": "9iq3qkUQrdNdSB4GA6y4ATzwCKQUBDgLpcfWzmyJshzW", "proofs": [ "3kaxiPC2s6ujFCNt7prLQY1JbgUK41vSgoixsNfURtRfAXLiheqTiF9cX18iqpcb5HKaFWQBchLvUMuCNW5KJNqj" ], "script": "base64:BgInCAISBAoCCAESBQoDAQgIEgMKAQgSAwoBCBIAEgASAwoBCBIDCgEILAAJU0VQQVJBVE9SAgJfXwAIS0VZX0lOSVQCBElOSVQADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwAKS0VZX1BBVVNFRAIGUEFVU0VEAApLRVlfUEFVU0VSAgZQQVVTRVIADUtFWV9BTExPV0FOQ0UCCUFMTE9XQU5DRQARS0VZX0NBTExfQ0hBSU5fSUQCDUNBTExfQ0hBSU5fSUQADktFWV9FVkVOVF9TSVpFAgpFVkVOVF9TSVpFAAlLRVlfRVZFTlQCBUVWRU5UAAlLRVlfTk9OQ0UCBU5PTkNFAAdNQVhfSU5UAP//////////fwAJU0xPVF9TSVpFACAACVpFUk9fU0xPVAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEF92YWxpZGF0ZUFkZHJlc3MCCGFkZHJlc3NfBGVycl8EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYJAAIBBQRlcnJfAQxfdmFsaWRhdGVJbnQEBHZhbF8ObG93ZXJCb3VuZGFyeV8OdXBwZXJCb3VuZGFyeV8EZXJyXwMDCQBmAgUObG93ZXJCb3VuZGFyeV8FBHZhbF8GCQBmAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEPX3ZhbGlkYXRlU3RyaW5nAgR2YWxfBGVycl8DAwkAZwIAAAkAsQIBBQR2YWxfBgkBCGNvbnRhaW5zAgUEdmFsXwUJU0VQQVJBVE9SCQACAQUEZXJyXwYBCV9sb2FkSW5pdAAEByRtYXRjaDAJAKAIAQUIS0VZX0lOSVQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCV9zYXZlSW5pdAEHaXNJbml0XwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIS0VZX0lOSVQFB2lzSW5pdF8FA25pbAEKX2xvYWRQYXVzZQAEByRtYXRjaDAJAKAIAQUKS0VZX1BBVVNFRAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEKX3NhdmVQYXVzZQEJaXNQYXVzZWRfCQDMCAIJAQxCb29sZWFuRW50cnkCBQpLRVlfUEFVU0VEBQlpc1BhdXNlZF8FA25pbAELX2xvYWRQYXVzZXIABAckbWF0Y2gwCQCiCAEFCktFWV9QQVVTRVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAELX3NhdmVQYXVzZXIBB3BhdXNlcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUKS0VZX1BBVVNFUgkApQgBBQdwYXVzZXJfBQNuaWwBDl9sb2FkQWxsb3dhbmNlAQdjYWxsZXJfBAckbWF0Y2gwCQCgCAEJALkJAgkAzAgCBQ1LRVlfQUxMT1dBTkNFCQDMCAIJAKUIAQUHY2FsbGVyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBDl9zYXZlQWxsb3dhbmNlAgdjYWxsZXJfBHZhbF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIJALkJAgkAzAgCBQ1LRVlfQUxMT1dBTkNFCQDMCAIJAKUIAQUHY2FsbGVyXwUDbmlsBQlTRVBBUkFUT1IFBHZhbF8FA25pbAENX2xvYWRNdWx0aXNpZwAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABDV9zYXZlTXVsdGlzaWcBCW11bHRpc2lnXwkAzAgCCQELU3RyaW5nRW50cnkCBQxLRVlfTVVMVElTSUcJAKUIAQUJbXVsdGlzaWdfBQNuaWwBEF9sb2FkQ2FsbENoYWluSWQABAckbWF0Y2gwCQCfCAEFEUtFWV9DQUxMX0NIQUlOX0lEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAARBfc2F2ZUNhbGxDaGFpbklkAQxjYWxsQ2hhaW5JZF8JAMwIAgkBDEludGVnZXJFbnRyeQIFEUtFWV9DQUxMX0NIQUlOX0lEBQxjYWxsQ2hhaW5JZF8FA25pbAEOX2xvYWRFdmVudFNpemUABAckbWF0Y2gwCQCfCAEFDktFWV9FVkVOVF9TSVpFAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAQ5fc2F2ZUV2ZW50U2l6ZQEGaW5kZXhfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5LRVlfRVZFTlRfU0laRQUGaW5kZXhfBQNuaWwBCl9zYXZlRXZlbnQCBmluZGV4XwZldmVudF8JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFCUtFWV9FVkVOVAkAzAgCCQCkAwEFBmluZGV4XwUDbmlsBQlTRVBBUkFUT1IJALkJAgkAzAgCCQCkAwEIBQZldmVudF8CXzEJAMwIAgkApAMBCAUGZXZlbnRfAl8yCQDMCAIIBQZldmVudF8CXzMJAMwIAggFBmV2ZW50XwJfNAkAzAgCCQCkAwEIBQZldmVudF8CXzUJAMwIAggFBmV2ZW50XwJfNgkAzAgCCQCkAwEIBQZldmVudF8CXzcFA25pbAUJU0VQQVJBVE9SBQNuaWwBCl9sb2FkTm9uY2UABAckbWF0Y2gwCQCfCAEFCUtFWV9OT05DRQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEKX3NhdmVOb25jZQEEdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJS0VZX05PTkNFBQR2YWxfBQNuaWwBEV9vbmx5VGhpc0NvbnRyYWN0AQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwUEdGhpcwkAAgECGV9vbmx5VGhpc0NvbnRyYWN0OiByZXZlcnQGARBfd2hlbk11bHRpc2lnU2V0AAMJAAACCQENX2xvYWRNdWx0aXNpZwAJAQdBZGRyZXNzAQEACQACAQIYX3doZW5NdWx0aXNpZ1NldDogcmV2ZXJ0BgETX3doZW5Ob3RJbml0aWFsaXplZAADCQEJX2xvYWRJbml0AAkAAgECG193aGVuTm90SW5pdGlhbGl6ZWQ6IHJldmVydAYBEF93aGVuSW5pdGlhbGl6ZWQAAwkBASEBCQEJX2xvYWRJbml0AAkAAgECGF93aGVuSW5pdGlhbGl6ZWQ6IHJldmVydAYBDl93aGVuTm90UGF1c2VkAAMJAQpfbG9hZFBhdXNlAAkAAgECFl93aGVuTm90UGF1c2VkOiByZXZlcnQGAQtfd2hlblBhdXNlZAADCQEBIQEJAQpfbG9hZFBhdXNlAAkAAgECE193aGVuUGF1c2VkOiByZXZlcnQGAQtfb25seVBhdXNlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQtfbG9hZFBhdXNlcgAJAAIBAhNfb25seVBhdXNlcjogcmV2ZXJ0BgEMX3doZW5BbGxvd2VkAQdjYWxsZXJfAwkBASEBCQEOX2xvYWRBbGxvd2FuY2UBBQdjYWxsZXJfCQACAQIUX3doZW5BbGxvd2VkOiByZXZlcnQGAQtfYWxpZ25SaWdodAEEdmFsXwkAywECCQDJAQIFCVpFUk9fU0xPVAkAZQIFCVNMT1RfU0laRQkAyAEBBQR2YWxfBQR2YWxfAQdfYWRkQXJnAgljYWxsZGF0YV8EYXJnXwQIY2FsbGRhdGEJAN0EAQkAsAICBQljYWxsZGF0YV8AAgkArAICAgIweAkA3AQBCQDLAQIJAMsBAgkAyQECBQhjYWxsZGF0YQAECQELX2FsaWduUmlnaHQBBQRhcmdfCQDKAQIFCGNhbGxkYXRhAAQIAWkBBGluaXQCB3BhdXNlcl8MY2FsbENoYWluSWRfBANlcnIDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARNfd2hlbk5vdEluaXRpYWxpemVkAAcJARBfd2hlbk11bHRpc2lnU2V0AAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHCQEMX3ZhbGlkYXRlSW50BAUMY2FsbENoYWluSWRfAAAFB01BWF9JTlQCG2luaXQ6IGludmFsaWQgY2FsbCBjaGFpbiBpZAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzggCCQDOCAIJAQlfc2F2ZUluaXQBBgkBC19zYXZlUGF1c2VyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcGF1c2VyXwkBEF9zYXZlQ2FsbENoYWluSWQBBQxjYWxsQ2hhaW5JZF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEY2FsbAMRZXhlY3V0aW9uQ2hhaW5JZF8SZXhlY3V0aW9uQ29udHJhY3RfCWNhbGxkYXRhXwQDZXJyAwMDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEMX3doZW5BbGxvd2VkAQgFAWkGY2FsbGVyBwkBDl93aGVuTm90UGF1c2VkAAcJAQ9fdmFsaWRhdGVTdHJpbmcCBRJleGVjdXRpb25Db250cmFjdF8CH2NhbGw6IGludmFsaWQgZXhlY3V0aW9uQ29udHJhY3QHCQEPX3ZhbGlkYXRlU3RyaW5nAgUJY2FsbGRhdGFfAhZjYWxsOiBpbnZhbGlkIGNhbGxkYXRhBwMJAAACBQNlcnIFA2VycgQFbm9uY2UJAQpfbG9hZE5vbmNlAAQJZXZlbnRTaXplCQEOX2xvYWRFdmVudFNpemUABAVldmVudAkAmQoHCQEQX2xvYWRDYWxsQ2hhaW5JZAAFEWV4ZWN1dGlvbkNoYWluSWRfBRJleGVjdXRpb25Db250cmFjdF8JAQdfYWRkQXJnAgUJY2FsbGRhdGFfCAgFAWkGY2FsbGVyBWJ5dGVzBQVub25jZQkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQZoZWlnaHQJAJQKAgkAzggCCQDOCAIJAQ5fc2F2ZUV2ZW50U2l6ZQEJAGQCBQlldmVudFNpemUAAQkBCl9zYXZlRXZlbnQCBQlldmVudFNpemUFBWV2ZW50CQEKX3NhdmVOb25jZQEJAGQCBQVub25jZQABBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBWFsbG93AQdjYWxsZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB2NhbGxlcl8CGWFsbG93OiBpbnZhbGlkIGNhbGxlciBhcmcHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ5fc2F2ZUFsbG93YW5jZQIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2NhbGxlcl8GBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGRpc2FsbG93AQdjYWxsZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB2NhbGxlcl8CHGRpc2FsbG93OiBpbnZhbGlkIGNhbGxlciBhcmcHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ5fc2F2ZUFsbG93YW5jZQIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2NhbGxlcl8HBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBDl93aGVuTm90UGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBgUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQd1bnBhdXNlAAQDZXJyAwMJAQtfb25seVBhdXNlcgEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBC193aGVuUGF1c2VkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlUGF1c2UBBwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQx1cGRhdGVQYXVzZXIBB3BhdXNlcl8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCW11bHRpc2lnXwIlc2V0TXVsdGlzaWc6IGludmFsaWQgbXVsdGlzaWcgYWRkcmVzcwcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDV9zYXZlTXVsdGlzaWcBCQERQGV4dHJOYXRpdmUoMTA2MikBBQltdWx0aXNpZ18FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlee53iTg=", "height": 2491594, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HfffEfpdbouHSRyMP4KWMeXRHjGYMhaLj3pXp57tQvGP Next: none Diff:
OldNewDifferences
4040 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
4141 then true
4242 else (val_ > upperBoundary_))
43+ then throw(err_)
44+ else true
45+
46+
47+func _validateString (val_,err_) = if (if ((0 >= size(val_)))
48+ then true
49+ else contains(val_, SEPARATOR))
4350 then throw(err_)
4451 else true
4552
204211
205212 @Callable(i)
206213 func call (executionChainId_,executionContract_,calldata_) = {
207- let err = if (if (_whenInitialized())
214+ let err = if (if (if (if (_whenInitialized())
208215 then _whenAllowed(i.caller)
209216 else false)
210217 then _whenNotPaused()
218+ else false)
219+ then _validateString(executionContract_, "call: invalid executionContract")
220+ else false)
221+ then _validateString(calldata_, "call: invalid calldata")
211222 else false
212223 if ((err == err))
213224 then {
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_ALLOWANCE = "ALLOWANCE"
1717
1818 let KEY_CALL_CHAIN_ID = "CALL_CHAIN_ID"
1919
2020 let KEY_EVENT_SIZE = "EVENT_SIZE"
2121
2222 let KEY_EVENT = "EVENT"
2323
2424 let KEY_NONCE = "NONCE"
2525
2626 let MAX_INT = 9223372036854775807
2727
2828 let SLOT_SIZE = 32
2929
3030 let ZERO_SLOT = base58'11111111111111111111111111111111'
3131
3232 func _validateAddress (address_,err_) = match addressFromString(address_) {
3333 case a: Address =>
3434 true
3535 case _ =>
3636 throw(err_)
3737 }
3838
3939
4040 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
4141 then true
4242 else (val_ > upperBoundary_))
43+ then throw(err_)
44+ else true
45+
46+
47+func _validateString (val_,err_) = if (if ((0 >= size(val_)))
48+ then true
49+ else contains(val_, SEPARATOR))
4350 then throw(err_)
4451 else true
4552
4653
4754 func _loadInit () = match getBoolean(KEY_INIT) {
4855 case a: Boolean =>
4956 a
5057 case _ =>
5158 false
5259 }
5360
5461
5562 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
5663
5764
5865 func _loadPause () = match getBoolean(KEY_PAUSED) {
5966 case a: Boolean =>
6067 a
6168 case _ =>
6269 false
6370 }
6471
6572
6673 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
6774
6875
6976 func _loadPauser () = match getString(KEY_PAUSER) {
7077 case a: String =>
7178 addressFromStringValue(a)
7279 case _ =>
7380 Address(base58'')
7481 }
7582
7683
7784 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
7885
7986
8087 func _loadAllowance (caller_) = match getBoolean(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR)) {
8188 case a: Boolean =>
8289 a
8390 case _ =>
8491 false
8592 }
8693
8794
8895 func _saveAllowance (caller_,val_) = [BooleanEntry(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR), val_)]
8996
9097
9198 func _loadMultisig () = match getString(KEY_MULTISIG) {
9299 case a: String =>
93100 addressFromStringValue(a)
94101 case _ =>
95102 Address(base58'')
96103 }
97104
98105
99106 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
100107
101108
102109 func _loadCallChainId () = match getInteger(KEY_CALL_CHAIN_ID) {
103110 case a: Int =>
104111 a
105112 case _ =>
106113 0
107114 }
108115
109116
110117 func _saveCallChainId (callChainId_) = [IntegerEntry(KEY_CALL_CHAIN_ID, callChainId_)]
111118
112119
113120 func _loadEventSize () = match getInteger(KEY_EVENT_SIZE) {
114121 case a: Int =>
115122 a
116123 case _ =>
117124 0
118125 }
119126
120127
121128 func _saveEventSize (index_) = [IntegerEntry(KEY_EVENT_SIZE, index_)]
122129
123130
124131 func _saveEvent (index_,event_) = [StringEntry(makeString([KEY_EVENT, toString(index_)], SEPARATOR), makeString([toString(event_._1), toString(event_._2), event_._3, event_._4, toString(event_._5), event_._6, toString(event_._7)], SEPARATOR))]
125132
126133
127134 func _loadNonce () = match getInteger(KEY_NONCE) {
128135 case a: Int =>
129136 a
130137 case _ =>
131138 0
132139 }
133140
134141
135142 func _saveNonce (val_) = [IntegerEntry(KEY_NONCE, val_)]
136143
137144
138145 func _onlyThisContract (caller_) = if ((caller_ != this))
139146 then throw("_onlyThisContract: revert")
140147 else true
141148
142149
143150 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
144151 then throw("_whenMultisigSet: revert")
145152 else true
146153
147154
148155 func _whenNotInitialized () = if (_loadInit())
149156 then throw("_whenNotInitialized: revert")
150157 else true
151158
152159
153160 func _whenInitialized () = if (!(_loadInit()))
154161 then throw("_whenInitialized: revert")
155162 else true
156163
157164
158165 func _whenNotPaused () = if (_loadPause())
159166 then throw("_whenNotPaused: revert")
160167 else true
161168
162169
163170 func _whenPaused () = if (!(_loadPause()))
164171 then throw("_whenPaused: revert")
165172 else true
166173
167174
168175 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
169176 then throw("_onlyPauser: revert")
170177 else true
171178
172179
173180 func _whenAllowed (caller_) = if (!(_loadAllowance(caller_)))
174181 then throw("_whenAllowed: revert")
175182 else true
176183
177184
178185 func _alignRight (val_) = (take(ZERO_SLOT, (SLOT_SIZE - size(val_))) + val_)
179186
180187
181188 func _addArg (calldata_,arg_) = {
182189 let calldata = fromBase16String(drop(calldata_, 2))
183190 ("0x" + toBase16String(((take(calldata, 4) + _alignRight(arg_)) + drop(calldata, 4))))
184191 }
185192
186193
187194 @Callable(i)
188195 func init (pauser_,callChainId_) = {
189196 let err = if (if (if (if (_onlyThisContract(i.caller))
190197 then _whenNotInitialized()
191198 else false)
192199 then _whenMultisigSet()
193200 else false)
194201 then _validateAddress(pauser_, "init: invalid pauser")
195202 else false)
196203 then _validateInt(callChainId_, 0, MAX_INT, "init: invalid call chain id")
197204 else false
198205 if ((err == err))
199206 then $Tuple2(((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveCallChainId(callChainId_)), unit)
200207 else throw("Strict value is not equal to itself.")
201208 }
202209
203210
204211
205212 @Callable(i)
206213 func call (executionChainId_,executionContract_,calldata_) = {
207- let err = if (if (_whenInitialized())
214+ let err = if (if (if (if (_whenInitialized())
208215 then _whenAllowed(i.caller)
209216 else false)
210217 then _whenNotPaused()
218+ else false)
219+ then _validateString(executionContract_, "call: invalid executionContract")
220+ else false)
221+ then _validateString(calldata_, "call: invalid calldata")
211222 else false
212223 if ((err == err))
213224 then {
214225 let nonce = _loadNonce()
215226 let eventSize = _loadEventSize()
216227 let event = $Tuple7(_loadCallChainId(), executionChainId_, executionContract_, _addArg(calldata_, i.caller.bytes), nonce, toBase58String(i.transactionId), height)
217228 $Tuple2(((_saveEventSize((eventSize + 1)) ++ _saveEvent(eventSize, event)) ++ _saveNonce((nonce + 1))), unit)
218229 }
219230 else throw("Strict value is not equal to itself.")
220231 }
221232
222233
223234
224235 @Callable(i)
225236 func allow (caller_) = {
226237 let err = if (if (_onlyThisContract(i.caller))
227238 then _whenInitialized()
228239 else false)
229240 then _validateAddress(caller_, "allow: invalid caller arg")
230241 else false
231242 if ((err == err))
232243 then $Tuple2(_saveAllowance(addressFromStringValue(caller_), true), unit)
233244 else throw("Strict value is not equal to itself.")
234245 }
235246
236247
237248
238249 @Callable(i)
239250 func disallow (caller_) = {
240251 let err = if (if (_onlyThisContract(i.caller))
241252 then _whenInitialized()
242253 else false)
243254 then _validateAddress(caller_, "disallow: invalid caller arg")
244255 else false
245256 if ((err == err))
246257 then $Tuple2(_saveAllowance(addressFromStringValue(caller_), false), unit)
247258 else throw("Strict value is not equal to itself.")
248259 }
249260
250261
251262
252263 @Callable(i)
253264 func pause () = {
254265 let err = if (if (_onlyPauser(i.caller))
255266 then _whenInitialized()
256267 else false)
257268 then _whenNotPaused()
258269 else false
259270 if ((err == err))
260271 then $Tuple2(_savePause(true), unit)
261272 else throw("Strict value is not equal to itself.")
262273 }
263274
264275
265276
266277 @Callable(i)
267278 func unpause () = {
268279 let err = if (if (_onlyPauser(i.caller))
269280 then _whenInitialized()
270281 else false)
271282 then _whenPaused()
272283 else false
273284 if ((err == err))
274285 then $Tuple2(_savePause(false), unit)
275286 else throw("Strict value is not equal to itself.")
276287 }
277288
278289
279290
280291 @Callable(i)
281292 func updatePauser (pauser_) = {
282293 let err = if (if (_onlyThisContract(i.caller))
283294 then _whenInitialized()
284295 else false)
285296 then _validateAddress(pauser_, "init: invalid pauser")
286297 else false
287298 if ((err == err))
288299 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
289300 else throw("Strict value is not equal to itself.")
290301 }
291302
292303
293304
294305 @Callable(i)
295306 func setMultisig (multisig_) = {
296307 let err = if (_onlyThisContract(i.caller))
297308 then _validateAddress(multisig_, "setMultisig: invalid multisig address")
298309 else false
299310 if ((err == err))
300311 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
301312 else throw("Strict value is not equal to itself.")
302313 }
303314
304315
305316 @Verifier(tx)
306317 func verify () = match getString(KEY_MULTISIG) {
307318 case multisig: String =>
308319 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
309320 case _ =>
310321 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
311322 }
312323

github/deemru/w8io/873ac7e 
44.49 ms