tx · BmxS2ifXi9azN8fkgBb9iKp1DRPzguJ1JjkfchWy49pe 3P6KDB3W6ZhxSzKSPrFbDsp4NY6uN3oM81M: -0.00300000 Waves 2023.04.21 14:11 [3609808] smart account 3P6KDB3W6ZhxSzKSPrFbDsp4NY6uN3oM81M > SELF 0.00000000 Waves
{ "type": 13, "id": "BmxS2ifXi9azN8fkgBb9iKp1DRPzguJ1JjkfchWy49pe", "fee": 300000, "feeAssetId": null, "timestamp": 1682075542375, "version": 1, "sender": "3P6KDB3W6ZhxSzKSPrFbDsp4NY6uN3oM81M", "senderPublicKey": "4Y1Um7JiuWo9EwowyQiVU8SwStjkEPHUZPaiEYaa3h74", "proofs": [ "5KPdsGUGkNGANb67j1JfokAoNzzWiPMddT6WWYbuKk84kkomTtQ67DAZafDeEsgqam8DPEGdyUMiSB3VUvwLRkef" ], "script": "base64:BgICCAIEAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAhl3cm9uZyB0eXBlLCBleHBlY3RlZDogSW50AQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBBmFkdmlzZQEEbWFpbgQBbQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBG1haW4CCGJhZCBtYWluBAZjb25maWcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQFtAgZjb25maWcCEW5vIGNvbmZpZyBpbiBtYWluBAt2aXJlc01pbnRlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQZjb25maWcCDHZpcmVzX21pbnRlcgIObm8gdmlyZXNNaW50ZXICE2ludmFsaWQgdmlyZXNNaW50ZXIEDHZpcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFC3ZpcmVzTWludGVyAgdhc3NldElkAg9ubyB2aXJlc0Fzc2V0SWQEC2Rpc3RyaWJ1dG9yCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBmNvbmZpZwIRdmlyZXNfZGlzdHJpYnV0b3ICGG5vIGRpc3RyaWJ1dG9yIGluIGNvbmZpZwIPYmFkIGRpc3RyaWJ1dG9yBAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGY29uZmlnAg5vcmFjbGVfYWRkcmVzcwITbm8gb3JhY2xlIGluIGNvbmZpZwIKYmFkIG9yYWNsZQQKdmlyZXNQcmljZQkBBWFzSW50AQkA/AcEBQZvcmFjbGUCBXByaWNlCQDMCAIFDHZpcmVzQXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUKdmlyZXNQcmljZQUKdmlyZXNQcmljZQQHZ2VuZXJhbAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCGhlaWdodDogCQCkAwEFBmhlaWdodAIQLCB2aXJlc0Fzc2V0SWQ6IAUMdmlyZXNBc3NldElkAg4sIHZpcmVzUHJpY2U6IAkApAMBBQp2aXJlc1ByaWNlAwkAAAIFB2dlbmVyYWwFB2dlbmVyYWwECHJlc2VydmVzCQEIYXNTdHJpbmcBCQD8BwQFC2Rpc3RyaWJ1dG9yAgZhZHZpc2UFA25pbAUDbmlsAwkAAAIFCHJlc2VydmVzBQhyZXNlcnZlcwkArAICCQCsAgIFB2dlbmVyYWwCAiwgBQhyZXNlcnZlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKYWR2aXNlVXNlcgIEbWFpbgR1c2VyBAFtCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUEbWFpbgIIYmFkIG1haW4EBmNvbmZpZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAW0CBmNvbmZpZwIRbm8gY29uZmlnIGluIG1haW4ECHJlc2VydmVzCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQZjb25maWcCEHByaW1hcnlfcmVzZXJ2ZXMCC25vIHJlc2VydmVzAgF8BAtkaXN0cmlidXRvcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQZjb25maWcCEXZpcmVzX2Rpc3RyaWJ1dG9yAhhubyBkaXN0cmlidXRvciBpbiBjb25maWcCD2JhZCBkaXN0cmlidXRvcgQLbWF5YmVMb2NrZXIEByRtYXRjaDAJAJ0IAgUGY29uZmlnAglscF9sb2NrZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAlsb2NrZXJBZHIFByRtYXRjaDAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQlsb2NrZXJBZHICH2JhZCBscF9sb2NrZXIgYWRkcmVzcyBpbiBjb25maWcFBHVuaXQKAQ1nZXRMb2NrZXJJbmZvAQRhVElkBAckbWF0Y2gwBQttYXliZUxvY2tlcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAZsb2NrZXIFByRtYXRjaDAJAKwCAgIBLAkBCGFzU3RyaW5nAQkA/AcEBQZsb2NrZXICCmFkdmlzZVVzZXIJAMwIAgUEdXNlcgkAzAgCBQRhVElkBQNuaWwFA25pbAIABAxyZXNlcnZlc0RhdGEKAQRmb2xkAgZ0b3RhbHMHcmVzZXJ2ZQQIYVRva2VuSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdyZXNlcnZlAghhVG9rZW5JZAIWbm8gYVRva2VuSWQgaW4gcmVzZXJ2ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZ0b3RhbHMCBCwgWyACEHJlc2VydmVBZGRyZXNzOiAFB3Jlc2VydmUCASwJAQhhc1N0cmluZwEJAPwHBAULZGlzdHJpYnV0b3ICCmFkdmlzZVVzZXIJAMwIAgUHcmVzZXJ2ZQkAzAgCBQR1c2VyBQNuaWwFA25pbAkBDWdldExvY2tlckluZm8BBQhhVG9rZW5JZAICIF0KAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAUMcmVzZXJ2ZXNEYXRhAADku6YV", "chainId": 87, "height": 3609808, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BkNzP8BEgQNUTjnBJccnU4cco5CqsPtmBgUpbiKiUp8u Next: none Diff:
Old | New | Differences | |
---|---|---|---|
20 | 20 | func advise (main) = { | |
21 | 21 | let m = valueOrErrorMessage(addressFromString(main), "bad main") | |
22 | 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 | 23 | let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_minter"), "no viresMinter")), "invalid viresMinter") | |
25 | 24 | let viresAssetId = valueOrErrorMessage(getString(viresMinter, "assetId"), "no viresAssetId") | |
26 | 25 | let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor") | |
28 | 27 | let viresPrice = asInt(invoke(oracle, "price", [viresAssetId], nil)) | |
29 | 28 | if ((viresPrice == viresPrice)) | |
30 | 29 | then { | |
31 | - | let | |
32 | - | if (( | |
30 | + | let general = ((((("height: " + toString(height)) + ", viresAssetId: ") + viresAssetId) + ", viresPrice: ") + toString(viresPrice)) | |
31 | + | if ((general == general)) | |
33 | 32 | 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 | - | } | |
33 | + | let reserves = asString(invoke(distributor, "advise", nil, nil)) | |
34 | + | if ((reserves == reserves)) | |
35 | + | then ((general + ", ") + reserves) | |
42 | 36 | else throw("Strict value is not equal to itself.") | |
43 | 37 | } | |
44 | 38 | else throw("Strict value is not equal to itself.") | |
51 | 45 | let m = valueOrErrorMessage(addressFromString(main), "bad main") | |
52 | 46 | let config = addressFromStringValue(valueOrErrorMessage(getString(m, "config"), "no config in main")) | |
53 | 47 | 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 | 48 | let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor") | |
57 | 49 | let maybeLocker = match getString(config, "lp_locker") { | |
58 | 50 | case lockerAdr: String => | |
67 | 59 | "" | |
68 | 60 | } | |
69 | 61 | ||
70 | - | let ebUser = asString(invoke(ebRewards, "adviseUser", [user], nil)) | |
71 | - | let stkUser = asString(invoke(staker, "adviseUser", [user], nil)) | |
72 | 62 | let reservesData = { | |
73 | 63 | func fold (totals,reserve) = { | |
74 | 64 | let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(reserve), "aTokenId"), "no aTokenId in reserve") | |
88 | 78 | ||
89 | 79 | $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 | 80 | } | |
91 | - | | |
81 | + | reservesData | |
92 | 82 | } | |
93 | 83 | ||
94 | 84 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func asInt (value) = match value { | |
5 | 5 | case int: Int => | |
6 | 6 | int | |
7 | 7 | case _ => | |
8 | 8 | throw("wrong type, expected: Int") | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func asString (value) = match value { | |
13 | 13 | case s: String => | |
14 | 14 | s | |
15 | 15 | case _ => | |
16 | 16 | throw("wrong type, expected: String") | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func advise (main) = { | |
21 | 21 | let m = valueOrErrorMessage(addressFromString(main), "bad main") | |
22 | 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 | 23 | let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_minter"), "no viresMinter")), "invalid viresMinter") | |
25 | 24 | let viresAssetId = valueOrErrorMessage(getString(viresMinter, "assetId"), "no viresAssetId") | |
26 | 25 | let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor") | |
27 | 26 | let oracle = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "oracle_address"), "no oracle in config")), "bad oracle") | |
28 | 27 | let viresPrice = asInt(invoke(oracle, "price", [viresAssetId], nil)) | |
29 | 28 | if ((viresPrice == viresPrice)) | |
30 | 29 | then { | |
31 | - | let | |
32 | - | if (( | |
30 | + | let general = ((((("height: " + toString(height)) + ", viresAssetId: ") + viresAssetId) + ", viresPrice: ") + toString(viresPrice)) | |
31 | + | if ((general == general)) | |
33 | 32 | 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 | - | } | |
33 | + | let reserves = asString(invoke(distributor, "advise", nil, nil)) | |
34 | + | if ((reserves == reserves)) | |
35 | + | then ((general + ", ") + reserves) | |
42 | 36 | else throw("Strict value is not equal to itself.") | |
43 | 37 | } | |
44 | 38 | else throw("Strict value is not equal to itself.") | |
45 | 39 | } | |
46 | 40 | else throw("Strict value is not equal to itself.") | |
47 | 41 | } | |
48 | 42 | ||
49 | 43 | ||
50 | 44 | func adviseUser (main,user) = { | |
51 | 45 | let m = valueOrErrorMessage(addressFromString(main), "bad main") | |
52 | 46 | let config = addressFromStringValue(valueOrErrorMessage(getString(m, "config"), "no config in main")) | |
53 | 47 | 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 | 48 | let distributor = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(config, "vires_distributor"), "no distributor in config")), "bad distributor") | |
57 | 49 | let maybeLocker = match getString(config, "lp_locker") { | |
58 | 50 | case lockerAdr: String => | |
59 | 51 | valueOrErrorMessage(addressFromString(lockerAdr), "bad lp_locker address in config") | |
60 | 52 | case _ => | |
61 | 53 | unit | |
62 | 54 | } | |
63 | 55 | func getLockerInfo (aTId) = match maybeLocker { | |
64 | 56 | case locker: Address => | |
65 | 57 | ("," + asString(invoke(locker, "adviseUser", [user, aTId], nil))) | |
66 | 58 | case _ => | |
67 | 59 | "" | |
68 | 60 | } | |
69 | 61 | ||
70 | - | let ebUser = asString(invoke(ebRewards, "adviseUser", [user], nil)) | |
71 | - | let stkUser = asString(invoke(staker, "adviseUser", [user], nil)) | |
72 | 62 | let reservesData = { | |
73 | 63 | func fold (totals,reserve) = { | |
74 | 64 | let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(reserve), "aTokenId"), "no aTokenId in reserve") | |
75 | 65 | (((((((totals + ", [ ") + "reserveAddress: ") + reserve) + ",") + asString(invoke(distributor, "adviseUser", [reserve, user], nil))) + getLockerInfo(aTokenId)) + " ]") | |
76 | 66 | } | |
77 | 67 | ||
78 | 68 | let $l = reserves | |
79 | 69 | let $s = size($l) | |
80 | 70 | let $acc0 = "" | |
81 | 71 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
82 | 72 | then $a | |
83 | 73 | else fold($a, $l[$i]) | |
84 | 74 | ||
85 | 75 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
86 | 76 | then $a | |
87 | 77 | else throw("List size exceeds 20") | |
88 | 78 | ||
89 | 79 | $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 | 80 | } | |
91 | - | | |
81 | + | reservesData | |
92 | 82 | } | |
93 | 83 | ||
94 | 84 | ||
95 | 85 |
github/deemru/w8io/6500d08 42.48 ms ◑