2022.04.12 17:19 [3070788] smart account 3PC51qgNQz4xx7m1DhLdCDYESaeNKT6zeFt > SELF 0.00000000 Waves

{ "type": 13, "id": "99ApmYPqk3ieCh9xY6aTPmK6TXwsXzbHub1rw2VMCkDE", "fee": 1400000, "feeAssetId": null, "timestamp": 1649773167315, "version": 2, "chainId": 87, "sender": "3PC51qgNQz4xx7m1DhLdCDYESaeNKT6zeFt", "senderPublicKey": "FJsKqbdyEBXkB3CaqztmHpUYm7LXnHbbevLfZ1uvK7HJ", "proofs": [ "kGVkz8LafTyGp9qBeYfNZe6WLU7HT2zsfKCWykXfv7RfAtXeGHUJVRhivLU37MSYdc3nqf6rPn5X3MK1jsBWuDH" ], "script": "base64:AAIFAAAAAAAAAAkIAhIFCgMICAgAAAAOAQAAAA1hc1VzZXJCYWxhbmNlAAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAIihJbnQsIEludCwgSW50LCBJbnQsIEludCwgQm9vbGVhbikEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgEAAAAAXQFAAAAByRtYXRjaDAJAAACAAAAAQIAAAAVZXhwZWN0ZWQgaW50NSZib29sZWFuAQAAAAxnZXRJbnRPclplcm8AAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAAAAAAAEHZpcmVzTWFpbkFkZHJlc3MBAAAAGgFXXsGWGTDJokN4RmnWJtbx5rhD0L32TB64AAAAABJ2aXJlc0NvbmZpZ0FkZHJlc3MBAAAAGgFXChmyltG/jxdh/KKplR5x22CZr3o5NimwAAAAABF2aXJlc1dhdmVzQWRkcmVzcwEAAAAaAVdFcvJXlzessQBsTK3xEFoBCgRaEwrxQm4AAAAAEHZpcmVzVXNkbkFkZHJlc3MBAAAAGgFXeLq+Y46YKYPHvYi/JsaNSdnBbx14bZYfAAAAABB2aXJlc1VzZHRBZGRyZXNzAQAAABoBV4wzfon//pTaHf7sOt6bBCYS88FfxG0ODAAAAAAQdmlyZXNVc2RjQWRkcmVzcwEAAAAaAVeckdbrVt9jsb9/5I0zJOQcqOP4QOc77QMAAAAAD3ZpcmVzQnRjQWRkcmVzcwEAAAAaAVdZveRlqqfDVpd/M82+bdkO/IdI14tqVEQAAAAAD3ZpcmVzRXRoQWRkcmVzcwEAAAAaAVfuD9UPC+leeMO6973orufRCfl7iUSD8EwAAAAAEHZpcmVzRXVybkFkZHJlc3MBAAAAGgFXa5oqTkIpOJCpBe5i1t5KmTFO1GlbGeLjAQAAAAlnZXRTdXBwbHkAAAACAAAABndhbGxldAAAAAV2aXJlcwQAAAADa2V5CQABLAAAAAIFAAAABndhbGxldAIAAAAOX2FUb2tlbkJhbGFuY2UJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAFdmlyZXMFAAAAA2tleQAAAAAAAAAAAAEAAAAJZ2V0Qm9ycm93AAAAAgAAAAZ3YWxsZXQAAAAFdmlyZXMEAAAAA2tleQkAASwAAAACBQAAAAZ3YWxsZXQCAAAABV9kZWJ0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABXZpcmVzBQAAAANrZXkAAAAAAAAAAAABAAAADGdldFZpcmVzSW5mbwAAAAEAAAAGd2FsbGV0BAAAAAtzdXBwbHlXYXZlcwkBAAAACWdldFN1cHBseQAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABF2aXJlc1dhdmVzQWRkcmVzcwQAAAAKc3VwcGx5VXNkbgkBAAAACWdldFN1cHBseQAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABB2aXJlc1VzZG5BZGRyZXNzBAAAAApzdXBwbHlVc2R0CQEAAAAJZ2V0U3VwcGx5AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAEHZpcmVzVXNkdEFkZHJlc3MEAAAACnN1cHBseVVzZGMJAQAAAAlnZXRTdXBwbHkAAAACBQAAAAZ3YWxsZXQJAQAAAAdBZGRyZXNzAAAAAQUAAAAQdmlyZXNVc2RjQWRkcmVzcwQAAAAJc3VwcGx5QnRjCQEAAAAJZ2V0U3VwcGx5AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAD3ZpcmVzQnRjQWRkcmVzcwQAAAAJc3VwcGx5RXRoCQEAAAAJZ2V0U3VwcGx5AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAD3ZpcmVzRXRoQWRkcmVzcwQAAAAKc3VwcGx5RXVybgkBAAAACWdldFN1cHBseQAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABB2aXJlc0V1cm5BZGRyZXNzBAAAAAtib3Jyb3dXYXZlcwkBAAAACWdldEJvcnJvdwAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABF2aXJlc1dhdmVzQWRkcmVzcwQAAAAKYm9ycm93VXNkbgkBAAAACWdldEJvcnJvdwAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABB2aXJlc1VzZG5BZGRyZXNzBAAAAApib3Jyb3dVc2R0CQEAAAAJZ2V0Qm9ycm93AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAEHZpcmVzVXNkdEFkZHJlc3MEAAAACmJvcnJvd1VzZGMJAQAAAAlnZXRCb3Jyb3cAAAACBQAAAAZ3YWxsZXQJAQAAAAdBZGRyZXNzAAAAAQUAAAAQdmlyZXNVc2RjQWRkcmVzcwQAAAAJYm9ycm93QnRjCQEAAAAJZ2V0Qm9ycm93AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAD3ZpcmVzQnRjQWRkcmVzcwQAAAAJYm9ycm93RXRoCQEAAAAJZ2V0Qm9ycm93AAAAAgUAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEFAAAAD3ZpcmVzRXRoQWRkcmVzcwQAAAAKYm9ycm93RXVybgkBAAAACWdldEJvcnJvdwAAAAIFAAAABndhbGxldAkBAAAAB0FkZHJlc3MAAAABBQAAABB2aXJlc0V1cm5BZGRyZXNzCQAETAAAAAIFAAAAC3N1cHBseVdhdmVzCQAETAAAAAIFAAAACnN1cHBseVVzZG4JAARMAAAAAgUAAAAKc3VwcGx5VXNkdAkABEwAAAACBQAAAApzdXBwbHlVc2RjCQAETAAAAAIFAAAACXN1cHBseUJ0YwkABEwAAAACBQAAAAlzdXBwbHlFdGgJAARMAAAAAgUAAAAKc3VwcGx5RXVybgkABEwAAAACBQAAAAtib3Jyb3dXYXZlcwkABEwAAAACBQAAAApib3Jyb3dVc2RuCQAETAAAAAIFAAAACmJvcnJvd1VzZHQJAARMAAAAAgUAAAAKYm9ycm93VXNkYwkABEwAAAACBQAAAAlib3Jyb3dCdGMJAARMAAAAAgUAAAAJYm9ycm93RXRoCQAETAAAAAIFAAAACmJvcnJvd0V1cm4FAAAAA25pbAAAAAEAAAABaQEAAAAJbGlxdWlkYXRlAAAAAwAAAA1ib3Jyb3dBZGRyZXNzAAAADnJlc2VydmVBZGRyZXNzAAAADXZpY3RpbUFkZHJlc3MEAAAAAmkxCQAD/AAAAAQJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADWJvcnJvd0FkZHJlc3MCAAAAC3VzZXJCYWxhbmNlCQAETAAAAAIFAAAADXZpY3RpbUFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAJpMQUAAAACaTEEAAAACyR0MDI0ODUyNTY5CQEAAAANYXNVc2VyQmFsYW5jZQAAAAEFAAAAAmkxAwkAAAAAAAACBQAAAAskdDAyNDg1MjU2OQUAAAALJHQwMjQ4NTI1NjkEAAAAC3VzZXJEZWJ0VXNkCAUAAAALJHQwMjQ4NTI1NjkAAAACXzUEAAAACHVzZXJEZWJ0CAUAAAALJHQwMjQ4NTI1NjkAAAACXzQEAAAADHVzZXJBc3NldFVzZAgFAAAACyR0MDI0ODUyNTY5AAAAAl8zBAAAAAl1c2VyQXNzZXQIBQAAAAskdDAyNDg1MjU2OQAAAAJfMgQAAAAGaWdub3JlCAUAAAALJHQwMjQ4NTI1NjkAAAACXzEEAAAAD2NvbGxhdGVyYWxBc3NldAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADnJlc2VydmVBZGRyZXNzAgAAAAdhc3NldElkAgAAABBubyBhc3NldElkIGluIGNyBAAAAAZmYWN0b3IJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAABJ2aXJlc0NvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAAPY29sbGF0ZXJhbEFzc2V0AgAAABpfTGlxdWlkYXRpb25GcmFjdGlvbkZhY3RvcgAAAAAAAAAAAgMJAABnAAAAAgUAAAAJdXNlckFzc2V0BQAAAAh1c2VyRGVidAkAAAIAAAABAgAAAC9jYW4ndCBsaXF1aWRhdGUgZGVidCBvZiBhc3NldCBvZiBwb3NpdGl2ZSBzYWxkbwQAAAATbGlxdWlkYXRlRGVidEFtb3VudAkAAGsAAAADCQAAZQAAAAIFAAAACHVzZXJEZWJ0BQAAAAl1c2VyQXNzZXQAAAAAAAAAAAoAAAAAAAAAABUEAAAABmxpcUludgkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAEHZpcmVzTWFpbkFkZHJlc3MCAAAADHRyYW5zZmVyRGVidAkABEwAAAACBQAAAA1ib3Jyb3dBZGRyZXNzCQAETAAAAAIFAAAADnJlc2VydmVBZGRyZXNzCQAETAAAAAIFAAAADXZpY3RpbUFkZHJlc3MFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAZsaXFJbnYFAAAABmxpcUludgUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABxjYW4ndCBsaXF1aWRhdGUuIHVzZXJBc3NldDogCQABpAAAAAEFAAAACXVzZXJBc3NldAIAAAAMOyB1c2VyRGVidDogCQABpAAAAAEFAAAACHVzZXJEZWJ0AgAAABc7IGxpcXVpZGF0ZURlYnRBbW91bnQ6IAkAAaQAAAABBQAAABNsaXF1aWRhdGVEZWJ0QW1vdW50CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACNTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZgAAAACIyftu", "height": 3070788, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A8FcJvvBiLZbQy63J2rwqsqVXy3y4q63M5jJS24aAWkS Next: JBbEAGrJjUruParNWH5aEnBVKaBdbYE1WFUyXvRwaRHo Diff:
OldNewDifferences
7676 let ignore = $t024852569._1
7777 let collateralAsset = valueOrErrorMessage(getString(addressFromStringValue(reserveAddress), "assetId"), "no assetId in cr")
7878 let factor = valueOrElse(getInteger(Address(viresConfigAddress), (collateralAsset + "_LiquidationFractionFactor")), 2)
79- throw(((((("userAsset: " + toString(userAsset)) + "; userDebt: ") + toString(userDebt)) + "; factor: ") + toString(factor)))
79+ if ((userAsset >= userDebt))
80+ then throw("can't liquidate debt of asset of positive saldo")
81+ else {
82+ let liquidateDebtAmount = fraction((userDebt - userAsset), 10, 21)
83+ let liqInv = invoke(Address(viresMainAddress), "transferDebt", [borrowAddress, reserveAddress, victimAddress], nil)
84+ if ((liqInv == liqInv))
85+ then nil
86+ else throw(((((("can't liquidate. userAsset: " + toString(userAsset)) + "; userDebt: ") + toString(userDebt)) + "; liquidateDebtAmount: ") + toString(liquidateDebtAmount)))
87+ }
8088 }
8189 else throw("Strict value is not equal to itself.")
8290 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func asUserBalance (value) = match value {
55 case x: (Int, Int, Int, Int, Int, Boolean) =>
66 x
77 case t =>
88 throw("expected int5&boolean")
99 }
1010
1111
1212 func getIntOrZero (key) = valueOrElse(getInteger(this, key), 0)
1313
1414
1515 let viresMainAddress = base58'3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT'
1616
1717 let viresConfigAddress = base58'3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z'
1818
1919 let viresWavesAddress = base58'3P8G747fnB1DTQ4d5uD114vjAaeezCW4FaM'
2020
2121 let viresUsdnAddress = base58'3PCwFXSq8vj8iKitA5zrrLRbuqehfmimpce'
2222
2323 let viresUsdtAddress = base58'3PEiD1zJWTMZNWSCyzhvBw9pxxAWeEwaghR'
2424
2525 let viresUsdcAddress = base58'3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S'
2626
2727 let viresBtcAddress = base58'3PA7QMFyHMtHeP66SUQnwCgwKQHKpCyXWwd'
2828
2929 let viresEthAddress = base58'3PPdeWwrzaxqgr6BuReoF3sWfxW8SYv743D'
3030
3131 let viresEurnAddress = base58'3PBjqiMwwag72VWUtHNnVrxTBrNK8D7bVcN'
3232
3333 func getSupply (wallet,vires) = {
3434 let key = (wallet + "_aTokenBalance")
3535 valueOrElse(getInteger(vires, key), 0)
3636 }
3737
3838
3939 func getBorrow (wallet,vires) = {
4040 let key = (wallet + "_debt")
4141 valueOrElse(getInteger(vires, key), 0)
4242 }
4343
4444
4545 func getViresInfo (wallet) = {
4646 let supplyWaves = getSupply(wallet, Address(viresWavesAddress))
4747 let supplyUsdn = getSupply(wallet, Address(viresUsdnAddress))
4848 let supplyUsdt = getSupply(wallet, Address(viresUsdtAddress))
4949 let supplyUsdc = getSupply(wallet, Address(viresUsdcAddress))
5050 let supplyBtc = getSupply(wallet, Address(viresBtcAddress))
5151 let supplyEth = getSupply(wallet, Address(viresEthAddress))
5252 let supplyEurn = getSupply(wallet, Address(viresEurnAddress))
5353 let borrowWaves = getBorrow(wallet, Address(viresWavesAddress))
5454 let borrowUsdn = getBorrow(wallet, Address(viresUsdnAddress))
5555 let borrowUsdt = getBorrow(wallet, Address(viresUsdtAddress))
5656 let borrowUsdc = getBorrow(wallet, Address(viresUsdcAddress))
5757 let borrowBtc = getBorrow(wallet, Address(viresBtcAddress))
5858 let borrowEth = getBorrow(wallet, Address(viresEthAddress))
5959 let borrowEurn = getBorrow(wallet, Address(viresEurnAddress))
6060 [supplyWaves, supplyUsdn, supplyUsdt, supplyUsdc, supplyBtc, supplyEth, supplyEurn, borrowWaves, borrowUsdn, borrowUsdt, borrowUsdc, borrowBtc, borrowEth, borrowEurn]
6161 }
6262
6363
6464 @Callable(i)
6565 func liquidate (borrowAddress,reserveAddress,victimAddress) = {
6666 let i1 = invoke(addressFromStringValue(borrowAddress), "userBalance", [victimAddress], nil)
6767 if ((i1 == i1))
6868 then {
6969 let $t024852569 = asUserBalance(i1)
7070 if (($t024852569 == $t024852569))
7171 then {
7272 let userDebtUsd = $t024852569._5
7373 let userDebt = $t024852569._4
7474 let userAssetUsd = $t024852569._3
7575 let userAsset = $t024852569._2
7676 let ignore = $t024852569._1
7777 let collateralAsset = valueOrErrorMessage(getString(addressFromStringValue(reserveAddress), "assetId"), "no assetId in cr")
7878 let factor = valueOrElse(getInteger(Address(viresConfigAddress), (collateralAsset + "_LiquidationFractionFactor")), 2)
79- throw(((((("userAsset: " + toString(userAsset)) + "; userDebt: ") + toString(userDebt)) + "; factor: ") + toString(factor)))
79+ if ((userAsset >= userDebt))
80+ then throw("can't liquidate debt of asset of positive saldo")
81+ else {
82+ let liquidateDebtAmount = fraction((userDebt - userAsset), 10, 21)
83+ let liqInv = invoke(Address(viresMainAddress), "transferDebt", [borrowAddress, reserveAddress, victimAddress], nil)
84+ if ((liqInv == liqInv))
85+ then nil
86+ else throw(((((("can't liquidate. userAsset: " + toString(userAsset)) + "; userDebt: ") + toString(userDebt)) + "; liquidateDebtAmount: ") + toString(liquidateDebtAmount)))
87+ }
8088 }
8189 else throw("Strict value is not equal to itself.")
8290 }
8391 else throw("Strict value is not equal to itself")
8492 }
8593
8694

github/deemru/w8io/786bc32 
39.94 ms