tx · 8sNaCFNCrzctmBirkdS8qvhfdhLqBehxbR7GiGKyQ1Jx

3N6qtbZbSPVcvJ1pk87e9ahdsZTjHN8e5mL:  -0.01000000 Waves

2021.09.09 23:10 [1695974] smart account 3N6qtbZbSPVcvJ1pk87e9ahdsZTjHN8e5mL > SELF 0.00000000 Waves

{ "type": 13, "id": "8sNaCFNCrzctmBirkdS8qvhfdhLqBehxbR7GiGKyQ1Jx", "fee": 1000000, "feeAssetId": null, "timestamp": 1631218238736, "version": 2, "chainId": 84, "sender": "3N6qtbZbSPVcvJ1pk87e9ahdsZTjHN8e5mL", "senderPublicKey": "EYAKsFBespqQveBrfmX29rsehBJrSwQ3B6yN4ADyw8Kx", "proofs": [ "5SRrqxJrrysCSaJYNXX9imxkoBVVSMt2566qaKNhzFTitXei7o1sq5ohpqXDTqF7ekGfXRBfb9s57GihjztvaLAz" ], "script": "base64:AAIFAAAAAAAAA+EIAhIICgYYGBEYAgEaFQoCYTESD2NoZWNrUG9zc2liaWx0eRoPCgJhMhIJcG10QW1vdW50GhgKAmEzEhJtaW5BbW91bnRUb1JlY2VpdmUaEAoCYTQSCmV4Y2hhbmdlcnMaFAoCYTUSDmV4Y2hhbmdlcnNUeXBlGhcKAmE2EhFyb3V0aW5nQXNzZXRzS2V5cxoQCgJhNxIKY29tbWlzc2lvbhoeCgJhOBIYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyGhMKAmE5Eg1kQXBwMVRva2VuUGF5GhMKAmIxEg1kQXBwMVRva2VuR2V0GhMKAmIyEg1kQXBwMlRva2VuUGF5GhMKAmIzEg1kQXBwMlRva2VuR2V0GhMKAmI0Eg1nZXRGcm9tMVRyYWRlGhoKAmI1EhRnZXRGcm9tMVRyYWRlV2l0aEZlZRoTCgJiNhINZ2V0RnJvbTJUcmFkZRoaCgJiNxIUZ2V0RnJvbTJUcmFkZVdpdGhGZWUaBwoCYjgSAWkaCgoCYjkSBGFyZ3MaFAoCYzESDnJlY2VpdmVBc3NldElkGhEKAmMyEgskdDAxOTY0MjAzOBoQCgJjMxIKcG10QXNzZXRJZBoRCgJjNBILcm91dGluZ1NpemUaEgoCYzUSDGV4Y2hhbmdlRm9sZBoRCgJjNhILYWNjdW11bGF0ZWQaDwoCYzcSCWV4Y2hhbmdlchoRCgJjOBILJHQwMjMyODIzOTEaFQoCYzkSD2V4Y2hhbmdlQ291bnRlchoUCgJkMRIOYW1vdW50c1dpdGhGZWUaEgoCZDISDGFzc2V0c0lkU2VuZBoWCgJkMxIQZXhjaGFuZ2VyQWRkcmVzcxoJCgJkNBIDaW52Gg0KAmQ1EgckbWF0Y2gwGhEKAmQ2EgskdDAyNzI2Mjc2NBoTCgJkNxINYW1vdW50V2l0aEZlZRoRCgJkOBILYXNzZXRJZFNlbmQaEQoCZDkSCyR0MDMxMTAzMTc2GhQKAmUxEg5wbXRBc3NldElkUm91dBoTCgJlMhINcG10QW1vdW50Um91dBoRCgJlMxILJHQwMzQyNTM0NjMaEQoCZTQSCyR0MDM3MDEzODAyGhMKAmU1Eg0kbGlzdDM3NTMzODAyGhMKAmU2Eg0kc2l6ZTM3NTMzODAyGhMKAmU3Eg0kYWNjMDM3NTMzODAyGhMK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", "height": 1695974, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A1ZDU2ANYWTXDxtW17in4oXu7pqJwECmePUDonYE9fF3 Next: AFgjdJ8KPYJ1GxHUBzDr46QjQDmadxvV29n1ncVtt4eq Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func checkPossibilty (pmtAmount,minAmountToReceive,exchangers,exchangersType,routingAssetsKeys) = {
5+ let commission = 3000
6+ let commissionScaleDelimiter = 1000000
7+ let dApp1TokenPay = getIntegerValue(addressFromStringValue(exchangers[0]), routingAssetsKeys[0])
8+ let dApp1TokenGet = getIntegerValue(addressFromStringValue(exchangers[0]), routingAssetsKeys[1])
9+ let dApp2TokenPay = getIntegerValue(addressFromStringValue(exchangers[1]), routingAssetsKeys[2])
10+ let dApp2TokenGet = getIntegerValue(addressFromStringValue(exchangers[1]), routingAssetsKeys[3])
11+ let getFrom1Trade = fraction(dApp1TokenGet, pmtAmount, (pmtAmount + dApp1TokenPay))
12+ let getFrom1TradeWithFee = fraction(getFrom1Trade, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
13+ let getFrom2Trade = fraction(dApp2TokenGet, getFrom1TradeWithFee, (getFrom1TradeWithFee + dApp2TokenPay))
14+ let getFrom2TradeWithFee = fraction(getFrom2Trade, (commissionScaleDelimiter - commission), commissionScaleDelimiter)
15+ if ((getFrom2TradeWithFee >= minAmountToReceive))
16+ then true
17+ else false
18+ }
419
520
621 @Callable(i)
7-func routingTrade (exchangers,args,receiveAssetId,minAmountToReceive) = {
8- let routingSize = size(exchangers)
9- func exchangeFold (accumulated,exchanger) = {
10- let $t0935998 = accumulated
11- let exchangeCounter = $t0935998._1
12- let amountsWithFee = $t0935998._2
13- let assetsIdSend = $t0935998._3
14- if ((exchangeCounter == 0))
15- then {
16- let exchangerAddress = addressFromStringValue(exchanger)
17- let $t011181192 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
18- let pmtAmount = $t011181192._1
19- let pmtAssetId = $t011181192._2
20- let inv = invoke(exchangerAddress, "exchange", [args[exchangeCounter]], [AttachedPayment(pmtAssetId, pmtAmount)])
21- if ((inv == inv))
22- then match inv {
23- case inv: (Int, ByteVector) =>
24- let $t014201458 = inv
25- let amountWithFee = $t014201458._1
26- let assetIdSend = $t014201458._2
27- $Tuple3((exchangeCounter + 1), amountWithFee, assetIdSend)
28- case _ =>
29- throw("Incorrect invoke result: expected amountWithFee and assetsIdSend")
30- }
31- else throw("Strict value is not equal to itself.")
22+func routingTrade (exchangers,exchangersType,args,routingAssetsKeys,receiveAssetId,minAmountToReceive) = {
23+ let $t019642038 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
24+ let pmtAmount = $t019642038._1
25+ let pmtAssetId = $t019642038._2
26+ if (!(checkPossibilty(pmtAmount, minAmountToReceive, exchangers, exchangersType, routingAssetsKeys)))
27+ then throw("Check transaction possibilty: declined")
28+ else {
29+ let routingSize = size(exchangers)
30+ func exchangeFold (accumulated,exchanger) = {
31+ let $t023282391 = accumulated
32+ let exchangeCounter = $t023282391._1
33+ let amountsWithFee = $t023282391._2
34+ let assetsIdSend = $t023282391._3
35+ if ((exchangeCounter == 0))
36+ then {
37+ let exchangerAddress = addressFromStringValue(exchanger)
38+ let inv = invoke(exchangerAddress, "exchange", [args[exchangeCounter]], [AttachedPayment(pmtAssetId, pmtAmount)])
39+ if ((inv == inv))
40+ then match inv {
41+ case inv: (Int, ByteVector) =>
42+ let $t027262764 = inv
43+ let amountWithFee = $t027262764._1
44+ let assetIdSend = $t027262764._2
45+ $Tuple3((exchangeCounter + 1), amountWithFee, assetIdSend)
46+ case _ =>
47+ throw("Incorrect invoke result: expected amountWithFee and assetsIdSend")
48+ }
49+ else throw("Strict value is not equal to itself.")
50+ }
51+ else if (if ((exchangeCounter > 0))
52+ then (routingSize > exchangeCounter)
53+ else false)
54+ then {
55+ let exchangerAddress = addressFromStringValue(exchanger)
56+ let $t031103176 = $Tuple2(assetsIdSend, amountsWithFee)
57+ let pmtAssetIdRout = $t031103176._1
58+ let pmtAmountRout = $t031103176._2
59+ let inv = invoke(exchangerAddress, "exchange", [args[exchangeCounter]], [AttachedPayment(pmtAssetIdRout, pmtAmountRout)])
60+ if ((inv == inv))
61+ then match inv {
62+ case inv: (Int, ByteVector) =>
63+ let $t034253463 = inv
64+ let amountWithFee = $t034253463._1
65+ let assetIdSend = $t034253463._2
66+ $Tuple3((exchangeCounter + 1), amountWithFee, assetIdSend)
67+ case _ =>
68+ throw("Incorrect invoke result: expected amountWithFee and assetsIdSend")
69+ }
70+ else throw("Strict value is not equal to itself.")
71+ }
72+ else accumulated
3273 }
33- else if (if ((exchangeCounter > 0))
34- then (routingSize > exchangeCounter)
35- else false)
36- then {
37- let exchangerAddress = addressFromStringValue(exchanger)
38- let $t019682120 = $Tuple2(assetsIdSend, amountsWithFee)
39- let pmtAssetId = $t019682120._1
40- let pmtAmount = $t019682120._2
41- let inv = invoke(exchangerAddress, "exchange", [args[exchangeCounter]], [AttachedPayment(pmtAssetId, pmtAmount)])
42- if ((inv == inv))
43- then match inv {
44- case inv: (Int, ByteVector) =>
45- let $t023482386 = inv
46- let amountWithFee = $t023482386._1
47- let assetIdSend = $t023482386._2
48- $Tuple3((exchangeCounter + 1), amountWithFee, assetIdSend)
49- case _ =>
50- throw("Incorrect invoke result: expected amountWithFee and assetsIdSend")
51- }
52- else throw("Strict value is not equal to itself.")
53- }
54- else accumulated
55- }
5674
57- let $t026242725 = {
58- let $list26762725 = exchangers
59- let $size26762725 = size($list26762725)
60- let $acc026762725 = $Tuple3(0, 0, base58'')
61- if (($size26762725 == 0))
62- then $acc026762725
63- else {
64- let $acc126762725 = exchangeFold($acc026762725, $list26762725[0])
65- if (($size26762725 == 1))
66- then $acc126762725
75+ let $t037013802 = {
76+ let $list37533802 = exchangers
77+ let $size37533802 = size($list37533802)
78+ let $acc037533802 = $Tuple3(0, 0, base58'')
79+ if (($size37533802 == 0))
80+ then $acc037533802
6781 else {
68- let $acc226762725 = exchangeFold($acc126762725, $list26762725[1])
69- if (($size26762725 == 2))
70- then $acc226762725
82+ let $acc137533802 = exchangeFold($acc037533802, $list37533802[0])
83+ if (($size37533802 == 1))
84+ then $acc137533802
7185 else {
72- let $acc326762725 = exchangeFold($acc226762725, $list26762725[2])
73- if (($size26762725 == 3))
74- then $acc326762725
86+ let $acc237533802 = exchangeFold($acc137533802, $list37533802[1])
87+ if (($size37533802 == 2))
88+ then $acc237533802
7589 else {
76- let $acc426762725 = exchangeFold($acc326762725, $list26762725[3])
77- throw("List size exceed 3")
90+ let $acc337533802 = exchangeFold($acc237533802, $list37533802[2])
91+ if (($size37533802 == 3))
92+ then $acc337533802
93+ else {
94+ let $acc437533802 = exchangeFold($acc337533802, $list37533802[3])
95+ throw("List size exceed 3")
96+ }
7897 }
7998 }
8099 }
81100 }
82- }
83- let exchangeCounter = $t026242725._1
84- let amountsWithFee = $t026242725._2
85- let assetsIdSend = $t026242725._3
86- let amountToRecieve = assetBalance(this, receiveAssetId)
87- if (if ((exchangeCounter == routingSize))
88- then (amountToRecieve >= minAmountToReceive)
89- else false)
90- then [ScriptTransfer(i.caller, amountToRecieve, receiveAssetId)]
91- else throw("routing != routingSize or amountToRecieve < minAmountToReceive")
101+ let exchangeCounter = $t037013802._1
102+ let amountsWithFee = $t037013802._2
103+ let assetsIdSend = $t037013802._3
104+ let amountToRecieve = assetBalance(this, receiveAssetId)
105+ if (if ((exchangeCounter == routingSize))
106+ then (amountToRecieve >= minAmountToReceive)
107+ else false)
108+ then [ScriptTransfer(i.caller, amountToRecieve, receiveAssetId)]
109+ else throw("routing != routingSize or amountToRecieve < minAmountToReceive")
110+ }
92111 }
93112
94113

github/deemru/w8io/169f3d6 
52.91 ms