tx · Fo4v8L2EFybJBcdJxykFUA7JujeTyFWMEtnhx3aXFKN3 3MriZGLhQEu1jMDKDAbnsbh6TZuZueBAHSY: -0.05000000 Waves 2021.03.17 17:34 [1441859] smart account 3MriZGLhQEu1jMDKDAbnsbh6TZuZueBAHSY > SELF 0.00000000 Waves
{ "type": 13, "id": "Fo4v8L2EFybJBcdJxykFUA7JujeTyFWMEtnhx3aXFKN3", "fee": 5000000, "feeAssetId": null, "timestamp": 1615991756811, "version": 2, "chainId": 84, "sender": "3MriZGLhQEu1jMDKDAbnsbh6TZuZueBAHSY", "senderPublicKey": "3idTJAmqkivFDf1EUKZ85Tt43Rp22pZb3RDiVXTWrgBq", "proofs": [ "33diabPXDZPELwCxbCSVPdXH2FXEDgPmiEiWymR6A8SbHA3t3SKu1SDbgoRLrhsQU5aLXME5Rb5oFZApoq1sfbas" ], "script": "base64:AAIEAAAAAAAAAAsIAhIDCgEIEgASAAAAAAkAAAAAEXRhc2tTdGF0dXNEZWZhdWx0AgAAAAppbmNvbXBsZXRlAAAAABJ0YXNrU3RhdHVzQ29tcGxldGUCAAAACGNvbXBsZXRlAAAAAAd3YXZlc0lkBQAAAAR1bml0AAAAABJhc3NldE5mdEluaXRBbW91bnQAAAAAAAAAAAEAAAAAEGFzc2V0TmZ0RGVjaW1hbHMAAAAAAAAAAAAAAAAAEmFzc2V0TmZ0UmVpc3N1YWJsZQcAAAAAF2Fzc2V0QW1vdW50TWluVGhyZXNob2xkAAAAAAAAAAPoAAAAABJkZWNpbWFsc0Fzc2V0V2F2ZXMAAAAAAAAAAAgAAAAAD2xhYmVsVGFza0lkTGFzdAIAAAAKdGFza0lkTGFzdAAAAAMAAAABaQEAAAAHc2V0VGFzawAAAAEAAAAIdGFza05hbWUEAAAACnRhc2tMYXN0SWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzBQAAAA9sYWJlbFRhc2tJZExhc3QJAABkAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPbGFiZWxUYXNrSWRMYXN0AAAAAAAAAAABAAAAAAAAAAABBAAAAAlhc3NldE5hbWUJAAEsAAAAAgIAAAAGdGFzayAjCQABpAAAAAEFAAAACnRhc2tMYXN0SWQEAAAAEGFzc2V0RGVzY3JpcHRpb24JAAEsAAAAAgIAAAAeTkZULXRva2VuIG9mIHRhc2sgbWFuYWdlciBmcm9tCQAEJQAAAAEFAAAABHRoaXMEAAAACmxvY2tBbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAIbmZ0SXNzdWUJAARCAAAABQUAAAAJYXNzZXROYW1lBQAAABBhc3NldERlc2NyaXB0aW9uBQAAABJhc3NldE5mdEluaXRBbW91bnQFAAAAEGFzc2V0TmZ0RGVjaW1hbHMFAAAAEmFzc2V0TmZ0UmVpc3N1YWJsZQQAAAAKbmZ0SXNzdWVJZAkAAlgAAAABCQAEOAAAAAEFAAAACG5mdElzc3VlBAAAAA1sYWJlbFRhc2tOYW1lCQABLAAAAAICAAAACXRhc2tOYW1lXwUAAAAKbmZ0SXNzdWVJZAQAAAAPbGFiZWxUYXNrU3RhdHVzCQABLAAAAAICAAAAC3Rhc2tTdGF0dXNfBQAAAApuZnRJc3N1ZUlkBAAAAA9sYWJlbFRhc2tBbW91bnQJAAEsAAAAAgIAAAALdGFza0Ftb3VudF8FAAAACm5mdElzc3VlSWQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHE9uZSBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAd3YXZlc0lkCQAAAgAAAAECAAAAHW11c3QgYmUgYXR0YWNoZWQgYXNzZXQ6IFdBVkVTAwkAAGYAAAACBQAAABdhc3NldEFtb3VudE1pblRocmVzaG9sZAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAADNhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdGhyZXNob2xkOiAJAAGkAAAAAQUAAAAXYXNzZXRBbW91bnRNaW5UaHJlc2hvbGQCAAAABiBXQVZFUwMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAKm1ldGhvZCBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIHRoZSBjb250cmFjdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1sYWJlbFRhc2tOYW1lBQAAAAh0YXNrTmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9sYWJlbFRhc2tTdGF0dXMFAAAAEXRhc2tTdGF0dXNEZWZhdWx0CQAETAAAAAIFAAAACG5mdElzc3VlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASYXNzZXROZnRJbml0QW1vdW50CQACWQAAAAEFAAAACm5mdElzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2xhYmVsVGFza0Ftb3VudAUAAAAKbG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPbGFiZWxUYXNrSWRMYXN0BQAAAAp0YXNrTGFzdElkBQAAAANuaWwAAAABaQEAAAAMY29tcGxldGVUYXNrAAAAAAQAAAALJHQwMTk0MjIwNjgJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQCAAAAHkF0dGFjaGVkIGFzc2V0IGlzIG5vdCBleHBlY3RlZAQAAAAKbG9ja0Ftb3VudAgFAAAACyR0MDE5NDIyMDY4AAAAAl8xBAAAAAZsb2NrSWQIBQAAAAskdDAxOTQyMjA2OAAAAAJfMgQAAAAPbGFiZWxUYXNrU3RhdHVzCQABLAAAAAICAAAAC3Rhc2tTdGF0dXNfCQACWAAAAAEFAAAABmxvY2tJZAQAAAAPbGFiZWxUYXNrQW1vdW50CQABLAAAAAICAAAAC3Rhc2tBbW91bnRfCQACWAAAAAEFAAAABmxvY2tJZAQAAAAMc3RyaW5nTG9ja0lkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACGluZm9Mb2NrCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAMc3RyaW5nTG9ja0lkAgAAAA4gZG9lc24ndCBleGlzdAQAAAAWaW50QXNzZXRPdXRwdXRJZEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPbGFiZWxUYXNrQW1vdW50AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAABxPbmUgYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAqbWV0aG9kIG1heSBub3QgYmUgY2FsbGVkIGZyb20gdGhlIGNvbnRyYWN0AwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAA9sYWJlbFRhc2tTdGF0dXMJAAACAAAAAQIAAAAeQXR0YWNoZWQgYXNzZXQgaXMgbm90IGV4cGVjdGVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2xhYmVsVGFza1N0YXR1cwUAAAASdGFza1N0YXR1c0NvbXBsZXRlCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAGbG9ja0lkBQAAAApsb2NrQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAWaW50QXNzZXRPdXRwdXRJZEFtb3VudAUAAAAHd2F2ZXNJZAUAAAADbmlsAAAAAWkBAAAACnJlbW92ZVRhc2sAAAAABAAAAAskdDAzMDM3MzE0OAkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACmxvY2tBbW91bnQIBQAAAAskdDAzMDM3MzE0OAAAAAJfMQQAAAAGbG9ja0lkCAUAAAALJHQwMzAzNzMxNDgAAAACXzIEAAAAD2xhYmVsVGFza0Ftb3VudAkAASwAAAACAgAAAAt0YXNrQW1vdW50XwkAAlgAAAABBQAAAAZsb2NrSWQEAAAAD2xhYmVsVGFza1N0YXR1cwkAASwAAAACAgAAAAt0YXNrU3RhdHVzXwkAAlgAAAABBQAAAAZsb2NrSWQEAAAADWxhYmVsVGFza05hbWUJAAEsAAAAAgIAAAAJdGFza05hbWVfCQACWAAAAAEFAAAABmxvY2tJZAQAAAAMc3RyaW5nTG9ja0lkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACGluZm9Mb2NrCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAICAAAABkFzc2V0IAUAAAAMc3RyaW5nTG9ja0lkAgAAAA4gZG9lc24ndCBleGlzdAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAcT25lIGF0dGFjaGVkIGFzc2V0cyBleHBlY3RlZAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAKm1ldGhvZCBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIHRoZSBjb250cmFjdAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAD2xhYmVsVGFza1N0YXR1cwQAAAAKdGFza1N0YXR1cwkABB0AAAACBQAAAAR0aGlzBQAAAA9sYWJlbFRhc2tTdGF0dXMDAwkAAAAAAAACBQAAAAp0YXNrU3RhdHVzBQAAABF0YXNrU3RhdHVzRGVmYXVsdAkAAAAAAAACCQEAAAAFdmFsdWUAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAEmFzc2V0TmZ0SW5pdEFtb3VudAcEAAAAFmludEFzc2V0T3V0cHV0SWRBbW91bnQJAABpAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPbGFiZWxUYXNrQW1vdW50AAAAAAAAAAACCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAGbG9ja0lkBQAAAApsb2NrQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAWaW50QXNzZXRPdXRwdXRJZEFtb3VudAUAAAAHd2F2ZXNJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAA9sYWJlbFRhc2tBbW91bnQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPbGFiZWxUYXNrU3RhdHVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAADWxhYmVsVGFza05hbWUFAAAAA25pbAMJAAAAAAAAAgUAAAAKdGFza1N0YXR1cwUAAAASdGFza1N0YXR1c0NvbXBsZXRlCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAD2xhYmVsVGFza0Ftb3VudAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAA9sYWJlbFRhc2tTdGF0dXMJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAANbGFiZWxUYXNrTmFtZQUAAAADbmlsCQAAAgAAAAECAAAAGVRhc2sgaGF2ZSBhIGJyb2tlbiBzdGF0dXMJAAACAAAAAQIAAAAeQXR0YWNoZWQgYXNzZXQgaXMgbm90IGV4cGVjdGVkAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXk20GL2", "height": 1441859, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HbEhwsUffK8u5rpiqUdyj23U3kGXSTNmqRLHL3Y89GGb Next: FXnNxieuFemMQfuYW2JFe6qW1fhrKtFDxt5Rk5JLsihS Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let taskStatusComplete = "complete" | |
7 | 7 | ||
8 | - | let addrContract = Address(base58'3MriZGLhQEu1jMDKDAbnsbh6TZuZueBAHSY') | |
9 | - | ||
10 | - | let assetWavesId = unit | |
8 | + | let wavesId = unit | |
11 | 9 | ||
12 | 10 | let assetNftInitAmount = 1 | |
13 | 11 | ||
28 | 26 | else 1 | |
29 | 27 | let assetName = ("task #" + toString(taskLastId)) | |
30 | 28 | let assetDescription = ("NFT-token of task manager from" + toString(this)) | |
31 | - | let | |
29 | + | let lockAmount = i.payments[0].amount | |
32 | 30 | let nftIssue = Issue(assetName, assetDescription, assetNftInitAmount, assetNftDecimals, assetNftReissuable) | |
33 | 31 | let nftIssueId = toBase58String(calculateAssetId(nftIssue)) | |
34 | 32 | let labelTaskName = ("taskName_" + nftIssueId) | |
35 | 33 | let labelTaskStatus = ("taskStatus_" + nftIssueId) | |
36 | 34 | let labelTaskAmount = ("taskAmount_" + nftIssueId) | |
37 | - | if ((size(i.payments) | |
35 | + | if ((size(i.payments) != 1)) | |
38 | 36 | then throw("One attached assets expected") | |
39 | - | else if ((i.payments[0].assetId != | |
37 | + | else if ((i.payments[0].assetId != wavesId)) | |
40 | 38 | then throw("must be attached asset: WAVES") | |
41 | - | else if (isDefined(getString(this, labelTaskName))) | |
42 | - | then throw("Task with a specified name is already exists") | |
43 | - | else if ((assetAmountMinThreshold > i.payments[0].amount)) | |
44 | - | then throw((("amount must be greater than the minimum threshold: " + toString(assetAmountMinThreshold)) + " WAVES")) | |
45 | - | else if ((i.caller == addrContract)) | |
46 | - | then throw("method may not be called from the contract") | |
47 | - | else [StringEntry(labelTaskName, taskName), StringEntry(labelTaskStatus, taskStatusDefault), nftIssue, ScriptTransfer(i.caller, assetNftInitAmount, fromBase58String(nftIssueId)), StringEntry(labelTaskStatus, taskStatusDefault), IntegerEntry(labelTaskAmount, intAssetinputIdAmount), IntegerEntry(labelTaskIdLast, taskLastId)] | |
39 | + | else if ((assetAmountMinThreshold > i.payments[0].amount)) | |
40 | + | then throw((("amount must be greater than the minimum threshold: " + toString(assetAmountMinThreshold)) + " WAVES")) | |
41 | + | else if ((i.caller == this)) | |
42 | + | then throw("method may not be called from the contract") | |
43 | + | else [StringEntry(labelTaskName, taskName), StringEntry(labelTaskStatus, taskStatusDefault), nftIssue, ScriptTransfer(i.caller, assetNftInitAmount, fromBase58String(nftIssueId)), IntegerEntry(labelTaskAmount, lockAmount), IntegerEntry(labelTaskIdLast, taskLastId)] | |
48 | 44 | } | |
49 | 45 | ||
50 | 46 | ||
51 | 47 | ||
52 | 48 | @Callable(i) | |
53 | 49 | func completeTask () = { | |
54 | - | let $ | |
55 | - | let | |
56 | - | let | |
57 | - | let labelTaskStatus = ("taskStatus_" + toBase58String( | |
58 | - | let labelTaskAmount = ("taskAmount_" + toBase58String( | |
59 | - | let | |
60 | - | let | |
50 | + | let $t019422068 = $Tuple2(i.payments[0].amount, valueOrErrorMessage(i.payments[0].assetId, "Attached asset is not expected")) | |
51 | + | let lockAmount = $t019422068._1 | |
52 | + | let lockId = $t019422068._2 | |
53 | + | let labelTaskStatus = ("taskStatus_" + toBase58String(lockId)) | |
54 | + | let labelTaskAmount = ("taskAmount_" + toBase58String(lockId)) | |
55 | + | let stringLockId = toBase58String(value(i.payments[0].assetId)) | |
56 | + | let infoLock = valueOrErrorMessage(assetInfo(value(i.payments[0].assetId)), (("Asset " + stringLockId) + " doesn't exist")) | |
61 | 57 | let intAssetOutputIdAmount = getIntegerValue(this, labelTaskAmount) | |
62 | - | if ((size(i.payments) | |
58 | + | if ((size(i.payments) != 1)) | |
63 | 59 | then throw("One attached assets expected") | |
64 | - | else if ((i.caller == | |
60 | + | else if ((i.caller == this)) | |
65 | 61 | then throw("method may not be called from the contract") | |
66 | - | else if (if (if (if ((value(i.payments[0].amount) == assetNftInitAmount)) | |
67 | - | then (value(infoAssetInput.decimals) == assetNftDecimals) | |
68 | - | else false) | |
69 | - | then (value(infoAssetInput.reissuable) == assetNftReissuable) | |
70 | - | else false) | |
71 | - | then isDefined(getString(this, labelTaskStatus)) | |
72 | - | else false) | |
73 | - | then [StringEntry(labelTaskStatus, taskStatusComplete), Burn(assetInputId, assetInputAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, assetWavesId)] | |
74 | - | else throw("Attached asset is not expected") | |
62 | + | else if (!(isDefined(getString(this, labelTaskStatus)))) | |
63 | + | then throw("Attached asset is not expected") | |
64 | + | else [StringEntry(labelTaskStatus, taskStatusComplete), Burn(lockId, lockAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, wavesId)] | |
75 | 65 | } | |
76 | 66 | ||
77 | 67 | ||
78 | 68 | ||
79 | 69 | @Callable(i) | |
80 | 70 | func removeTask () = { | |
81 | - | let $ | |
82 | - | let | |
83 | - | let | |
84 | - | let labelTaskAmount = ("taskAmount_" + toBase58String( | |
85 | - | let labelTaskStatus = ("taskStatus_" + toBase58String( | |
86 | - | let labelTaskName = ("taskName_" + toBase58String( | |
87 | - | let | |
88 | - | let | |
89 | - | if ((size(i.payments) | |
71 | + | let $t030373148 = $Tuple2(i.payments[0].amount, value(i.payments[0].assetId)) | |
72 | + | let lockAmount = $t030373148._1 | |
73 | + | let lockId = $t030373148._2 | |
74 | + | let labelTaskAmount = ("taskAmount_" + toBase58String(lockId)) | |
75 | + | let labelTaskStatus = ("taskStatus_" + toBase58String(lockId)) | |
76 | + | let labelTaskName = ("taskName_" + toBase58String(lockId)) | |
77 | + | let stringLockId = toBase58String(value(i.payments[0].assetId)) | |
78 | + | let infoLock = valueOrErrorMessage(assetInfo(value(i.payments[0].assetId)), (("Asset " + stringLockId) + " doesn't exist")) | |
79 | + | if ((size(i.payments) != 1)) | |
90 | 80 | then throw("One attached assets expected") | |
91 | - | else if ((i.caller == | |
81 | + | else if ((i.caller == this)) | |
92 | 82 | then throw("method may not be called from the contract") | |
93 | - | else if (if (if ((value(infoAssetInput.decimals) == assetNftDecimals)) | |
94 | - | then (value(infoAssetInput.reissuable) == assetNftReissuable) | |
95 | - | else false) | |
96 | - | then isDefined(getString(this, labelTaskStatus)) | |
97 | - | else false) | |
83 | + | else if (isDefined(getString(this, labelTaskStatus))) | |
98 | 84 | then { | |
99 | 85 | let taskStatus = getString(this, labelTaskStatus) | |
100 | 86 | if (if ((taskStatus == taskStatusDefault)) | |
101 | 87 | then (value(i.payments[0].amount) == assetNftInitAmount) | |
102 | 88 | else false) | |
103 | 89 | then { | |
104 | - | let intAssetOutputIdAmount = | |
105 | - | [Burn( | |
90 | + | let intAssetOutputIdAmount = (getIntegerValue(this, labelTaskAmount) / 2) | |
91 | + | [Burn(lockId, lockAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, wavesId), DeleteEntry(labelTaskAmount), DeleteEntry(labelTaskStatus), DeleteEntry(labelTaskName)] | |
106 | 92 | } | |
107 | - | else if (( | |
93 | + | else if ((taskStatus == taskStatusComplete)) | |
108 | 94 | then [DeleteEntry(labelTaskAmount), DeleteEntry(labelTaskStatus), DeleteEntry(labelTaskName)] | |
109 | 95 | else throw("Task have a broken status") | |
110 | 96 | } | |
112 | 98 | } | |
113 | 99 | ||
114 | 100 | ||
101 | + | @Verifier(tx) | |
102 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
103 | + |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let taskStatusDefault = "incomplete" | |
5 | 5 | ||
6 | 6 | let taskStatusComplete = "complete" | |
7 | 7 | ||
8 | - | let addrContract = Address(base58'3MriZGLhQEu1jMDKDAbnsbh6TZuZueBAHSY') | |
9 | - | ||
10 | - | let assetWavesId = unit | |
8 | + | let wavesId = unit | |
11 | 9 | ||
12 | 10 | let assetNftInitAmount = 1 | |
13 | 11 | ||
14 | 12 | let assetNftDecimals = 0 | |
15 | 13 | ||
16 | 14 | let assetNftReissuable = false | |
17 | 15 | ||
18 | 16 | let assetAmountMinThreshold = 1000 | |
19 | 17 | ||
20 | 18 | let decimalsAssetWaves = 8 | |
21 | 19 | ||
22 | 20 | let labelTaskIdLast = "taskIdLast" | |
23 | 21 | ||
24 | 22 | @Callable(i) | |
25 | 23 | func setTask (taskName) = { | |
26 | 24 | let taskLastId = if (isDefined(getInteger(this, labelTaskIdLast))) | |
27 | 25 | then (getIntegerValue(this, labelTaskIdLast) + 1) | |
28 | 26 | else 1 | |
29 | 27 | let assetName = ("task #" + toString(taskLastId)) | |
30 | 28 | let assetDescription = ("NFT-token of task manager from" + toString(this)) | |
31 | - | let | |
29 | + | let lockAmount = i.payments[0].amount | |
32 | 30 | let nftIssue = Issue(assetName, assetDescription, assetNftInitAmount, assetNftDecimals, assetNftReissuable) | |
33 | 31 | let nftIssueId = toBase58String(calculateAssetId(nftIssue)) | |
34 | 32 | let labelTaskName = ("taskName_" + nftIssueId) | |
35 | 33 | let labelTaskStatus = ("taskStatus_" + nftIssueId) | |
36 | 34 | let labelTaskAmount = ("taskAmount_" + nftIssueId) | |
37 | - | if ((size(i.payments) | |
35 | + | if ((size(i.payments) != 1)) | |
38 | 36 | then throw("One attached assets expected") | |
39 | - | else if ((i.payments[0].assetId != | |
37 | + | else if ((i.payments[0].assetId != wavesId)) | |
40 | 38 | then throw("must be attached asset: WAVES") | |
41 | - | else if (isDefined(getString(this, labelTaskName))) | |
42 | - | then throw("Task with a specified name is already exists") | |
43 | - | else if ((assetAmountMinThreshold > i.payments[0].amount)) | |
44 | - | then throw((("amount must be greater than the minimum threshold: " + toString(assetAmountMinThreshold)) + " WAVES")) | |
45 | - | else if ((i.caller == addrContract)) | |
46 | - | then throw("method may not be called from the contract") | |
47 | - | else [StringEntry(labelTaskName, taskName), StringEntry(labelTaskStatus, taskStatusDefault), nftIssue, ScriptTransfer(i.caller, assetNftInitAmount, fromBase58String(nftIssueId)), StringEntry(labelTaskStatus, taskStatusDefault), IntegerEntry(labelTaskAmount, intAssetinputIdAmount), IntegerEntry(labelTaskIdLast, taskLastId)] | |
39 | + | else if ((assetAmountMinThreshold > i.payments[0].amount)) | |
40 | + | then throw((("amount must be greater than the minimum threshold: " + toString(assetAmountMinThreshold)) + " WAVES")) | |
41 | + | else if ((i.caller == this)) | |
42 | + | then throw("method may not be called from the contract") | |
43 | + | else [StringEntry(labelTaskName, taskName), StringEntry(labelTaskStatus, taskStatusDefault), nftIssue, ScriptTransfer(i.caller, assetNftInitAmount, fromBase58String(nftIssueId)), IntegerEntry(labelTaskAmount, lockAmount), IntegerEntry(labelTaskIdLast, taskLastId)] | |
48 | 44 | } | |
49 | 45 | ||
50 | 46 | ||
51 | 47 | ||
52 | 48 | @Callable(i) | |
53 | 49 | func completeTask () = { | |
54 | - | let $ | |
55 | - | let | |
56 | - | let | |
57 | - | let labelTaskStatus = ("taskStatus_" + toBase58String( | |
58 | - | let labelTaskAmount = ("taskAmount_" + toBase58String( | |
59 | - | let | |
60 | - | let | |
50 | + | let $t019422068 = $Tuple2(i.payments[0].amount, valueOrErrorMessage(i.payments[0].assetId, "Attached asset is not expected")) | |
51 | + | let lockAmount = $t019422068._1 | |
52 | + | let lockId = $t019422068._2 | |
53 | + | let labelTaskStatus = ("taskStatus_" + toBase58String(lockId)) | |
54 | + | let labelTaskAmount = ("taskAmount_" + toBase58String(lockId)) | |
55 | + | let stringLockId = toBase58String(value(i.payments[0].assetId)) | |
56 | + | let infoLock = valueOrErrorMessage(assetInfo(value(i.payments[0].assetId)), (("Asset " + stringLockId) + " doesn't exist")) | |
61 | 57 | let intAssetOutputIdAmount = getIntegerValue(this, labelTaskAmount) | |
62 | - | if ((size(i.payments) | |
58 | + | if ((size(i.payments) != 1)) | |
63 | 59 | then throw("One attached assets expected") | |
64 | - | else if ((i.caller == | |
60 | + | else if ((i.caller == this)) | |
65 | 61 | then throw("method may not be called from the contract") | |
66 | - | else if (if (if (if ((value(i.payments[0].amount) == assetNftInitAmount)) | |
67 | - | then (value(infoAssetInput.decimals) == assetNftDecimals) | |
68 | - | else false) | |
69 | - | then (value(infoAssetInput.reissuable) == assetNftReissuable) | |
70 | - | else false) | |
71 | - | then isDefined(getString(this, labelTaskStatus)) | |
72 | - | else false) | |
73 | - | then [StringEntry(labelTaskStatus, taskStatusComplete), Burn(assetInputId, assetInputAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, assetWavesId)] | |
74 | - | else throw("Attached asset is not expected") | |
62 | + | else if (!(isDefined(getString(this, labelTaskStatus)))) | |
63 | + | then throw("Attached asset is not expected") | |
64 | + | else [StringEntry(labelTaskStatus, taskStatusComplete), Burn(lockId, lockAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, wavesId)] | |
75 | 65 | } | |
76 | 66 | ||
77 | 67 | ||
78 | 68 | ||
79 | 69 | @Callable(i) | |
80 | 70 | func removeTask () = { | |
81 | - | let $ | |
82 | - | let | |
83 | - | let | |
84 | - | let labelTaskAmount = ("taskAmount_" + toBase58String( | |
85 | - | let labelTaskStatus = ("taskStatus_" + toBase58String( | |
86 | - | let labelTaskName = ("taskName_" + toBase58String( | |
87 | - | let | |
88 | - | let | |
89 | - | if ((size(i.payments) | |
71 | + | let $t030373148 = $Tuple2(i.payments[0].amount, value(i.payments[0].assetId)) | |
72 | + | let lockAmount = $t030373148._1 | |
73 | + | let lockId = $t030373148._2 | |
74 | + | let labelTaskAmount = ("taskAmount_" + toBase58String(lockId)) | |
75 | + | let labelTaskStatus = ("taskStatus_" + toBase58String(lockId)) | |
76 | + | let labelTaskName = ("taskName_" + toBase58String(lockId)) | |
77 | + | let stringLockId = toBase58String(value(i.payments[0].assetId)) | |
78 | + | let infoLock = valueOrErrorMessage(assetInfo(value(i.payments[0].assetId)), (("Asset " + stringLockId) + " doesn't exist")) | |
79 | + | if ((size(i.payments) != 1)) | |
90 | 80 | then throw("One attached assets expected") | |
91 | - | else if ((i.caller == | |
81 | + | else if ((i.caller == this)) | |
92 | 82 | then throw("method may not be called from the contract") | |
93 | - | else if (if (if ((value(infoAssetInput.decimals) == assetNftDecimals)) | |
94 | - | then (value(infoAssetInput.reissuable) == assetNftReissuable) | |
95 | - | else false) | |
96 | - | then isDefined(getString(this, labelTaskStatus)) | |
97 | - | else false) | |
83 | + | else if (isDefined(getString(this, labelTaskStatus))) | |
98 | 84 | then { | |
99 | 85 | let taskStatus = getString(this, labelTaskStatus) | |
100 | 86 | if (if ((taskStatus == taskStatusDefault)) | |
101 | 87 | then (value(i.payments[0].amount) == assetNftInitAmount) | |
102 | 88 | else false) | |
103 | 89 | then { | |
104 | - | let intAssetOutputIdAmount = | |
105 | - | [Burn( | |
90 | + | let intAssetOutputIdAmount = (getIntegerValue(this, labelTaskAmount) / 2) | |
91 | + | [Burn(lockId, lockAmount), ScriptTransfer(i.caller, intAssetOutputIdAmount, wavesId), DeleteEntry(labelTaskAmount), DeleteEntry(labelTaskStatus), DeleteEntry(labelTaskName)] | |
106 | 92 | } | |
107 | - | else if (( | |
93 | + | else if ((taskStatus == taskStatusComplete)) | |
108 | 94 | then [DeleteEntry(labelTaskAmount), DeleteEntry(labelTaskStatus), DeleteEntry(labelTaskName)] | |
109 | 95 | else throw("Task have a broken status") | |
110 | 96 | } | |
111 | 97 | else throw("Attached asset is not expected") | |
112 | 98 | } | |
113 | 99 | ||
114 | 100 | ||
101 | + | @Verifier(tx) | |
102 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
103 | + |
github/deemru/w8io/169f3d6 34.04 ms ◑![]()