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