tx · 376dYWa9ovhJnHtZcgNvSus9sGoUvXpytE4smZ96ne94

3M7uzD8rT54fKQcP4s417if1VKU8yromEP2:  -0.05500000 Waves

2025.10.06 19:32 [397602] smart account 3M7uzD8rT54fKQcP4s417if1VKU8yromEP2 > SELF 0.00000000 Waves

{ "type": 13, "id": "376dYWa9ovhJnHtZcgNvSus9sGoUvXpytE4smZ96ne94", "fee": 5500000, "feeAssetId": null, "timestamp": 1759768382462, "version": 2, "chainId": 82, "sender": "3M7uzD8rT54fKQcP4s417if1VKU8yromEP2", "senderPublicKey": "2eFPamS5zez1159HEFEJaxs2XPq3AupPbNApNGffRjqf", "proofs": [ "31hkit8u8KEHAUuB9DqbkpM5ATedhcyHy9D9WRh9vzJHdUiSEsowd8i1n1XYxjxjEicQuwnEvytDqvuW5CvJ3JXW" ], "script": "base64:BgIhCAISAwoBGBIJCgcICAgBCAgIEgMKAQgSAwoBCBIDCgEICQAHVkVSU0lPTgIFMS4wLjAABUxJTUlUAAIACGtfQURNSU5TAgtBRE1JTlNfUEJLUwAKa19NQU5BR0VSUwINTUFOQUdFUlNfUEJLUwEMX3ZhbGlkYXRlUGJrAQNwYmsEB2FkZHJlc3MJAKcIAQkA2QQBBQNwYmsECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwUKYWRkcmVzc1N0cgEJX2dldExpbWl0AAUFTElNSVQBCF9pc0FkbWluAQNwYmsECWFkbWluc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhrX0FETUlOUwIABAZhZG1pbnMJALUJAgUJYWRtaW5zU3RyAgEsCQECIT0CCQDPCAIFBmFkbWlucwUDcGJrBQR1bml0AQpfaXNNYW5hZ2VyAQNwYmsEC21hbmFnZXJzU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFCmtfTUFOQUdFUlMCAAQIbWFuYWdlcnMJALUJAgULbWFuYWdlcnNTdHICASwJAQIhPQIJAM8IAgUIbWFuYWdlcnMFA3BiawUEdW5pdAEQX2lzVmFsaWRPcGVyYXRvcgEDcGJrBAttYW5hZ2Vyc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQprX01BTkFHRVJTAgAECG1hbmFnZXJzCQC1CQIFC21hbmFnZXJzU3RyAgEsBAdpc0FkbWluCQEIX2lzQWRtaW4BBQNwYmsECWlzTWFuYWdlcgkBCl9pc01hbmFnZXIBBQNwYmsDBQdpc0FkbWluBgUJaXNNYW5hZ2VyBQFpAQRpbml0AQthZG1pbnNfcGJrcwQMY2hlY2tfYWRtaW5zAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBBQhrX0FETUlOUwUEdW5pdAkAAgECDkFscmVhZHkgaW5pdGVkAwkAAAIFDGNoZWNrX2FkbWlucwUMY2hlY2tfYWRtaW5zCgEIdmFsaWRhdGUCBWFjY3VtBG5leHQJAQxfdmFsaWRhdGVQYmsBBQRuZXh0BAh2YWxpZFJlcwoAAiRsBQthZG1pbnNfcGJrcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIdmFsaWRhdGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUIdmFsaWRSZXMFCHZhbGlkUmVzBAlhZG1pbnNTdHIJALkJAgULYWRtaW5zX3Bia3MCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFCWFkbWluc1N0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2FkZFRhc2sHBG5hbWUEZGFwcAR0eGlkCWV4ZWN1dGVUcwRkZXNjDGluaXRpYXRvckFkcgZ0eGRhdGEECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJARBfaXNWYWxpZE9wZXJhdG9yAQUJY2FsbGVyUGJrCQACAQILTm90IGFsbG93ZWQEBnRhc2tJZAkArAICCQCsAgIFBGRhcHACAV8FBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIGX19kYXBwBQRkYXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX3R4SWQFBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fZGVzYwUEZGVzYwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIIX190eGRhdGEFBnR4ZGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IFDGluaXRpYXRvckFkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZ0YXNrSWQCBF9fdHMFCWV4ZWN1dGVUcwUDbmlsAWkBCnJlbW92ZVRhc2sBBnRhc2tJZAQJY2FsbGVyUGJrCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQkBEF9pc1ZhbGlkT3BlcmF0b3IBBQljYWxsZXJQYmsJAAIBAgtOb3QgYWxsb3dlZAQMaW5pdGlhdG9yQWRyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IDCQECIT0CBQxpbml0aWF0b3JBZHIJAKUIAQkApwgBCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAAIBAhdPbmx5IGNyZWF0b3IgY2FuIHJlbW92ZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAgZfX2RhcHAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBl9fdHhJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIGX19kZXNjCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUGdGFza0lkAghfX3R4ZGF0YQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCBF9fdHMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZ0YXNrSWQCD19fY29uZmlybWF0aW9ucwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBnRhc2tJZAIKX19hcHByb3ZlZAUDbmlsAWkBD2FkZENvbmZpcm1hdGlvbgEGdGFza0lkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVsaW1pdAkBCV9nZXRMaW1pdAADCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECF09ubHkgYWRtaW5zIGNhbiBjb25maXJtBAR0eElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICBQZ0YXNrSWQCBl9fdHhJZAILSXZhbGlkIHRhc2sDCQAAAgUEdHhJZAUEdHhJZAQEZGFwcAkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQZ0YXNrSWQCBl9fZGFwcAQQY29uZmlybWF0aW9uc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQCsAgIFBnRhc2tJZAIPX19jb25maXJtYXRpb25zAgAEDWNvbmZpcm1hdGlvbnMJALUJAgUQY29uZmlybWF0aW9uc1N0cgIBLAMJAQIhPQIJAM8IAgUNY29uZmlybWF0aW9ucwUJY2FsbGVyUGJrBQR1bml0CQACAQIRQWxyZWFkeSBjb25maXJtZWQEB25ld0xpc3QDCQECIT0CBRBjb25maXJtYXRpb25zU3RyAgAJAM0IAgUNY29uZmlybWF0aW9ucwUJY2FsbGVyUGJrCQDMCAIFCWNhbGxlclBiawUDbmlsBApuZXdMaXN0U3RyCQC5CQIFB25ld0xpc3QCASwECGFwcHJvdmVkCQBnAgkAkAMBBQduZXdMaXN0BQVsaW1pdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIPX19jb25maXJtYXRpb25zBQpuZXdMaXN0U3RyCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgkArAICBQRkYXBwAgFfBQR0eElkAgpfX2FwcHJvdmVkBQhhcHByb3ZlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBHRlc3QBA3BiawQBdAkBDF92YWxpZGF0ZVBiawEFA3BiawMJAAACBQF0BQF0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AXeTYCA==", "height": 397602, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DTuAFXPRTLKWuCdo3avjv1FyUkaaXkirfHbt2uLnTPkj Next: 9r99Ene4wVXKwqx7LzhD33Vbr7Ein3qwuLVVS7SdkS2h Diff:
OldNewDifferences
123123 if ((indexOf(confirmations, callerPbk) != unit))
124124 then throw("Already confirmed")
125125 else {
126- let newList = (confirmations :+ callerPbk)
126+ let newList = if ((confirmationsStr != ""))
127+ then (confirmations :+ callerPbk)
128+ else [callerPbk]
127129 let newListStr = makeString(newList, ",")
128130 let approved = (size(newList) >= limit)
129131 [StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 let LIMIT = 2
77
88 let k_ADMINS = "ADMINS_PBKS"
99
1010 let k_MANAGERS = "MANAGERS_PBKS"
1111
1212 func _validatePbk (pbk) = {
1313 let address = addressFromPublicKey(fromBase58String(pbk))
1414 let addressStr = toString(address)
1515 addressStr
1616 }
1717
1818
1919 func _getLimit () = LIMIT
2020
2121
2222 func _isAdmin (pbk) = {
2323 let adminsStr = valueOrElse(getString(k_ADMINS), "")
2424 let admins = split(adminsStr, ",")
2525 (indexOf(admins, pbk) != unit)
2626 }
2727
2828
2929 func _isManager (pbk) = {
3030 let managersStr = valueOrElse(getString(k_MANAGERS), "")
3131 let managers = split(managersStr, ",")
3232 (indexOf(managers, pbk) != unit)
3333 }
3434
3535
3636 func _isValidOperator (pbk) = {
3737 let managersStr = valueOrElse(getString(k_MANAGERS), "")
3838 let managers = split(managersStr, ",")
3939 let isAdmin = _isAdmin(pbk)
4040 let isManager = _isManager(pbk)
4141 if (isAdmin)
4242 then true
4343 else isManager
4444 }
4545
4646
4747 @Callable(i)
4848 func init (admins_pbks) = {
4949 let check_admins = if (!(isDefined(getString(k_ADMINS))))
5050 then unit
5151 else throw("Already inited")
5252 if ((check_admins == check_admins))
5353 then {
5454 func validate (accum,next) = _validatePbk(next)
5555
5656 let validRes = {
5757 let $l = admins_pbks
5858 let $s = size($l)
5959 let $acc0 = ""
6060 func $f0_1 ($a,$i) = if (($i >= $s))
6161 then $a
6262 else validate($a, $l[$i])
6363
6464 func $f0_2 ($a,$i) = if (($i >= $s))
6565 then $a
6666 else throw("List size exceeds 10")
6767
6868 $f0_2($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)
6969 }
7070 if ((validRes == validRes))
7171 then {
7272 let adminsStr = makeString(admins_pbks, ",")
7373 [StringEntry(k_ADMINS, adminsStr)]
7474 }
7575 else throw("Strict value is not equal to itself.")
7676 }
7777 else throw("Strict value is not equal to itself.")
7878 }
7979
8080
8181
8282 @Callable(i)
8383 func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
8484 let callerPbk = toBase58String(i.callerPublicKey)
8585 if (!(_isValidOperator(callerPbk)))
8686 then throw("Not allowed")
8787 else {
8888 let taskId = ((dapp + "_") + txid)
8989 [StringEntry((taskId + "__name"), name), StringEntry((taskId + "__dapp"), dapp), StringEntry((taskId + "__txId"), txid), StringEntry((taskId + "__desc"), desc), StringEntry((taskId + "__txdata"), txdata), StringEntry((taskId + "__initiator"), initiatorAdr), IntegerEntry((taskId + "__ts"), executeTs)]
9090 }
9191 }
9292
9393
9494
9595 @Callable(i)
9696 func removeTask (taskId) = {
9797 let callerPbk = toBase58String(i.callerPublicKey)
9898 if (!(_isValidOperator(callerPbk)))
9999 then throw("Not allowed")
100100 else {
101101 let initiatorAdr = getStringValue((taskId + "__initiator"))
102102 if ((initiatorAdr != toString(addressFromPublicKey(i.callerPublicKey))))
103103 then throw("Only creator can remove")
104104 else [DeleteEntry((taskId + "__name")), DeleteEntry((taskId + "__dapp")), DeleteEntry((taskId + "__txId")), DeleteEntry((taskId + "__desc")), DeleteEntry((taskId + "__txdata")), DeleteEntry((taskId + "__initiator")), DeleteEntry((taskId + "__ts")), DeleteEntry((taskId + "__confirmations")), DeleteEntry((taskId + "__approved"))]
105105 }
106106 }
107107
108108
109109
110110 @Callable(i)
111111 func addConfirmation (taskId) = {
112112 let callerPbk = toBase58String(i.callerPublicKey)
113113 let limit = _getLimit()
114114 if (!(_isAdmin(callerPbk)))
115115 then throw("Only admins can confirm")
116116 else {
117117 let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
118118 if ((txId == txId))
119119 then {
120120 let dapp = getStringValue((taskId + "__dapp"))
121121 let confirmationsStr = valueOrElse(getString((taskId + "__confirmations")), "")
122122 let confirmations = split(confirmationsStr, ",")
123123 if ((indexOf(confirmations, callerPbk) != unit))
124124 then throw("Already confirmed")
125125 else {
126- let newList = (confirmations :+ callerPbk)
126+ let newList = if ((confirmationsStr != ""))
127+ then (confirmations :+ callerPbk)
128+ else [callerPbk]
127129 let newListStr = makeString(newList, ",")
128130 let approved = (size(newList) >= limit)
129131 [StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
130132 }
131133 }
132134 else throw("Strict value is not equal to itself.")
133135 }
134136 }
135137
136138
137139
138140 @Callable(i)
139141 func test (pbk) = {
140142 let t = _validatePbk(pbk)
141143 if ((t == t))
142144 then nil
143145 else throw("Strict value is not equal to itself.")
144146 }
145147
146148

github/deemru/w8io
33.54 ms