tx · TDkYpgePahS6ZjHADHRVAdU4WMizeijcjrbC3eDMokr 3PJpd1tujGgKdHEAXjG9oGsMxyE8vzx1eJ4: -0.01000000 Waves 2022.10.13 21:00 [3336363] smart account 3PJpd1tujGgKdHEAXjG9oGsMxyE8vzx1eJ4 > SELF 0.00000000 Waves
{ "type": 13, "id": "TDkYpgePahS6ZjHADHRVAdU4WMizeijcjrbC3eDMokr", "fee": 1000000, "feeAssetId": null, "timestamp": 1665684046991, "version": 2, "chainId": 87, "sender": "3PJpd1tujGgKdHEAXjG9oGsMxyE8vzx1eJ4", "senderPublicKey": "2zZ2ZoogVGxjTRzxu9Sx5JG6nwmctE4TPGZTxc6DiWp9", "proofs": [ "5qaFhUYRpgjy7gSQZQ3wnXXdX6qQc9EyARaRdqGR5EBvruh9326dHBEeZ74xRoVnzXegGnuFfobe6qcFLfmaqXQE" ], "script": "base64:BgINCAISAwoBCBIECgIICAoACXNlcGFyYXRvcgIBOwAQY29uZmlnQWRkcmVzc0tleQIGY29uZmlnAAlhZG1pbnNLZXkCBmFkbWlucwANY29uZmlnQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUQY29uZmlnQWRkcmVzc0tleQEHaXNBZG1pbgEGY2FsbGVyBAZhZG1Sb3cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwUJYWRtaW5zS2V5AgADAwkAAAIFBmNhbGxlcgUEdGhpcwYJAQhjb250YWlucwIFBmFkbVJvdwkApQgBBQZjYWxsZXIGBwENZ2V0RXZlbnRlcktleQEHZXZlbnRlcgkArAICAghldmVudGVyXwUHZXZlbnRlcgEJaXNFdmVudGVyAQdldmVudGVyBAhpc0V4aXN0cwkBCWlzRGVmaW5lZAEJAJ0IAgUNY29uZmlnQWRkcmVzcwkBDWdldEV2ZW50ZXJLZXkBCQClCAEFB2V2ZW50ZXIFCGlzRXhpc3RzAQdnZXRJdGVtAgdldmVudElkBGRhcHAJAKwCAgkArAICBQdldmVudElkAgFfBQRkYXBwARlnZXRIaXN0b3J5U3RvcmFnZUNvdW50S2V5AQdhZGRyZXNzCQCsAgICGnN0b3JhZ2VfY291bnRfZm9yX2FkZHJlc3NfBQdhZGRyZXNzARVnZXRIaXN0b3J5U3RvcmFnZU5LZXkCB2FkZHJlc3MBbgkArAICCQCsAgIJAKwCAgIUc3RvcmFnZV9mb3JfYWRkcmVzc18FB2FkZHJlc3MCAV8JAKQDAQUBbgIBaQEEaW5pdAEGY29uZmlnAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIQb25seSBtYWluIGNhbiBkbwQIaXNFeGlzdHMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFEGNvbmZpZ0FkZHJlc3NLZXkDCQEBIQEFCGlzRXhpc3RzBANpbnYJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUGY29uZmlnAgpzZXRDaGVja2VyCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBC1N0cmluZ0VudHJ5AgUQY29uZmlnQWRkcmVzc0tleQUGY29uZmlnBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg5hbHJlYWR5IGluaXRlZAFpAQ1zYXZlVG9IaXN0b3J5AgdldmVudElkB2FkZHJlc3MDCQEBIQEJAQlpc0V2ZW50ZXIBCAUBaQZjYWxsZXIJAAIBAhNvbmx5IGV2ZW50ZXIgY2FuIGRvBAxjdXJyZW50SW5kZXgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGWdldEhpc3RvcnlTdG9yYWdlQ291bnRLZXkBBQdhZGRyZXNzAAEEDmN1cnJlbnRIaXN0b3J5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARVnZXRIaXN0b3J5U3RvcmFnZU5LZXkCBQdhZGRyZXNzBQxjdXJyZW50SW5kZXgCAAQLbGlzdEhpc3RvcnkJALUJAgUOY3VycmVudEhpc3RvcnkFCXNlcGFyYXRvcgQEaXRlbQkBB2dldEl0ZW0CBQdldmVudElkCQClCAEIBQFpBmNhbGxlcgMJAGcCAGQJAJADAQULbGlzdEhpc3RvcnkECm5ld0hpc3RvcnkDCQAAAgkAsQIBBQ5jdXJyZW50SGlzdG9yeQAABQRpdGVtCQCsAgIJAKwCAgUOY3VycmVudEhpc3RvcnkFCXNlcGFyYXRvcgUEaXRlbQkAzAgCCQELU3RyaW5nRW50cnkCCQEVZ2V0SGlzdG9yeVN0b3JhZ2VOS2V5AgUHYWRkcmVzcwUMY3VycmVudEluZGV4BQpuZXdIaXN0b3J5BQNuaWwECm5ld0hpc3RvcnkFBGl0ZW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWdldEhpc3RvcnlTdG9yYWdlTktleQIFB2FkZHJlc3MJAGQCBQxjdXJyZW50SW5kZXgAAQUKbmV3SGlzdG9yeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWdldEhpc3RvcnlTdG9yYWdlQ291bnRLZXkBBQdhZGRyZXNzCQBkAgUMY3VycmVudEluZGV4AAEFA25pbADiEUWr", "height": 3336363, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6zENLFRRGFjtaA9Q4yXE5yFnbGdQpLH2JFkWs8S12EpH Next: 7BUs6T8o7McbLTqpVrUt1PKrnPmSFfpMayS3ofKmCsdL Diff:
Old | New | Differences | |
---|---|---|---|
44 | 44 | let isExists = isDefined(getString(this, configAddressKey)) | |
45 | 45 | if (!(isExists)) | |
46 | 46 | then { | |
47 | - | let inv = invoke( | |
47 | + | let inv = invoke(addressFromStringValue(config), "setChecker", [toString(this)], nil) | |
48 | 48 | if ((inv == inv)) | |
49 | 49 | then [StringEntry(configAddressKey, config)] | |
50 | 50 | else throw("Strict value is not equal to itself.") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let separator = ";" | |
5 | 5 | ||
6 | 6 | let configAddressKey = "config" | |
7 | 7 | ||
8 | 8 | let adminsKey = "admins" | |
9 | 9 | ||
10 | 10 | let configAddress = addressFromStringValue(getStringValue(this, configAddressKey)) | |
11 | 11 | ||
12 | 12 | func isAdmin (caller) = { | |
13 | 13 | let admRow = valueOrElse(getString(configAddress, adminsKey), "") | |
14 | 14 | if (if ((caller == this)) | |
15 | 15 | then true | |
16 | 16 | else contains(admRow, toString(caller))) | |
17 | 17 | then true | |
18 | 18 | else false | |
19 | 19 | } | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func getEventerKey (eventer) = ("eventer_" + eventer) | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | func isEventer (eventer) = { | |
26 | 26 | let isExists = isDefined(getString(configAddress, getEventerKey(toString(eventer)))) | |
27 | 27 | isExists | |
28 | 28 | } | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | func getItem (eventId,dapp) = ((eventId + "_") + dapp) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func getHistoryStorageCountKey (address) = ("storage_count_for_address_" + address) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func getHistoryStorageNKey (address,n) = ((("storage_for_address_" + address) + "_") + toString(n)) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | @Callable(i) | |
41 | 41 | func init (config) = if ((i.caller != this)) | |
42 | 42 | then throw("only main can do") | |
43 | 43 | else { | |
44 | 44 | let isExists = isDefined(getString(this, configAddressKey)) | |
45 | 45 | if (!(isExists)) | |
46 | 46 | then { | |
47 | - | let inv = invoke( | |
47 | + | let inv = invoke(addressFromStringValue(config), "setChecker", [toString(this)], nil) | |
48 | 48 | if ((inv == inv)) | |
49 | 49 | then [StringEntry(configAddressKey, config)] | |
50 | 50 | else throw("Strict value is not equal to itself.") | |
51 | 51 | } | |
52 | 52 | else throw("already inited") | |
53 | 53 | } | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | ||
57 | 57 | @Callable(i) | |
58 | 58 | func saveToHistory (eventId,address) = if (!(isEventer(i.caller))) | |
59 | 59 | then throw("only eventer can do") | |
60 | 60 | else { | |
61 | 61 | let currentIndex = valueOrElse(getInteger(this, getHistoryStorageCountKey(address)), 1) | |
62 | 62 | let currentHistory = valueOrElse(getString(this, getHistoryStorageNKey(address, currentIndex)), "") | |
63 | 63 | let listHistory = split(currentHistory, separator) | |
64 | 64 | let item = getItem(eventId, toString(i.caller)) | |
65 | 65 | if ((100 >= size(listHistory))) | |
66 | 66 | then { | |
67 | 67 | let newHistory = if ((size(currentHistory) == 0)) | |
68 | 68 | then item | |
69 | 69 | else ((currentHistory + separator) + item) | |
70 | 70 | [StringEntry(getHistoryStorageNKey(address, currentIndex), newHistory)] | |
71 | 71 | } | |
72 | 72 | else { | |
73 | 73 | let newHistory = item | |
74 | 74 | [StringEntry(getHistoryStorageNKey(address, (currentIndex + 1)), newHistory), IntegerEntry(getHistoryStorageCountKey(address), (currentIndex + 1))] | |
75 | 75 | } | |
76 | 76 | } | |
77 | 77 | ||
78 | 78 |
github/deemru/w8io/0e76f2f 94.32 ms ◑