tx · 75e8D9FqYhE1snaFhbDjaxgcW2XsLB2cuBawHZxcoR6J

3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3:  -0.01000000 Waves

2024.01.17 19:50 [4001564] smart account 3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3 > SELF 0.00000000 Waves

{ "type": 13, "id": "75e8D9FqYhE1snaFhbDjaxgcW2XsLB2cuBawHZxcoR6J", "fee": 1000000, "feeAssetId": null, "timestamp": 1705510250873, "version": 2, "chainId": 87, "sender": "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3", "senderPublicKey": "4XuPpm7Pz97L5yDuLYiKbCSuXvtGjxCPsUBUUzmgokhP", "proofs": [ "53Vi4yLcsPc3hxXNh1deqAnHXLVjGz2Gh5cSfC4Ja5yVd5ebnsFRc3Bz49anjDi6XfpdXLb7UfKobpdKBaCwPuUf" ], "script": "base64:BgIhCAISBwoFCAgICAESCAoGCAgICAEIEgQKAggIEgQKAggICAAGU2NhbGU4AIDC1y8AB1NjYWxlMTYAgICE/qbe4REBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEWdmVyaWZ5TGlxdWlkYXRvckFjY2VzcwEHYWRkcmVzcwkBAiE9AgkAswkCCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMCEXNldHVwX2xpcXVpZGF0b3JzAgAJAKUIAQUHYWRkcmVzcwUEdW5pdAATTWF4U2hhcmVUb0xpcXVpZGF0ZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAhlzZXR1cF9tYXhTaGFyZVRvTGlxdWlkYXRlAGQAEExpcXVpZGF0aW9uRGVsYXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIWc2V0dXBfbGlxdWlkYXRpb25EZWxheQAKABBMaXF1aWRhdG9yUmV3YXJkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCFnNldHVwX2xpcXVpZGF0b3JSZXdhcmQACgAHbWFya2V0cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAg1zZXR1cF9tYXJrZXRzCQC5CQIJAMwIAgIjM1BIcHVRVVBWVW9SM0FZekZlSnplV0pmWUxzTFRtV3NzVkgFA25pbAIBLAQBaQEQcHJveHlMaXF1aWRhdGVWMgUGbWFya2V0C3VzZXJBZGRyZXNzDmRlYnRBc3NldElkU3RyEnN1cHBsaWVkQXNzZXRJZFN0cgZhbW91bnQDCQAAAgkAswkCBQdtYXJrZXRzBQZtYXJrZXQFBHVuaXQJAAIBAiBnaXZlbiBwb29sIGFkZHJlc3MgaXMgbm90IGEgcG9vbAQDaW52CQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBm1hcmtldAILbGlxdWlkYXRlVjIJAMwIAgcJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUSc3VwcGxpZWRBc3NldElkU3RyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUOZGVidEFzc2V0SWRTdHIFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQcHJveHlMaXF1aWRhdGVWMwYGbWFya2V0C3VzZXJBZGRyZXNzDmRlYnRBc3NldElkU3RyEnN1cHBsaWVkQXNzZXRJZFN0cgZhbW91bnQIcm91dGVTdHIDCQAAAgkAswkCBQdtYXJrZXRzBQZtYXJrZXQFBHVuaXQJAAIBAiRnaXZlbiBtYXJrZXQgYWRkcmVzcyBpcyBub3QgYSBtYXJrZXQDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yQWNjZXNzAQgFAWkGY2FsbGVyCQACAQIkbm8gcGVybWlzc2lvbiB0byBwZXJmb3JtIGxpcXVpZGF0aW9uBA1tYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQZtYXJrZXQEBXJhdGVzCgABQAkA/AcEBQ1tYXJrZXRBZGRyZXNzAhNjYWxjdWxhdGVUb2tlblJhdGVzCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcDCQAAAgUFcmF0ZXMFBXJhdGVzBAdyYXRlc0xpCQC1CQIFBXJhdGVzAgEsBAxtYXJrZXRBc3NldHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIMc2V0dXBfdG9rZW5zAgEsBAlzQXNzZXROdW0JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQxtYXJrZXRBc3NldHMFEnN1cHBsaWVkQXNzZXRJZFN0cgItc3VwcGxpZWRBc3NldCBub3QgZm91bmQgaW4gbWFya2V0IGNvbXBvc2l0aW9uBAVzUmF0ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQdyYXRlc0xpBQlzQXNzZXROdW0CAXwAAQQHc0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUNbWFya2V0QWRkcmVzcwkArAICCQCsAgIFC3VzZXJBZGRyZXNzAgpfc3VwcGxpZWRfBRJzdXBwbGllZEFzc2V0SWRTdHIEDnN1cHBsaWVkQW1vdW50CQBrAwUHc0Ftb3VudAUFc1JhdGUFB1NjYWxlMTYEFmxhc3RMaXFGb3JNYXJrZXRLZXlTdHIJAKwCAgkArAICAg9oaXN0b3J5X21hcmtldF8FBm1hcmtldAIQX2xhc3RMaXF1aWRhdGlvbgQVbGFzdExpcXVpZGF0aW9uS2V5U3RyCQCsAgIJAKwCAgINaGlzdG9yeV91c2VyXwULdXNlckFkZHJlc3MCEF9sYXN0TGlxdWlkYXRpb24ED2xhc3RMaXF1aWRhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRVsYXN0TGlxdWlkYXRpb25LZXlTdHIAAAMJAGYCBQZhbW91bnQJAGsDBRNNYXhTaGFyZVRvTGlxdWlkYXRlBQ5zdXBwbGllZEFtb3VudACQTgkAAgECKHNob3VsZCBhIGxpcXVpZGF0ZSBzbWFsbGVyIHBhcnQgcGVyIHRpbWUDCQBmAgkAZAIFD2xhc3RMaXF1aWRhdGlvbgUQTGlxdWlkYXRpb25EZWxheQUGaGVpZ2h0CQACAQIUY2Fubm90IGxpcXVpZGF0ZSB5ZXQEA2ludgkA/AcEBQ1tYXJrZXRBZGRyZXNzAglsaXF1aWRhdGUJAMwIAgcJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYW1vdW50CQDMCAIFEnN1cHBsaWVkQXNzZXRJZFN0cgkAzAgCBQ5kZWJ0QXNzZXRJZFN0cgkAzAgCBQhyb3V0ZVN0cgUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEEGxpcXVpZGF0b3JSZXdhcmQJAGsDBQZhbW91bnQFEExpcXVpZGF0b3JSZXdhcmQAkE4EC3N0YXRzS2V5U3RyCQCsAgIJAKwCAgkArAICAgdyZXdhcmRfCQClCAEIBQFpBmNhbGxlcgIBXwUOZGVidEFzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIFC3N0YXRzS2V5U3RyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQtzdGF0c0tleVN0cgAABRBsaXF1aWRhdG9yUmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVsYXN0TGlxdWlkYXRpb25LZXlTdHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWbGFzdExpcUZvck1hcmtldEtleVN0cgUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcGF5b3V0UmV3YXJkAgphZGRyZXNzU3RyCmFzc2V0SWRTdHIDCQECIT0CCQClCAEIBQFpBmNhbGxlcgIjM1BNY01pTUVzNnc1Nk5SR2Fja3NYdEZHNXpTN2RvRTlmcEwJAAIBAhhubyBhY2Nlc3MgdG8gdGhpcyBtZXRob2QEC3N0YXRzS2V5U3RyCQCsAgIJAKwCAgkArAICAgdyZXdhcmRfBQphZGRyZXNzU3RyAgFfBQphc3NldElkU3RyBA9yZXdhcmRBdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULc3RhdHNLZXlTdHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQphZGRyZXNzU3RyBQ9yZXdhcmRBdmFpbGFibGUJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgULc3RhdHNLZXlTdHIAAAUDbmlsAWkBDHVwZGF0ZVN0cmluZwIDdmFsA2tleQMDCQECIT0CCQClCAEIBQFpBmNhbGxlcgIjM1BNY01pTUVzNnc1Nk5SR2Fja3NYdEZHNXpTN2RvRTlmcEwJAQIhPQIJAKUIAQgFAWkGY2FsbGVyAiMzUEhiZHBhS3p6OEVpQW5nR0hhRnUyaFZ1TkNkc0M2N3FoMwcJAAIBAhhubyBhY2Nlc3MgdG8gdGhpcyBtZXRob2QJAMwIAgkBC1N0cmluZ0VudHJ5AgUDdmFsBQNrZXkFA25pbADVYOBI", "height": 4001564, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Dc79tZvQoVTPCQSTbf8nGeKXbf4dyYeLYESSZnv3jTyY Next: Fj5S5vY9nTnFQVwST8XjR95nD918J1SXkcLyxSxfbWuX Diff:
OldNewDifferences
5757 let lastLiqForMarketKeyStr = (("history_market_" + market) + "_lastLiquidation")
5858 let lastLiquidationKeyStr = (("history_user_" + userAddress) + "_lastLiquidation")
5959 let lastLiquidation = valueOrElse(getInteger(this, lastLiquidationKeyStr), 0)
60- if ((suppliedAmount > fraction(MaxShareToLiquidate, suppliedAmount, 10000)))
60+ if ((amount > fraction(MaxShareToLiquidate, suppliedAmount, 10000)))
6161 then throw("should a liquidate smaller part per time")
6262 else if (((lastLiquidation + LiquidationDelay) > height))
6363 then throw("cannot liquidate yet")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale8 = 100000000
55
66 let Scale16 = 10000000000000000
77
88 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
99 then unit
1010 else fromBase58String(assetIdStr)
1111
1212
1313 func verifyLiquidatorAccess (address) = (indexOf(valueOrElse(getString(this, "setup_liquidators"), ""), toString(address)) != unit)
1414
1515
1616 let MaxShareToLiquidate = valueOrElse(getInteger(this, "setup_maxShareToLiquidate"), 100)
1717
1818 let LiquidationDelay = valueOrElse(getInteger(this, "setup_liquidationDelay"), 10)
1919
2020 let LiquidatorReward = valueOrElse(getInteger(this, "setup_liquidatorReward"), 10)
2121
2222 let markets = valueOrElse(getString(this, "setup_markets"), makeString(["3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH"], ","))
2323
2424 @Callable(i)
2525 func proxyLiquidateV2 (market,userAddress,debtAssetIdStr,suppliedAssetIdStr,amount) = if ((indexOf(markets, market) == unit))
2626 then throw("given pool address is not a pool")
2727 else {
2828 let inv = invoke(addressFromStringValue(market), "liquidateV2", [false, userAddress, suppliedAssetIdStr], [AttachedPayment(getAssetBytes(debtAssetIdStr), amount)])
2929 if ((inv == inv))
3030 then nil
3131 else throw("Strict value is not equal to itself.")
3232 }
3333
3434
3535
3636 @Callable(i)
3737 func proxyLiquidateV3 (market,userAddress,debtAssetIdStr,suppliedAssetIdStr,amount,routeStr) = if ((indexOf(markets, market) == unit))
3838 then throw("given market address is not a market")
3939 else if (!(verifyLiquidatorAccess(i.caller)))
4040 then throw("no permission to perform liquidation")
4141 else {
4242 let marketAddress = addressFromStringValue(market)
4343 let rates = {
4444 let @ = invoke(marketAddress, "calculateTokenRates", [false], nil)
4545 if ($isInstanceOf(@, "String"))
4646 then @
4747 else throw(($getType(@) + " couldn't be cast to String"))
4848 }
4949 if ((rates == rates))
5050 then {
5151 let ratesLi = split(rates, ",")
5252 let marketAssets = split(getStringValue(marketAddress, "setup_tokens"), ",")
5353 let sAssetNum = valueOrErrorMessage(indexOf(marketAssets, suppliedAssetIdStr), "suppliedAsset not found in market composition")
5454 let sRate = parseIntValue(split(ratesLi[sAssetNum], "|")[1])
5555 let sAmount = getIntegerValue(marketAddress, ((userAddress + "_supplied_") + suppliedAssetIdStr))
5656 let suppliedAmount = fraction(sAmount, sRate, Scale16)
5757 let lastLiqForMarketKeyStr = (("history_market_" + market) + "_lastLiquidation")
5858 let lastLiquidationKeyStr = (("history_user_" + userAddress) + "_lastLiquidation")
5959 let lastLiquidation = valueOrElse(getInteger(this, lastLiquidationKeyStr), 0)
60- if ((suppliedAmount > fraction(MaxShareToLiquidate, suppliedAmount, 10000)))
60+ if ((amount > fraction(MaxShareToLiquidate, suppliedAmount, 10000)))
6161 then throw("should a liquidate smaller part per time")
6262 else if (((lastLiquidation + LiquidationDelay) > height))
6363 then throw("cannot liquidate yet")
6464 else {
6565 let inv = invoke(marketAddress, "liquidate", [false, userAddress, amount, suppliedAssetIdStr, debtAssetIdStr, routeStr], nil)
6666 if ((inv == inv))
6767 then {
6868 let liquidatorReward = fraction(amount, LiquidatorReward, 10000)
6969 let statsKeyStr = ((("reward_" + toString(i.caller)) + "_") + debtAssetIdStr)
7070 [IntegerEntry(statsKeyStr, (valueOrElse(getInteger(this, statsKeyStr), 0) + liquidatorReward)), IntegerEntry(lastLiquidationKeyStr, height), IntegerEntry(lastLiqForMarketKeyStr, height)]
7171 }
7272 else throw("Strict value is not equal to itself.")
7373 }
7474 }
7575 else throw("Strict value is not equal to itself.")
7676 }
7777
7878
7979
8080 @Callable(i)
8181 func payoutReward (addressStr,assetIdStr) = if ((toString(i.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL"))
8282 then throw("no access to this method")
8383 else {
8484 let statsKeyStr = ((("reward_" + addressStr) + "_") + assetIdStr)
8585 let rewardAvailable = valueOrElse(getInteger(this, statsKeyStr), 0)
8686 [ScriptTransfer(addressFromStringValue(addressStr), rewardAvailable, getAssetBytes(assetIdStr)), IntegerEntry(statsKeyStr, 0)]
8787 }
8888
8989
9090
9191 @Callable(i)
9292 func updateString (val,key) = if (if ((toString(i.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL"))
9393 then (toString(i.caller) != "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3")
9494 else false)
9595 then throw("no access to this method")
9696 else [StringEntry(val, key)]
9797
9898

github/deemru/w8io/0e76f2f 
33.56 ms