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:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# 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")
1113 }
1214
1315
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)
3217
3318
3419 @Callable(i)
35-func init () = if ((this != i.caller))
20+func opAddLockableAsset (assetIdStr) = if ((this != i.caller))
3621 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+ }
6330
6431
6532 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# 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")
1113 }
1214
1315
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)
3217
3318
3419 @Callable(i)
35-func init () = if ((this != i.caller))
20+func opAddLockableAsset (assetIdStr) = if ((this != i.caller))
3621 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+ }
6330
6431
6532 @Verifier(tx)
6633 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
6734

github/deemru/w8io/169f3d6 
26.52 ms