tx · Bd55XmExNtfgy4yuRLkCxmayqy42evz4cPjPwo8hPyAK 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua: -0.01400000 Waves 2021.03.17 13:27 [1441601] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves
{ "type": 13, "id": "Bd55XmExNtfgy4yuRLkCxmayqy42evz4cPjPwo8hPyAK", "fee": 1400000, "feeAssetId": null, "timestamp": 1615976869756, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "5yKcWQUgzm7gCueLMZQRWbioRLSjkMxN8YQDCxVaQnc4U1noGGStNgHmjytGkR8BzsK7896eebqzPiWG9z5EEyqi" ], "script": "base64:AAIEAAAAAAAAAAkIAhIAEgMKAQgAAAAEAAAAAAlzZXBhcmF0b3ICAAAAA19fXwAAAAARa2V5TG9ja2FibGVBc3NldHMCAAAAE2RBcHBfTG9ja2FibGVBc3NldHMBAAAACmNoZWNrQXNzZXQAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAJAAPsAAAAAQUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAAB2lzQXNzZXQFAAAAByRtYXRjaDAGBwEAAAARZ2V0TG9ja2FibGVBc3NldHMAAAAABAAAAAdzdHJMaXN0CQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABFrZXlMb2NrYWJsZUFzc2V0cwQAAAAHc3BsaXRlZAkABLUAAAACBQAAAAdzdHJMaXN0BQAAAAlzZXBhcmF0b3IDCQAAZgAAAAIAAAAAAAAAAGQJAAGQAAAAAQUAAAAHc3BsaXRlZAkAAAIAAAABCQABpAAAAAEJAAGQAAAAAQUAAAAHc3BsaXRlZAUAAAAHc3BsaXRlZAAAAAIAAAABaQEAAAAEaW5pdAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARa2V5TG9ja2FibGVBc3NldHMCAAAAAAUAAAADbmlsAAAAAWkBAAAAEm9wQWRkTG9ja2FibGVBc3NldAAAAAEAAAAKYXNzZXRJZFN0cgQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyAwkBAAAAAiE9AAAAAgUAAAAEdGhpcwgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAADUFjY2VzcyBkZW5pZWQDCQAAAAAAAAIJAQAAAApjaGVja0Fzc2V0AAAAAQUAAAAHYXNzZXRJZAcJAAACAAAAAQIAAAAVTm90IGFuIGV4aXN0aW5nIGFzc2V0BAAAAA5sb2NrYWJsZUFzc2V0cwkBAAAAEWdldExvY2thYmxlQXNzZXRzAAAAAAMJAAAAAAAAAgkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADmxvY2thYmxlQXNzZXRzBQAAAAphc3NldElkU3RyBgkAAAIAAAABAgAAABZBc3NldCBhbHJlYWR5IGxvY2thYmxlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWtleUxvY2thYmxlQXNzZXRzCQAEuQAAAAIJAARMAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAAObG9ja2FibGVBc3NldHMFAAAACXNlcGFyYXRvcgUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXl55157", "height": 1441601, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EQo1RE32saFNforZA4FDPBjNY1VsVtUGMZxPV1Lgt9LD Next: AKbfDgGo4yC2Wi4D1b3w14ig8fHHyApWqQjPQwfKvSkT Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let keyLockableAssets = "dApp_LockableAssets" | |
7 | 7 | ||
8 | - | func | |
8 | + | func checkAsset (assetId) = match assetInfo(assetId) { | |
9 | 9 | case isAsset: Asset => | |
10 | - | | |
10 | + | true | |
11 | 11 | case _ => | |
12 | - | | |
12 | + | false | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | - | func getLockableAssets () = split(getStringValue(this, keyLockableAssets), separator) | |
16 | + | func getLockableAssets () = { | |
17 | + | let strList = getStringValue(this, keyLockableAssets) | |
18 | + | let splited = split(strList, separator) | |
19 | + | if ((100 > size(splited))) | |
20 | + | then throw(toString(size(splited))) | |
21 | + | else splited | |
22 | + | } | |
17 | 23 | ||
18 | 24 | ||
19 | 25 | @Callable(i) | |
22 | 28 | ||
23 | 29 | ||
24 | 30 | @Callable(i) | |
25 | - | func opAddLockableAsset (assetIdStr) = if ((this != i.caller)) | |
26 | - | then throw("Access denied") | |
27 | - | else { | |
28 | - | let assetId = fromBase58String(assetIdStr) | |
29 | - | let assetInfos = getAssetInfos(assetId) | |
30 | - | let lockableAssets = getLockableAssets() | |
31 | - | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
32 | - | then throw("Asset already lockable") | |
33 | - | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
34 | - | } | |
31 | + | func opAddLockableAsset (assetIdStr) = { | |
32 | + | let assetId = fromBase58String(assetIdStr) | |
33 | + | if ((this != i.caller)) | |
34 | + | then throw("Access denied") | |
35 | + | else if ((checkAsset(assetId) == false)) | |
36 | + | then throw("Not an existing asset") | |
37 | + | else { | |
38 | + | let lockableAssets = getLockableAssets() | |
39 | + | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
40 | + | then throw("Asset already lockable") | |
41 | + | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
42 | + | } | |
43 | + | } | |
35 | 44 | ||
36 | 45 | ||
37 | 46 | @Verifier(tx) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let separator = "___" | |
5 | 5 | ||
6 | 6 | let keyLockableAssets = "dApp_LockableAssets" | |
7 | 7 | ||
8 | - | func | |
8 | + | func checkAsset (assetId) = match assetInfo(assetId) { | |
9 | 9 | case isAsset: Asset => | |
10 | - | | |
10 | + | true | |
11 | 11 | case _ => | |
12 | - | | |
12 | + | false | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | ||
16 | - | func getLockableAssets () = split(getStringValue(this, keyLockableAssets), separator) | |
16 | + | func getLockableAssets () = { | |
17 | + | let strList = getStringValue(this, keyLockableAssets) | |
18 | + | let splited = split(strList, separator) | |
19 | + | if ((100 > size(splited))) | |
20 | + | then throw(toString(size(splited))) | |
21 | + | else splited | |
22 | + | } | |
17 | 23 | ||
18 | 24 | ||
19 | 25 | @Callable(i) | |
20 | 26 | func init () = [StringEntry(keyLockableAssets, "")] | |
21 | 27 | ||
22 | 28 | ||
23 | 29 | ||
24 | 30 | @Callable(i) | |
25 | - | func opAddLockableAsset (assetIdStr) = if ((this != i.caller)) | |
26 | - | then throw("Access denied") | |
27 | - | else { | |
28 | - | let assetId = fromBase58String(assetIdStr) | |
29 | - | let assetInfos = getAssetInfos(assetId) | |
30 | - | let lockableAssets = getLockableAssets() | |
31 | - | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
32 | - | then throw("Asset already lockable") | |
33 | - | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
34 | - | } | |
31 | + | func opAddLockableAsset (assetIdStr) = { | |
32 | + | let assetId = fromBase58String(assetIdStr) | |
33 | + | if ((this != i.caller)) | |
34 | + | then throw("Access denied") | |
35 | + | else if ((checkAsset(assetId) == false)) | |
36 | + | then throw("Not an existing asset") | |
37 | + | else { | |
38 | + | let lockableAssets = getLockableAssets() | |
39 | + | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
40 | + | then throw("Asset already lockable") | |
41 | + | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
42 | + | } | |
43 | + | } | |
35 | 44 | ||
36 | 45 | ||
37 | 46 | @Verifier(tx) | |
38 | 47 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
39 | 48 |
github/deemru/w8io/169f3d6 29.45 ms ◑![]()