tx · 9FLQFwPSVKCvJxCobxFTM26WwjRAoHHCWe5KWhfS6r4e

3M7uzD8rT54fKQcP4s417if1VKU8yromEP2:  -0.05500000 Waves

2025.10.06 03:10 [391850] smart account 3M7uzD8rT54fKQcP4s417if1VKU8yromEP2 > SELF 0.00000000 Waves

{ "type": 13, "id": "9FLQFwPSVKCvJxCobxFTM26WwjRAoHHCWe5KWhfS6r4e", "fee": 5500000, "feeAssetId": null, "timestamp": 1759709435817, "version": 2, "chainId": 82, "sender": "3M7uzD8rT54fKQcP4s417if1VKU8yromEP2", "senderPublicKey": "2eFPamS5zez1159HEFEJaxs2XPq3AupPbNApNGffRjqf", "proofs": [ "5PHts9zfUpvpz3wDQLFwcfZxGGBfwkK3viK9sT7pHTZWwhj23H1kqrxTM784kisKioLDvpxEEaHYdNi1QP54oUkd" ], "script": "base64:BgIcCAISAwoBGBIJCgcICAgBCAgIEgMKAQgSAwoBCAkAB1ZFUlNJT04CBTEuMC4wAAVMSU1JVAACAAhrX0FETUlOUwILQURNSU5TX1BCS1MACmtfTUFOQUdFUlMCDU1BTkFHRVJTX1BCS1MBDF92YWxpZGF0ZVBiawEDcGJrBAdhZGRyZXNzCQCnCAEJANkEAQUDcGJrBAphZGRyZXNzU3RyCQClCAEFB2FkZHJlc3MFCmFkZHJlc3NTdHIBCV9nZXRMaW1pdAAFBUxJTUlUAQhfaXNBZG1pbgEDcGJrBAlhZG1pbnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIa19BRE1JTlMCAAQGYWRtaW5zCQC1CQIFCWFkbWluc1N0cgIBLAkBAiE9AgkAzwgCBQZhZG1pbnMFA3BiawUEdW5pdAEKX2lzTWFuYWdlcgEDcGJrBAttYW5hZ2Vyc1N0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQprX01BTkFHRVJTAgAECG1hbmFnZXJzCQC1CQIFC21hbmFnZXJzU3RyAgEsCQECIT0CCQDPCAIFCG1hbmFnZXJzBQNwYmsFBHVuaXQBEF9pc1ZhbGlkT3BlcmF0b3IBA3BiawQLbWFuYWdlcnNTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUKa19NQU5BR0VSUwIABAhtYW5hZ2VycwkAtQkCBQttYW5hZ2Vyc1N0cgIBLAQHaXNBZG1pbgkBCF9pc0FkbWluAQUDcGJrBAlpc01hbmFnZXIJAQpfaXNNYW5hZ2VyAQUDcGJrAwUHaXNBZG1pbgYFCWlzTWFuYWdlcgQBaQEEaW5pdAELYWRtaW5zX3Bia3MEDGNoZWNrX2FkbWlucwMJAQlpc0RlZmluZWQBBQhrX0FETUlOUwUEdW5pdAkAAgECDkFscmVhZHkgaW5pdGVkAwkAAAIFDGNoZWNrX2FkbWlucwUMY2hlY2tfYWRtaW5zCgEIdmFsaWRhdGUCBWFjY3VtBG5leHQJAQxfdmFsaWRhdGVQYmsBBQRuZXh0BAh2YWxpZFJlcwoAAiRsBQthZG1pbnNfcGJrcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIdmFsaWRhdGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUIdmFsaWRSZXMFCHZhbGlkUmVzBAlhZG1pbnNTdHIJALkJAgULYWRtaW5zX3Bia3MCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19BRE1JTlMFCWFkbWluc1N0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2FkZFRhc2sHBG5hbWUEZGFwcAR0eGlkCWV4ZWN1dGVUcwRkZXNjDGluaXRpYXRvckFkcgZ0eGRhdGEECWNhbGxlclBiawkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkDCQEBIQEJARBfaXNWYWxpZE9wZXJhdG9yAQUJY2FsbGVyUGJrCQACAQILTm90IGFsbG93ZWQEBnRhc2tJZAkArAICCQCsAgIFBGRhcHACAV8FBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIGX19kYXBwBQRkYXBwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgZfX3R4SWQFBHR4aWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCBl9fZGVzYwUEZGVzYwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIIX190eGRhdGEFBnR4ZGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAILX19pbml0aWF0b3IFDGluaXRpYXRvckFkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZ0YXNrSWQCBF9fdHMFCWV4ZWN1dGVUcwUDbmlsAWkBD2FkZENvbmZpcm1hdGlvbgEGdGFza0lkBAljYWxsZXJQYmsJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVsaW1pdAkBCV9nZXRMaW1pdAADCQEBIQEJAQhfaXNBZG1pbgEFCWNhbGxlclBiawkAAgECF09ubHkgYWRtaW5zIGNhbiBjb25maXJtBAR0eElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICBQZ0YXNrSWQCBl9fdHhJZAILSXZhbGlkIHRhc2sDCQAAAgUEdHhJZAUEdHhJZAQEZGFwcAkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICBQZ0YXNrSWQCBl9fZGFwcAQQY29uZmlybWF0aW9uc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgUGdGFza0lkAg9fX2NvbmZpcm1hdGlvbnMCG0NvbmZpcm1hdGlvbnMga2V5IG5vdCBmb3VuZAQNY29uZmlybWF0aW9ucwkAtQkCBRBjb25maXJtYXRpb25zU3RyAgEsAwkBAiE9AgkAzwgCBQ1jb25maXJtYXRpb25zBQljYWxsZXJQYmsFBHVuaXQJAAIBAhFBbHJlYWR5IGNvbmZpcm1lZAQHbmV3TGlzdAkAzQgCBQ1jb25maXJtYXRpb25zBQljYWxsZXJQYmsECm5ld0xpc3RTdHIJALkJAgUHbmV3TGlzdAIBLAQIYXBwcm92ZWQJAGcCCQCQAwEFB25ld0xpc3QFBWxpbWl0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAg9fX2NvbmZpcm1hdGlvbnMFCm5ld0xpc3RTdHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgkArAICCQCsAgIFBGRhcHACAV8FBHR4SWQCCl9fYXBwcm92ZWQFCGFwcHJvdmVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEdGVzdAEDcGJrBAF0CQEMX3ZhbGlkYXRlUGJrAQUDcGJrAwkAAAIFAXQFAXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgC5CftA", "height": 391850, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6g3R6Hpkj7oA5iBcCtxe66vPtc6JXFYEBJtpcQ7Dii2o Next: Df6WsG9uABgALTAoWWfQDhqUbSF87HLZV3nXFcd4yfV5 Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
6+let LIMIT = 2
7+
68 let k_ADMINS = "ADMINS_PBKS"
79
8-let key_MANAGERS = "MANAGERS_PBKS"
10+let k_MANAGERS = "MANAGERS_PBKS"
911
1012 func _validatePbk (pbk) = {
1113 let address = addressFromPublicKey(fromBase58String(pbk))
1416 }
1517
1618
19+func _getLimit () = LIMIT
20+
21+
22+func _isAdmin (pbk) = {
23+ let adminsStr = valueOrElse(getString(k_ADMINS), "")
24+ let admins = split(adminsStr, ",")
25+ (indexOf(admins, pbk) != unit)
26+ }
27+
28+
29+func _isManager (pbk) = {
30+ let managersStr = valueOrElse(getString(k_MANAGERS), "")
31+ let managers = split(managersStr, ",")
32+ (indexOf(managers, pbk) != unit)
33+ }
34+
35+
36+func _isValidOperator (pbk) = {
37+ let managersStr = valueOrElse(getString(k_MANAGERS), "")
38+ let managers = split(managersStr, ",")
39+ let isAdmin = _isAdmin(pbk)
40+ let isManager = _isManager(pbk)
41+ if (isAdmin)
42+ then true
43+ else isManager
44+ }
45+
46+
1747 @Callable(i)
1848 func init (admins_pbks) = {
19- let check_admins = valueOrErrorMessage(getString(k_ADMINS), "Already inited")
49+ let check_admins = if (isDefined(k_ADMINS))
50+ then unit
51+ else throw("Already inited")
2052 if ((check_admins == check_admins))
2153 then {
2254 func validate (accum,next) = _validatePbk(next)
4880
4981
5082 @Callable(i)
83+func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
84+ let callerPbk = toBase58String(i.callerPublicKey)
85+ if (!(_isValidOperator(callerPbk)))
86+ then throw("Not allowed")
87+ else {
88+ let taskId = ((dapp + "_") + txid)
89+[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)]
90+ }
91+ }
92+
93+
94+
95+@Callable(i)
96+func addConfirmation (taskId) = {
97+ let callerPbk = toBase58String(i.callerPublicKey)
98+ let limit = _getLimit()
99+ if (!(_isAdmin(callerPbk)))
100+ then throw("Only admins can confirm")
101+ else {
102+ let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
103+ if ((txId == txId))
104+ then {
105+ let dapp = getStringValue((taskId + "__dapp"))
106+ let confirmationsStr = valueOrErrorMessage(getString((taskId + "__confirmations")), "Confirmations key not found")
107+ let confirmations = split(confirmationsStr, ",")
108+ if ((indexOf(confirmations, callerPbk) != unit))
109+ then throw("Already confirmed")
110+ else {
111+ let newList = (confirmations :+ callerPbk)
112+ let newListStr = makeString(newList, ",")
113+ let approved = (size(newList) >= limit)
114+[StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
115+ }
116+ }
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ }
120+
121+
122+
123+@Callable(i)
51124 func test (pbk) = {
52125 let t = _validatePbk(pbk)
53126 if ((t == t))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
6+let LIMIT = 2
7+
68 let k_ADMINS = "ADMINS_PBKS"
79
8-let key_MANAGERS = "MANAGERS_PBKS"
10+let k_MANAGERS = "MANAGERS_PBKS"
911
1012 func _validatePbk (pbk) = {
1113 let address = addressFromPublicKey(fromBase58String(pbk))
1214 let addressStr = toString(address)
1315 addressStr
1416 }
1517
1618
19+func _getLimit () = LIMIT
20+
21+
22+func _isAdmin (pbk) = {
23+ let adminsStr = valueOrElse(getString(k_ADMINS), "")
24+ let admins = split(adminsStr, ",")
25+ (indexOf(admins, pbk) != unit)
26+ }
27+
28+
29+func _isManager (pbk) = {
30+ let managersStr = valueOrElse(getString(k_MANAGERS), "")
31+ let managers = split(managersStr, ",")
32+ (indexOf(managers, pbk) != unit)
33+ }
34+
35+
36+func _isValidOperator (pbk) = {
37+ let managersStr = valueOrElse(getString(k_MANAGERS), "")
38+ let managers = split(managersStr, ",")
39+ let isAdmin = _isAdmin(pbk)
40+ let isManager = _isManager(pbk)
41+ if (isAdmin)
42+ then true
43+ else isManager
44+ }
45+
46+
1747 @Callable(i)
1848 func init (admins_pbks) = {
19- let check_admins = valueOrErrorMessage(getString(k_ADMINS), "Already inited")
49+ let check_admins = if (isDefined(k_ADMINS))
50+ then unit
51+ else throw("Already inited")
2052 if ((check_admins == check_admins))
2153 then {
2254 func validate (accum,next) = _validatePbk(next)
2355
2456 let validRes = {
2557 let $l = admins_pbks
2658 let $s = size($l)
2759 let $acc0 = ""
2860 func $f0_1 ($a,$i) = if (($i >= $s))
2961 then $a
3062 else validate($a, $l[$i])
3163
3264 func $f0_2 ($a,$i) = if (($i >= $s))
3365 then $a
3466 else throw("List size exceeds 10")
3567
3668 $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)
3769 }
3870 if ((validRes == validRes))
3971 then {
4072 let adminsStr = makeString(admins_pbks, ",")
4173 [StringEntry(k_ADMINS, adminsStr)]
4274 }
4375 else throw("Strict value is not equal to itself.")
4476 }
4577 else throw("Strict value is not equal to itself.")
4678 }
4779
4880
4981
5082 @Callable(i)
83+func addTask (name,dapp,txid,executeTs,desc,initiatorAdr,txdata) = {
84+ let callerPbk = toBase58String(i.callerPublicKey)
85+ if (!(_isValidOperator(callerPbk)))
86+ then throw("Not allowed")
87+ else {
88+ let taskId = ((dapp + "_") + txid)
89+[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)]
90+ }
91+ }
92+
93+
94+
95+@Callable(i)
96+func addConfirmation (taskId) = {
97+ let callerPbk = toBase58String(i.callerPublicKey)
98+ let limit = _getLimit()
99+ if (!(_isAdmin(callerPbk)))
100+ then throw("Only admins can confirm")
101+ else {
102+ let txId = valueOrErrorMessage(getString((taskId + "__txId")), "Ivalid task")
103+ if ((txId == txId))
104+ then {
105+ let dapp = getStringValue((taskId + "__dapp"))
106+ let confirmationsStr = valueOrErrorMessage(getString((taskId + "__confirmations")), "Confirmations key not found")
107+ let confirmations = split(confirmationsStr, ",")
108+ if ((indexOf(confirmations, callerPbk) != unit))
109+ then throw("Already confirmed")
110+ else {
111+ let newList = (confirmations :+ callerPbk)
112+ let newListStr = makeString(newList, ",")
113+ let approved = (size(newList) >= limit)
114+[StringEntry((taskId + "__confirmations"), newListStr), BooleanEntry((((dapp + "_") + txId) + "__approved"), approved)]
115+ }
116+ }
117+ else throw("Strict value is not equal to itself.")
118+ }
119+ }
120+
121+
122+
123+@Callable(i)
51124 func test (pbk) = {
52125 let t = _validatePbk(pbk)
53126 if ((t == t))
54127 then nil
55128 else throw("Strict value is not equal to itself.")
56129 }
57130
58131

github/deemru/w8io
20.44 ms