tx · FsxsWNHLDenjoguS3T1wJwoGzsEwTodGV1C9idxeu8qf

3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta:  -0.01000000 Waves

2023.12.01 18:20 [2867749] smart account 3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta > SELF 0.00000000 Waves

{ "type": 13, "id": "FsxsWNHLDenjoguS3T1wJwoGzsEwTodGV1C9idxeu8qf", "fee": 1000000, "feeAssetId": null, "timestamp": 1701444059452, "version": 2, "chainId": 84, "sender": "3N9b7vExDf2qqZt2xG9FUsca7iwLVuih1Ta", "senderPublicKey": "4rSYGN3SSXzknh6jLyLqqGdGor584DXdjdP2BAbz7kgt", "proofs": [ "47ZSZCYx5aViwtdULTPvgSrHcfVAem6GghiyvXJ6vC6a61kR88NG2P9uk2et7X4K9x54oPcz5vbTkYiM7p6cjo33" ], "script": "base64:AAIFAAAAAAAAABcIAhIGCgQIAQgBEgMKAQgSBgoECAgBAQAAAAsAAAAACWRldmVsb3BlcgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM1A5bVRDcEJ0dUF6TWtIb2RiNFh3Z1g0ektZQWNoMnBnd2EBAAAACmtleVBhcnRuZXIAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAAPJXMlc19fcGFydG5lcl9fBQAAAAdhZGRyZXNzAQAAABBrZXlXYW50ZWRBc3NldElkAAAAAQAAAAdhZGRyZXNzCQABLAAAAAICAAAAFSVzJXNfX3dhbnRlZEFzc2V0SWRfXwUAAAAHYWRkcmVzcwEAAAAPa2V5V2FudGVkQW1vdW50AAAAAQAAAAdhZGRyZXNzCQABLAAAAAICAAAAFCVzJXNfX3dhbnRlZEFtb3VudF9fBQAAAAdhZGRyZXNzAQAAAAprZXlBc3NldElkAAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADyVzJXNfX2Fzc2V0SWRfXwUAAAAHb3JkZXJJZAEAAAAJa2V5QW1vdW50AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADiVzJXNfX2Ftb3VudF9fBQAAAAdvcmRlcklkAQAAAAprZXlPcmRlcklkAAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADyVzJXNfX29yZGVySWRfXwUAAAAHb3JkZXJJZAEAAAANa2V5U2VydmljZUZlZQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAABIlcyVzX19zZXJ2aWNlRmVlX18FAAAAB29yZGVySWQBAAAABXRvU3RyAAAAAQAAAAdhc3NldElkAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAAR1bml0AgAAAAVXQVZFUwkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAdhc3NldElkAQAAAAdmcm9tU3RyAAAAAQAAAAphc3NldElkU3RyAwkAAAAAAAACBQAAAAphc3NldElkU3RyAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAphc3NldElkU3RyAQAAAApjaGVja0Fzc2V0AAAAAQAAAAdhc3NldElkBAAAAAVhc3NldAkBAAAAB2Zyb21TdHIAAAABBQAAAAdhc3NldElk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", "height": 2867749, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EPm2tt48aCwdS6tqKXadRcRCaUZvxXB8BUAkW5yQ3sdZ Next: Ga8M349XXYJwVGRnNtEXPgEaWq8czAHxyAhe7RPiUJVi Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyAssetId (address) = ("%s%s__assetId__" + address)
5-
6-
7-func keyAmount (address) = ("%s%s__amount__" + address)
8-
4+let developer = addressFromStringValue("3P9mTCpBtuAzMkHodb4XwgX4zKYAch2pgwa")
95
106 func keyPartner (address) = ("%s%s__partner__" + address)
117
1410
1511
1612 func keyWantedAmount (address) = ("%s%s__wantedAmount__" + address)
13+
14+
15+func keyAssetId (orderId) = ("%s%s__assetId__" + orderId)
16+
17+
18+func keyAmount (orderId) = ("%s%s__amount__" + orderId)
19+
20+
21+func keyOrderId (orderId) = ("%s%s__orderId__" + orderId)
22+
23+
24+func keyServiceFee (orderId) = ("%s%s__serviceFee__" + orderId)
1725
1826
1927 func toStr (assetId) = if ((assetId == unit))
2634 else fromBase58String(assetIdStr)
2735
2836
29-func crossCheckAssetIds (partnerAddress,myOfferedAssetId,myWantedAssetId,partnerOfferedAssetId,partnerWantedAssetId) = if (if ((partnerOfferedAssetId != myWantedAssetId))
30- then true
31- else (partnerWantedAssetId != myOfferedAssetId))
32- then throw(((((((((("AssetIds don't match: you want " + myWantedAssetId) + " and pay ") + myOfferedAssetId) + ", but ") + partnerAddress) + " wants ") + partnerWantedAssetId) + " and pays ") + partnerOfferedAssetId))
33- else true
34-
35-
36-func crossCheckAmounts (partnerAddress,myOfferedAmount,myWantedAmount,partnerOfferedAmount,partnerWantedAmount) = if (if ((partnerOfferedAmount != myWantedAmount))
37- then true
38- else (partnerWantedAmount != myOfferedAmount))
39- then throw(((((((((("Amounts don't match: you want " + toString(myWantedAmount)) + " and pay ") + toString(myOfferedAmount)) + ", but ") + partnerAddress) + " wants ") + toString(partnerWantedAmount)) + " and pays ") + toString(partnerOfferedAmount)))
40- else true
41-
42-
43-func checkAsset (wantAssetId) = {
44- let asset = fromStr(wantAssetId)
37+func checkAsset (assetId) = {
38+ let asset = fromStr(assetId)
4539 if (if ((asset != unit))
4640 then (assetInfo(value(asset)) == unit)
4741 else false)
48- then throw("Invalid wantAssetId: assetInfo missing")
42+ then throw("Invalid assetId: assetInfo missing")
4943 else toStr(asset)
5044 }
5145
5246
5347 @Callable(i)
54-func escrow (wantAssetId,wantAmount,partnerAddress) = {
55- let caller = toString(i.caller)
56- if (isDefined(getString(this, keyAssetId(caller))))
57- then throw("You already have an active deal, please cancel it first")
58- else if ((size(i.payments) != 1))
59- then throw("Exactly 1 payment expected")
60- else {
61- let partner = addressFromStringValue(partnerAddress)
62- if ((partner == partner))
63- then {
64- let wantedAssetId = checkAsset(wantAssetId)
65- if ((0 >= wantAmount))
66- then throw("Non-positive wantAmount")
67- else {
68- let partnerAssetId = getString(this, keyAssetId(partnerAddress))
69- let myAssetId = value(i.payments[0]).assetId
70- let myAmount = value(i.payments[0]).amount
71- if (isDefined(partnerAssetId))
72- then if ((value(getString(this, keyPartner(partnerAddress))) != caller))
73- then throw(("You are not a partner of " + partnerAddress))
74- else {
75- let check = if (crossCheckAssetIds(partnerAddress, toStr(myAssetId), wantedAssetId, value(partnerAssetId), value(getString(this, keyWantedAssetId(partnerAddress)))))
76- then crossCheckAmounts(partnerAddress, myAmount, wantAmount, value(getInteger(this, keyAmount(partnerAddress))), value(getInteger(this, keyWantedAmount(partnerAddress))))
77- else false
78- if ((check == check))
79- then [ScriptTransfer(partner, myAmount, myAssetId), ScriptTransfer(i.caller, wantAmount, fromStr(wantedAssetId)), DeleteEntry(keyAssetId(partnerAddress)), DeleteEntry(keyAmount(partnerAddress)), DeleteEntry(keyPartner(partnerAddress)), DeleteEntry(keyWantedAssetId(partnerAddress)), DeleteEntry(keyWantedAmount(partnerAddress))]
80- else throw("Strict value is not equal to itself.")
81- }
82- else [StringEntry(keyAssetId(caller), toStr(myAssetId)), IntegerEntry(keyAmount(caller), myAmount), StringEntry(keyPartner(caller), partnerAddress), StringEntry(keyWantedAssetId(caller), wantedAssetId), IntegerEntry(keyWantedAmount(caller), wantAmount)]
83- }
84- }
85- else throw("Strict value is not equal to itself.")
86- }
87- }
48+func escrow (orderId,amount,assetId,developerFee) = if (isDefined(getString(this, keyOrderId(orderId))))
49+ then throw(("You already have an order with this id: " + orderId))
50+ else if ((0 >= amount))
51+ then throw("Non-positive order amount")
52+ else [IntegerEntry(keyServiceFee(orderId), developerFee), IntegerEntry(keyAmount(orderId), amount), StringEntry(keyOrderId(orderId), orderId), StringEntry(keyAssetId(orderId), assetId)]
8853
8954
9055
9156 @Callable(i)
92-func cancel () = {
93- let caller = toString(i.caller)
94- let assetIdKey = keyAssetId(caller)
95- let assetIdRaw = getString(this, assetIdKey)
96- if (!(isDefined(assetIdRaw)))
97- then throw("You don't have an active deal")
57+func cancel (orderId) = if (!(isDefined(keyOrderId(orderId))))
58+ then throw(("You don't have an order with this id: " + orderId))
59+ else {
60+ let assetId = toBytes(value(keyAssetId(orderId)))
61+ let restAmount = toBytes(value(keyAmount(orderId)))
62+[ScriptTransfer(i.caller, toInt(restAmount), assetId), DeleteEntry(keyServiceFee(orderId)), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId)), DeleteEntry(keyAssetId(orderId))]
63+ }
64+
65+
66+
67+@Callable(i)
68+func deal (orderId,address,amount,minAmount) = if (!(isDefined(keyOrderId(orderId))))
69+ then throw(("You don't have an order with this id: " + orderId))
70+ else if ((amount > toInt(toBytes(value(keyAmount(orderId))))))
71+ then throw("The transaction cannot be executed because the seller does not have enough funds")
9872 else {
99- let assetIdStr = value(assetIdRaw)
100-[ScriptTransfer(i.caller, value(getInteger(this, keyAmount(caller))), fromStr(assetIdStr)), DeleteEntry(assetIdKey), DeleteEntry(keyAmount(caller)), DeleteEntry(keyPartner(caller)), DeleteEntry(keyWantedAssetId(caller)), DeleteEntry(keyWantedAmount(caller))]
73+ let restAmount = (toInt(toBytes(value(keyAmount(orderId)))) - amount)
74+ let assetId = toBytes(value(keyAssetId(orderId)))
75+ if ((minAmount > restAmount))
76+ then [ScriptTransfer(addressFromStringValue(address), amount, assetId), ScriptTransfer(i.caller, restAmount, assetId), DeleteEntry(keyServiceFee(orderId)), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId)), DeleteEntry(keyAssetId(orderId))]
77+ else [ScriptTransfer(addressFromStringValue(address), amount, assetId), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
10178 }
102- }
10379
10480
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func keyAssetId (address) = ("%s%s__assetId__" + address)
5-
6-
7-func keyAmount (address) = ("%s%s__amount__" + address)
8-
4+let developer = addressFromStringValue("3P9mTCpBtuAzMkHodb4XwgX4zKYAch2pgwa")
95
106 func keyPartner (address) = ("%s%s__partner__" + address)
117
128
139 func keyWantedAssetId (address) = ("%s%s__wantedAssetId__" + address)
1410
1511
1612 func keyWantedAmount (address) = ("%s%s__wantedAmount__" + address)
13+
14+
15+func keyAssetId (orderId) = ("%s%s__assetId__" + orderId)
16+
17+
18+func keyAmount (orderId) = ("%s%s__amount__" + orderId)
19+
20+
21+func keyOrderId (orderId) = ("%s%s__orderId__" + orderId)
22+
23+
24+func keyServiceFee (orderId) = ("%s%s__serviceFee__" + orderId)
1725
1826
1927 func toStr (assetId) = if ((assetId == unit))
2028 then "WAVES"
2129 else toBase58String(value(assetId))
2230
2331
2432 func fromStr (assetIdStr) = if ((assetIdStr == "WAVES"))
2533 then unit
2634 else fromBase58String(assetIdStr)
2735
2836
29-func crossCheckAssetIds (partnerAddress,myOfferedAssetId,myWantedAssetId,partnerOfferedAssetId,partnerWantedAssetId) = if (if ((partnerOfferedAssetId != myWantedAssetId))
30- then true
31- else (partnerWantedAssetId != myOfferedAssetId))
32- then throw(((((((((("AssetIds don't match: you want " + myWantedAssetId) + " and pay ") + myOfferedAssetId) + ", but ") + partnerAddress) + " wants ") + partnerWantedAssetId) + " and pays ") + partnerOfferedAssetId))
33- else true
34-
35-
36-func crossCheckAmounts (partnerAddress,myOfferedAmount,myWantedAmount,partnerOfferedAmount,partnerWantedAmount) = if (if ((partnerOfferedAmount != myWantedAmount))
37- then true
38- else (partnerWantedAmount != myOfferedAmount))
39- then throw(((((((((("Amounts don't match: you want " + toString(myWantedAmount)) + " and pay ") + toString(myOfferedAmount)) + ", but ") + partnerAddress) + " wants ") + toString(partnerWantedAmount)) + " and pays ") + toString(partnerOfferedAmount)))
40- else true
41-
42-
43-func checkAsset (wantAssetId) = {
44- let asset = fromStr(wantAssetId)
37+func checkAsset (assetId) = {
38+ let asset = fromStr(assetId)
4539 if (if ((asset != unit))
4640 then (assetInfo(value(asset)) == unit)
4741 else false)
48- then throw("Invalid wantAssetId: assetInfo missing")
42+ then throw("Invalid assetId: assetInfo missing")
4943 else toStr(asset)
5044 }
5145
5246
5347 @Callable(i)
54-func escrow (wantAssetId,wantAmount,partnerAddress) = {
55- let caller = toString(i.caller)
56- if (isDefined(getString(this, keyAssetId(caller))))
57- then throw("You already have an active deal, please cancel it first")
58- else if ((size(i.payments) != 1))
59- then throw("Exactly 1 payment expected")
60- else {
61- let partner = addressFromStringValue(partnerAddress)
62- if ((partner == partner))
63- then {
64- let wantedAssetId = checkAsset(wantAssetId)
65- if ((0 >= wantAmount))
66- then throw("Non-positive wantAmount")
67- else {
68- let partnerAssetId = getString(this, keyAssetId(partnerAddress))
69- let myAssetId = value(i.payments[0]).assetId
70- let myAmount = value(i.payments[0]).amount
71- if (isDefined(partnerAssetId))
72- then if ((value(getString(this, keyPartner(partnerAddress))) != caller))
73- then throw(("You are not a partner of " + partnerAddress))
74- else {
75- let check = if (crossCheckAssetIds(partnerAddress, toStr(myAssetId), wantedAssetId, value(partnerAssetId), value(getString(this, keyWantedAssetId(partnerAddress)))))
76- then crossCheckAmounts(partnerAddress, myAmount, wantAmount, value(getInteger(this, keyAmount(partnerAddress))), value(getInteger(this, keyWantedAmount(partnerAddress))))
77- else false
78- if ((check == check))
79- then [ScriptTransfer(partner, myAmount, myAssetId), ScriptTransfer(i.caller, wantAmount, fromStr(wantedAssetId)), DeleteEntry(keyAssetId(partnerAddress)), DeleteEntry(keyAmount(partnerAddress)), DeleteEntry(keyPartner(partnerAddress)), DeleteEntry(keyWantedAssetId(partnerAddress)), DeleteEntry(keyWantedAmount(partnerAddress))]
80- else throw("Strict value is not equal to itself.")
81- }
82- else [StringEntry(keyAssetId(caller), toStr(myAssetId)), IntegerEntry(keyAmount(caller), myAmount), StringEntry(keyPartner(caller), partnerAddress), StringEntry(keyWantedAssetId(caller), wantedAssetId), IntegerEntry(keyWantedAmount(caller), wantAmount)]
83- }
84- }
85- else throw("Strict value is not equal to itself.")
86- }
87- }
48+func escrow (orderId,amount,assetId,developerFee) = if (isDefined(getString(this, keyOrderId(orderId))))
49+ then throw(("You already have an order with this id: " + orderId))
50+ else if ((0 >= amount))
51+ then throw("Non-positive order amount")
52+ else [IntegerEntry(keyServiceFee(orderId), developerFee), IntegerEntry(keyAmount(orderId), amount), StringEntry(keyOrderId(orderId), orderId), StringEntry(keyAssetId(orderId), assetId)]
8853
8954
9055
9156 @Callable(i)
92-func cancel () = {
93- let caller = toString(i.caller)
94- let assetIdKey = keyAssetId(caller)
95- let assetIdRaw = getString(this, assetIdKey)
96- if (!(isDefined(assetIdRaw)))
97- then throw("You don't have an active deal")
57+func cancel (orderId) = if (!(isDefined(keyOrderId(orderId))))
58+ then throw(("You don't have an order with this id: " + orderId))
59+ else {
60+ let assetId = toBytes(value(keyAssetId(orderId)))
61+ let restAmount = toBytes(value(keyAmount(orderId)))
62+[ScriptTransfer(i.caller, toInt(restAmount), assetId), DeleteEntry(keyServiceFee(orderId)), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId)), DeleteEntry(keyAssetId(orderId))]
63+ }
64+
65+
66+
67+@Callable(i)
68+func deal (orderId,address,amount,minAmount) = if (!(isDefined(keyOrderId(orderId))))
69+ then throw(("You don't have an order with this id: " + orderId))
70+ else if ((amount > toInt(toBytes(value(keyAmount(orderId))))))
71+ then throw("The transaction cannot be executed because the seller does not have enough funds")
9872 else {
99- let assetIdStr = value(assetIdRaw)
100-[ScriptTransfer(i.caller, value(getInteger(this, keyAmount(caller))), fromStr(assetIdStr)), DeleteEntry(assetIdKey), DeleteEntry(keyAmount(caller)), DeleteEntry(keyPartner(caller)), DeleteEntry(keyWantedAssetId(caller)), DeleteEntry(keyWantedAmount(caller))]
73+ let restAmount = (toInt(toBytes(value(keyAmount(orderId)))) - amount)
74+ let assetId = toBytes(value(keyAssetId(orderId)))
75+ if ((minAmount > restAmount))
76+ then [ScriptTransfer(addressFromStringValue(address), amount, assetId), ScriptTransfer(i.caller, restAmount, assetId), DeleteEntry(keyServiceFee(orderId)), DeleteEntry(keyAmount(orderId)), DeleteEntry(keyOrderId(orderId)), DeleteEntry(keyAssetId(orderId))]
77+ else [ScriptTransfer(addressFromStringValue(address), amount, assetId), DeleteEntry(keyAmount(orderId)), IntegerEntry(keyAmount(orderId), restAmount)]
10178 }
102- }
10379
10480

github/deemru/w8io/873ac7e 
28.50 ms