tx · AhnVfMR7YmnBDmD9wsf9mr4MvaPZDNhUxfcyF6ZeZM8i
3P49faT5341AZsQJzbp6KEhh8Rz9h2Vq92q: -0.01400000 Waves
2022.03.14 21:50 [3029143] smart account 3P49faT5341AZsQJzbp6KEhh8Rz9h2Vq92q > SELF 0.00000000 Waves
{
"type": 13,
"id": "AhnVfMR7YmnBDmD9wsf9mr4MvaPZDNhUxfcyF6ZeZM8i",
"fee": 1400000,
"feeAssetId": null,
"timestamp": 1647283857348,
"version": 2,
"chainId": 87,
"sender": "3P49faT5341AZsQJzbp6KEhh8Rz9h2Vq92q",
"senderPublicKey": "A7jFsmc1umRUgXzKYfq57iAbKjNw7PcqXjKNSCroApnu",
"proofs": [
"5iJiSkzBZzdjmJJow4D99c97wVW3evZTJuMWiatq2aGvkSgNYccPeMMoiBrcjz3rMiDtL9CtYuppF4oksVtK6qgi"
],
"script": "base64:AAIFAAAAAAAAAAcIAhIDCgEIAAAADQAAAAALZmFjdG9yc0Jhc2UAAAAAAAAAA+gBAAAADGZyYWN0aW9uQ2VpbAAAAAMAAAAFdmFsdWUAAAAJbnVtZXJhdG9yAAAAC2Rlbm9taW5hdG9yBAAAAARjYW5kCQAAawAAAAMFAAAABXZhbHVlBQAAAAludW1lcmF0b3IFAAAAC2Rlbm9taW5hdG9yBAAAAAFEAAAAAAC1BPMzBAAAAAVleGFjdAkAAAAAAAACCQAAagAAAAIJAABoAAAAAgkAAGoAAAACBQAAAARjYW5kBQAAAAFECQAAagAAAAIFAAAAC2Rlbm9taW5hdG9yBQAAAAFEBQAAAAFECQAAagAAAAIJAABoAAAAAgkAAGoAAAACBQAAAAV2YWx1ZQUAAAABRAkAAGoAAAACBQAAAAludW1lcmF0b3IFAAAAAUQFAAAAAUQDBQAAAAVleGFjdAUAAAAEY2FuZAkAAGQAAAACBQAAAARjYW5kAAAAAAAAAAABAQAAABFhc1VzZXJCYWxhbmNlRGF0YQAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAACIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAAAAAF4BQAAAAckbWF0Y2gwBQAAAAF4BAAAAAF0BQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAFWV4cGVjdGVkIGludDUmYm9vbGVhbgAAAAANcmVzZXJ2ZXNTdG9yZQIAAAAQcHJpbWFyeV9yZXNlcnZlcwAAAAAMYXNzZXRJZFN0b3JlAgAAAAdhc3NldElkAAAAAAZjb25maWcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNQMnJKR2ZiNU1iZWl2Wk5TcWRWbXNEMVkyTXo4eTZKcjNaAAAAAAtyZXNlcnZlc1N0cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABmNvbmZpZwUAAAANcmVzZXJ2ZXNTdG9yZQIAAAAWbm8gcmVzZXJ2ZXMgcmVnaXN0ZXJlZAAAAAAIcmVzZXJ2ZXMJAAS1AAAAAgUAAAALcmVzZXJ2ZXNTdHICAAAAAXwAAAAAFGFjY291bnRIZWFsdGhPdmVybGFwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGY29uZmlnAgAAABZhY2NvdW50X2hlYWx0aF9vdmVybGFwAgAAABlubyBhY2NvdW50X2hlYWx0aF9vdmVybGFwAQAAABBhc3NldElkT2ZSZXNlcnZlAAAAAQAAAAdyZXNlcnZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMYXNzZXRJZFN0b3JlAgAAABVubyBhc3NldElkIGluIHJlc2VydmUBAAAAEGNvbGxhdGVyYWxGYWN0b3IAAAABAAAAB3Jlc2VydmUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZjb25maWcJAAEsAAAAAgkBAAAAEGFzc2V0SWRPZlJlc2VydmUAAAABBQAAAAdyZXNlcnZlAgAAABFfQ29sbGF0ZXJhbEZhY3RvcgIAAAAdbm8gQ29sbGF0ZXJhbEZhY3RvciBpbiBjb25maWcBAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkAAAAAQAAAAdyZXNlcnZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGY29uZmlnCQABLAAAAAIJAQAAABBhc3NldElkT2ZSZXNlcnZlAAAAAQUAAAAHcmVzZXJ2ZQIAAAAVX0xpcXVpZGF0aW9uVGhyZXNob2xkAgAAACFubyBMaXF1aWRhdGlvblRocmVzaG9sZCBpbiBjb25maWcBAAAAC3VzZXJCYWxhbmNlAAAAAgAAAAdyZXNlcnZlAAAABHVzZXIJAQAAABFhc1VzZXJCYWxhbmNlRGF0YQAAAAEJAAP8AAAABAUAAAAHcmVzZXJ2ZQIAAAALdXNlckJhbGFuY2UJAARMAAAAAgUAAAAEdXNlcgUAAAADbmlsBQAAAANuaWwAAAABAAAAAWkBAAAACXVzZXJQb3dlcgAAAAEAAAAEdXNlcgoBAAAABGZvbGQAAAACAAAABnRvdGFscwAAAAFyBAAAAAskdDAxNTkxMTYyMAUAAAAGdG90YWxzBAAAAAZ0b3RhbEQIBQAAAAskdDAxNTkxMTYyMAAAAAJfMQQAAAAGdG90YWxCCAUAAAALJHQwMTU5MTE2MjAAAAACXzIEAAAAB3Jlc2VydmUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAFyAgAAABNyZXNlcnZlIGJhZCBhZGRyZXNzBAAAAAJjZgkBAAAAEGNvbGxhdGVyYWxGYWN0b3IAAAABBQAAAAdyZXNlcnZlBAAAAAJsdAkBAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkAAAAAQUAAAAHcmVzZXJ2ZQQAAAALJHQwMTc5MTE4NzkJAQAAAAt1c2VyQmFsYW5jZQAAAAIFAAAAB3Jlc2VydmUFAAAABHVzZXIEAAAABXRva2VuCAUAAAALJHQwMTc5MTE4NzkAAAACXzEEAAAABWFzc2V0CAUAAAALJHQwMTc5MTE4NzkAAAACXzIEAAAACmRlcG9zaXRVc2QIBQAAAAskdDAxNzkxMTg3OQAAAAJfMwQAAAAEZGVidAgFAAAACyR0MDE3OTExODc5AAAAAl80BAAAAAdkZWJ0VXNkCAUAAAALJHQwMTc5MTE4NzkAAAACXzUEAAAADGFzQ29sbGF0ZXJhbAgFAAAACyR0MDE3OTExODc5AAAAAl82BAAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAwUAAAAMYXNDb2xsYXRlcmFsBQAAAApkZXBvc2l0VXNkAAAAAAAAAAAABAAAAApvdmVybGFwVXNkCQABlwAAAAEJAARMAAAAAgUAAAAHZGVidFVzZAkABEwAAAACBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkBQAAAANuaWwEAAAADW92ZXJsYXBDaGFyZ2UJAQAAAAxmcmFjdGlvbkNlaWwAAAADBQAAAApvdmVybGFwVXNkBQAAABRhY2NvdW50SGVhbHRoT3ZlcmxhcAUAAAALZmFjdG9yc0Jhc2UDCQAAZgAAAAIFAAAAB2RlYnRVc2QFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QJAAUUAAAAAgUAAAAGdG90YWxECQAAZAAAAAIJAABkAAAAAgUAAAAGdG90YWxCCQAAawAAAAMJAABlAAAAAgUAAAAHZGVidFVzZAUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAALZmFjdG9yc0Jhc2UFAAAAAmx0BQAAAA1vdmVybGFwQ2hhcmdlCQAFFAAAAAIJAABkAAAAAgUAAAAGdG90YWxECQAAawAAAAMJAABlAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAAHZGVidFVzZAUAAAACY2YFAAAAC2ZhY3RvcnNCYXNlCQAAZAAAAAIFAAAABnRvdGFsQgUAAAANb3ZlcmxhcENoYXJnZQkABRQAAAACBQAAAANuaWwKAAAAAAIkbAUAAAAIcmVzZXJ2ZXMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwCQAFFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAARmb2xkAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAMFx9Fk=",
"height": 3029143,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: 2vUs2sr7FDu1NM9zoqmdF3xovD4uPb2rhTufBxcf1nfB
Next: none
Diff:
Old | New | | Differences |
---|
21 | 21 | | } |
---|
22 | 22 | | |
---|
23 | 23 | | |
---|
24 | | - | let reservesStore = "reserves" |
---|
25 | | - | |
---|
26 | | - | let configStore = "config" |
---|
| 24 | + | let reservesStore = "primary_reserves" |
---|
27 | 25 | | |
---|
28 | 26 | | let assetIdStore = "assetId" |
---|
29 | 27 | | |
---|
30 | | - | let viresMain = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT") |
---|
| 28 | + | let config = addressFromStringValue("3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z") |
---|
31 | 29 | | |
---|
32 | | - | let config = addressFromStringValue(getStringValue(viresMain, configStore)) |
---|
33 | | - | |
---|
34 | | - | let reservesStr = valueOrErrorMessage(getString(viresMain, reservesStore), "no reserves registered") |
---|
| 30 | + | let reservesStr = valueOrErrorMessage(getString(config, reservesStore), "no reserves registered") |
---|
35 | 31 | | |
---|
36 | 32 | | let reserves = split(reservesStr, "|") |
---|
37 | 33 | | |
---|
|
52 | 48 | | @Callable(i) |
---|
53 | 49 | | func userPower (user) = { |
---|
54 | 50 | | func fold (totals,r) = { |
---|
55 | | - | let $t016911720 = totals |
---|
56 | | - | let totalD = $t016911720._1 |
---|
57 | | - | let totalB = $t016911720._2 |
---|
| 51 | + | let $t015911620 = totals |
---|
| 52 | + | let totalD = $t015911620._1 |
---|
| 53 | + | let totalB = $t015911620._2 |
---|
58 | 54 | | let reserve = valueOrErrorMessage(addressFromString(r), "reserve bad address") |
---|
59 | 55 | | let cf = collateralFactor(reserve) |
---|
60 | 56 | | let lt = liquidationThreshold(reserve) |
---|
61 | | - | let $t018911979 = userBalance(reserve, user) |
---|
62 | | - | let token = $t018911979._1 |
---|
63 | | - | let asset = $t018911979._2 |
---|
64 | | - | let depositUsd = $t018911979._3 |
---|
65 | | - | let debt = $t018911979._4 |
---|
66 | | - | let debtUsd = $t018911979._5 |
---|
67 | | - | let asCollateral = $t018911979._6 |
---|
| 57 | + | let $t017911879 = userBalance(reserve, user) |
---|
| 58 | + | let token = $t017911879._1 |
---|
| 59 | + | let asset = $t017911879._2 |
---|
| 60 | + | let depositUsd = $t017911879._3 |
---|
| 61 | + | let debt = $t017911879._4 |
---|
| 62 | + | let debtUsd = $t017911879._5 |
---|
| 63 | + | let asCollateral = $t017911879._6 |
---|
68 | 64 | | let effectiveDepositUsd = if (asCollateral) |
---|
69 | 65 | | then depositUsd |
---|
70 | 66 | | else 0 |
---|
|
79 | 75 | | let $l = reserves |
---|
80 | 76 | | let $s = size($l) |
---|
81 | 77 | | let $acc0 = $Tuple2(0, 0) |
---|
82 | | - | func 1 ($a,$i) = if (($i >= $s)) |
---|
| 78 | + | func $f0_1 ($a,$i) = if (($i >= $s)) |
---|
83 | 79 | | then $a |
---|
84 | 80 | | else fold($a, $l[$i]) |
---|
85 | 81 | | |
---|
86 | | - | func 2 ($a,$i) = if (($i >= $s)) |
---|
| 82 | + | func $f0_2 ($a,$i) = if (($i >= $s)) |
---|
87 | 83 | | then $a |
---|
88 | 84 | | else throw("List size exceeds 7") |
---|
89 | 85 | | |
---|
90 | | - | 2(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) |
---|
| 86 | + | $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) |
---|
91 | 87 | | }) |
---|
92 | 88 | | } |
---|
93 | 89 | | |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 5 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let factorsBase = 1000 |
---|
5 | 5 | | |
---|
6 | 6 | | func fractionCeil (value,numerator,denominator) = { |
---|
7 | 7 | | let cand = fraction(value, numerator, denominator) |
---|
8 | 8 | | let D = 3037000499 |
---|
9 | 9 | | let exact = ((((cand % D) * (denominator % D)) % D) == (((value % D) * (numerator % D)) % D)) |
---|
10 | 10 | | if (exact) |
---|
11 | 11 | | then cand |
---|
12 | 12 | | else (cand + 1) |
---|
13 | 13 | | } |
---|
14 | 14 | | |
---|
15 | 15 | | |
---|
16 | 16 | | func asUserBalanceData (value) = match value { |
---|
17 | 17 | | case x: (Int, Int, Int, Int, Int, Boolean) => |
---|
18 | 18 | | x |
---|
19 | 19 | | case t => |
---|
20 | 20 | | throw("expected int5&boolean") |
---|
21 | 21 | | } |
---|
22 | 22 | | |
---|
23 | 23 | | |
---|
24 | | - | let reservesStore = "reserves" |
---|
25 | | - | |
---|
26 | | - | let configStore = "config" |
---|
| 24 | + | let reservesStore = "primary_reserves" |
---|
27 | 25 | | |
---|
28 | 26 | | let assetIdStore = "assetId" |
---|
29 | 27 | | |
---|
30 | | - | let viresMain = addressFromStringValue("3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT") |
---|
| 28 | + | let config = addressFromStringValue("3P2rJGfb5MbeivZNSqdVmsD1Y2Mz8y6Jr3Z") |
---|
31 | 29 | | |
---|
32 | | - | let config = addressFromStringValue(getStringValue(viresMain, configStore)) |
---|
33 | | - | |
---|
34 | | - | let reservesStr = valueOrErrorMessage(getString(viresMain, reservesStore), "no reserves registered") |
---|
| 30 | + | let reservesStr = valueOrErrorMessage(getString(config, reservesStore), "no reserves registered") |
---|
35 | 31 | | |
---|
36 | 32 | | let reserves = split(reservesStr, "|") |
---|
37 | 33 | | |
---|
38 | 34 | | let accountHealthOverlap = valueOrErrorMessage(getInteger(config, "account_health_overlap"), "no account_health_overlap") |
---|
39 | 35 | | |
---|
40 | 36 | | func assetIdOfReserve (reserve) = valueOrErrorMessage(getString(reserve, assetIdStore), "no assetId in reserve") |
---|
41 | 37 | | |
---|
42 | 38 | | |
---|
43 | 39 | | func collateralFactor (reserve) = valueOrErrorMessage(getInteger(config, (assetIdOfReserve(reserve) + "_CollateralFactor")), "no CollateralFactor in config") |
---|
44 | 40 | | |
---|
45 | 41 | | |
---|
46 | 42 | | func liquidationThreshold (reserve) = valueOrErrorMessage(getInteger(config, (assetIdOfReserve(reserve) + "_LiquidationThreshold")), "no LiquidationThreshold in config") |
---|
47 | 43 | | |
---|
48 | 44 | | |
---|
49 | 45 | | func userBalance (reserve,user) = asUserBalanceData(invoke(reserve, "userBalance", [user], nil)) |
---|
50 | 46 | | |
---|
51 | 47 | | |
---|
52 | 48 | | @Callable(i) |
---|
53 | 49 | | func userPower (user) = { |
---|
54 | 50 | | func fold (totals,r) = { |
---|
55 | | - | let $t016911720 = totals |
---|
56 | | - | let totalD = $t016911720._1 |
---|
57 | | - | let totalB = $t016911720._2 |
---|
| 51 | + | let $t015911620 = totals |
---|
| 52 | + | let totalD = $t015911620._1 |
---|
| 53 | + | let totalB = $t015911620._2 |
---|
58 | 54 | | let reserve = valueOrErrorMessage(addressFromString(r), "reserve bad address") |
---|
59 | 55 | | let cf = collateralFactor(reserve) |
---|
60 | 56 | | let lt = liquidationThreshold(reserve) |
---|
61 | | - | let $t018911979 = userBalance(reserve, user) |
---|
62 | | - | let token = $t018911979._1 |
---|
63 | | - | let asset = $t018911979._2 |
---|
64 | | - | let depositUsd = $t018911979._3 |
---|
65 | | - | let debt = $t018911979._4 |
---|
66 | | - | let debtUsd = $t018911979._5 |
---|
67 | | - | let asCollateral = $t018911979._6 |
---|
| 57 | + | let $t017911879 = userBalance(reserve, user) |
---|
| 58 | + | let token = $t017911879._1 |
---|
| 59 | + | let asset = $t017911879._2 |
---|
| 60 | + | let depositUsd = $t017911879._3 |
---|
| 61 | + | let debt = $t017911879._4 |
---|
| 62 | + | let debtUsd = $t017911879._5 |
---|
| 63 | + | let asCollateral = $t017911879._6 |
---|
68 | 64 | | let effectiveDepositUsd = if (asCollateral) |
---|
69 | 65 | | then depositUsd |
---|
70 | 66 | | else 0 |
---|
71 | 67 | | let overlapUsd = min([debtUsd, effectiveDepositUsd]) |
---|
72 | 68 | | let overlapCharge = fractionCeil(overlapUsd, accountHealthOverlap, factorsBase) |
---|
73 | 69 | | if ((debtUsd > effectiveDepositUsd)) |
---|
74 | 70 | | then $Tuple2(totalD, ((totalB + fraction((debtUsd - effectiveDepositUsd), factorsBase, lt)) + overlapCharge)) |
---|
75 | 71 | | else $Tuple2((totalD + fraction((effectiveDepositUsd - debtUsd), cf, factorsBase)), (totalB + overlapCharge)) |
---|
76 | 72 | | } |
---|
77 | 73 | | |
---|
78 | 74 | | $Tuple2(nil, { |
---|
79 | 75 | | let $l = reserves |
---|
80 | 76 | | let $s = size($l) |
---|
81 | 77 | | let $acc0 = $Tuple2(0, 0) |
---|
82 | | - | func 1 ($a,$i) = if (($i >= $s)) |
---|
| 78 | + | func $f0_1 ($a,$i) = if (($i >= $s)) |
---|
83 | 79 | | then $a |
---|
84 | 80 | | else fold($a, $l[$i]) |
---|
85 | 81 | | |
---|
86 | | - | func 2 ($a,$i) = if (($i >= $s)) |
---|
| 82 | + | func $f0_2 ($a,$i) = if (($i >= $s)) |
---|
87 | 83 | | then $a |
---|
88 | 84 | | else throw("List size exceeds 7") |
---|
89 | 85 | | |
---|
90 | | - | 2(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) |
---|
| 86 | + | $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) |
---|
91 | 87 | | }) |
---|
92 | 88 | | } |
---|
93 | 89 | | |
---|
94 | 90 | | |
---|