tx · 69eFQ6Z4J67ZiLYfBx5wWyWbh8aS4HiDBCnQ9phvyzwt 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua: -0.01400000 Waves 2021.03.17 12:56 [1441568] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves
{ "type": 13, "id": "69eFQ6Z4J67ZiLYfBx5wWyWbh8aS4HiDBCnQ9phvyzwt", "fee": 1400000, "feeAssetId": null, "timestamp": 1615975050134, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "z2ySM6f2zCS9jMr8t4yxxLq92viwZZxbZ1BR7yrHZwPnCnpzA2GJbKxYPJ6NS54pj2PsrapHkAfcihM8rx3eYvZ" ], "script": "base64:AAIEAAAAAAAAAAcIAhIDCgEIAAAABAAAAAAJc2VwYXJhdG9yAgAAAANfX18AAAAAEWtleUxvY2thYmxlQXNzZXRzAgAAABNkQXBwX0xvY2thYmxlQXNzZXRzAQAAAA1nZXRBc3NldEluZm9zAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwCQAD7AAAAAEFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABUFzc2V0BAAAAAdpc0Fzc2V0BQAAAAckbWF0Y2gwBQAAAAdpc0Fzc2V0BAAAAAhub3RGb3VuZAUAAAAHJG1hdGNoMAkAAAIAAAABAgAAABVOb3QgYW4gZXhpc3RpbmcgYXNzZXQBAAAAEWdldExvY2thYmxlQXNzZXRzAAAAAAkABLUAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABFrZXlMb2NrYWJsZUFzc2V0cwUAAAAJc2VwYXJhdG9yAAAAAQAAAAFpAQAAABJvcEFkZExvY2thYmxlQXNzZXQAAAABAAAACmFzc2V0SWRTdHIDCQEAAAACIT0AAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAACAAAAAQIAAAANQWNjZXNzIGRlbmllZAQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyBAAAAAphc3NldEluZm9zCQEAAAANZ2V0QXNzZXRJbmZvcwAAAAEFAAAAB2Fzc2V0SWQEAAAADmxvY2thYmxlQXNzZXRzCQEAAAARZ2V0TG9ja2FibGVBc3NldHMAAAAAAwkAAAAAAAACCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAObG9ja2FibGVBc3NldHMFAAAACmFzc2V0SWRTdHIGCQAAAgAAAAECAAAAFkFzc2V0IGFscmVhZHkgbG9ja2FibGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARa2V5TG9ja2FibGVBc3NldHMJAAS5AAAAAgkABEwAAAACBQAAAAphc3NldElkU3RyBQAAAA5sb2NrYWJsZUFzc2V0cwUAAAAJc2VwYXJhdG9yBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleeYHvgc=", "height": 1441568, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: UF3eaEgYPUUtwtUxJFMMBP5ZqHADjpHrNqM2WN6VwcC Next: HarXNffV7PA5MLdYyMoBxVCv8iWoAinq5KSmgEM9ggrf Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | func isWavesAsset (assetId) = match assetId { | |
5 | - | case asset: ByteVector => | |
6 | - | false | |
7 | - | case waves: Unit => | |
8 | - | true | |
9 | - | case _ => | |
10 | - | throw("Match error") | |
4 | + | let separator = "___" | |
5 | + | ||
6 | + | let keyLockableAssets = "dApp_LockableAssets" | |
7 | + | ||
8 | + | func getAssetInfos (assetId) = match assetInfo(assetId) { | |
9 | + | case isAsset: Asset => | |
10 | + | isAsset | |
11 | + | case notFound => | |
12 | + | throw("Not an existing asset") | |
11 | 13 | } | |
12 | 14 | ||
13 | 15 | ||
14 | - | func getTreasuryValue (assetId) = { | |
15 | - | let treasuryName = match assetId { | |
16 | - | case asset: ByteVector => | |
17 | - | ("Treasury-" + toBase58String(asset)) | |
18 | - | case str: String => | |
19 | - | ("Treasury-" + str) | |
20 | - | case _: Unit => | |
21 | - | throw("Unknown treasury #1") | |
22 | - | case _ => | |
23 | - | throw("Match error") | |
24 | - | } | |
25 | - | match getInteger(this, treasuryName) { | |
26 | - | case val: Int => | |
27 | - | val | |
28 | - | case _ => | |
29 | - | throw("Unknown treasury #2") | |
30 | - | } | |
31 | - | } | |
16 | + | func getLockableAssets () = split(getStringValue(this, keyLockableAssets), separator) | |
32 | 17 | ||
33 | 18 | ||
34 | 19 | @Callable(i) | |
35 | - | func | |
20 | + | func opAddLockableAsset (assetIdStr) = if ((this != i.caller)) | |
36 | 21 | then throw("Access denied") | |
37 | - | else [DeleteEntry("caca"), DeleteEntry("feePoolStack"), DeleteEntry("lendingPoolAssets"), DeleteEntry("lendingPoolStack"), DeleteEntry("lendingPoolTokens"), DeleteEntry("listedLendingTokens"), IntegerEntry("governorCreationPrice", 1), IntegerEntry("Treasury-WAVES", 0)] | |
38 | - | ||
39 | - | ||
40 | - | ||
41 | - | @Callable(i) | |
42 | - | func createGovernor () = if ((size(i.payments) != 1)) | |
43 | - | then throw("No payment attached") | |
44 | - | else if ((this == i.caller)) | |
45 | - | then throw("dApp self sending is denied") | |
46 | - | else if ((isWavesAsset(i.payments[0].assetId) == false)) | |
47 | - | then throw("Payment should be in WAVES") | |
48 | - | else { | |
49 | - | let governorCreationPrice = match getInteger(this, "governorCreationPrice") { | |
50 | - | case val: Int => | |
51 | - | val | |
52 | - | case null => | |
53 | - | throw("Data missing: 'governorCreationPrice'") | |
54 | - | } | |
55 | - | if ((i.payments[0].amount != governorCreationPrice)) | |
56 | - | then throw("Not a valid amount sent") | |
57 | - | else { | |
58 | - | let govContract = Issue("GovernorContract", toString(height), 1, 0, false) | |
59 | - | let govContractId = calculateAssetId(govContract) | |
60 | - | [IntegerEntry("Treasury-WAVES", (getTreasuryValue("WAVES") + i.payments[0].amount)), govContract, ScriptTransfer(i.caller, govContract.quantity, govContractId)] | |
61 | - | } | |
62 | - | } | |
22 | + | else { | |
23 | + | let assetId = fromBase58String(assetIdStr) | |
24 | + | let assetInfos = getAssetInfos(assetId) | |
25 | + | let lockableAssets = getLockableAssets() | |
26 | + | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
27 | + | then throw("Asset already lockable") | |
28 | + | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
29 | + | } | |
63 | 30 | ||
64 | 31 | ||
65 | 32 | @Verifier(tx) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | func isWavesAsset (assetId) = match assetId { | |
5 | - | case asset: ByteVector => | |
6 | - | false | |
7 | - | case waves: Unit => | |
8 | - | true | |
9 | - | case _ => | |
10 | - | throw("Match error") | |
4 | + | let separator = "___" | |
5 | + | ||
6 | + | let keyLockableAssets = "dApp_LockableAssets" | |
7 | + | ||
8 | + | func getAssetInfos (assetId) = match assetInfo(assetId) { | |
9 | + | case isAsset: Asset => | |
10 | + | isAsset | |
11 | + | case notFound => | |
12 | + | throw("Not an existing asset") | |
11 | 13 | } | |
12 | 14 | ||
13 | 15 | ||
14 | - | func getTreasuryValue (assetId) = { | |
15 | - | let treasuryName = match assetId { | |
16 | - | case asset: ByteVector => | |
17 | - | ("Treasury-" + toBase58String(asset)) | |
18 | - | case str: String => | |
19 | - | ("Treasury-" + str) | |
20 | - | case _: Unit => | |
21 | - | throw("Unknown treasury #1") | |
22 | - | case _ => | |
23 | - | throw("Match error") | |
24 | - | } | |
25 | - | match getInteger(this, treasuryName) { | |
26 | - | case val: Int => | |
27 | - | val | |
28 | - | case _ => | |
29 | - | throw("Unknown treasury #2") | |
30 | - | } | |
31 | - | } | |
16 | + | func getLockableAssets () = split(getStringValue(this, keyLockableAssets), separator) | |
32 | 17 | ||
33 | 18 | ||
34 | 19 | @Callable(i) | |
35 | - | func | |
20 | + | func opAddLockableAsset (assetIdStr) = if ((this != i.caller)) | |
36 | 21 | then throw("Access denied") | |
37 | - | else [DeleteEntry("caca"), DeleteEntry("feePoolStack"), DeleteEntry("lendingPoolAssets"), DeleteEntry("lendingPoolStack"), DeleteEntry("lendingPoolTokens"), DeleteEntry("listedLendingTokens"), IntegerEntry("governorCreationPrice", 1), IntegerEntry("Treasury-WAVES", 0)] | |
38 | - | ||
39 | - | ||
40 | - | ||
41 | - | @Callable(i) | |
42 | - | func createGovernor () = if ((size(i.payments) != 1)) | |
43 | - | then throw("No payment attached") | |
44 | - | else if ((this == i.caller)) | |
45 | - | then throw("dApp self sending is denied") | |
46 | - | else if ((isWavesAsset(i.payments[0].assetId) == false)) | |
47 | - | then throw("Payment should be in WAVES") | |
48 | - | else { | |
49 | - | let governorCreationPrice = match getInteger(this, "governorCreationPrice") { | |
50 | - | case val: Int => | |
51 | - | val | |
52 | - | case null => | |
53 | - | throw("Data missing: 'governorCreationPrice'") | |
54 | - | } | |
55 | - | if ((i.payments[0].amount != governorCreationPrice)) | |
56 | - | then throw("Not a valid amount sent") | |
57 | - | else { | |
58 | - | let govContract = Issue("GovernorContract", toString(height), 1, 0, false) | |
59 | - | let govContractId = calculateAssetId(govContract) | |
60 | - | [IntegerEntry("Treasury-WAVES", (getTreasuryValue("WAVES") + i.payments[0].amount)), govContract, ScriptTransfer(i.caller, govContract.quantity, govContractId)] | |
61 | - | } | |
62 | - | } | |
22 | + | else { | |
23 | + | let assetId = fromBase58String(assetIdStr) | |
24 | + | let assetInfos = getAssetInfos(assetId) | |
25 | + | let lockableAssets = getLockableAssets() | |
26 | + | if ((containsElement(lockableAssets, assetIdStr) == true)) | |
27 | + | then throw("Asset already lockable") | |
28 | + | else [StringEntry(keyLockableAssets, makeString(assetIdStr :: lockableAssets, separator))] | |
29 | + | } | |
63 | 30 | ||
64 | 31 | ||
65 | 32 | @Verifier(tx) | |
66 | 33 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
67 | 34 |
github/deemru/w8io/169f3d6 26.52 ms ◑![]()