tx · 6dvzEWCWkgwUFAb17Rw9NmYwcetYuEtU4DRd6fPfxNgY

3N2FodsKP7M3AQ3k3XHbMggtKaeiJEv36gk:  -0.01400000 Waves

2023.05.21 16:16 [2587784] smart account 3N2FodsKP7M3AQ3k3XHbMggtKaeiJEv36gk > SELF 0.00000000 Waves

{ "type": 13, "id": "6dvzEWCWkgwUFAb17Rw9NmYwcetYuEtU4DRd6fPfxNgY", "fee": 1400000, "feeAssetId": null, "timestamp": 1684675009067, "version": 2, "chainId": 84, "sender": "3N2FodsKP7M3AQ3k3XHbMggtKaeiJEv36gk", "senderPublicKey": "78Bt5i3ukexi4JyJKXa9f3aGmpTT1t79wSaBXNy68zWU", "proofs": [ "5YjQYGCpQfAW8iYbppstKHH2JFUqCdU6j6cHQ3uwzmYAfiq3pEz7US8kgiHjZy861suaesMbQQ9aAvLEWrPSUTEm" ], "script": "base64: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", "height": 2587784, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8ukXYbYrwWMkeMbGeNL6q5MmYUF65Paja6NK61ZJtPNS Next: CiAFZCSNtH6PaztNs5MjZpAWiuYKWM7HQZrGqqLwWdeQ Diff:
OldNewDifferences
4848 }
4949
5050
51+func toPay (asset) = if ((asset == "WAVES"))
52+ then unit
53+ else fromBase58String(asset)
54+
55+
5156 @Callable(i)
5257 func addAdmin (address) = if (isAdmin(i.caller.bytes))
5358 then [StringEntry("admin", address)]
9398 then if ((checkAssetId(i.payments[0].assetId) == getStringValue((getValidPair(asset1, asset2) + "_asset2"))))
9499 then if ((price == getIntegerValue((getValidPair(asset1, asset2) + "_price"))))
95100 then if ((getIntegerValue((getValidPair(asset1, asset2) + "_total")) > ((i.payments[0].amount * D) / price)))
96- then [ScriptTransfer(Address(i.caller.bytes), ((i.payments[0].amount * D) / price), fromBase58String(getStringValue((getValidPair(asset1, asset2) + "_asset1")))), IntegerEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)), i.payments[0].amount), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price"), price), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height"), height), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"), ((i.payments[0].amount * D) / price)), StringEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset"), checkAssetId(i.payments[0].assetId)), IntegerEntry((getValidPair(asset1, asset2) + "_total"), (getIntegerValue((getValidPair(asset1, asset2) + "_total")) - ((i.payments[0].amount * D) / price)))]
101+ then [ScriptTransfer(Address(i.caller.bytes), ((i.payments[0].amount * D) / price), toPay(getStringValue((getValidPair(asset1, asset2) + "_asset1")))), IntegerEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)), i.payments[0].amount), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price"), price), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height"), height), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"), ((i.payments[0].amount * D) / price)), StringEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset"), checkAssetId(i.payments[0].assetId)), IntegerEntry((getValidPair(asset1, asset2) + "_total"), (getIntegerValue((getValidPair(asset1, asset2) + "_total")) - ((i.payments[0].amount * D) / price)))]
97102 else throw("Amount above that available for Swap. Try decreasing the value.")
98103 else throw("Invalid price.")
99104 else throw("Invalid payment asset. Use the second asset of the pair")
109114 then if ((checkAssetId(i.payments[0].assetId) == getStringValue((getValidPair(asset1, asset2) + "_asset1"))))
110115 then if ((i.payments[0].amount == getIntegerValue(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"))))
111116 then if ((i.payments[1].amount == ((i.payments[0].amount / getIntegerValue("fee")) * 100)))
112- then [DeleteEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset")), ScriptTransfer(Address(i.caller.bytes), getIntegerValue((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), fromBase58String(getStringValue((getValidPair(asset1, asset2) + "_asset2"))))]
117+ then [DeleteEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset")), ScriptTransfer(Address(i.caller.bytes), getIntegerValue((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), toPay(getStringValue((getValidPair(asset1, asset2) + "_asset2"))))]
113118 else throw("Invalid Amount Fee Payment.")
114119 else throw(("Invalid Amount. Try " + toString(getIntegerValue(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")))))
115120 else throw("Invalid payment asset. Use the first asset of the pair")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminmsg = "Only admin can call this function"
55
66 func isAdmin (address) = {
77 let c = toBase58String(address)
88 if (isDefined(getString("admin")))
99 then if (if ((c == getStringValue("admin")))
1010 then true
1111 else (c == toBase58String(this.bytes)))
1212 then true
1313 else false
1414 else if ((c == toBase58String(this.bytes)))
1515 then true
1616 else false
1717 }
1818
1919
2020 func getValidPair (asset1,asset2) = if (isDefined(getBoolean(((asset1 + "_") + asset2))))
2121 then ((asset1 + "_") + asset2)
2222 else if (isDefined(getBoolean(((asset2 + "_") + asset1))))
2323 then ((asset2 + "_") + asset1)
2424 else ""
2525
2626
2727 func isValidPair (asset1,asset2) = {
2828 let x = match getValidPair(asset1, asset2) {
2929 case c: String =>
3030 if ((c == ""))
3131 then false
3232 else true
3333 case _ =>
3434 false
3535 }
3636 x
3737 }
3838
3939
4040 func checkAssetId (asset) = {
4141 let a = match asset {
4242 case v: ByteVector =>
4343 toBase58String(v)
4444 case _ =>
4545 "WAVES"
4646 }
4747 a
4848 }
4949
5050
51+func toPay (asset) = if ((asset == "WAVES"))
52+ then unit
53+ else fromBase58String(asset)
54+
55+
5156 @Callable(i)
5257 func addAdmin (address) = if (isAdmin(i.caller.bytes))
5358 then [StringEntry("admin", address)]
5459 else throw(adminmsg)
5560
5661
5762
5863 @Callable(i)
5964 func setOracle (address) = if (isAdmin(i.caller.bytes))
6065 then [StringEntry("oracle", address)]
6166 else throw(adminmsg)
6267
6368
6469
6570 @Callable(i)
6671 func addPair (asset1,asset2) = if (isAdmin(i.caller.bytes))
6772 then if (isValidPair(asset1, asset2))
6873 then throw("This pair has been previously added")
6974 else [BooleanEntry(((asset1 + "_") + asset2), true)]
7075 else throw(adminmsg)
7176
7277
7378
7479 @Callable(i)
7580 func feeSwap (fee) = if (isAdmin(i.caller.bytes))
7681 then [IntegerEntry("fee", fee)]
7782 else throw(adminmsg)
7883
7984
8085
8186 @Callable(i)
8287 func Swap (asset1,asset2,price) = {
8388 let D = match i.payments[0].assetId {
8489 case o: Unit =>
8590 pow(10, 0, 8, 0, 0, HALFUP)
8691 case x: ByteVector =>
8792 pow(10, 0, value(assetInfo(x)).decimals, 0, 0, HALFUP)
8893 case _ =>
8994 throw("Match error")
9095 }
9196 if (isValidPair(asset1, asset2))
9297 then if (!(isDefined(getString((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))))))
9398 then if ((checkAssetId(i.payments[0].assetId) == getStringValue((getValidPair(asset1, asset2) + "_asset2"))))
9499 then if ((price == getIntegerValue((getValidPair(asset1, asset2) + "_price"))))
95100 then if ((getIntegerValue((getValidPair(asset1, asset2) + "_total")) > ((i.payments[0].amount * D) / price)))
96- then [ScriptTransfer(Address(i.caller.bytes), ((i.payments[0].amount * D) / price), fromBase58String(getStringValue((getValidPair(asset1, asset2) + "_asset1")))), IntegerEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)), i.payments[0].amount), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price"), price), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height"), height), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"), ((i.payments[0].amount * D) / price)), StringEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset"), checkAssetId(i.payments[0].assetId)), IntegerEntry((getValidPair(asset1, asset2) + "_total"), (getIntegerValue((getValidPair(asset1, asset2) + "_total")) - ((i.payments[0].amount * D) / price)))]
101+ then [ScriptTransfer(Address(i.caller.bytes), ((i.payments[0].amount * D) / price), toPay(getStringValue((getValidPair(asset1, asset2) + "_asset1")))), IntegerEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)), i.payments[0].amount), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price"), price), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height"), height), IntegerEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"), ((i.payments[0].amount * D) / price)), StringEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset"), checkAssetId(i.payments[0].assetId)), IntegerEntry((getValidPair(asset1, asset2) + "_total"), (getIntegerValue((getValidPair(asset1, asset2) + "_total")) - ((i.payments[0].amount * D) / price)))]
97102 else throw("Amount above that available for Swap. Try decreasing the value.")
98103 else throw("Invalid price.")
99104 else throw("Invalid payment asset. Use the second asset of the pair")
100105 else throw("You already have a Guaranteed Swap made before, cancel the previous one or withdraw the current one to create a new Swap.")
101106 else throw("Invalid Pair.")
102107 }
103108
104109
105110
106111 @Callable(i)
107112 func Withdraw (asset1,asset2) = if (isValidPair(asset1, asset2))
108113 then if (isDefined(getString((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)))))
109114 then if ((checkAssetId(i.payments[0].assetId) == getStringValue((getValidPair(asset1, asset2) + "_asset1"))))
110115 then if ((i.payments[0].amount == getIntegerValue(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received"))))
111116 then if ((i.payments[1].amount == ((i.payments[0].amount / getIntegerValue("fee")) * 100)))
112- then [DeleteEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset")), ScriptTransfer(Address(i.caller.bytes), getIntegerValue((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), fromBase58String(getStringValue((getValidPair(asset1, asset2) + "_asset2"))))]
117+ then [DeleteEntry((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_price")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_height")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")), DeleteEntry(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_asset")), ScriptTransfer(Address(i.caller.bytes), getIntegerValue((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes))), toPay(getStringValue((getValidPair(asset1, asset2) + "_asset2"))))]
113118 else throw("Invalid Amount Fee Payment.")
114119 else throw(("Invalid Amount. Try " + toString(getIntegerValue(((getValidPair(asset1, asset2) + toBase58String(i.caller.bytes)) + "_received")))))
115120 else throw("Invalid payment asset. Use the first asset of the pair")
116121 else throw("You do not have a Guaranteed swap for this pair. Create a new Swap.")
117122 else throw("Invalid Pair.")
118123
119124
120125
121126 @Callable(i)
122127 func depositOracle (assetValue,assetPrice,price) = {
123128 let oracleAddress = match getString("oracle") {
124129 case ix: String =>
125130 ix
126131 case _ =>
127132 throw("Oracle is not defined. Please contact the admin.")
128133 }
129134 let n = checkAssetId(i.payments[0].assetId)
130135 let a = match getInteger(((((assetValue + "_") + assetPrice) + "_") + n)) {
131136 case ix: Int =>
132137 ix
133138 case _ =>
134139 0
135140 }
136141 let nn = match getInteger((((assetValue + "_") + assetPrice) + "_total")) {
137142 case xx: Int =>
138143 (xx + i.payments[0].amount)
139144 case _ =>
140145 i.payments[0].amount
141146 }
142147 if ((toBase58String(i.caller.bytes) == oracleAddress))
143148 then [IntegerEntry(((((assetValue + "_") + assetPrice) + "_") + n), (a + i.payments[0].amount)), IntegerEntry((((assetValue + "_") + assetPrice) + "_price"), price), BooleanEntry(((assetValue + "_") + assetPrice), true), StringEntry((((assetValue + "_") + assetPrice) + "_asset1"), assetValue), StringEntry((((assetValue + "_") + assetPrice) + "_asset2"), assetPrice), IntegerEntry((((assetValue + "_") + assetPrice) + "_total"), nn)]
144149 else throw(adminmsg)
145150 }
146151
147152
148153 @Verifier(tx)
149154 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
150155

github/deemru/w8io/169f3d6 
54.26 ms