tx · GnzruFwMa3XMUBLPDzrLSxitFfSh5HZhfTqfdMqUDfBP 3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ: -0.05000000 Waves 2022.09.06 23:31 [2217748] smart account 3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ > SELF 0.00000000 Waves
{ "type": 13, "id": "GnzruFwMa3XMUBLPDzrLSxitFfSh5HZhfTqfdMqUDfBP", "fee": 5000000, "feeAssetId": null, "timestamp": 1662496369366, "version": 2, "chainId": 84, "sender": "3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ", "senderPublicKey": "6ftcjfxzkWUUwSQuuRg45YwriXgjJ5RMUoG9etzbvvs3", "proofs": [ "ZfFGjC8ksCear7czoR3Nc21K4gVUbtcbRtyAUZUnFD6xkTuhx6SK13W8coYqRbgbNKzBo8ewGSiuNCfforBErNP" ], "script": "base64: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b3JkZXJJZAYFAAAAA25pbAAAAAFpAQAAAAxmdWxmaWxsT3JkZXIAAAABAAAAB29yZGVySWQEAAAACm9yZGVyT3duZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAZfb3duZXICAAAAF0Nhbm5vdCBmaW5kIG9yZGVyIG93bmVyBAAAAAtvcmRlclN0YXR1cwkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzBAAAAAtvcmRlckFzc2V0MAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjACAAAAEkNhbm5vdCBmaW5kIHRva2VuMAQAAAAMb3JkZXJBbW91bnQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDACAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDAEAAAAD29yZGVyRnVsZmlsbGVkMAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQwBAAAABBvcmRlckFtb3VudDBMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MAUAAAAPb3JkZXJGdWxmaWxsZWQwBAAAAAtvcmRlckFzc2V0MQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjECAAAAEkNhbm5vdCBmaW5kIHRva2VuMQQAAAAMb3JkZXJBbW91bnQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDECAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDEEAAAAD29yZGVyRnVsZmlsbGVkMQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQxAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQxBAAAABBvcmRlckFtb3VudDFMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MQUAAAAPb3JkZXJGdWxmaWxsZWQxAwkBAAAAAiE9AAAAAgUAAAALb3JkZXJTdGF0dXMCAAAABmFjdGl2ZQkAAAIAAAABAgAAACBPcmRlciBhbHJlYWR5IGNsb3NlZCBvciBjYW5jZWxlZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdWW91IHNob3VsZCB0byBwcm92aWRlIHBheW1lbnQEAAAADWNhbGxlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3duZXJBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAApvcmRlck93bmVyBAAAAA1wYXltZW50QXNzZXQxCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAA5wYXltZW50QW1vdW50MQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAANcGF5bWVudEFzc2V0MQUAAAALb3JkZXJBc3NldDEJAAACAAAAAQIAAAATV3JvbmcgcGF5bWVudCBhc3NldAMJAABnAAAAAgUAAAAOcGF5bWVudEFtb3VudDEFAAAAEG9yZGVyQW1vdW50MUxlZnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwkAAGUAAAACBQAAAA5wYXltZW50QW1vdW50MQUAAAAQb3JkZXJBbW91bnQxTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA1jYWxsZXJBZGRyZXNzBQAAABBvcmRlckFtb3VudDBMZWZ0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAAC29yZGVyQXNzZXQwCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAAQb3JkZXJBbW91bnQxTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAA1wYXltZW50QXNzZXQxCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMAkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDAFAAAAEG9yZGVyQW1vdW50MExlZnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQxCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMQUAAAAQb3JkZXJBbW91bnQxTGVmdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzAgAAAAZjbG9zZWQFAAAAA25pbAQAAAAHYW1vdW50MAkBAAAACGZyYWN0aW9uAAAABAUAAAAMb3JkZXJBbW91bnQwBQAAAA5wYXltZW50QW1vdW50MQUAAAAMb3JkZXJBbW91bnQxBQAAAAVGTE9PUgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADnBheW1lbnRBbW91bnQxCQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAADXBheW1lbnRBc3NldDEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwUAAAAHYW1vdW50MAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDAJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQwBQAAAAdhbW91bnQwCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMQkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDEFAAAADnBheW1lbnRBbW91bnQxBQAAAANuaWwAAAABaQEAAAALY2FuY2VsT3JkZXIAAAABAAAAB29yZGVySWQEAAAACm9yZGVyT3duZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAZfb3duZXICAAAAF0Nhbm5vdCBmaW5kIG9yZGVyIG93bmVyBAAAAAtvcmRlclN0YXR1cwkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzBAAAAAtvcmRlckFzc2V0MAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjACAAAAEkNhbm5vdCBmaW5kIHRva2VuMAQAAAAMb3JkZXJBbW91bnQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDACAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDAEAAAAD29yZGVyRnVsZmlsbGVkMAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQwBAAAABBvcmRlckFtb3VudDBMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MAUAAAAPb3JkZXJGdWxmaWxsZWQwAwkBAAAAAiE9AAAAAgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAApvcmRlck93bmVyCQAAAgAAAAECAAAAF1lvdSBjYW5ub3QgY2FuY2VsIG9yZGVyAwkBAAAAAiE9AAAAAgUAAAALb3JkZXJTdGF0dXMCAAAABmFjdGl2ZQkAAAIAAAABAgAAABtvcmRlciBpcyBjbG9zZWQgb3IgY2FuY2VsZWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAKb3JkZXJPd25lcgUAAAAQb3JkZXJBbW91bnQwTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzAgAAAAhjYW5jZWxlZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXn4qo/g", "height": 2217748, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7WSrwdvU6UjVHNNbZPP5jUFAKBdr2FmBMwpkZ8GQuiom Next: 6qGpGLMFLYXF99uFEHToFi6dzNppP4gap4De5frZV5tu Diff:
Old | New | Differences | |
---|---|---|---|
24 | 24 | ||
25 | 25 | @Callable(i) | |
26 | 26 | func createOrder (asset1,amount1) = { | |
27 | - | let newOrdersAmount = (tryGetInteger("global_ | |
27 | + | let newOrdersAmount = (tryGetInteger("global_ordersAmount") + 1) | |
28 | 28 | let orderId = toString(newOrdersAmount) | |
29 | 29 | if ((size(i.payments) != 1)) | |
30 | 30 | then throw("You should to provide payment") | |
33 | 33 | else { | |
34 | 34 | let asset0 = getAssetString(i.payments[0].assetId) | |
35 | 35 | let amount0 = i.payments[0].amount | |
36 | - | [IntegerEntry("global_ | |
36 | + | [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"), BooleanEntry(((toString(i.caller) + "_ovnerOf_") + orderId), true)] | |
37 | 37 | } | |
38 | 38 | } | |
39 | 39 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func tryGetInteger (key) = match getInteger(this, key) { | |
5 | 5 | case b: Int => | |
6 | 6 | b | |
7 | 7 | case _ => | |
8 | 8 | 0 | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func getAssetString (assetId) = match assetId { | |
13 | 13 | case b: ByteVector => | |
14 | 14 | toBase58String(b) | |
15 | 15 | case _ => | |
16 | 16 | "WAVES" | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
21 | 21 | then unit | |
22 | 22 | else fromBase58String(assetIdStr) | |
23 | 23 | ||
24 | 24 | ||
25 | 25 | @Callable(i) | |
26 | 26 | func createOrder (asset1,amount1) = { | |
27 | - | let newOrdersAmount = (tryGetInteger("global_ | |
27 | + | let newOrdersAmount = (tryGetInteger("global_ordersAmount") + 1) | |
28 | 28 | let orderId = toString(newOrdersAmount) | |
29 | 29 | if ((size(i.payments) != 1)) | |
30 | 30 | then throw("You should to provide payment") | |
31 | 31 | else if ((0 >= amount1)) | |
32 | 32 | then throw("Amount1 cannot be less or equals 0") | |
33 | 33 | else { | |
34 | 34 | let asset0 = getAssetString(i.payments[0].assetId) | |
35 | 35 | let amount0 = i.payments[0].amount | |
36 | - | [IntegerEntry("global_ | |
36 | + | [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"), BooleanEntry(((toString(i.caller) + "_ovnerOf_") + orderId), true)] | |
37 | 37 | } | |
38 | 38 | } | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | ||
42 | 42 | @Callable(i) | |
43 | 43 | func fulfillOrder (orderId) = { | |
44 | 44 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
45 | 45 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
46 | 46 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
47 | 47 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
48 | 48 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
49 | 49 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
50 | 50 | let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1") | |
51 | 51 | let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1") | |
52 | 52 | let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1") | |
53 | 53 | let orderAmount1Left = (orderAmount1 - orderFulfilled1) | |
54 | 54 | if ((orderStatus != "active")) | |
55 | 55 | then throw("Order already closed or canceled") | |
56 | 56 | else if ((size(i.payments) != 1)) | |
57 | 57 | then throw("You should to provide payment") | |
58 | 58 | else { | |
59 | 59 | let callerAddress = i.caller | |
60 | 60 | let ownerAddress = addressFromStringValue(orderOwner) | |
61 | 61 | let paymentAsset1 = getAssetString(i.payments[0].assetId) | |
62 | 62 | let paymentAmount1 = i.payments[0].amount | |
63 | 63 | if ((paymentAsset1 != orderAsset1)) | |
64 | 64 | then throw("Wrong payment asset") | |
65 | 65 | else if ((paymentAmount1 >= orderAmount1Left)) | |
66 | 66 | 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")] | |
67 | 67 | else { | |
68 | 68 | let amount0 = fraction(orderAmount0, paymentAmount1, orderAmount1, FLOOR) | |
69 | 69 | [ScriptTransfer(ownerAddress, paymentAmount1, getAssetBytes(paymentAsset1)), ScriptTransfer(callerAddress, amount0, getAssetBytes(orderAsset0)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + amount0)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + paymentAmount1))] | |
70 | 70 | } | |
71 | 71 | } | |
72 | 72 | } | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | ||
76 | 76 | @Callable(i) | |
77 | 77 | func cancelOrder (orderId) = { | |
78 | 78 | let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner") | |
79 | 79 | let orderStatus = getString((("order_" + orderId) + "_status")) | |
80 | 80 | let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0") | |
81 | 81 | let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0") | |
82 | 82 | let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0") | |
83 | 83 | let orderAmount0Left = (orderAmount0 - orderFulfilled0) | |
84 | 84 | if ((toBase58String(i.caller.bytes) != orderOwner)) | |
85 | 85 | then throw("You cannot cancel order") | |
86 | 86 | else if ((orderStatus != "active")) | |
87 | 87 | then throw("order is closed or canceled") | |
88 | 88 | else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")] | |
89 | 89 | } | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | @Verifier(tx) | |
93 | 93 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
94 | 94 |
github/deemru/w8io/873ac7e 27.19 ms ◑![]()