tx · CCPivsAn1wWAqA4x7u4Lzv9M23MJdKpyZLSqWzenEoaA 3PPQ1R9YonyFfVY5br5LVMZwHYYWVDakyjJ: -0.01000000 Waves 2024.01.25 05:44 [4012211] smart account 3PPQ1R9YonyFfVY5br5LVMZwHYYWVDakyjJ > SELF 0.00000000 Waves
{ "type": 13, "id": "CCPivsAn1wWAqA4x7u4Lzv9M23MJdKpyZLSqWzenEoaA", "fee": 1000000, "feeAssetId": null, "timestamp": 1706150678307, "version": 2, "chainId": 87, "sender": "3PPQ1R9YonyFfVY5br5LVMZwHYYWVDakyjJ", "senderPublicKey": "3NDtXZ2EbtevtG86iPCUbdk7rtyVK9vwWwvPcyX4kXg7", "proofs": [ "hJNhRC7MKpg6Rv1vg5itUKBmbCcruk7jL36AWVtCczML8CCJfZ47XwrecZ4vBRbeLHcfPX5WYroMbH4PokxYLfN" ], "script": "base64:BgIOCAISAwoBCBIDCgEIEgABAAlzZW50aW5lbHMJAMwIAgkBB0FkZHJlc3MBARoBV9fhI1GOfKuIWtXXKJd12Ih104+uIwWm4QkAzAgCCQEHQWRkcmVzcwEBGgFX+Pr6AibAUYvsajtGM0nSHHGwdYv5pMqaCQDMCAIJAQdBZGRyZXNzAQEaAVdJARj2Q38/TGzhZ3Xlt+SXL95QLbKD3fEJAMwIAgkBB0FkZHJlc3MBARoBV0vDbM77M1hDWENREO7v7iEQF0vyeMt8MgUDbmlsAwFpAQ1pbml0TmV3TWFzdGVyAQZtYXN0ZXIECWFkZHJlc3NPSwQHJG1hdGNoMAkApggBBQZtYXN0ZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAwkBASEBBQlhZGRyZXNzT0sJAAIBCQCsAgICEmluY29ycmVjdCBhZGRyZXNzIAUGbWFzdGVyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYXZhaWxhYmxlIGZvciBzZWxmIGNhbGwgb25seQkAzAgCCQELU3RyaW5nRW50cnkCAg92ZXJpZmllcl9tYXN0ZXIFBm1hc3RlcgUDbmlsAWkBEHJlcXVlc3ROZXdNYXN0ZXIBCW5ld01hc3RlcgQJYWRkcmVzc09LBAckbWF0Y2gwCQCmCAEFCW5ld01hc3RlcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcDCQEBIQEFCWFkZHJlc3NPSwkAAgEJAKwCAgISaW5jb3JyZWN0IGFkZHJlc3MgBQluZXdNYXN0ZXIDCQAAAgkAzwgCBQlzZW50aW5lbHMIBQFpBmNhbGxlcgUEdW5pdAkAAgECDndoaXRlbGlzdCBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICEnZlcmlmaWVyX25ld01hc3RlcgUJbmV3TWFzdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh92ZXJpZmllcl9uZXdNYXN0ZXJFbGlnaWJsZUFmdGVyCQBkAgUGaGVpZ2h0AJBOBQNuaWwBaQERYWN0aXZhdGVOZXdNYXN0ZXIABA5lbGlnaWJsZUhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIfdmVyaWZpZXJfbmV3TWFzdGVyRWxpZ2libGVBZnRlcgQJbmV3TWFzdGVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAhJ2ZXJpZmllcl9uZXdNYXN0ZXIDCQAAAgkAzwgCBQlzZW50aW5lbHMIBQFpBmNhbGxlcgUEdW5pdAkAAgECDndoaXRlbGlzdCBvbmx5AwkAZgIFDmVsaWdpYmxlSGVpZ2h0BQZoZWlnaHQJAAIBAiJuZXcgbWFzdGVyIGNhbm5vdCBiZSBhY3RpdmF0ZWQgeWV0CQDMCAIJAQtEZWxldGVFbnRyeQECEnZlcmlmaWVyX25ld01hc3RlcgkAzAgCCQELRGVsZXRlRW50cnkBAh92ZXJpZmllcl9uZXdNYXN0ZXJFbGlnaWJsZUFmdGVyCQDMCAIJAQtTdHJpbmdFbnRyeQICD3ZlcmlmaWVyX21hc3RlcgUJbmV3TWFzdGVyBQNuaWwBAnR4AQZ2ZXJpZnkABA1tYXN0ZXJBZGRyZXNzCQCiCAECD3ZlcmlmaWVyX21hc3RlcgQQYXBwcm92ZWRCeU1hc3RlcgQHJG1hdGNoMAUNbWFzdGVyQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAEByRtYXRjaDEJAJoIAgkBC3ZhbHVlT3JFbHNlAgkApggBBQF4CQCRAwIFCXNlbnRpbmVscwAACQCsAgICC2FwcHJvdmVkVHhfCQDYBAEIBQJ0eAJpZAMJAAECBQckbWF0Y2gxAgNJbnQEAXkFByRtYXRjaDEFAXkAAAABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQkAZgIFEGFwcHJvdmVkQnlNYXN0ZXIAAAfnVoHs", "height": 4012211, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let sentinels = [Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'), Address(base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o'), Address(base58'3P8auNWJkxxByyJtwErFXaxiXcGM45qQ1hA'), Address(base58'3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd')] | |
5 | + | ||
6 | + | @Callable(i) | |
7 | + | func initNewMaster (master) = { | |
8 | + | let addressOK = match addressFromString(master) { | |
9 | + | case a: Address => | |
10 | + | true | |
11 | + | case _ => | |
12 | + | false | |
13 | + | } | |
14 | + | if (!(addressOK)) | |
15 | + | then throw(("incorrect address " + master)) | |
16 | + | else if ((i.caller != this)) | |
17 | + | then throw("available for self call only") | |
18 | + | else [StringEntry("verifier_master", master)] | |
19 | + | } | |
20 | + | ||
21 | + | ||
22 | + | ||
23 | + | @Callable(i) | |
24 | + | func requestNewMaster (newMaster) = { | |
25 | + | let addressOK = match addressFromString(newMaster) { | |
26 | + | case a: Address => | |
27 | + | true | |
28 | + | case _ => | |
29 | + | false | |
30 | + | } | |
31 | + | if (!(addressOK)) | |
32 | + | then throw(("incorrect address " + newMaster)) | |
33 | + | else if ((indexOf(sentinels, i.caller) == unit)) | |
34 | + | then throw("whitelist only") | |
35 | + | else [StringEntry("verifier_newMaster", newMaster), IntegerEntry("verifier_newMasterEligibleAfter", (height + 10000))] | |
36 | + | } | |
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | @Callable(i) | |
41 | + | func activateNewMaster () = { | |
42 | + | let eligibleHeight = getIntegerValue(this, "verifier_newMasterEligibleAfter") | |
43 | + | let newMaster = getStringValue(this, "verifier_newMaster") | |
44 | + | if ((indexOf(sentinels, i.caller) == unit)) | |
45 | + | then throw("whitelist only") | |
46 | + | else if ((eligibleHeight > height)) | |
47 | + | then throw("new master cannot be activated yet") | |
48 | + | else [DeleteEntry("verifier_newMaster"), DeleteEntry("verifier_newMasterEligibleAfter"), StringEntry("verifier_master", newMaster)] | |
49 | + | } | |
50 | + | ||
51 | + | ||
52 | + | @Verifier(tx) | |
53 | + | func verify () = { | |
54 | + | let masterAddress = getString("verifier_master") | |
55 | + | let approvedByMaster = match masterAddress { | |
56 | + | case x: String => | |
57 | + | match getInteger(valueOrElse(addressFromString(x), sentinels[0]), ("approvedTx_" + toBase58String(tx.id))) { | |
58 | + | case y: Int => | |
59 | + | y | |
60 | + | case _ => | |
61 | + | 0 | |
62 | + | } | |
63 | + | case _ => | |
64 | + | 1 | |
65 | + | } | |
66 | + | if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)) | |
67 | + | then (approvedByMaster > 0) | |
68 | + | else false | |
69 | + | } | |
70 | + |
github/deemru/w8io/3ef1775 18.99 ms ◑