2023.04.21 11:56 [3609672] smart account 3P6KDB3W6ZhxSzKSPrFbDsp4NY6uN3oM81M > SELF 0.00000000 Waves

{ "type": 13, "id": "BkNzP8BEgQNUTjnBJccnU4cco5CqsPtmBgUpbiKiUp8u", "fee": 400000, "feeAssetId": null, "timestamp": 1682067408923, "version": 1, "sender": "3P6KDB3W6ZhxSzKSPrFbDsp4NY6uN3oM81M", "senderPublicKey": "4Y1Um7JiuWo9EwowyQiVU8SwStjkEPHUZPaiEYaa3h74", "proofs": [ "4NQ3fuJeFp4tz5RRJeH3LCbzeuBtmcbVH9hyr1aoDujogWCaHDkR3gYhb9SMJkmJSps2jEXr2KYRT7qfwHngZc7q" ], "script": "base64:BgICCAIEAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBBmFkdmlzZQEEbWFpbgQBbQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBG1haW4CCGJhZCBtYWluBAZjb25maWcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQFtAgZjb25maWcCEW5vIGNvbmZpZyBpbiBtYWluBAZzdGFrZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAgx2aXJlc19zdGFrZXICE25vIHN0YWtlciBpbiBjb25maWcCCmJhZCBzdGFrZXIEC3ZpcmVzTWludGVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBmNvbmZpZwIMdmlyZXNfbWludGVyAg5ubyB2aXJlc01pbnRlcgITaW52YWxpZCB2aXJlc01pbnRlcgQMdmlyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgULdmlyZXNNaW50ZXICB2Fzc2V0SWQCD25vIHZpcmVzQXNzZXRJZAQLZGlzdHJpYnV0b3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAhF2aXJlc19kaXN0cmlidXRvcgIYbm8gZGlzdHJpYnV0b3IgaW4gY29uZmlnAg9iYWQgZGlzdHJpYnV0b3IEBm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQZjb25maWcCDm9yYWNsZV9hZGRyZXNzAhNubyBvcmFjbGUgaW4gY29uZmlnAgpiYWQgb3JhY2xlBAp2aXJlc1ByaWNlCQEFYXNJbnQBCQD8BwQFBm9yYWNsZQIFcHJpY2UJAMwIAgUMdmlyZXNBc3NldElkBQNuaWwFA25pbAMJAAACBQp2aXJlc1ByaWNlBQp2aXJlc1ByaWNlBApzdGFrZXJJbmZvCQEIYXNTdHJpbmcBCQD8BwQFBnN0YWtlcgIGYWR2aXNlBQNuaWwFA25pbAMJAAACBQpzdGFrZXJJbmZvBQpzdGFrZXJJbmZvBAdnZW5lcmFsCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIIaGVpZ2h0OiAJAKQDAQUGaGVpZ2h0AhAsIHZpcmVzQXNzZXRJZDogBQx2aXJlc0Fzc2V0SWQCDiwgdmlyZXNQcmljZTogCQCkAwEFCnZpcmVzUHJpY2UDCQAAAgUHZ2VuZXJhbAUHZ2VuZXJhbAQIcmVzZXJ2ZXMJAQhhc1N0cmluZwEJAPwHBAULZGlzdHJpYnV0b3ICBmFkdmlzZQUDbmlsBQNuaWwDCQAAAgUIcmVzZXJ2ZXMFCHJlc2VydmVzCQCsAgIJAKwCAgkArAICBQdnZW5lcmFsAgIsIAUKc3Rha2VySW5mbwUIcmVzZXJ2ZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCmFkdmlzZVVzZXICBG1haW4EdXNlcgQBbQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBG1haW4CCGJhZCBtYWluBAZjb25maWcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQFtAgZjb25maWcCEW5vIGNvbmZpZyBpbiBtYWluBAhyZXNlcnZlcwkAvAkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAhBwcmltYXJ5X3Jlc2VydmVzAgtubyByZXNlcnZlcwIBfAQJZWJSZXdhcmRzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBmNvbmZpZwIKZWJfcmV3YXJkcwIXbm8gZWJfcmV3YXJkcyBpbiBjb25maWcCDmJhZCBlYl9yZXdhcmRzBAZzdGFrZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAgx2aXJlc19zdGFrZXICE25vIHN0YWtlciBpbiBjb25maWcCCmJhZCBzdGFrZXIEC2Rpc3RyaWJ1dG9yCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBmNvbmZpZwIRdmlyZXNfZGlzdHJpYnV0b3ICGG5vIGRpc3RyaWJ1dG9yIGluIGNvbmZpZwIPYmFkIGRpc3RyaWJ1dG9yBAttYXliZUxvY2tlcgQHJG1hdGNoMAkAnQgCBQZjb25maWcCCWxwX2xvY2tlcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcECWxvY2tlckFkcgUHJG1hdGNoMAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFCWxvY2tlckFkcgIfYmFkIGxwX2xvY2tlciBhZGRyZXNzIGluIGNvbmZpZwUEdW5pdAoBDWdldExvY2tlckluZm8BBGFUSWQEByRtYXRjaDAFC21heWJlTG9ja2VyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEBmxvY2tlcgUHJG1hdGNoMAkArAICAgEsCQEIYXNTdHJpbmcBCQD8BwQFBmxvY2tlcgIKYWR2aXNlVXNlcgkAzAgCBQR1c2VyCQDMCAIFBGFUSWQFA25pbAUDbmlsAgAEBmViVXNlcgkBCGFzU3RyaW5nAQkA/AcEBQllYlJld2FyZHMCCmFkdmlzZVVzZXIJAMwIAgUEdXNlcgUDbmlsBQNuaWwEB3N0a1VzZXIJAQhhc1N0cmluZwEJAPwHBAUGc3Rha2VyAgphZHZpc2VVc2VyCQDMCAIFBHVzZXIFA25pbAUDbmlsBAxyZXNlcnZlc0RhdGEKAQRmb2xkAgZ0b3RhbHMHcmVzZXJ2ZQQIYVRva2VuSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdyZXNlcnZlAghhVG9rZW5JZAIWbm8gYVRva2VuSWQgaW4gcmVzZXJ2ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZ0b3RhbHMCBCwgWyACEHJlc2VydmVBZGRyZXNzOiAFB3Jlc2VydmUCASwJAQhhc1N0cmluZwEJAPwHBAULZGlzdHJpYnV0b3ICCmFkdmlzZVVzZXIJAMwIAgUHcmVzZXJ2ZQkAzAgCBQR1c2VyBQNuaWwFA25pbAkBDWdldExvY2tlckluZm8BBQhhVG9rZW5JZAICIF0KAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkArAICCQCsAgIJAKwCAgUGZWJVc2VyAgIsIAUHc3RrVXNlcgUMcmVzZXJ2ZXNEYXRhAAAAP/Bd", "chainId": 87, "height": 3609672, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: BmxS2ifXi9azN8fkgBb9iKp1DRPzguJ1JjkfchWy49pe 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+func advise (main) = {
21+ let m = valueOrErrorMessage(addressFromString(main), "bad main")
22+ let config = addressFromStringValue(valueOrErrorMessage(getString(m, "config"), "no config in main"))
23+ let staker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_staker"), "no staker in config")), "bad staker")
24+ let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_minter"), "no viresMinter")), "invalid viresMinter")
25+ let viresAssetId = valueOrErrorMessage(getString(viresMinter, "assetId"), "no viresAssetId")
26+ let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor")
27+ let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "oracle_address"), "no oracle in config")), "bad oracle")
28+ let viresPrice = asInt(invoke(oracle, "price", [viresAssetId], nil))
29+ if ((viresPrice == viresPrice))
30+ then {
31+ let stakerInfo = asString(invoke(staker, "advise", nil, nil))
32+ if ((stakerInfo == stakerInfo))
33+ then {
34+ let general = ((((("height: " + toString(height)) + ", viresAssetId: ") + viresAssetId) + ", viresPrice: ") + toString(viresPrice))
35+ if ((general == general))
36+ then {
37+ let reserves = asString(invoke(distributor, "advise", nil, nil))
38+ if ((reserves == reserves))
39+ then (((general + ", ") + stakerInfo) + reserves)
40+ else throw("Strict value is not equal to itself.")
41+ }
42+ else throw("Strict value is not equal to itself.")
43+ }
44+ else throw("Strict value is not equal to itself.")
45+ }
46+ else throw("Strict value is not equal to itself.")
47+ }
48+
49+
50+func adviseUser (main,user) = {
51+ let m = valueOrErrorMessage(addressFromString(main), "bad main")
52+ let config = addressFromStringValue(valueOrErrorMessage(getString(m, "config"), "no config in main"))
53+ let reserves = split_4C(valueOrErrorMessage(getString(config, "primary_reserves"), "no reserves"), "|")
54+ let ebRewards = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "eb_rewards"), "no eb_rewards in config")), "bad eb_rewards")
55+ let staker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_staker"), "no staker in config")), "bad staker")
56+ let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor")
57+ let maybeLocker = match getString(config, "lp_locker") {
58+ case lockerAdr: String =>
59+ valueOrErrorMessage(addressFromString(lockerAdr), "bad lp_locker address in config")
60+ case _ =>
61+ unit
62+ }
63+ func getLockerInfo (aTId) = match maybeLocker {
64+ case locker: Address =>
65+ ("," + asString(invoke(locker, "adviseUser", [user, aTId], nil)))
66+ case _ =>
67+ ""
68+ }
69+
70+ let ebUser = asString(invoke(ebRewards, "adviseUser", [user], nil))
71+ let stkUser = asString(invoke(staker, "adviseUser", [user], nil))
72+ let reservesData = {
73+ func fold (totals,reserve) = {
74+ let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(reserve), "aTokenId"), "no aTokenId in reserve")
75+ (((((((totals + ", [ ") + "reserveAddress: ") + reserve) + ",") + asString(invoke(distributor, "adviseUser", [reserve, user], nil))) + getLockerInfo(aTokenId)) + " ]")
76+ }
77+
78+ let $l = reserves
79+ let $s = size($l)
80+ let $acc0 = ""
81+ func $f0_1 ($a,$i) = if (($i >= $s))
82+ then $a
83+ else fold($a, $l[$i])
84+
85+ func $f0_2 ($a,$i) = if (($i >= $s))
86+ then $a
87+ else throw("List size exceeds 20")
88+
89+ $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)
90+ }
91+ (((ebUser + ", ") + stkUser) + reservesData)
92+ }
93+
94+
95+

github/deemru/w8io/786bc32 
14.88 ms