tx · LwaV4KasN4hYdxErbUy5RtMcugPoKgF6KZajdGZVfeK
3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua: -0.01400000 Waves
2021.03.17 14:08 [1441643] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves
{
"type": 13,
"id": "LwaV4KasN4hYdxErbUy5RtMcugPoKgF6KZajdGZVfeK",
"fee": 1400000,
"feeAssetId": null,
"timestamp": 1615979322390,
"version": 2,
"chainId": 84,
"sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua",
"senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu",
"proofs": [
"6ZJcVVD1kq5WsNi9ATuiEA8L4RUxJt1fkZpUAKfyYx916QKmzeLaMbfUvtTH3N84zN3wrAECMcSQGs7FHdFHFy7"
],
"script": "base64:AAIEAAAAAAAAAAkIAhIAEgMKAQgAAAAGAAAAAAlzZXBhcmF0b3ICAAAAA19fXwAAAAAQa2V5TG9ja2FibGVBc3NldAIAAAATZEFwcF9Mb2NrYWJsZUFzc2V0XwAAAAAVa2V5TG9ja2FibGVBc3NldHNMaXN0AgAAABdkQXBwX0xvY2thYmxlQXNzZXRzTGlzdAEAAAAKY2hlY2tBc3NldAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAkAA+wAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAAHaXNBc3NldAUAAAAHJG1hdGNoMAYHAQAAABRhZGRFbnRyeVRvU3RyaW5nTGlzdAAAAAIAAAAKc3RyaW5nTGlzdAAAAAVlbnRyeQMJAABmAAAAAgAAAAAAAAAAAQkAATEAAAABBQAAAApzdHJpbmdMaXN0BQAAAAVlbnRyeQkAASwAAAACCQABLAAAAAIFAAAACnN0cmluZ0xpc3QFAAAACXNlcGFyYXRvcgUAAAAFZW50cnkBAAAAD2lzTG9ja2FibGVBc3NldAAAAAEAAAAKYXNzZXRJZFN0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAEGtleUxvY2thYmxlQXNzZXQFAAAACmFzc2V0SWRTdHIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAKaXNMb2NrYWJsZQUAAAAHJG1hdGNoMAYHAAAAAgAAAAFpAQAAAARpbml0AAAAAAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABVrZXlMb2NrYWJsZUFzc2V0c0xpc3QCAAAAAAUAAAADbmlsAAAAAWkBAAAAEm9wQWRkTG9ja2FibGVBc3NldAAAAAEAAAAKYXNzZXRJZFN0cgQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyAwkBAAAAAiE9AAAAAgUAAAAEdGhpcwgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAADUFjY2VzcyBkZW5pZWQDCQAAAAAAAAIJAQAAAApjaGVja0Fzc2V0AAAAAQUAAAAHYXNzZXRJZAcJAAACAAAAAQIAAAAVTm90IGFuIGV4aXN0aW5nIGFzc2V0AwkAAAAAAAACCQEAAAAPaXNMb2NrYWJsZUFzc2V0AAAAAQUAAAAKYXNzZXRJZFN0cgYJAAACAAAAAQIAAAAZQXNzZXQgaXMgYWxyZWFkeSBsb2NrYWJsZQQAAAAZdXBkYXRlZExvY2thYmxlQXNzZXRzTGlzdAkBAAAAFGFkZEVudHJ5VG9TdHJpbmdMaXN0AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAVa2V5TG9ja2FibGVBc3NldHNMaXN0BQAAAAphc3NldElkU3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFWtleUxvY2thYmxlQXNzZXRzTGlzdAUAAAAZdXBkYXRlZExvY2thYmxlQXNzZXRzTGlzdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAEGtleUxvY2thYmxlQXNzZXQFAAAACmFzc2V0SWRTdHICAAAABHRlc3QFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5+ybzqQ==",
"height": 1441643,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: GKwJMdvEsXQumJ17GmG5VtktsnHQC9dYyPpjdGCM59kP
Next: B54LQr15EsadxDybBcq2uZwve92WCf3pDJKVieaFBVKo
Diff:
Old | New | | Differences |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let separator = "___" |
---|
5 | 5 | | |
---|
6 | | - | let keyLockableAssets = "dApp_LockableAssets" |
---|
| 6 | + | let keyLockableAsset = "dApp_LockableAsset_" |
---|
| 7 | + | |
---|
| 8 | + | let keyLockableAssetsList = "dApp_LockableAssetsList" |
---|
7 | 9 | | |
---|
8 | 10 | | func checkAsset (assetId) = match assetInfo(assetId) { |
---|
9 | 11 | | case isAsset: Asset => |
---|
|
18 | 20 | | else ((stringList + separator) + entry) |
---|
19 | 21 | | |
---|
20 | 22 | | |
---|
| 23 | + | func isLockableAsset (assetIdStr) = match getString(this, (keyLockableAsset + assetIdStr)) { |
---|
| 24 | + | case isLockable: String => |
---|
| 25 | + | true |
---|
| 26 | + | case _ => |
---|
| 27 | + | false |
---|
| 28 | + | } |
---|
| 29 | + | |
---|
| 30 | + | |
---|
21 | 31 | | @Callable(i) |
---|
22 | | - | func init () = [StringEntry(keyLockableAssets, "")] |
---|
| 32 | + | func init () = [StringEntry(keyLockableAssetsList, "")] |
---|
23 | 33 | | |
---|
24 | 34 | | |
---|
25 | 35 | | |
---|
|
30 | 40 | | then throw("Access denied") |
---|
31 | 41 | | else if ((checkAsset(assetId) == false)) |
---|
32 | 42 | | then throw("Not an existing asset") |
---|
33 | | - | else { |
---|
34 | | - | let lockableAssets = getStringValue(this, keyLockableAssets) |
---|
35 | | - | if ((contains(lockableAssets, assetIdStr) == true)) |
---|
36 | | - | then throw("Asset already lockable") |
---|
37 | | - | else [StringEntry(keyLockableAssets, addEntryToStringList(lockableAssets, assetIdStr))] |
---|
38 | | - | } |
---|
| 43 | + | else if ((isLockableAsset(assetIdStr) == true)) |
---|
| 44 | + | then throw("Asset is already lockable") |
---|
| 45 | + | else { |
---|
| 46 | + | let updatedLockableAssetsList = addEntryToStringList(getStringValue(this, keyLockableAssetsList), assetIdStr) |
---|
| 47 | + | [StringEntry(keyLockableAssetsList, updatedLockableAssetsList), StringEntry((keyLockableAsset + assetIdStr), "test")] |
---|
| 48 | + | } |
---|
39 | 49 | | } |
---|
40 | 50 | | |
---|
41 | 51 | | |
---|
Full:
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 | | - | let keyLockableAssets = "dApp_LockableAssets" |
---|
| 6 | + | let keyLockableAsset = "dApp_LockableAsset_" |
---|
| 7 | + | |
---|
| 8 | + | let keyLockableAssetsList = "dApp_LockableAssetsList" |
---|
7 | 9 | | |
---|
8 | 10 | | func checkAsset (assetId) = match assetInfo(assetId) { |
---|
9 | 11 | | case isAsset: Asset => |
---|
10 | 12 | | true |
---|
11 | 13 | | case _ => |
---|
12 | 14 | | false |
---|
13 | 15 | | } |
---|
14 | 16 | | |
---|
15 | 17 | | |
---|
16 | 18 | | func addEntryToStringList (stringList,entry) = if ((1 > size(stringList))) |
---|
17 | 19 | | then entry |
---|
18 | 20 | | else ((stringList + separator) + entry) |
---|
19 | 21 | | |
---|
20 | 22 | | |
---|
| 23 | + | func isLockableAsset (assetIdStr) = match getString(this, (keyLockableAsset + assetIdStr)) { |
---|
| 24 | + | case isLockable: String => |
---|
| 25 | + | true |
---|
| 26 | + | case _ => |
---|
| 27 | + | false |
---|
| 28 | + | } |
---|
| 29 | + | |
---|
| 30 | + | |
---|
21 | 31 | | @Callable(i) |
---|
22 | | - | func init () = [StringEntry(keyLockableAssets, "")] |
---|
| 32 | + | func init () = [StringEntry(keyLockableAssetsList, "")] |
---|
23 | 33 | | |
---|
24 | 34 | | |
---|
25 | 35 | | |
---|
26 | 36 | | @Callable(i) |
---|
27 | 37 | | func opAddLockableAsset (assetIdStr) = { |
---|
28 | 38 | | let assetId = fromBase58String(assetIdStr) |
---|
29 | 39 | | if ((this != i.caller)) |
---|
30 | 40 | | then throw("Access denied") |
---|
31 | 41 | | else if ((checkAsset(assetId) == false)) |
---|
32 | 42 | | then throw("Not an existing asset") |
---|
33 | | - | else { |
---|
34 | | - | let lockableAssets = getStringValue(this, keyLockableAssets) |
---|
35 | | - | if ((contains(lockableAssets, assetIdStr) == true)) |
---|
36 | | - | then throw("Asset already lockable") |
---|
37 | | - | else [StringEntry(keyLockableAssets, addEntryToStringList(lockableAssets, assetIdStr))] |
---|
38 | | - | } |
---|
| 43 | + | else if ((isLockableAsset(assetIdStr) == true)) |
---|
| 44 | + | then throw("Asset is already lockable") |
---|
| 45 | + | else { |
---|
| 46 | + | let updatedLockableAssetsList = addEntryToStringList(getStringValue(this, keyLockableAssetsList), assetIdStr) |
---|
| 47 | + | [StringEntry(keyLockableAssetsList, updatedLockableAssetsList), StringEntry((keyLockableAsset + assetIdStr), "test")] |
---|
| 48 | + | } |
---|
39 | 49 | | } |
---|
40 | 50 | | |
---|
41 | 51 | | |
---|
42 | 52 | | @Verifier(tx) |
---|
43 | 53 | | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) |
---|
44 | 54 | | |
---|