tx · 2snWCWx1fvEf3TJZBLYeQgw4Dsx3AhXj14JomTP3V6Eg

3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta:  -0.01000000 Waves

2023.12.03 12:01 [2870258] smart account 3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta > SELF 0.00000000 Waves

{ "type": 13, "id": "2snWCWx1fvEf3TJZBLYeQgw4Dsx3AhXj14JomTP3V6Eg", "fee": 1000000, "feeAssetId": null, "timestamp": 1701594132886, "version": 2, "chainId": 84, "sender": "3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta", "senderPublicKey": "4rSYGN3SSXzknh6jLyLqqGdGor584DXdjdP2BAbz7kgt", "proofs": [ "Qm1ubMKnmKbtuh6QUVGy98tSZEcVamZLZ2fTxu1oBeDq3Dx4u9vsoHAsFBG9zVKd57JQ3BCUA5tb7ajy3eB2LQw" ], "script": "base64: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", "height": 2870258, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CkRp5hyzdFBw7jExr5V85zQCe3ZBnv3Atj1Fgm1pMxT2 Next: 9CyQ6S6emdRYp5DNE3NyCLorM7MdDGhLYNo9wqKuhjMP Diff:
OldNewDifferences
5454 then throw("Order with this id already exists.")
5555 else if ((0 >= amount))
5656 then throw("Non-positive order amount")
57- else {
58- let orderAmount = (amount - developerFee)
59- if (isDefined(getInteger(this, keyServiceFee(assetId))))
60- then {
61- let fee = (getIntegerValue(keyServiceFee(assetId)) + developerFee)
57+ else if ((size(i.payments) > 1))
58+ then throw("Exactly one payment is expected")
59+ else if ((value(i.payments[0]).amount != amount))
60+ then throw("payments.amount and amount do not match.")
61+ else {
62+ let orderAmount = ((amount - developerFee) - 500000)
63+ if (isDefined(getInteger(this, keyServiceFee(assetId))))
64+ then {
65+ let fee = (getIntegerValue(keyServiceFee(assetId)) + developerFee)
6266 [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), DeleteEntry(keyServiceFee(assetId)), IntegerEntry(keyServiceFee(assetId), fee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
67+ }
68+ else [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), IntegerEntry(keyServiceFee(assetId), developerFee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
6369 }
64- else [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), IntegerEntry(keyServiceFee(assetId), developerFee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
65- }
6670
6771
6872
7175 then throw("Order not found.")
7276 else if ((amount > getIntegerValue(keyAmount(orderId))))
7377 then throw("The transaction cannot be executed because the seller does not have enough funds")
74- else {
75- let restAmount = ((getIntegerValue(keyAmount(orderId)) - amount) - developerFee)
76- let assetIdKey = keyAssetId(orderId)
77- let assetIdRaw = getString(this, assetIdKey)
78- let assetIdStr = value(assetIdRaw)
79- let fee = (getIntegerValue(keyServiceFee(assetIdStr)) + developerFee)
80- if ((minAmount > restAmount))
81- then [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), ScriptTransfer(i.caller, restAmount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId, toString(i.caller))), DeleteEntry(keyAssetId(orderId))]
82- else [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
83- }
78+ else if ((addressFromStringValue(address) == i.caller))
79+ then throw("You can't make a deal with yourself.")
80+ else {
81+ let restAmount = (((getIntegerValue(keyAmount(orderId)) - amount) - developerFee) - 500000)
82+ let assetIdKey = keyAssetId(orderId)
83+ let assetIdRaw = getString(this, assetIdKey)
84+ let assetIdStr = value(assetIdRaw)
85+ let fee = (getIntegerValue(keyServiceFee(assetIdStr)) + developerFee)
86+ if ((minAmount > restAmount))
87+ then [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), ScriptTransfer(i.caller, restAmount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId, toString(i.caller))), DeleteEntry(keyAssetId(orderId))]
88+ else [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
89+ }
8490
8591
8692
8894 func cancel (orderId) = if (!(isDefined(getString(this, keyOrderId(orderId, toString(i.caller))))))
8995 then throw(("You don't have an active order with this id: " + orderId))
9096 else {
91- let restAmount = getIntegerValue(keyAmount(orderId))
97+ let restAmount = (getIntegerValue(keyAmount(orderId)) - 500000)
9298 let assetIdKey = keyAssetId(orderId)
9399 let assetIdRaw = getString(this, assetIdKey)
94100 let assetIdStr = value(assetIdRaw)
102108 then throw("Invalid assetId")
103109 else if ((i.caller != developer))
104110 then throw("Invalid caller")
105- else if ((assetId != "WAVES"))
106- then [ScriptTransfer(developer, getIntegerValue(keyServiceFee(assetId)), fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
107- else if (if ((assetId == "WAVES"))
108- then (1000000000 > wavesBalance(this).available)
109- else false)
110- then throw("Not enough WAVES to withdraw.")
111- else [ScriptTransfer(developer, getIntegerValue(keyServiceFee(assetId)), fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
111+ else {
112+ let fee = getIntegerValue(keyServiceFee(assetId))
113+ if ((assetId != "WAVES"))
114+ then [ScriptTransfer(developer, fee, fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
115+ else if (if ((assetId == "WAVES"))
116+ then (1000000000 > (wavesBalance(this).available - fee))
117+ else false)
118+ then throw("Not enough WAVES to withdraw.")
119+ else [ScriptTransfer(developer, fee, fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
120+ }
112121
113122
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let developer = addressFromStringValue("3N5BAMAuQCNcdfQSJgQFXUDrLFuHjknmhtM")
55
66 func keyPartner (address) = ("%s%s__partner__" + address)
77
88
99 func keyWantedAssetId (address) = ("%s%s__wantedAssetId__" + address)
1010
1111
1212 func keyWantedAmount (address) = ("%s%s__wantedAmount__" + address)
1313
1414
1515 func keyAssetId (orderId) = ("%s%s__assetId__" + orderId)
1616
1717
1818 func keyAmount (orderId) = ("%s%s__amount__" + orderId)
1919
2020
2121 func keyOrderId (orderId,caller) = ((("%s%s__orderId__" + orderId) + "__") + caller)
2222
2323
2424 func keyServiceFee (assetId) = ("%s%s__serviceFee__" + assetId)
2525
2626
2727 func getAmount (amount) = amount
2828
2929
3030 func toStr (assetId) = if ((assetId == unit))
3131 then "WAVES"
3232 else toBase58String(value(assetId))
3333
3434
3535 func fromStr (assetIdStr) = if ((assetIdStr == "WAVES"))
3636 then unit
3737 else fromBase58String(assetIdStr)
3838
3939
4040 func isValidAsset (assetId) = {
4141 let asset = fromStr(assetId)
4242 if (if ((asset != unit))
4343 then (assetInfo(value(asset)) == unit)
4444 else false)
4545 then false
4646 else true
4747 }
4848
4949
5050 @Callable(i)
5151 func escrow (orderId,amount,assetId,developerFee) = if (!(isValidAsset(assetId)))
5252 then throw("Invalid assetId")
5353 else if (isDefined(getString(this, keyOrderId(orderId, toString(i.caller)))))
5454 then throw("Order with this id already exists.")
5555 else if ((0 >= amount))
5656 then throw("Non-positive order amount")
57- else {
58- let orderAmount = (amount - developerFee)
59- if (isDefined(getInteger(this, keyServiceFee(assetId))))
60- then {
61- let fee = (getIntegerValue(keyServiceFee(assetId)) + developerFee)
57+ else if ((size(i.payments) > 1))
58+ then throw("Exactly one payment is expected")
59+ else if ((value(i.payments[0]).amount != amount))
60+ then throw("payments.amount and amount do not match.")
61+ else {
62+ let orderAmount = ((amount - developerFee) - 500000)
63+ if (isDefined(getInteger(this, keyServiceFee(assetId))))
64+ then {
65+ let fee = (getIntegerValue(keyServiceFee(assetId)) + developerFee)
6266 [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), DeleteEntry(keyServiceFee(assetId)), IntegerEntry(keyServiceFee(assetId), fee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
67+ }
68+ else [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), IntegerEntry(keyServiceFee(assetId), developerFee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
6369 }
64- else [StringEntry(keyOrderId(orderId, toString(i.caller)), orderId), IntegerEntry(keyServiceFee(assetId), developerFee), IntegerEntry(keyAmount(orderId), orderAmount), StringEntry(keyAssetId(orderId), assetId)]
65- }
6670
6771
6872
6973 @Callable(i)
7074 func deal (orderId,address,amount,developerFee,minAmount) = if (!(isDefined(getString(this, keyOrderId(orderId, toString(i.caller))))))
7175 then throw("Order not found.")
7276 else if ((amount > getIntegerValue(keyAmount(orderId))))
7377 then throw("The transaction cannot be executed because the seller does not have enough funds")
74- else {
75- let restAmount = ((getIntegerValue(keyAmount(orderId)) - amount) - developerFee)
76- let assetIdKey = keyAssetId(orderId)
77- let assetIdRaw = getString(this, assetIdKey)
78- let assetIdStr = value(assetIdRaw)
79- let fee = (getIntegerValue(keyServiceFee(assetIdStr)) + developerFee)
80- if ((minAmount > restAmount))
81- then [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), ScriptTransfer(i.caller, restAmount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId, toString(i.caller))), DeleteEntry(keyAssetId(orderId))]
82- else [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
83- }
78+ else if ((addressFromStringValue(address) == i.caller))
79+ then throw("You can't make a deal with yourself.")
80+ else {
81+ let restAmount = (((getIntegerValue(keyAmount(orderId)) - amount) - developerFee) - 500000)
82+ let assetIdKey = keyAssetId(orderId)
83+ let assetIdRaw = getString(this, assetIdKey)
84+ let assetIdStr = value(assetIdRaw)
85+ let fee = (getIntegerValue(keyServiceFee(assetIdStr)) + developerFee)
86+ if ((minAmount > restAmount))
87+ then [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), ScriptTransfer(i.caller, restAmount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId, toString(i.caller))), DeleteEntry(keyAssetId(orderId))]
88+ else [ScriptTransfer(addressFromStringValue(address), amount, fromStr(assetIdStr)), DeleteEntry(keyServiceFee(assetIdStr)), IntegerEntry(keyServiceFee(assetIdStr), fee), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
89+ }
8490
8591
8692
8793 @Callable(i)
8894 func cancel (orderId) = if (!(isDefined(getString(this, keyOrderId(orderId, toString(i.caller))))))
8995 then throw(("You don't have an active order with this id: " + orderId))
9096 else {
91- let restAmount = getIntegerValue(keyAmount(orderId))
97+ let restAmount = (getIntegerValue(keyAmount(orderId)) - 500000)
9298 let assetIdKey = keyAssetId(orderId)
9399 let assetIdRaw = getString(this, assetIdKey)
94100 let assetIdStr = value(assetIdRaw)
95101 [ScriptTransfer(i.caller, restAmount, fromStr(assetIdStr)), DeleteEntry(keyOrderId(orderId, toString(i.caller))), DeleteEntry(keyAssetId(orderId)), DeleteEntry(keyAmount(orderId))]
96102 }
97103
98104
99105
100106 @Callable(i)
101107 func serviceFee (assetId) = if (!(isValidAsset(assetId)))
102108 then throw("Invalid assetId")
103109 else if ((i.caller != developer))
104110 then throw("Invalid caller")
105- else if ((assetId != "WAVES"))
106- then [ScriptTransfer(developer, getIntegerValue(keyServiceFee(assetId)), fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
107- else if (if ((assetId == "WAVES"))
108- then (1000000000 > wavesBalance(this).available)
109- else false)
110- then throw("Not enough WAVES to withdraw.")
111- else [ScriptTransfer(developer, getIntegerValue(keyServiceFee(assetId)), fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
111+ else {
112+ let fee = getIntegerValue(keyServiceFee(assetId))
113+ if ((assetId != "WAVES"))
114+ then [ScriptTransfer(developer, fee, fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
115+ else if (if ((assetId == "WAVES"))
116+ then (1000000000 > (wavesBalance(this).available - fee))
117+ else false)
118+ then throw("Not enough WAVES to withdraw.")
119+ else [ScriptTransfer(developer, fee, fromStr(assetId)), DeleteEntry(keyServiceFee(assetId))]
120+ }
112121
113122

github/deemru/w8io/c3f4982 
43.45 ms