tx · 72cGXDccA6xs5VCSQWR2CxE7xsp19dzgQdPxVHsGPdix

3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8:  -0.01000000 Waves

2022.03.31 13:39 [1987978] smart account 3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8 > SELF 0.00000000 Waves

{ "type": 13, "id": "72cGXDccA6xs5VCSQWR2CxE7xsp19dzgQdPxVHsGPdix", "fee": 1000000, "feeAssetId": null, "timestamp": 1648723165911, "version": 2, "chainId": 84, "sender": "3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8", "senderPublicKey": "7KdKmjfPuTXGRNZv4VEz9mZiC2qb9JPzuji5z6jszZyo", "proofs": [ "3QGYXCLDeiKuytxKusa7Nb4HwyRbSnscHsPVgab76kEPZriB9Bey7s5XLAKsumspf6wTMhsWWniPskNseK1MQhVq" ], "script": "base64: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", "height": 1987978, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F7ojbcdhfgyBy6rnsqXXNQrSJefqJVMkRmd6udgdoCQ Next: 4NPboJj9cyp9TFCWN7Zpd4V6sD7Umwhtw1cqbdv8Zmcs Diff:
OldNewDifferences
3737 let startBalanceWAVES = assetBalance(this, WAVES)
3838 if ((startBalanceWAVES == startBalanceWAVES))
3939 then {
40- let r1 = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeUSDNtoWAVES", [amount, assetId, borrower], [AttachedPayment(USDN, loanAmount)])
40+ let r1 = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeUSDNtoWAVES", [amount, assetId, borrower], [AttachedPayment(USDN, loanAmount)])
4141 if ((r1 == r1))
4242 then {
4343 let diffWAVES = (assetBalance(this, WAVES) - startBalanceWAVES)
4444 if ((diffWAVES == diffWAVES))
4545 then {
46- let r2 = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeWAVEStoUSDN", [amount, assetId, borrower], [AttachedPayment(WAVES, diffWAVES)])
46+ let r2 = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeWAVEStoUSDN", [amount, assetId, borrower], [AttachedPayment(WAVES, diffWAVES)])
4747 if ((r2 == r2))
4848 then {
4949 let debt = fraction(loanAmount, (100 + loanFeePercent), 100)
6767 if ((startBalance == startBalance))
6868 then {
6969 let borrower = borr
70- let test = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "trade", [fromBase58String(borr), amount, USDN], [AttachedPayment(unit, 0)])
70+ let test = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "trade", [fromBase58String(borr), amount, USDN], [AttachedPayment(unit, 0)])
7171 if ((test == test))
7272 then {
7373 let balanceDiff = ((assetBalance(this, USDN) + 100000) - startBalance)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let exchangeRate = 10
55
66 let exchangeRateDiffPercent = 10
77
88 let USDNtoWAVESrate = fraction(exchangeRate, (100 - exchangeRateDiffPercent), 100)
99
1010 let USDN = base58'3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC'
1111
1212 let WAVES = base58''
1313
1414 let USDNtoWAVESRate = 10
1515
1616 let loanFeePercent = 1
1717
1818 @Callable(i)
1919 func exchangeWAVEStoUSDN (amount,assetId,caller) = if ((assetId == WAVES))
2020 then [ScriptTransfer(Address(caller), (amount / USDNtoWAVESrate), USDN), IntegerEntry("WAVEStoUSDN", amount)]
2121 else throw("Unexpected Token")
2222
2323
2424
2525 @Callable(i)
2626 func exchangeUSDNtoWAVES (amount,assetId,caller) = if ((assetId == USDN))
2727 then [ScriptTransfer(Address(caller), (amount * USDNtoWAVESRate), WAVES), IntegerEntry("USDNtoWAVES", amount)]
2828 else throw("Unexpected Token")
2929
3030
3131
3232 @Callable(i)
3333 func trade (borrower,amount,assetId) = {
3434 let loanAmount = if ((assetId == USDN))
3535 then amount
3636 else throw("Unexpected payment asset")
3737 let startBalanceWAVES = assetBalance(this, WAVES)
3838 if ((startBalanceWAVES == startBalanceWAVES))
3939 then {
40- let r1 = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeUSDNtoWAVES", [amount, assetId, borrower], [AttachedPayment(USDN, loanAmount)])
40+ let r1 = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeUSDNtoWAVES", [amount, assetId, borrower], [AttachedPayment(USDN, loanAmount)])
4141 if ((r1 == r1))
4242 then {
4343 let diffWAVES = (assetBalance(this, WAVES) - startBalanceWAVES)
4444 if ((diffWAVES == diffWAVES))
4545 then {
46- let r2 = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeWAVEStoUSDN", [amount, assetId, borrower], [AttachedPayment(WAVES, diffWAVES)])
46+ let r2 = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "exchangeWAVEStoUSDN", [amount, assetId, borrower], [AttachedPayment(WAVES, diffWAVES)])
4747 if ((r2 == r2))
4848 then {
4949 let debt = fraction(loanAmount, (100 + loanFeePercent), 100)
5050 let profit = (assetBalance(this, USDN) - debt)
5151 [StringEntry("trade", ((toString(debt) + " ") + toString(profit))), ScriptTransfer(Address(borrower), profit, USDN)]
5252 }
5353 else throw("Strict value is not equal to itself.")
5454 }
5555 else throw("Strict value is not equal to itself.")
5656 }
5757 else throw("Strict value is not equal to itself.")
5858 }
5959 else throw("Strict value is not equal to itself.")
6060 }
6161
6262
6363
6464 @Callable(i)
6565 func flashloan (amount,borr) = {
6666 let startBalance = assetBalance(this, USDN)
6767 if ((startBalance == startBalance))
6868 then {
6969 let borrower = borr
70- let test = invoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "trade", [fromBase58String(borr), amount, USDN], [AttachedPayment(unit, 0)])
70+ let test = reentrantInvoke(Address(base58'3Mw2biLQi5ygMk7zexboNGrnMYuaSfrziY8'), "trade", [fromBase58String(borr), amount, USDN], [AttachedPayment(unit, 0)])
7171 if ((test == test))
7272 then {
7373 let balanceDiff = ((assetBalance(this, USDN) + 100000) - startBalance)
7474 let profit = fraction(amount, loanFeePercent, 100)
7575 if ((profit > balanceDiff))
7676 then throw(((("Debt not paid, because diff = " + toString(balanceDiff)) + ". Expected diff = ") + toString(profit)))
7777 else [StringEntry("test", "test")]
7878 }
7979 else throw("Strict value is not equal to itself.")
8080 }
8181 else throw("Strict value is not equal to itself.")
8282 }
8383
8484

github/deemru/w8io/026f985 
29.28 ms