tx · DmLFNihyMpgvSAWZ6DmcB7rTfmUPMjMne4cZi7oStGC7 3MtjjEoEs6Rcqkh8tYjPmBxZND58FuMtRWN: -0.05000000 Waves 2022.09.08 15:20 [2220120] smart account 3MtjjEoEs6Rcqkh8tYjPmBxZND58FuMtRWN > SELF 0.00000000 Waves
{ "type": 13, "id": "DmLFNihyMpgvSAWZ6DmcB7rTfmUPMjMne4cZi7oStGC7", "fee": 5000000, "feeAssetId": null, "timestamp": 1662639644250, "version": 2, "chainId": 84, "sender": "3MtjjEoEs6Rcqkh8tYjPmBxZND58FuMtRWN", "senderPublicKey": "GR35NTmt1JUgBMwuwSK6aFSmLN7g6eZKbYvfSV3ThdWR", "proofs": [ "2avY2vzXbVGqQX28biJ4k8sXMB9h1XKCNLmS7FWB3ZX1xTvYKFZGbHjwuhWmGAPPcJfGZkBtBZc8Q3qEE8DDizey" ], "script": "base64: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bGxlZDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMAIAAAAWQ2Fubm90IGZpbmQgZnVsZmlsbGVkMAQAAAAQb3JkZXJBbW91bnQwTGVmdAkAAGUAAAACBQAAAAxvcmRlckFtb3VudDAFAAAAD29yZGVyRnVsZmlsbGVkMAQAAAALb3JkZXJBc3NldDEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfdG9rZW4xAgAAABJDYW5ub3QgZmluZCB0b2tlbjEEAAAADG9yZGVyQW1vdW50MQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAACF9hbW91bnQxAgAAABNDYW5ub3QgZmluZCBhbW91bnQxBAAAAA9vcmRlckZ1bGZpbGxlZDEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMQIAAAAWQ2Fubm90IGZpbmQgZnVsZmlsbGVkMQQAAAAQb3JkZXJBbW91bnQxTGVmdAkAAGUAAAACBQAAAAxvcmRlckFtb3VudDEFAAAAD29yZGVyRnVsZmlsbGVkMQMJAQAAAAIhPQAAAAIFAAAAC29yZGVyU3RhdHVzAgAAAAZhY3RpdmUJAAACAAAAAQIAAAAgT3JkZXIgYWxyZWFkeSBjbG9zZWQgb3IgY2FuY2VsZWQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHVlvdSBzaG91bGQgdG8gcHJvdmlkZSBwYXltZW50BAAAAA1jYWxsZXJBZGRyZXNzCAUAAAABaQAAAAZjYWxsZXIEAAAADG93bmVyQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAKb3JkZXJPd25lcgQAAAANcGF5bWVudEFzc2V0MQkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAOcGF5bWVudEFtb3VudDEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAADXBheW1lbnRBc3NldDEFAAAAC29yZGVyQXNzZXQxCQAAAgAAAAECAAAAE1dyb25nIHBheW1lbnQgYXNzZXQDCQAAZwAAAAIFAAAADnBheW1lbnRBbW91bnQxBQAAABBvcmRlckFtb3VudDFMZWZ0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADWNhbGxlckFkZHJlc3MJAABlAAAAAgUAAAAOcGF5bWVudEFtb3VudDEFAAAAEG9yZGVyQW1vdW50MUxlZnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwUAAAAQb3JkZXJBbW91bnQwTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAAEG9yZGVyQW1vdW50MUxlZnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAANcGF5bWVudEFzc2V0MQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDAJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQwBQAAABBvcmRlckFtb3VudDBMZWZ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMQkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDEFAAAAEG9yZGVyQW1vdW50MUxlZnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3N0YXR1cwIAAAAGY2xvc2VkBQAAAANuaWwEAAAAB2Ftb3VudDAJAQAAAAhmcmFjdGlvbgAAAAQFAAAADG9yZGVyQW1vdW50MAUAAAAOcGF5bWVudEFtb3VudDEFAAAADG9yZGVyQW1vdW50MQUAAAAFRkxPT1IJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAA5wYXltZW50QW1vdW50MQkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAA1wYXltZW50QXNzZXQxCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADWNhbGxlckFkZHJlc3MFAAAAB2Ftb3VudDAJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMAUAAAAHYW1vdW50MAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDEJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQxBQAAAA5wYXltZW50QW1vdW50MQUAAAADbmlsAAAAAWkBAAAAC2NhbmNlbE9yZGVyAAAAAQAAAAdvcmRlcklkBAAAAApvcmRlck93bmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAGX293bmVyAgAAABdDYW5ub3QgZmluZCBvcmRlciBvd25lcgQAAAALb3JkZXJTdGF0dXMJAAQiAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3N0YXR1cwQAAAALb3JkZXJBc3NldDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfdG9rZW4wAgAAABJDYW5ub3QgZmluZCB0b2tlbjAEAAAADG9yZGVyQW1vdW50MAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAACF9hbW91bnQwAgAAABNDYW5ub3QgZmluZCBhbW91bnQwBAAAAA9vcmRlckZ1bGZpbGxlZDAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMAIAAAAWQ2Fubm90IGZpbmQgZnVsZmlsbGVkMAQAAAAQb3JkZXJBbW91bnQwTGVmdAkAAGUAAAACBQAAAAxvcmRlckFtb3VudDAFAAAAD29yZGVyRnVsZmlsbGVkMAMJAQAAAAIhPQAAAAIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwUAAAAKb3JkZXJPd25lcgkAAAIAAAABAgAAABdZb3UgY2Fubm90IGNhbmNlbCBvcmRlcgMJAQAAAAIhPQAAAAIFAAAAC29yZGVyU3RhdHVzAgAAAAZhY3RpdmUJAAACAAAAAQIAAAAbb3JkZXIgaXMgY2xvc2VkIG9yIGNhbmNlbGVkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAACm9yZGVyT3duZXIFAAAAEG9yZGVyQW1vdW50MExlZnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAALb3JkZXJBc3NldDAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAHX3N0YXR1cwIAAAAIY2FuY2VsZWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V54W7cDA==", "height": 2220120, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GugKcVbvfuYHjANwLsKfoXSYxNU56WaXLA46QmgHkD5H Next: 6Mg8yw3pcR9ACUaWfYJmtemXxjVtzEFijULHqBHi8Tn1 Diff:
Old | New | Differences | |
---|---|---|---|
28 | 28 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
29 | 29 | then unit | |
30 | 30 | else fromBase58String(assetIdStr) | |
31 | - | ||
32 | - | ||
33 | - | func _cancelOrder (orderId,caller) = { | |
34 | - | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
35 | - | let orderStatus = getString((("order_" + orderId) + "_status")) | |
36 | - | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
37 | - | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
38 | - | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
39 | - | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
40 | - | if ((caller != orderOwner)) | |
41 | - | then throw("You cannot cancel order") | |
42 | - | else if ((orderStatus != "active")) | |
43 | - | then throw("order is closed or canceled") | |
44 | - | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
45 | - | } | |
46 | 31 | ||
47 | 32 | ||
48 | 33 | @Callable(i) | |
104 | 89 | ||
105 | 90 | ||
106 | 91 | @Callable(i) | |
107 | - | func cancelOrder (orders) = { | |
108 | - | let orderIdList = split(orders, ",") | |
109 | - | func doCancel (accum,orderId) = (accum ++ _cancelOrder(orderId, toBase58String(i.caller.bytes))) | |
110 | - | ||
111 | - | let canceledOrders = { | |
112 | - | let $l = orderIdList | |
113 | - | let $s = size($l) | |
114 | - | let $acc0 = nil | |
115 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
116 | - | then $a | |
117 | - | else doCancel($a, $l[$i]) | |
118 | - | ||
119 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
120 | - | then $a | |
121 | - | else throw("List size exceeds 26") | |
122 | - | ||
123 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26) | |
124 | - | } | |
125 | - | canceledOrders | |
92 | + | func cancelOrder (orderId) = { | |
93 | + | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
94 | + | let orderStatus = getString((("order_" + orderId) + "_status")) | |
95 | + | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
96 | + | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
97 | + | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
98 | + | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
99 | + | if ((toBase58String(i.caller.bytes) != orderOwner)) | |
100 | + | then throw("You cannot cancel order") | |
101 | + | else if ((orderStatus != "active")) | |
102 | + | then throw("order is closed or canceled") | |
103 | + | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
126 | 104 | } | |
127 | 105 | ||
128 | 106 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func tryGetString (key) = match getString(this, key) { | |
5 | 5 | case b: String => | |
6 | 6 | b | |
7 | 7 | case _ => | |
8 | 8 | "" | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func tryGetInteger (key) = match getInteger(this, key) { | |
13 | 13 | case b: Int => | |
14 | 14 | b | |
15 | 15 | case _ => | |
16 | 16 | 0 | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func getAssetString (assetId) = match assetId { | |
21 | 21 | case b: ByteVector => | |
22 | 22 | toBase58String(b) | |
23 | 23 | case _ => | |
24 | 24 | "WAVES" | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
29 | 29 | then unit | |
30 | 30 | else fromBase58String(assetIdStr) | |
31 | - | ||
32 | - | ||
33 | - | func _cancelOrder (orderId,caller) = { | |
34 | - | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
35 | - | let orderStatus = getString((("order_" + orderId) + "_status")) | |
36 | - | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
37 | - | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
38 | - | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
39 | - | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
40 | - | if ((caller != orderOwner)) | |
41 | - | then throw("You cannot cancel order") | |
42 | - | else if ((orderStatus != "active")) | |
43 | - | then throw("order is closed or canceled") | |
44 | - | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
45 | - | } | |
46 | 31 | ||
47 | 32 | ||
48 | 33 | @Callable(i) | |
49 | 34 | func createOrder (asset1,amount1) = { | |
50 | 35 | let newOrdersAmount = (tryGetInteger("global_ordersAmount") + 1) | |
51 | 36 | let orderId = toString(newOrdersAmount) | |
52 | 37 | if ((size(i.payments) != 1)) | |
53 | 38 | then throw("You should to provide payment") | |
54 | 39 | else if ((0 >= amount1)) | |
55 | 40 | then throw("Amount1 cannot be less or equals 0") | |
56 | 41 | else { | |
57 | 42 | let asset0 = getAssetString(i.payments[0].assetId) | |
58 | 43 | let amount0 = i.payments[0].amount | |
59 | 44 | let userOrders = tryGetString((("user_" + toString(i.caller)) + "_orders")) | |
60 | 45 | let newUserOrders = match userOrders { | |
61 | 46 | case _ => | |
62 | 47 | if (("" == $match0)) | |
63 | 48 | then orderId | |
64 | 49 | else ((userOrders + ",") + orderId) | |
65 | 50 | } | |
66 | 51 | [IntegerEntry("global_ordersAmount", newOrdersAmount), StringEntry((("order_" + orderId) + "_token0"), asset0), IntegerEntry((("order_" + orderId) + "_amount0"), amount0), IntegerEntry((("order_" + orderId) + "_amount1"), amount1), StringEntry((("order_" + orderId) + "_token1"), asset1), IntegerEntry((("order_" + orderId) + "_fulfilled0"), 0), IntegerEntry((("order_" + orderId) + "_fulfilled1"), 0), StringEntry((("order_" + orderId) + "_owner"), toString(i.caller)), StringEntry((("order_" + orderId) + "_status"), "active"), StringEntry((("user_" + toString(i.caller)) + "_orders"), newUserOrders)] | |
67 | 52 | } | |
68 | 53 | } | |
69 | 54 | ||
70 | 55 | ||
71 | 56 | ||
72 | 57 | @Callable(i) | |
73 | 58 | func fulfillOrder (orderId) = { | |
74 | 59 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
75 | 60 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
76 | 61 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
77 | 62 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
78 | 63 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
79 | 64 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
80 | 65 | let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1") | |
81 | 66 | let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1") | |
82 | 67 | let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1") | |
83 | 68 | let orderAmount1Left = (orderAmount1 - orderFulfilled1) | |
84 | 69 | if ((orderStatus != "active")) | |
85 | 70 | then throw("Order already closed or canceled") | |
86 | 71 | else if ((size(i.payments) != 1)) | |
87 | 72 | then throw("You should to provide payment") | |
88 | 73 | else { | |
89 | 74 | let callerAddress = i.caller | |
90 | 75 | let ownerAddress = addressFromStringValue(orderOwner) | |
91 | 76 | let paymentAsset1 = getAssetString(i.payments[0].assetId) | |
92 | 77 | let paymentAmount1 = i.payments[0].amount | |
93 | 78 | if ((paymentAsset1 != orderAsset1)) | |
94 | 79 | then throw("Wrong payment asset") | |
95 | 80 | else if ((paymentAmount1 >= orderAmount1Left)) | |
96 | 81 | then [ScriptTransfer(callerAddress, (paymentAmount1 - orderAmount1Left), getAssetBytes(orderAsset1)), ScriptTransfer(callerAddress, orderAmount0Left, getAssetBytes(orderAsset0)), ScriptTransfer(ownerAddress, orderAmount1Left, getAssetBytes(paymentAsset1)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + orderAmount0Left)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + orderAmount1Left)), StringEntry((("order_" + orderId) + "_status"), "closed")] | |
97 | 82 | else { | |
98 | 83 | let amount0 = fraction(orderAmount0, paymentAmount1, orderAmount1, FLOOR) | |
99 | 84 | [ScriptTransfer(ownerAddress, paymentAmount1, getAssetBytes(paymentAsset1)), ScriptTransfer(callerAddress, amount0, getAssetBytes(orderAsset0)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + amount0)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + paymentAmount1))] | |
100 | 85 | } | |
101 | 86 | } | |
102 | 87 | } | |
103 | 88 | ||
104 | 89 | ||
105 | 90 | ||
106 | 91 | @Callable(i) | |
107 | - | func cancelOrder (orders) = { | |
108 | - | let orderIdList = split(orders, ",") | |
109 | - | func doCancel (accum,orderId) = (accum ++ _cancelOrder(orderId, toBase58String(i.caller.bytes))) | |
110 | - | ||
111 | - | let canceledOrders = { | |
112 | - | let $l = orderIdList | |
113 | - | let $s = size($l) | |
114 | - | let $acc0 = nil | |
115 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
116 | - | then $a | |
117 | - | else doCancel($a, $l[$i]) | |
118 | - | ||
119 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
120 | - | then $a | |
121 | - | else throw("List size exceeds 26") | |
122 | - | ||
123 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26) | |
124 | - | } | |
125 | - | canceledOrders | |
92 | + | func cancelOrder (orderId) = { | |
93 | + | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
94 | + | let orderStatus = getString((("order_" + orderId) + "_status")) | |
95 | + | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
96 | + | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
97 | + | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
98 | + | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
99 | + | if ((toBase58String(i.caller.bytes) != orderOwner)) | |
100 | + | then throw("You cannot cancel order") | |
101 | + | else if ((orderStatus != "active")) | |
102 | + | then throw("order is closed or canceled") | |
103 | + | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
126 | 104 | } | |
127 | 105 | ||
128 | 106 | ||
129 | 107 | @Verifier(tx) | |
130 | 108 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
131 | 109 |
github/deemru/w8io/169f3d6 32.75 ms ◑![]()