tx · 74qPxYbivj8Hh7yroujTUWNhKsaDi3xdNfa91uS2qGWJ

3Ms3vFkrTaXvYNw9Vna8vgTmHzEhWCBkBmT:  -0.04000000 Waves

2021.11.08 13:50 [1781943] smart account 3Ms3vFkrTaXvYNw9Vna8vgTmHzEhWCBkBmT > SELF 0.00000000 Waves

{ "type": 13, "id": "74qPxYbivj8Hh7yroujTUWNhKsaDi3xdNfa91uS2qGWJ", "fee": 4000000, "feeAssetId": null, "timestamp": 1636368679733, "version": 2, "chainId": 84, "sender": "3Ms3vFkrTaXvYNw9Vna8vgTmHzEhWCBkBmT", "senderPublicKey": "4cDpBfmEAxfhEbF9jxuT8xqJa14SqZgPfZ9Tov6ka4Qj", "proofs": [ "2kz2DwLFX1ksifiGemwXEMtF7nNWTdQtpJEVCUUehRyVeJ9PaPmWmYm7gSMcHfqhoYWesLTKcSMhJXx1Crh4WUB4" ], "script": "base64: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", "height": 1781943, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EgE7KM416q24WR6cAtBEoeNJEwSDa2AQju1hjeygWFdc Next: 7CRSpNdrVArCphbyvYoeoeY8ivKXeMksTozD6WJ2Efo9 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let VERIFIER = "3N8FWN9orV8D8px6xrYqTjWHHu2Qd3Jx4bV"
4+let ADMIN = "3N8FWN9orV8D8px6xrYqTjWHHu2Qd3Jx4bV"
55
66 let DAPP = "3Mza5Ao6wJgpw1JG3jxRY1xigD44zgfhdK6"
77
99
1010 let BLOCKED = "blocked"
1111
12-func getAdressStatus (address) = (address + "status")
12+func getAdressStatusKey (address) = (address + "_status")
1313
1414
15-func isStatusFalid (status) = match status {
15+func getAddressAdminKey (address) = (address + "_admin")
16+
17+
18+func isStatusValid (status) = match status {
1619 case t: String =>
1720 if ((t == BLOCKED))
1821 then true
2225 }
2326
2427
25-func getAddresVerifiedStatus (address) = match getString(getAdressStatus(address)) {
28+func isAdmin (address) = if ((address == ADMIN))
29+ then true
30+ else match getBoolean(this, getAddressAdminKey(address)) {
31+ case t: Boolean =>
32+ t
33+ case _ =>
34+ false
35+ }
36+
37+
38+func getAddresVerifiedStatus (address) = match getString(getAdressStatusKey(address)) {
2639 case s: String =>
2740 s
2841 case _ =>
3144
3245
3346 @Callable(i)
47+func addAdmin (address) = {
48+ let account = toBase58String(i.caller.bytes)
49+ if (!(isAdmin(account)))
50+ then throw("No Access")
51+ else if (isAdmin(address))
52+ then throw("Alredy is admin")
53+ else [BooleanEntry(getAddressAdminKey(address), true)]
54+ }
55+
56+
57+
58+@Callable(i)
59+func removeAdmin (address) = {
60+ let account = toBase58String(i.caller.bytes)
61+ if (!(isAdmin(account)))
62+ then throw("No Access")
63+ else if (!(isAdmin(address)))
64+ then throw("Not found admin")
65+ else [BooleanEntry(getAddressAdminKey(address), false)]
66+ }
67+
68+
69+
70+@Callable(i)
3471 func setStatus (address,status) = {
3572 let account = toBase58String(i.caller.bytes)
36- if ((account != VERIFIER))
73+ if (!(isAdmin(account)))
3774 then throw("No Access")
38- else if (!(isStatusFalid(status)))
75+ else if (!(isStatusValid(status)))
3976 then throw("Invalid status")
40- else [StringEntry(getAdressStatus(address), status)]
77+ else [StringEntry(getAdressStatusKey(address), status)]
4178 }
4279
4380
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let VERIFIER = "3N8FWN9orV8D8px6xrYqTjWHHu2Qd3Jx4bV"
4+let ADMIN = "3N8FWN9orV8D8px6xrYqTjWHHu2Qd3Jx4bV"
55
66 let DAPP = "3Mza5Ao6wJgpw1JG3jxRY1xigD44zgfhdK6"
77
88 let VERIFIED = "verified"
99
1010 let BLOCKED = "blocked"
1111
12-func getAdressStatus (address) = (address + "status")
12+func getAdressStatusKey (address) = (address + "_status")
1313
1414
15-func isStatusFalid (status) = match status {
15+func getAddressAdminKey (address) = (address + "_admin")
16+
17+
18+func isStatusValid (status) = match status {
1619 case t: String =>
1720 if ((t == BLOCKED))
1821 then true
1922 else (t == VERIFIED)
2023 case _ =>
2124 false
2225 }
2326
2427
25-func getAddresVerifiedStatus (address) = match getString(getAdressStatus(address)) {
28+func isAdmin (address) = if ((address == ADMIN))
29+ then true
30+ else match getBoolean(this, getAddressAdminKey(address)) {
31+ case t: Boolean =>
32+ t
33+ case _ =>
34+ false
35+ }
36+
37+
38+func getAddresVerifiedStatus (address) = match getString(getAdressStatusKey(address)) {
2639 case s: String =>
2740 s
2841 case _ =>
2942 VERIFIED
3043 }
3144
3245
3346 @Callable(i)
47+func addAdmin (address) = {
48+ let account = toBase58String(i.caller.bytes)
49+ if (!(isAdmin(account)))
50+ then throw("No Access")
51+ else if (isAdmin(address))
52+ then throw("Alredy is admin")
53+ else [BooleanEntry(getAddressAdminKey(address), true)]
54+ }
55+
56+
57+
58+@Callable(i)
59+func removeAdmin (address) = {
60+ let account = toBase58String(i.caller.bytes)
61+ if (!(isAdmin(account)))
62+ then throw("No Access")
63+ else if (!(isAdmin(address)))
64+ then throw("Not found admin")
65+ else [BooleanEntry(getAddressAdminKey(address), false)]
66+ }
67+
68+
69+
70+@Callable(i)
3471 func setStatus (address,status) = {
3572 let account = toBase58String(i.caller.bytes)
36- if ((account != VERIFIER))
73+ if (!(isAdmin(account)))
3774 then throw("No Access")
38- else if (!(isStatusFalid(status)))
75+ else if (!(isStatusValid(status)))
3976 then throw("Invalid status")
40- else [StringEntry(getAdressStatus(address), status)]
77+ else [StringEntry(getAdressStatusKey(address), status)]
4178 }
4279
4380
4481 @Verifier(tx)
4582 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
4683

github/deemru/w8io/873ac7e 
40.11 ms