tx · 7w8fonwYDGvo4nh1oc5JGUgm5wdoauGAHu5ENdy62uSM 3NAp5P3K4f27nX1CjX61Smuc8mukXRttMq4: -0.01400000 Waves 2022.11.18 17:03 [2322648] smart account 3NAp5P3K4f27nX1CjX61Smuc8mukXRttMq4 > SELF 0.00000000 Waves
{ "type": 13, "id": "7w8fonwYDGvo4nh1oc5JGUgm5wdoauGAHu5ENdy62uSM", "fee": 1400000, "feeAssetId": null, "timestamp": 1668780246675, "version": 2, "chainId": 84, "sender": "3NAp5P3K4f27nX1CjX61Smuc8mukXRttMq4", "senderPublicKey": "Cn55ZpbRwz8fBbdw1zty66jc1JpZEiegB1nd5FXqiRzn", "proofs": [ "rzUXf47ZvYSNCWqq81R5MxcbszCGdhLb9xFjteuPv7Hjbii3Ftdr7qbS8aq6TQr7Qf6yfXNgmE5n7ko8Z3YqXmc" ], "script": "base64:BgISCAISBAoCCAgSAwoBCBIDCgEBBQAJU0VQQVJBVE9SAgJfXwAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAAtLRVlfQ0xBSU1FUgIHQ0xBSU1FUgEQX3ZhbGlkYXRlQWRkcmVzcwEIYWRkcmVzc18EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAwFpAQRpbml0AgltdWx0aXNpZ18IY2xhaW1lcl8EC29sZE11bHRpc2lnCQELdmFsdWVPckVsc2UCCQCiCAEFDEtFWV9NVUxUSVNJRwIABANlcnIDCQECIT0CBQtvbGRNdWx0aXNpZwIACQACAQIZaW5pdDogYWxyZWFkeSBpbml0aWFsaXplZAMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQhjbGFpbWVyXwkAAgECHWluaXQ6IGludmFsaWQgY2xhaW1lciBhZGRyZXNzBQR1bml0AwkAAAIFA2VycgUDZXJyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHBQltdWx0aXNpZ18JAMwIAgkBC1N0cmluZ0VudHJ5AgULS0VZX0NMQUlNRVIFCGNsYWltZXJfBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0Q2xhaW1lcgEIY2xhaW1lcl8EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHXNldENsYWltZXI6IHBlcm1pc3Npb24gZGVuaWVkAwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFCGNsYWltZXJfCQACAQIjc2V0Q2xhaW1lcjogaW52YWxpZCBjbGFpbWVyIGFkZHJlc3MFBHVuaXQDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQtLRVlfQ0xBSU1FUgUIY2xhaW1lcl8FA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVjbGFpbQEHYW1vdW50XwMJAQIhPQIIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQULS0VZX0NMQUlNRVIJAAIBAhhjbGFpbTogcGVybWlzc2lvbiBkZW5pZWQDAwkAZwIAAAUHYW1vdW50XwYJAGYCBQdhbW91bnRfCAkA7wcBBQR0aGlzB3JlZ3VsYXIJAAIBAhVjbGFpbTogaW52YWxpZCBhbW91bnQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB2Ftb3VudF8FBHVuaXQFA25pbAUEdW5pdAECdHgBBnZlcmlmeQAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcJALkJAgkAzAgCBQpLRVlfU1RBVFVTCQDMCAIJAKUIAQUEdGhpcwkAzAgCCQDYBAEIBQJ0eAJpZAUDbmlsBQlTRVBBUkFUT1IHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AkIgzg==", "height": 2322648, "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 SEPARATOR = "__" | |
5 | + | ||
6 | + | let KEY_MULTISIG = "MULTISIG" | |
7 | + | ||
8 | + | let KEY_STATUS = "STATUS" | |
9 | + | ||
10 | + | let KEY_CLAIMER = "CLAIMER" | |
11 | + | ||
12 | + | func _validateAddress (address_) = match addressFromString(address_) { | |
13 | + | case a: Address => | |
14 | + | true | |
15 | + | case _ => | |
16 | + | false | |
17 | + | } | |
18 | + | ||
19 | + | ||
20 | + | @Callable(i) | |
21 | + | func init (multisig_,claimer_) = { | |
22 | + | let oldMultisig = valueOrElse(getString(KEY_MULTISIG), "") | |
23 | + | let err = if ((oldMultisig != "")) | |
24 | + | then throw("init: already initialized") | |
25 | + | else if (!(_validateAddress(claimer_))) | |
26 | + | then throw("init: invalid claimer address") | |
27 | + | else unit | |
28 | + | if ((err == err)) | |
29 | + | then $Tuple2([StringEntry(KEY_MULTISIG, multisig_), StringEntry(KEY_CLAIMER, claimer_)], unit) | |
30 | + | else throw("Strict value is not equal to itself.") | |
31 | + | } | |
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | @Callable(i) | |
36 | + | func setClaimer (claimer_) = { | |
37 | + | let err = if ((i.caller != this)) | |
38 | + | then throw("setClaimer: permission denied") | |
39 | + | else if (!(_validateAddress(claimer_))) | |
40 | + | then throw("setClaimer: invalid claimer address") | |
41 | + | else unit | |
42 | + | if ((err == err)) | |
43 | + | then $Tuple2([StringEntry(KEY_CLAIMER, claimer_)], unit) | |
44 | + | else throw("Strict value is not equal to itself.") | |
45 | + | } | |
46 | + | ||
47 | + | ||
48 | + | ||
49 | + | @Callable(i) | |
50 | + | func claim (amount_) = if ((i.caller != addressFromStringValue(getStringValue(KEY_CLAIMER)))) | |
51 | + | then throw("claim: permission denied") | |
52 | + | else if (if ((0 >= amount_)) | |
53 | + | then true | |
54 | + | else (amount_ > wavesBalance(this).regular)) | |
55 | + | then throw("claim: invalid amount") | |
56 | + | else $Tuple2([ScriptTransfer(i.caller, amount_, unit)], unit) | |
57 | + | ||
58 | + | ||
59 | + | @Verifier(tx) | |
60 | + | func verify () = match getString(KEY_MULTISIG) { | |
61 | + | case multisig: String => | |
62 | + | valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false) | |
63 | + | case _ => | |
64 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
65 | + | } | |
66 | + |
github/deemru/w8io/169f3d6 16.44 ms ◑