tx · JAqfr1F3Qc8rKbvrNFCBpPZR1k78KBfx6qEo7staTcQD 3P8dfxANHUt1ReR6EVj3Yvf7HxBhuxV9po3: -0.01000000 Waves 2022.03.09 18:24 [3021719] smart account 3P8dfxANHUt1ReR6EVj3Yvf7HxBhuxV9po3 > SELF 0.00000000 Waves
{ "type": 13, "id": "JAqfr1F3Qc8rKbvrNFCBpPZR1k78KBfx6qEo7staTcQD", "fee": 1000000, "feeAssetId": null, "timestamp": 1646839480143, "version": 1, "sender": "3P8dfxANHUt1ReR6EVj3Yvf7HxBhuxV9po3", "senderPublicKey": "Hiai8DZx1MZ3CvqfqgH2dwDCSyXNhsehPmHUVN66c8mc", "proofs": [ "3qUbGqHofXtdFgFV4mkYWBt2suRTbGkkhTuhVT55LPJcjVqincKqBHvP3e9s68ddjv9dzuuUEhgp7TvygeJrH69S" ], "script": "base64:AAIFAAAAAAAAAAIIAgAAAAkBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAIYXNTdHJpbmcAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcAAAAABFVTRE4CAAAALERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAAAAARFVVJOAgAAACxEVWsyWVR4aFJvQXFNSkx1czRHMmIzZlI4aE1IVmg2ZWl5Rng1cjI5VlI2dAAAAAAMd2F2ZXNMZWFzaW5nCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMCAAAADHdhdmVzTGVhc2luZwAAAAAAAAAAKAEAAAAXZ2V0SW50ZXJlc3RSZXNlcnZlUmF0aW8AAAABAAAAB2Fzc2V0SWQKAQAAAA5nZXREaXN0cmlidXRvcgAAAAEAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJZAIAAAAFV0FWRVMJAAQmAAAAAQIAAAAjM1A5TEs4MkRud2h2aHloTFhtVVNCR1h5dzZTZHp5Y0RFckUDCQAAAAAAAAIFAAAAB2Fzc2V0SWQFAAAABFVTRE4JAAQmAAAAAQIAAAAjM1BDY215S3hQYk51cjd6UVBnYWY5dWN6YjhRWXRFNzFqb3UDCQAAAAAAAAIFAAAAB2Fzc2V0SWQFAAAABEVVUk4JAAQmAAAAAQIAAAAjM1BMVkdZRmRCbndDQlFRbnc4b0VmSzZXVlFQZVRxNjJQaFMFAAAABHVuaXQEAAAAByRtYXRjaDAJAQAAAA5nZXREaXN0cmlidXRvcgAAAAEFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0FkZHJl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", "chainId": 87, "height": 3021719, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BujR5WrccLHfQ5Lc7vmgWtbpn2qYE8zqXojAz6bEJuB1 Next: 78dNfFiP8PFSpqiX3o3rhPM7ueqvi8NtXMdGfEkeojsF Diff:
Old | New | Differences | |
---|---|---|---|
41 | 41 | } | |
42 | 42 | ||
43 | 43 | ||
44 | - | func getReserveInfo (reserve) = { | |
44 | + | func getReserveInfo (reserve,oracle) = { | |
45 | 45 | let reserveAddr = addressFromStringValue(reserve) | |
46 | - | let oracleStore = "oracleAddress" | |
47 | - | let configAddressStore = "configAddress" | |
48 | 46 | let assetIdStore = "assetId" | |
49 | 47 | let aTokenIdStore = "aTokenId" | |
50 | - | let | |
51 | - | if (( | |
48 | + | let assetId = getStringValue(reserveAddr, assetIdStore) | |
49 | + | if ((assetId == assetId)) | |
52 | 50 | then { | |
53 | - | let | |
54 | - | if (( | |
51 | + | let aTokenId = getStringValue(reserveAddr, aTokenIdStore) | |
52 | + | if ((aTokenId == aTokenId)) | |
55 | 53 | then { | |
56 | - | let | |
57 | - | if (( | |
54 | + | let price = asInt(invoke(oracle, "price", [assetId], nil)) | |
55 | + | if ((price == price)) | |
58 | 56 | then { | |
59 | - | let price = asInt(invoke(addressFromStringValue(oracle), "price", [assetId], nil)) | |
60 | - | if ((price == price)) | |
61 | - | then { | |
62 | - | let data = asString(invoke(reserveAddr, "advise", nil, nil)) | |
63 | - | if ((data == data)) | |
64 | - | then (((((((("price: " + toString(price)) + ", assetId: ") + assetId) + ", aTokenId: ") + aTokenId) + getInterestReserveRatio(assetId)) + ", ") + data) | |
65 | - | else throw("Strict value is not equal to itself.") | |
66 | - | } | |
57 | + | let data = asString(invoke(reserveAddr, "advise", nil, nil)) | |
58 | + | if ((data == data)) | |
59 | + | then (((((((("price: " + toString(price)) + ", assetId: ") + assetId) + ", aTokenId: ") + aTokenId) + getInterestReserveRatio(assetId)) + ", ") + data) | |
67 | 60 | else throw("Strict value is not equal to itself.") | |
68 | 61 | } | |
69 | 62 | else throw("Strict value is not equal to itself.") | |
76 | 69 | ||
77 | 70 | func advise (main) = { | |
78 | 71 | let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main") | |
79 | - | let reservesStore = "reserves" | |
80 | - | let configStore = "config" | |
81 | - | let reserves = split(valueOrErrorMessage(getString(mainAddress, reservesStore), "no reserves"), "|") | |
82 | - | let configAddr = addressFromStringValue(valueOrErrorMessage(getString(mainAddress, configStore), "no config in 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(valueOrErrorMessage(getString(configAddr, "primary_reserves"), "eval: no primary reserves"), "|") | |
83 | 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)) | |
84 | 76 | let reserveData = { | |
85 | - | func fold (totals,reserve) = (((totals + ", [ ") + getReserveInfo(reserve)) + " ] ") | |
77 | + | func fold (totals,reserve) = (((totals + ", [ ") + getReserveInfo(reserve, oracle)) + " ] ") | |
86 | 78 | ||
87 | - | let $list27372764 = reserves | |
88 | - | let $size27372764 = size($list27372764) | |
89 | - | let $acc027372764 = "" | |
90 | - | if (($size27372764 == 0)) | |
91 | - | then $acc027372764 | |
92 | - | else { | |
93 | - | let $acc127372764 = fold($acc027372764, $list27372764[0]) | |
94 | - | if (($size27372764 == 1)) | |
95 | - | then $acc127372764 | |
96 | - | else { | |
97 | - | let $acc227372764 = fold($acc127372764, $list27372764[1]) | |
98 | - | if (($size27372764 == 2)) | |
99 | - | then $acc227372764 | |
100 | - | else { | |
101 | - | let $acc327372764 = fold($acc227372764, $list27372764[2]) | |
102 | - | if (($size27372764 == 3)) | |
103 | - | then $acc327372764 | |
104 | - | else { | |
105 | - | let $acc427372764 = fold($acc327372764, $list27372764[3]) | |
106 | - | if (($size27372764 == 4)) | |
107 | - | then $acc427372764 | |
108 | - | else { | |
109 | - | let $acc527372764 = fold($acc427372764, $list27372764[4]) | |
110 | - | if (($size27372764 == 5)) | |
111 | - | then $acc527372764 | |
112 | - | else { | |
113 | - | let $acc627372764 = fold($acc527372764, $list27372764[5]) | |
114 | - | if (($size27372764 == 6)) | |
115 | - | then $acc627372764 | |
116 | - | else { | |
117 | - | let $acc727372764 = fold($acc627372764, $list27372764[6]) | |
118 | - | if (($size27372764 == 7)) | |
119 | - | then $acc727372764 | |
120 | - | else { | |
121 | - | let $acc827372764 = fold($acc727372764, $list27372764[7]) | |
122 | - | throw("List size exceed 7") | |
123 | - | } | |
124 | - | } | |
125 | - | } | |
126 | - | } | |
127 | - | } | |
128 | - | } | |
129 | - | } | |
130 | - | } | |
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 7") | |
89 | + | ||
90 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) | |
131 | 91 | } | |
132 | 92 | (general + reserveData) | |
133 | 93 | } | |
135 | 95 | ||
136 | 96 | func adviseUser (main,user) = { | |
137 | 97 | let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main") | |
138 | - | let reservesStore = "reserves" | |
139 | - | let configStore = "config" | |
140 | - | let reserves = split(valueOrErrorMessage(getString(mainAddress, reservesStore), "no reserves"), "|") | |
98 | + | let reserves = split(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"), "|") | |
141 | 99 | let general = ((("height: " + toString(height)) + ", user: ") + user) | |
142 | 100 | func fold (totals,reserve) = { | |
143 | 101 | let userInfo = asString(invoke(addressFromStringValue(reserve), "adviseUser", [user], nil)) | |
146 | 104 | else throw("Strict value is not equal to itself.") | |
147 | 105 | } | |
148 | 106 | ||
149 | - | let $list33853417 = reserves | |
150 | - | let $size33853417 = size($list33853417) | |
151 | - | let $acc033853417 = general | |
152 | - | if (($size33853417 == 0)) | |
153 | - | then $acc033853417 | |
154 | - | else { | |
155 | - | let $acc133853417 = fold($acc033853417, $list33853417[0]) | |
156 | - | if (($size33853417 == 1)) | |
157 | - | then $acc133853417 | |
158 | - | else { | |
159 | - | let $acc233853417 = fold($acc133853417, $list33853417[1]) | |
160 | - | if (($size33853417 == 2)) | |
161 | - | then $acc233853417 | |
162 | - | else { | |
163 | - | let $acc333853417 = fold($acc233853417, $list33853417[2]) | |
164 | - | if (($size33853417 == 3)) | |
165 | - | then $acc333853417 | |
166 | - | else { | |
167 | - | let $acc433853417 = fold($acc333853417, $list33853417[3]) | |
168 | - | if (($size33853417 == 4)) | |
169 | - | then $acc433853417 | |
170 | - | else { | |
171 | - | let $acc533853417 = fold($acc433853417, $list33853417[4]) | |
172 | - | if (($size33853417 == 5)) | |
173 | - | then $acc533853417 | |
174 | - | else { | |
175 | - | let $acc633853417 = fold($acc533853417, $list33853417[5]) | |
176 | - | if (($size33853417 == 6)) | |
177 | - | then $acc633853417 | |
178 | - | else { | |
179 | - | let $acc733853417 = fold($acc633853417, $list33853417[6]) | |
180 | - | if (($size33853417 == 7)) | |
181 | - | then $acc733853417 | |
182 | - | else { | |
183 | - | let $acc833853417 = fold($acc733853417, $list33853417[7]) | |
184 | - | throw("List size exceed 7") | |
185 | - | } | |
186 | - | } | |
187 | - | } | |
188 | - | } | |
189 | - | } | |
190 | - | } | |
191 | - | } | |
192 | - | } | |
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 7") | |
117 | + | ||
118 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) | |
193 | 119 | } | |
194 | 120 | ||
195 | 121 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
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 | let USDN = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" | |
21 | 21 | ||
22 | 22 | let EURN = "DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t" | |
23 | 23 | ||
24 | 24 | let wavesLeasing = valueOrElse(getInteger(this, "wavesLeasing"), 40) | |
25 | 25 | ||
26 | 26 | func getInterestReserveRatio (assetId) = { | |
27 | 27 | func getDistributor (assetId) = if ((assetId == "WAVES")) | |
28 | 28 | then addressFromString("3P9LK82DnwhvhyhLXmUSBGXyw6SdzycDErE") | |
29 | 29 | else if ((assetId == USDN)) | |
30 | 30 | then addressFromString("3PCcmyKxPbNur7zQPgaf9uczb8QYtE71jou") | |
31 | 31 | else if ((assetId == EURN)) | |
32 | 32 | then addressFromString("3PLVGYFdBnwCBQQnw8oEfK6WVQPeTq62PhS") | |
33 | 33 | else unit | |
34 | 34 | ||
35 | 35 | match getDistributor(assetId) { | |
36 | 36 | case d: Address => | |
37 | 37 | (", interestReserveRatio: " + toString(valueOrElse(getInteger(d, "ratio"), 0))) | |
38 | 38 | case _ => | |
39 | 39 | "" | |
40 | 40 | } | |
41 | 41 | } | |
42 | 42 | ||
43 | 43 | ||
44 | - | func getReserveInfo (reserve) = { | |
44 | + | func getReserveInfo (reserve,oracle) = { | |
45 | 45 | let reserveAddr = addressFromStringValue(reserve) | |
46 | - | let oracleStore = "oracleAddress" | |
47 | - | let configAddressStore = "configAddress" | |
48 | 46 | let assetIdStore = "assetId" | |
49 | 47 | let aTokenIdStore = "aTokenId" | |
50 | - | let | |
51 | - | if (( | |
48 | + | let assetId = getStringValue(reserveAddr, assetIdStore) | |
49 | + | if ((assetId == assetId)) | |
52 | 50 | then { | |
53 | - | let | |
54 | - | if (( | |
51 | + | let aTokenId = getStringValue(reserveAddr, aTokenIdStore) | |
52 | + | if ((aTokenId == aTokenId)) | |
55 | 53 | then { | |
56 | - | let | |
57 | - | if (( | |
54 | + | let price = asInt(invoke(oracle, "price", [assetId], nil)) | |
55 | + | if ((price == price)) | |
58 | 56 | then { | |
59 | - | let price = asInt(invoke(addressFromStringValue(oracle), "price", [assetId], nil)) | |
60 | - | if ((price == price)) | |
61 | - | then { | |
62 | - | let data = asString(invoke(reserveAddr, "advise", nil, nil)) | |
63 | - | if ((data == data)) | |
64 | - | then (((((((("price: " + toString(price)) + ", assetId: ") + assetId) + ", aTokenId: ") + aTokenId) + getInterestReserveRatio(assetId)) + ", ") + data) | |
65 | - | else throw("Strict value is not equal to itself.") | |
66 | - | } | |
57 | + | let data = asString(invoke(reserveAddr, "advise", nil, nil)) | |
58 | + | if ((data == data)) | |
59 | + | then (((((((("price: " + toString(price)) + ", assetId: ") + assetId) + ", aTokenId: ") + aTokenId) + getInterestReserveRatio(assetId)) + ", ") + data) | |
67 | 60 | else throw("Strict value is not equal to itself.") | |
68 | 61 | } | |
69 | 62 | else throw("Strict value is not equal to itself.") | |
70 | 63 | } | |
71 | 64 | else throw("Strict value is not equal to itself.") | |
72 | 65 | } | |
73 | 66 | else throw("Strict value is not equal to itself.") | |
74 | 67 | } | |
75 | 68 | ||
76 | 69 | ||
77 | 70 | func advise (main) = { | |
78 | 71 | let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main") | |
79 | - | let reservesStore = "reserves" | |
80 | - | let configStore = "config" | |
81 | - | let reserves = split(valueOrErrorMessage(getString(mainAddress, reservesStore), "no reserves"), "|") | |
82 | - | let configAddr = addressFromStringValue(valueOrErrorMessage(getString(mainAddress, configStore), "no config in 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(valueOrErrorMessage(getString(configAddr, "primary_reserves"), "eval: no primary reserves"), "|") | |
83 | 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)) | |
84 | 76 | let reserveData = { | |
85 | - | func fold (totals,reserve) = (((totals + ", [ ") + getReserveInfo(reserve)) + " ] ") | |
77 | + | func fold (totals,reserve) = (((totals + ", [ ") + getReserveInfo(reserve, oracle)) + " ] ") | |
86 | 78 | ||
87 | - | let $list27372764 = reserves | |
88 | - | let $size27372764 = size($list27372764) | |
89 | - | let $acc027372764 = "" | |
90 | - | if (($size27372764 == 0)) | |
91 | - | then $acc027372764 | |
92 | - | else { | |
93 | - | let $acc127372764 = fold($acc027372764, $list27372764[0]) | |
94 | - | if (($size27372764 == 1)) | |
95 | - | then $acc127372764 | |
96 | - | else { | |
97 | - | let $acc227372764 = fold($acc127372764, $list27372764[1]) | |
98 | - | if (($size27372764 == 2)) | |
99 | - | then $acc227372764 | |
100 | - | else { | |
101 | - | let $acc327372764 = fold($acc227372764, $list27372764[2]) | |
102 | - | if (($size27372764 == 3)) | |
103 | - | then $acc327372764 | |
104 | - | else { | |
105 | - | let $acc427372764 = fold($acc327372764, $list27372764[3]) | |
106 | - | if (($size27372764 == 4)) | |
107 | - | then $acc427372764 | |
108 | - | else { | |
109 | - | let $acc527372764 = fold($acc427372764, $list27372764[4]) | |
110 | - | if (($size27372764 == 5)) | |
111 | - | then $acc527372764 | |
112 | - | else { | |
113 | - | let $acc627372764 = fold($acc527372764, $list27372764[5]) | |
114 | - | if (($size27372764 == 6)) | |
115 | - | then $acc627372764 | |
116 | - | else { | |
117 | - | let $acc727372764 = fold($acc627372764, $list27372764[6]) | |
118 | - | if (($size27372764 == 7)) | |
119 | - | then $acc727372764 | |
120 | - | else { | |
121 | - | let $acc827372764 = fold($acc727372764, $list27372764[7]) | |
122 | - | throw("List size exceed 7") | |
123 | - | } | |
124 | - | } | |
125 | - | } | |
126 | - | } | |
127 | - | } | |
128 | - | } | |
129 | - | } | |
130 | - | } | |
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 7") | |
89 | + | ||
90 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) | |
131 | 91 | } | |
132 | 92 | (general + reserveData) | |
133 | 93 | } | |
134 | 94 | ||
135 | 95 | ||
136 | 96 | func adviseUser (main,user) = { | |
137 | 97 | let mainAddress = valueOrErrorMessage(addressFromString(main), "bad main") | |
138 | - | let reservesStore = "reserves" | |
139 | - | let configStore = "config" | |
140 | - | let reserves = split(valueOrErrorMessage(getString(mainAddress, reservesStore), "no reserves"), "|") | |
98 | + | let reserves = split(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"), "|") | |
141 | 99 | let general = ((("height: " + toString(height)) + ", user: ") + user) | |
142 | 100 | func fold (totals,reserve) = { | |
143 | 101 | let userInfo = asString(invoke(addressFromStringValue(reserve), "adviseUser", [user], nil)) | |
144 | 102 | if ((userInfo == userInfo)) | |
145 | 103 | then (((totals + ", [ ") + userInfo) + " ] ") | |
146 | 104 | else throw("Strict value is not equal to itself.") | |
147 | 105 | } | |
148 | 106 | ||
149 | - | let $list33853417 = reserves | |
150 | - | let $size33853417 = size($list33853417) | |
151 | - | let $acc033853417 = general | |
152 | - | if (($size33853417 == 0)) | |
153 | - | then $acc033853417 | |
154 | - | else { | |
155 | - | let $acc133853417 = fold($acc033853417, $list33853417[0]) | |
156 | - | if (($size33853417 == 1)) | |
157 | - | then $acc133853417 | |
158 | - | else { | |
159 | - | let $acc233853417 = fold($acc133853417, $list33853417[1]) | |
160 | - | if (($size33853417 == 2)) | |
161 | - | then $acc233853417 | |
162 | - | else { | |
163 | - | let $acc333853417 = fold($acc233853417, $list33853417[2]) | |
164 | - | if (($size33853417 == 3)) | |
165 | - | then $acc333853417 | |
166 | - | else { | |
167 | - | let $acc433853417 = fold($acc333853417, $list33853417[3]) | |
168 | - | if (($size33853417 == 4)) | |
169 | - | then $acc433853417 | |
170 | - | else { | |
171 | - | let $acc533853417 = fold($acc433853417, $list33853417[4]) | |
172 | - | if (($size33853417 == 5)) | |
173 | - | then $acc533853417 | |
174 | - | else { | |
175 | - | let $acc633853417 = fold($acc533853417, $list33853417[5]) | |
176 | - | if (($size33853417 == 6)) | |
177 | - | then $acc633853417 | |
178 | - | else { | |
179 | - | let $acc733853417 = fold($acc633853417, $list33853417[6]) | |
180 | - | if (($size33853417 == 7)) | |
181 | - | then $acc733853417 | |
182 | - | else { | |
183 | - | let $acc833853417 = fold($acc733853417, $list33853417[7]) | |
184 | - | throw("List size exceed 7") | |
185 | - | } | |
186 | - | } | |
187 | - | } | |
188 | - | } | |
189 | - | } | |
190 | - | } | |
191 | - | } | |
192 | - | } | |
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 7") | |
117 | + | ||
118 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) | |
193 | 119 | } | |
194 | 120 | ||
195 | 121 | ||
196 | 122 |
github/deemru/w8io/873ac7e 39.68 ms ◑![]()