tx · EZ2QjjJKUQReBJBXfu1LGkcFscfTE4YP2ztzePbN5r5X

3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ:  -0.09000000 Waves

2022.08.28 16:03 [2204363] smart account 3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ > SELF 0.00000000 Waves

{ "type": 13, "id": "EZ2QjjJKUQReBJBXfu1LGkcFscfTE4YP2ztzePbN5r5X", "fee": 9000000, "feeAssetId": null, "timestamp": 1661691831868, "version": 2, "chainId": 84, "sender": "3NAm3p62bo4q3yMzWjJ6M4eEDBRYXxqkXLQ", "senderPublicKey": "6ftcjfxzkWUUwSQuuRg45YwriXgjJ5RMUoG9etzbvvs3", "proofs": [ "4CPhwKP1yCPsHZE1AemQVsofWymN3aRdKtiaZeSm2ehD9QvfMuMkdqNwV6LZooA533rdsbuR4TpjnTkXp2pkASph" ], "script": "base64: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IG9yZGVyIG93bmVyBAAAAAtvcmRlclN0YXR1cwkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzBAAAAAtvcmRlckFzc2V0MAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjACAAAAEkNhbm5vdCBmaW5kIHRva2VuMAQAAAAMb3JkZXJBbW91bnQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDACAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDAEAAAAD29yZGVyRnVsZmlsbGVkMAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQwBAAAABBvcmRlckFtb3VudDBMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MAUAAAAPb3JkZXJGdWxmaWxsZWQwBAAAAAtvcmRlckFzc2V0MQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjECAAAAEkNhbm5vdCBmaW5kIHRva2VuMQQAAAAMb3JkZXJBbW91bnQxCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDECAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDEEAAAAD29yZGVyRnVsZmlsbGVkMQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQxAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQxBAAAABBvcmRlckFtb3VudDFMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MQUAAAAPb3JkZXJGdWxmaWxsZWQxAwkBAAAAAiE9AAAAAgUAAAALb3JkZXJTdGF0dXMCAAAABmFjdGl2ZQkAAAIAAAABAgAAACBPcmRlciBhbHJlYWR5IGNsb3NlZCBvciBjYW5jZWxlZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdWW91IHNob3VsZCB0byBwcm92aWRlIHBheW1lbnQEAAAADWNhbGxlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3duZXJBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAApvcmRlck93bmVyBAAAAA1wYXltZW50QXNzZXQxCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAA5wYXltZW50QW1vdW50MQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAANcGF5bWVudEFzc2V0MQUAAAALb3JkZXJBc3NldDEJAAACAAAAAQIAAAATV3JvbmcgcGF5bWVudCBhc3NldAMJAABnAAAAAgUAAAAOcGF5bWVudEFtb3VudDEFAAAAEG9yZGVyQW1vdW50MUxlZnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwkAAGUAAAACBQAAAA5wYXltZW50QW1vdW50MQUAAAAQb3JkZXJBbW91bnQxTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA1jYWxsZXJBZGRyZXNzBQAAABBvcmRlckFtb3VudDBMZWZ0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAAC29yZGVyQXNzZXQwCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAAQb3JkZXJBbW91bnQxTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAA1wYXltZW50QXNzZXQxCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMAkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDAFAAAAEG9yZGVyQW1vdW50MExlZnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQxCQAAZAAAAAIFAAAAD29yZGVyRnVsZmlsbGVkMQUAAAAQb3JkZXJBbW91bnQxTGVmdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzAgAAAAZjbG9zZWQFAAAAA25pbAQAAAAHYW1vdW50MAkBAAAACGZyYWN0aW9uAAAABAUAAAAMb3JkZXJBbW91bnQwBQAAAA5wYXltZW50QW1vdW50MQUAAAAMb3JkZXJBbW91bnQxBQAAAAVGTE9PUgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADnBheW1lbnRBbW91bnQxCQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAADXBheW1lbnRBc3NldDEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANY2FsbGVyQWRkcmVzcwUAAAAHYW1vdW50MAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAALX2Z1bGZpbGxlZDAJAABkAAAAAgUAAAAPb3JkZXJGdWxmaWxsZWQwBQAAAAdhbW91bnQwCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAtfZnVsZmlsbGVkMQkAAGQAAAACBQAAAA9vcmRlckZ1bGZpbGxlZDEFAAAADnBheW1lbnRBbW91bnQxBQAAAANuaWwAAAABaQEAAAALY2FuY2VsT3JkZXIAAAABAAAAB29yZGVySWQEAAAACm9yZGVyT3duZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAZfb3duZXICAAAAF0Nhbm5vdCBmaW5kIG9yZGVyIG93bmVyBAAAAAtvcmRlclN0YXR1cwkABCIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzBAAAAAtvcmRlckFzc2V0MAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAB190b2tlbjACAAAAEkNhbm5vdCBmaW5kIHRva2VuMAQAAAAMb3JkZXJBbW91bnQwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAICAAAABm9yZGVyXwUAAAAHb3JkZXJJZAIAAAAIX2Ftb3VudDACAAAAE0Nhbm5vdCBmaW5kIGFtb3VudDAEAAAAD29yZGVyRnVsZmlsbGVkMAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZvcmRlcl8FAAAAB29yZGVySWQCAAAAC19mdWxmaWxsZWQwAgAAABZDYW5ub3QgZmluZCBmdWxmaWxsZWQwBAAAABBvcmRlckFtb3VudDBMZWZ0CQAAZQAAAAIFAAAADG9yZGVyQW1vdW50MAUAAAAPb3JkZXJGdWxmaWxsZWQwAwkBAAAAAiE9AAAAAgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBQAAAApvcmRlck93bmVyCQAAAgAAAAECAAAAF1lvdSBjYW5ub3QgY2FuY2VsIG9yZGVyAwkBAAAAAiE9AAAAAgUAAAALb3JkZXJTdGF0dXMCAAAABmFjdGl2ZQkAAAIAAAABAgAAABtvcmRlciBpcyBjbG9zZWQgb3IgY2FuY2VsZWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAKb3JkZXJPd25lcgUAAAAQb3JkZXJBbW91bnQwTGVmdAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAtvcmRlckFzc2V0MAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAGb3JkZXJfBQAAAAdvcmRlcklkAgAAAAdfc3RhdHVzAgAAAAhjYW5jZWxlZAUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkdEkwo", "height": 2204363, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9FvKkQGRPNTVrsFj4ePJahaRdgCyQphug6NiDj3TNu7T Next: D5oFpgL92XCiarwqQ9zm282ZRAwmsqCZXMFtAeLkjKzQ Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func tryGetInteger (key) = match getInteger(this, key) {
5+ case b: Int =>
6+ b
7+ case _ =>
8+ 0
9+}
10+
11+
412 func getAssetString (assetId) = match assetId {
513 case b: ByteVector =>
614 toBase58String(b)
1624
1725 @Callable(i)
1826 func createOrder (asset1,amount1) = {
19- let orderId = toBase58String(i.transactionId)
27+ let newOrdersAmount = (tryGetInteger("global_furnacesAmount") + 1)
28+ let orderId = toString(newOrdersAmount)
2029 if ((size(i.payments) != 1))
2130 then throw("You should to provide payment")
2231 else {
2332 let asset0 = getAssetString(i.payments[0].assetId)
2433 let amount0 = i.payments[0].amount
25-[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")]
34+[IntegerEntry("global_furnacesAmount", 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")]
2635 }
2736 }
2837
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func tryGetInteger (key) = match getInteger(this, key) {
5+ case b: Int =>
6+ b
7+ case _ =>
8+ 0
9+}
10+
11+
412 func getAssetString (assetId) = match assetId {
513 case b: ByteVector =>
614 toBase58String(b)
715 case _ =>
816 "WAVES"
917 }
1018
1119
1220 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
1321 then unit
1422 else fromBase58String(assetIdStr)
1523
1624
1725 @Callable(i)
1826 func createOrder (asset1,amount1) = {
19- let orderId = toBase58String(i.transactionId)
27+ let newOrdersAmount = (tryGetInteger("global_furnacesAmount") + 1)
28+ let orderId = toString(newOrdersAmount)
2029 if ((size(i.payments) != 1))
2130 then throw("You should to provide payment")
2231 else {
2332 let asset0 = getAssetString(i.payments[0].assetId)
2433 let amount0 = i.payments[0].amount
25-[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")]
34+[IntegerEntry("global_furnacesAmount", 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")]
2635 }
2736 }
2837
2938
3039
3140 @Callable(i)
3241 func fulfillOrder (orderId) = {
3342 let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner")
3443 let orderStatus = getString((("order_" + orderId) + "_status"))
3544 let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0")
3645 let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0")
3746 let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0")
3847 let orderAmount0Left = (orderAmount0 - orderFulfilled0)
3948 let orderAsset1 = valueOrErrorMessage(getString((("order_" + orderId) + "_token1")), "Cannot find token1")
4049 let orderAmount1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount1")), "Cannot find amount1")
4150 let orderFulfilled1 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled1")), "Cannot find fulfilled1")
4251 let orderAmount1Left = (orderAmount1 - orderFulfilled1)
4352 if ((orderStatus != "active"))
4453 then throw("Order already closed or canceled")
4554 else if ((size(i.payments) != 1))
4655 then throw("You should to provide payment")
4756 else {
4857 let callerAddress = i.caller
4958 let ownerAddress = addressFromStringValue(orderOwner)
5059 let paymentAsset1 = getAssetString(i.payments[0].assetId)
5160 let paymentAmount1 = i.payments[0].amount
5261 if ((paymentAsset1 != orderAsset1))
5362 then throw("Wrong payment asset")
5463 else if ((paymentAmount1 >= orderAmount1Left))
5564 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")]
5665 else {
5766 let amount0 = fraction(orderAmount0, paymentAmount1, orderAmount1, FLOOR)
5867 [ScriptTransfer(ownerAddress, paymentAmount1, getAssetBytes(paymentAsset1)), ScriptTransfer(callerAddress, amount0, getAssetBytes(orderAsset0)), IntegerEntry((("order_" + orderId) + "_fulfilled0"), (orderFulfilled0 + amount0)), IntegerEntry((("order_" + orderId) + "_fulfilled1"), (orderFulfilled1 + paymentAmount1))]
5968 }
6069 }
6170 }
6271
6372
6473
6574 @Callable(i)
6675 func cancelOrder (orderId) = {
6776 let orderOwner = valueOrErrorMessage(getString((("order_" + orderId) + "_owner")), "Cannot find order owner")
6877 let orderStatus = getString((("order_" + orderId) + "_status"))
6978 let orderAsset0 = valueOrErrorMessage(getString((("order_" + orderId) + "_token0")), "Cannot find token0")
7079 let orderAmount0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_amount0")), "Cannot find amount0")
7180 let orderFulfilled0 = valueOrErrorMessage(getInteger((("order_" + orderId) + "_fulfilled0")), "Cannot find fulfilled0")
7281 let orderAmount0Left = (orderAmount0 - orderFulfilled0)
7382 if ((toBase58String(i.caller.bytes) != orderOwner))
7483 then throw("You cannot cancel order")
7584 else if ((orderStatus != "active"))
7685 then throw("order is closed or canceled")
7786 else [ScriptTransfer(addressFromStringValue(orderOwner), orderAmount0Left, getAssetBytes(orderAsset0)), StringEntry((("order_" + orderId) + "_status"), "canceled")]
7887 }
7988
8089
8190 @Verifier(tx)
8291 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
8392

github/deemru/w8io/873ac7e 
42.31 ms