tx · ANyHc8xwGEctgFDEeYU3A9aGu7nvkgyDX6WYkvMZp8ta

3P7WDKNEKa5aPGaFrMDve4z76hrnhosUoN7:  -0.00400000 Waves

2023.04.21 11:54 [3609670] smart account 3P7WDKNEKa5aPGaFrMDve4z76hrnhosUoN7 > SELF 0.00000000 Waves

{ "type": 13, "id": "ANyHc8xwGEctgFDEeYU3A9aGu7nvkgyDX6WYkvMZp8ta", "fee": 400000, "feeAssetId": null, "timestamp": 1682067303594, "version": 1, "sender": "3P7WDKNEKa5aPGaFrMDve4z76hrnhosUoN7", "senderPublicKey": "6MAcrVJEiVWAgL2mNuXDNnYbP3m1TyYH9Q7cnMkMGV1b", "proofs": [ "gY1hvSCRoPsq4MmkepvngQ1vRcfg247TuU8citf6vNBYWi5QrAkwSCB9DvhNPQ19Fn1GDAFyYBi2KbmdocGC3dC" ], "script": "base64:BgICCAIJAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcABFVTRE4CLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAARFVVJOAixEVWsyWVR4aFJvQXFNSkx1czRHMmIzZlI4aE1IVmg2ZWl5Rng1cjI5VlI2dAAMd2F2ZXNMZWFzaW5nCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDHdhdmVzTGVhc2luZwAoARdnZXRJbnRlcmVzdFJlc2VydmVSYXRpbwIKY29uZmlnQWRkcgdhc3NldElkCgEOZ2V0RGlzdHJpYnV0b3IBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMCIzNQOUxLODJEbndodmh5aExYbVVTQkdYeXc2U2R6eWNERXJFAwkAAAIFB2Fzc2V0SWQFBFVTRE4CIzNQQ2NteUt4UGJOdXI3elFQZ2FmOXVjemI4UVl0RTcxam91AwkAAAIFB2Fzc2V0SWQFBEVVUk4CIzNQTFZHWUZkQm53Q0JRUW53OG9FZks2V1ZRUGVUcTYyUGhTBQR1bml0BAckbWF0Y2gwCQEOZ2V0RGlzdHJpYnV0b3IBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBZAUHJG1hdGNoMAkArAICAhgsIGludGVyZXN0UmVzZXJ2ZVJhdGlvOiAJAJEDAgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFCmNvbmZpZ0FkZHIJAKwCAgIKYWRkZXJfY2ZnXwUBZAIFMHxuaWwCAXwAAAIAAQ5nZXRSZXNlcnZlSW5mbwMNY29uZmlnQWRkcmVzcwdyZXNlcnZlBm9yYWNsZQQLcmVzZXJ2ZUFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3Jlc2VydmUEDGFzc2V0SWRTdG9yZQIHYXNzZXRJZAQNYVRva2VuSWRTdG9yZQIIYVRva2VuSWQEB2Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3Jlc2VydmVBZGRyBQxhc3NldElkU3RvcmUDCQAAAgUHYXNzZXRJZAUHYXNzZXRJZAQIYVRva2VuSWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC3Jlc2VydmVBZGRyBQ1hVG9rZW5JZFN0b3JlAwkAAAIFCGFUb2tlbklkBQhhVG9rZW5JZAQFcHJpY2UJAQVhc0ludAEJAPwHBAUGb3JhY2xlAgVwcmljZQkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQVwcmljZQUFcHJpY2UEBGRhdGEJAQhhc1N0cmluZwEJAPwHBAULcmVzZXJ2ZUFkZHICBmFkdmlzZQUDbmlsBQNuaWwDCQAAAgUEZGF0YQUEZGF0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICB3ByaWNlOiAJAKQDAQUFcHJpY2UCCywgYXNzZXRJZDogBQdhc3NldElkAgwsIGFUb2tlbklkOiAFCGFUb2tlbklkCQEXZ2V0SW50ZXJlc3RSZXNlcnZlUmF0aW8CBQ1jb25maWdBZGRyZXNzBQdhc3NldElkAgIsIAUEZGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEGYWR2aXNlAQRtYWluBAttYWluQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBG1haW4CCGJhZCBtYWluBApjb25maWdBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgULbWFpbkFkZHJlc3MCBmNvbmZpZwIeZXZhbC5hZHZpc2U6IG5vIGNvbmZpZyBpbiBtYWluBAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUKY29uZmlnQWRkcgIOb3JhY2xlX2FkZHJlc3MCE25vIG9yYWNsZSBpbiBjb25maWcCEmJhZCBvcmFjbGUgYWRkcmVzcwQIcmVzZXJ2ZXMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCmNvbmZpZ0FkZHICEHByaW1hcnlfcmVzZXJ2ZXMCGWV2YWw6IG5vIHByaW1hcnkgcmVzZXJ2ZXMCAXwEB2dlbmVyYWwJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCGhlaWdodDogCQCkAwEFBmhlaWdodAIaLCBhY2NvdW50SGVhbHRoVGhyZXNob2xkOiAJAKQDAQkBEUBleHRyTmF0aXZlKDEwNTApAgUKY29uZmlnQWRkcgIYYWNjb3VudF9oZWFsdGhfdGhyZXNob2xkAhgsIGFjY291bnRIZWFsdGhPdmVybGFwOiAJAKQDAQkBEUBleHRyTmF0aXZlKDEwNTApAgUKY29uZmlnQWRkcgIWYWNjb3VudF9oZWFsdGhfb3ZlcmxhcAITLCBjb2xsYXBzZVBlbmFsdHk6IAkApAMBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQpjb25maWdBZGRyAhBjb2xsYXBzZV9wZW5hbHR5AhAsIHdhdmVzTGVhc2luZzogCQCkAwEFDHdhdmVzTGVhc2luZwQLcmVzZXJ2ZURhdGEKAQRmb2xkAgZ0b3RhbHMHcmVzZXJ2ZQkArAICCQCsAgIJAKwCAgUGdG90YWxzAgQsIFsgCQEOZ2V0UmVzZXJ2ZUluZm8DBQpjb25maWdBZGRyBQdyZXNlcnZlBQZvcmFjbGUCAyBdIAoAAiRsBQhyZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUCQCsAgIFB2dlbmVyYWwFC3Jlc2VydmVEYXRhAQphZHZpc2VVc2VyAgRtYWluBHVzZXIEC21haW5BZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUEbWFpbgIIYmFkIG1haW4ECHJlc2VydmVzCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFC21haW5BZGRyZXNzAgZjb25maWcCImV2YWwuYWR2aXNlVXNlcjogbm8gY29uZmlnIGluIG1haW4CI2V2YWwuYWR2aXNlVXNlcjogYmFkIGNvbmZpZyBpbiBtYWluAhBwcmltYXJ5X3Jlc2VydmVzAhlldmFsOiBubyBwcmltYXJ5IHJlc2VydmVzAgF8BAdnZW5lcmFsCQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZoZWlnaHQCCCwgdXNlcjogBQR1c2VyCgEEZm9sZAIGdG90YWxzB3Jlc2VydmUECHVzZXJJbmZvCQEIYXNTdHJpbmcBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3Jlc2VydmUCCmFkdmlzZVVzZXIJAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQAAAgUIdXNlckluZm8FCHVzZXJJbmZvCQCsAgIJAKwCAgkArAICBQZ0b3RhbHMCBCwgWyAFCHVzZXJJbmZvAgMgXSAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4KAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQdnZW5lcmFsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAAIaTcrY=", "chainId": 87, "height": 3609670, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func asInt (value) = match value {
5+ case int: Int =>
6+ int
7+ case _ =>
8+ throw("wrong type, expected: Int")
9+}
10+
11+
12+func asString (value) = match value {
13+ case s: String =>
14+ s
15+ case _ =>
16+ throw("wrong type, expected: String")
17+}
18+
19+
20+let USDN = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
21+
22+let EURN = "DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t"
23+
24+let wavesLeasing = valueOrElse(getInteger(this, "wavesLeasing"), 40)
25+
26+func getInterestReserveRatio (configAddr,assetId) = {
27+ func getDistributor (assetId) = if ((assetId == "WAVES"))
28+ then "3P9LK82DnwhvhyhLXmUSBGXyw6SdzycDErE"
29+ else if ((assetId == USDN))
30+ then "3PCcmyKxPbNur7zQPgaf9uczb8QYtE71jou"
31+ else if ((assetId == EURN))
32+ then "3PLVGYFdBnwCBQQnw8oEfK6WVQPeTq62PhS"
33+ else unit
34+
35+ match getDistributor(assetId) {
36+ case d: String =>
37+ (", interestReserveRatio: " + split(valueOrElse(getString(configAddr, ("adder_cfg_" + d)), "0|nil"), "|")[0])
38+ case _ =>
39+ ""
40+ }
41+ }
42+
43+
44+func getReserveInfo (configAddress,reserve,oracle) = {
45+ let reserveAddr = addressFromStringValue(reserve)
46+ let assetIdStore = "assetId"
47+ let aTokenIdStore = "aTokenId"
48+ let assetId = getStringValue(reserveAddr, assetIdStore)
49+ if ((assetId == assetId))
50+ then {
51+ let aTokenId = getStringValue(reserveAddr, aTokenIdStore)
52+ if ((aTokenId == aTokenId))
53+ then {
54+ let price = asInt(invoke(oracle, "price", [assetId], nil))
55+ if ((price == price))
56+ then {
57+ let data = asString(invoke(reserveAddr, "advise", nil, nil))
58+ if ((data == data))
59+ then (((((((("price: " + toString(price)) + ", assetId: ") + assetId) + ", aTokenId: ") + aTokenId) + getInterestReserveRatio(configAddress, assetId)) + ", ") + data)
60+ else throw("Strict value is not equal to itself.")
61+ }
62+ else throw("Strict value is not equal to itself.")
63+ }
64+ else throw("Strict value is not equal to itself.")
65+ }
66+ else throw("Strict value is not equal to itself.")
67+ }
68+
69+
70+func advise (main) = {
71+ let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main")
72+ let configAddr = addressFromStringValue(valueOrErrorMessage(getString(mainAddress, "config"), "eval.advise: no config in main"))
73+ let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddr, "oracle_address"), "no oracle in config")), "bad oracle address")
74+ let reserves = split_4C(valueOrErrorMessage(getString(configAddr, "primary_reserves"), "eval: no primary reserves"), "|")
75+ let general = ((((((((("height: " + toString(height)) + ", accountHealthThreshold: ") + toString(getIntegerValue(configAddr, "account_health_threshold"))) + ", accountHealthOverlap: ") + toString(getIntegerValue(configAddr, "account_health_overlap"))) + ", collapsePenalty: ") + toString(getIntegerValue(configAddr, "collapse_penalty"))) + ", wavesLeasing: ") + toString(wavesLeasing))
76+ let reserveData = {
77+ func fold (totals,reserve) = (((totals + ", [ ") + getReserveInfo(configAddr, reserve, oracle)) + " ] ")
78+
79+ let $l = reserves
80+ let $s = size($l)
81+ let $acc0 = ""
82+ func $f0_1 ($a,$i) = if (($i >= $s))
83+ then $a
84+ else fold($a, $l[$i])
85+
86+ func $f0_2 ($a,$i) = if (($i >= $s))
87+ then $a
88+ else throw("List size exceeds 20")
89+
90+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
91+ }
92+ (general + reserveData)
93+ }
94+
95+
96+func adviseUser (main,user) = {
97+ let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main")
98+ let reserves = split_4C(valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(mainAddress, "config"), "eval.adviseUser: no config in main")), "eval.adviseUser: bad config in main"), "primary_reserves"), "eval: no primary reserves"), "|")
99+ let general = ((("height: " + toString(height)) + ", user: ") + user)
100+ func fold (totals,reserve) = {
101+ let userInfo = asString(invoke(addressFromStringValue(reserve), "adviseUser", [user], nil))
102+ if ((userInfo == userInfo))
103+ then (((totals + ", [ ") + userInfo) + " ] ")
104+ else throw("Strict value is not equal to itself.")
105+ }
106+
107+ let $l = reserves
108+ let $s = size($l)
109+ let $acc0 = general
110+ func $f0_1 ($a,$i) = if (($i >= $s))
111+ then $a
112+ else fold($a, $l[$i])
113+
114+ func $f0_2 ($a,$i) = if (($i >= $s))
115+ then $a
116+ else throw("List size exceeds 20")
117+
118+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
119+ }
120+
121+
122+

github/deemru/w8io/3ef1775 
24.09 ms