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:
Old | New | Differences | |
---|---|---|---|
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 ◑