2024.04.24 10:03 [3076592] smart account 3MqsDXvFU9WM8hEzCcrw2aVGtVimCgbNeXD > SELF 0.00000000 Waves

{ "type": 13, "id": "8Cx1HAbJUpWtxcSnu3NHbsMp3tVyZoAU9PEpbRpLugcm", "fee": 700000, "feeAssetId": null, "timestamp": 1713942227226, "version": 1, "sender": "3MqsDXvFU9WM8hEzCcrw2aVGtVimCgbNeXD", "senderPublicKey": "4dNR2Up6mpwUEcy9WQuE2wAzR7HRURa6Pk9jrFKgcHqB", "proofs": [ "eiLBiTtFafoDzTwwgPr1pRnqtqsbqQQMkug2WYSCvzSzixhUDtkiRMfZ8wvdUiPxnKMHsHgCd7nbe2qJR4GxPC5" ], "script": "base64:BgISCAISBAoCCAQSAwoBCBIDCgEIDgAQY29udHJhY3RGaWxlbmFtZQIOZm9yY2VzdG9wLnJpZGUAA1NFUAICX18BB3dyYXBFcnIBA21zZwkAuQkCCQDMCAIFEGNvbnRyYWN0RmlsZW5hbWUJAMwIAgICOiAJAMwIAgUDbXNnBQNuaWwCAAEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAkAuQkCCQDMCAICAiVzCQDMCAICE21hbmFnZXJWYXVsdEFkZHJlc3MFA25pbAUDU0VQARNrZXlNYW5hZ2VyUHVibGljS2V5AAkAuQkCCQDMCAICAiVzCQDMCAICEG1hbmFnZXJQdWJsaWNLZXkFA25pbAUDU0VQARFrZXlQZXJtaXNzaW9uTGlzdAAJALkJAgkAzAgCAgIlcwkAzAgCAhNmb3JjZVN0b3BQZXJtaXNzaW9uBQNuaWwFA1NFUAEMa2V5Rm9yY2VTdG9wAQdhZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghkaXNhYmxlZAkAzAgCBQdhZGRyZXNzBQNuaWwFA1NFUAAOcGVybWlzc2lvbkxpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQERa2V5UGVybWlzc2lvbkxpc3QAAgAFA1NFUAAVcGVybWlzc2lvbkRlbmllZEVycm9yCQEIdGhyb3dFcnIBAhFQZXJtaXNzaW9uIGRlbmllZAEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAKIIAQkBFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBcwUEdGhpcwEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEE21hbmFnZXJWYXVsdEFkZHJlc3MJARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAnQgCBRNtYW5hZ2VyVmF1bHRBZGRyZXNzCQETa2V5TWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQhtdXN0VGhpcwEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBRVwZXJtaXNzaW9uRGVuaWVkRXJyb3IBC211c3RNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDADCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawYFFXBlcm1pc3Npb25EZW5pZWRFcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0CQEIbXVzdFRoaXMBBQFpCQACAQILTWF0Y2ggZXJyb3IDAWkBEWZvcmNlU3RvcENvbnRyYWN0AgdhZGRyZXNzBHN0b3AEE2NhbGxlckFkZHJlc3NTdHJpbmcJAKUIAQgFAWkGY2FsbGVyBAVjaGVjawkAzAgCAwkBD2NvbnRhaW5zRWxlbWVudAIFDnBlcm1pc3Npb25MaXN0BRNjYWxsZXJBZGRyZXNzU3RyaW5nBgkBC211c3RNYW5hZ2VyAQUBaQUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDGtleUZvcmNlU3RvcAEFB2FkZHJlc3MFBHN0b3AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1hZGRQZXJtaXNzaW9uAQdhZGRyZXNzBAVjaGVjawkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ5wZXJtaXNzaW9uTGlzdAUHYWRkcmVzcwYJAQh0aHJvd0VycgECGmFscmVhZHkgaW4gcGVybWlzc2lvbiBsaXN0BQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrBAduZXdMaXN0CQDNCAIFDnBlcm1pc3Npb25MaXN0BQdhZGRyZXNzBA1uZXdMaXN0U3RyaW5nCQC5CQIFB25ld0xpc3QFA1NFUAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UGVybWlzc2lvbkxpc3QABQ1uZXdMaXN0U3RyaW5nBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQcmVtb3ZlUGVybWlzc2lvbgEHYWRkcmVzcwQFY2hlY2sJAMwIAgkBC211c3RNYW5hZ2VyAQUBaQkAzAgCAwkBD2NvbnRhaW5zRWxlbWVudAIFDnBlcm1pc3Npb25MaXN0BQdhZGRyZXNzBgkBCHRocm93RXJyAQIWbm90IGluIHBlcm1pc3Npb24gbGlzdAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawQHcl9pbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFDnBlcm1pc3Npb25MaXN0BQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MJAQd3cmFwRXJyAQILbm90IGluIGxpc3QEB25ld0xpc3QJANEIAgUOcGVybWlzc2lvbkxpc3QFB3JfaW5kZXgEDW5ld0xpc3RTdHJpbmcJALkJAgUHbmV3TGlzdAUDU0VQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlQZXJtaXNzaW9uTGlzdAAFDW5ld0xpc3RTdHJpbmcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleRUwdvk=", "chainId": 84, "height": 3076592, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 76P5DacsbzZJgyU8699u2EDCk99F6FiquQyANm7cDgMC Next: EJ2n5W4ojcrQFpNA5Tk8LhNzb14NWrMdYwfT4r1nLX2H Diff:
OldNewDifferences
2020 func keyPermissionList () = makeString(["%s", "forceStopPermission"], SEP)
2121
2222
23-func keyForceStop (address) = makeString(["%s%s", "stop", address], SEP)
23+func keyForceStop (address) = makeString(["%s%s", "disabled", address], SEP)
2424
2525
2626 let permissionList = split(valueOrElse(getString(this, keyPermissionList()), ""), SEP)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFilename = "forcestop.ride"
55
66 let SEP = "__"
77
88 func wrapErr (msg) = makeString([contractFilename, ": ", msg], "")
99
1010
1111 func throwErr (msg) = throw(wrapErr(msg))
1212
1313
1414 func keyManagerVaultAddress () = makeString(["%s", "managerVaultAddress"], SEP)
1515
1616
1717 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
1818
1919
2020 func keyPermissionList () = makeString(["%s", "forceStopPermission"], SEP)
2121
2222
23-func keyForceStop (address) = makeString(["%s%s", "stop", address], SEP)
23+func keyForceStop (address) = makeString(["%s%s", "disabled", address], SEP)
2424
2525
2626 let permissionList = split(valueOrElse(getString(this, keyPermissionList()), ""), SEP)
2727
2828 let permissionDeniedError = throwErr("Permission denied")
2929
3030 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
3131 case s: String =>
3232 addressFromStringValue(s)
3333 case _ =>
3434 this
3535 }
3636
3737
3838 func managerPublicKeyOrUnit () = {
3939 let managerVaultAddress = getManagerVaultAddressOrThis()
4040 match getString(managerVaultAddress, keyManagerPublicKey()) {
4141 case s: String =>
4242 fromBase58String(s)
4343 case _: Unit =>
4444 unit
4545 case _ =>
4646 throw("Match error")
4747 }
4848 }
4949
5050
5151 func mustThis (i) = if ((i.caller == this))
5252 then true
5353 else permissionDeniedError
5454
5555
5656 func mustManager (i) = match managerPublicKeyOrUnit() {
5757 case pk: ByteVector =>
5858 if ((i.callerPublicKey == pk))
5959 then true
6060 else permissionDeniedError
6161 case _: Unit =>
6262 mustThis(i)
6363 case _ =>
6464 throw("Match error")
6565 }
6666
6767
6868 @Callable(i)
6969 func forceStopContract (address,stop) = {
7070 let callerAddressString = toString(i.caller)
7171 let check = [if (containsElement(permissionList, callerAddressString))
7272 then true
7373 else mustManager(i)]
7474 if ((check == check))
7575 then [BooleanEntry(keyForceStop(address), stop)]
7676 else throw("Strict value is not equal to itself.")
7777 }
7878
7979
8080
8181 @Callable(i)
8282 func addPermission (address) = {
8383 let check = [mustManager(i), if (!(containsElement(permissionList, address)))
8484 then true
8585 else throwErr("already in permission list")]
8686 if ((check == check))
8787 then {
8888 let newList = (permissionList :+ address)
8989 let newListString = makeString(newList, SEP)
9090 [StringEntry(keyPermissionList(), newListString)]
9191 }
9292 else throw("Strict value is not equal to itself.")
9393 }
9494
9595
9696
9797 @Callable(i)
9898 func removePermission (address) = {
9999 let check = [mustManager(i), if (containsElement(permissionList, address))
100100 then true
101101 else throwErr("not in permission list")]
102102 if ((check == check))
103103 then {
104104 let r_index = valueOrErrorMessage(indexOf(permissionList, address), (address + wrapErr("not in list")))
105105 let newList = removeByIndex(permissionList, r_index)
106106 let newListString = makeString(newList, SEP)
107107 [StringEntry(keyPermissionList(), newListString)]
108108 }
109109 else throw("Strict value is not equal to itself.")
110110 }
111111
112112
113113 @Verifier(tx)
114114 func verify () = {
115115 let targetPublicKey = match managerPublicKeyOrUnit() {
116116 case pk: ByteVector =>
117117 pk
118118 case _: Unit =>
119119 tx.senderPublicKey
120120 case _ =>
121121 throw("Match error")
122122 }
123123 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
124124 }
125125

github/deemru/w8io/786bc32 
18.35 ms