tx · DwxXKDAM311dFP9R14zWZYnhFX6VN1cLQq7m63Z13kjh

3PNze6jf5ZvScSj1cmiq34Jby825MV49gR3:  -0.01000000 Waves

2021.07.12 13:42 [2675064] smart account 3PNze6jf5ZvScSj1cmiq34Jby825MV49gR3 > SELF 0.00000000 Waves

{ "type": 13, "id": "DwxXKDAM311dFP9R14zWZYnhFX6VN1cLQq7m63Z13kjh", "fee": 1000000, "feeAssetId": null, "timestamp": 1626086557838, "version": 1, "sender": "3PNze6jf5ZvScSj1cmiq34Jby825MV49gR3", "senderPublicKey": "2LTH2FED81uaJjvBKDdpcdgE78Xv26Fs33Yc3Kmz8dih", "proofs": [ "5PPQQkZYCcG3v3yekTcfgdCEQgboYJkmYRK2UEU93jmqGMd4edbjiXupfRVJPwhb11bs5zMp9BUdQScvKy7YjNyX" ], "script": "base64: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ZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzAgAAAAlhc3NldGlkdjICAAAADG5vIGFzc2V0aWR2MgQAAAARbGFzdFByaWNlSW5kZXhLZXkJAAEsAAAAAgIAAAASJXMlc19faWR4Q3VycmVudF9fBQAAAAlhc3NldGlkdjIEAAAAEXNldHRsZWRQcmljZUluZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAAHUkVCSURYSwIAAAAXbm8gbGFzdCByZWJhbGFuY2UgcHJpY2UEAAAAEG9yYWNsZVByaWNlSW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUFAAAAEWxhc3RQcmljZUluZGV4S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACBwYWNld3JhcHBlcjogYmFkIG9yYWNsZSBkYXRhIGF0IAkABCUAAAABBQAAAAZvcmFjbGUCAAAAEDogbm8gaW50ZWdlciBhdCAFAAAAEWxhc3RQcmljZUluZGV4S2V5BAAAABFyZXF1ZXN0UHJpY2VJbmRleAQAAAALaGVhZFBvaW50ZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAAFSEVBREsCAAAAAAMJAAAAAAAAAgUAAAALaGVhZFBvaW50ZXICAAAAAAUAAAADTUFYBAAAAARkYXRhCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAB2FkZHJlc3MFAAAAC2hlYWRQb2ludGVyAgAAAAF8BAAAAANycGkJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAARkYXRhAAAAAAAAAAADBQAAAANycGkEAAAAFmhhc1Byb2Nlc3NhYmxlUmVxdWVzdHMJAABnAAAAAgUAAAAQb3JhY2xlUHJpY2VJbmRleAUAAAARcmVxdWVzdFByaWNlSW5kZXgJAAUXAAAABQUAAAAHYWRkcmVzcwUAAAARc2V0dGxlZFByaWNlSW5kZXgFAAAAEG9yYWNsZVByaWNlSW5kZXgFAAAAEXJlcXVlc3RQcmljZUluZGV4BQAAABZoYXNQcm9jZXNzYWJsZVJlcXVlc3RzAQAAAAdkaWZmQWJzAAAAAgAAAAJhMQAAAAJhMgQAAAAEZGlmZgkAAGUAAAACBQAAAAJhMQUAAAACYTIDCQAAZgAAAAIFAAAABGRpZmYAAAAAAAAAAAAFAAAABGRpZmYJAABlAAAAAgAAAAAAAAAAAAUAAAAEZGlmZgEAAAAJcG9vbFN0YXRlAAAAAQAAAAdhZGRyZXNzBAAAAARCVUxMCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAdhZGRyZXNzBQAAAAVCVUxMSwQAAAAEQkVBUgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAHYWRkcmVzcwUAAAAFQkVBUksEAAAACHBvb2xNYWluCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAdhZGRyZXNzBQAAAAlQT09MVVNETksEAAAABnBvb2xVcAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAHYWRkcmVzcwUAAAAHUE9PTFVQSwQAAAAHcG9vbER3bgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAHYWRkcmVzcwUAAAAIUE9PTERXTksEAAAAB2J1bGxDb2wJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAB2FkZHJlc3MFAAAACEJVTExDT0xLBAAAAAdiZWFyQ29sCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAdhZGRyZXNzBQAAAAhCRUFSQ09MSwQAAAAIYnVsbENpcmMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAB2FkZHJlc3MFAAAACUJVTExDSVJDSwQAAAAIYmVhckNpcmMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAB2FkZHJlc3MFAAAACUJFQVJDSVJDSwQAAAAQcG9vbEJ1bGxFeHBvc3VyZQkAAGsAAAADBQAAAAdidWxsQ29sBQAAAAZwb29sVXAFAAAACGJ1bGxDaXJjBAAAABBwb29sQmVhckV4cG9zdXJlCQAAawAAAAMFAAAAB2JlYXJDb2wFAAAAB3Bvb2xEd24FAAAACGJlYXJDaXJjBAAAAAt1c2VyRGlmZkFicwkBAAAAB2RpZmZBYnMAAAACCQAAZQAAAAIFAAAAB2J1bGxDb2wFAAAAEHBvb2xCdWxsRXhwb3N1cmUJAABlAAAAAgUAAAAHYmVhckNvbAUAAAAQcG9vbEJlYXJFeHBvc3VyZQQAAAAJcG9vbFZhbHVlCQAAZAAAAAIJAABkAAAAAgUAAAAIcG9vbE1haW4FAAAAEHBvb2xCdWxsRXhwb3N1cmUFAAAAEHBvb2xCZWFyRXhwb3N1cmUKAQAAAAhtYXhJc3N1ZQAAAAEAAAAHdG9rZW5JZAQAAAAOcG9vbEludmVzdG1lbnQDCQAAZgAAAAIFAAAABnBvb2xVcAAAAAAAAAAAAAUAAAAEQlVMTAUAAAAEQkVBUgMJAQAAAAIhPQAAAAIFAAAAB3Rva2VuSWQFAAAADnBvb2xJbnZlc3RtZW50BQAAAAhwb29sTWFpbgkAAGQAAAACBQAAAAt1c2VyRGlmZkFicwUAAAAJcG9vbFZhbHVlCQAFGgAAAAgFAAAAB2J1bGxDb2wFAAAAB2JlYXJDb2wFAAAACGJ1bGxDaXJjBQAAAAhiZWFyQ2lyYwUAAAAIcG9vbE1haW4FAAAACXBvb2xWYWx1ZQkBAAAACG1heElzc3VlAAAAAQUAAAAEQlVMTAkBAAAACG1heElzc3VlAAAAAQUAAAAEQkVBUgEAAAAGYWR2aXNlAAAAAQAAAARkYXBwBAAAAAskdDAzNTQ5MzY2MAkBAAAABmNvbW1vbgAAAAEFAAAABGRhcHADCQAAAAAAAAIFAAAACyR0MDM1NDkzNjYwBQAAAAskdDAzNTQ5MzY2MAQAAAAWaGFzUHJvY2Vzc2FibGVSZXF1ZXN0cwgFAAAACyR0MDM1NDkzNjYwAAAAAl81BAAAABFyZXF1ZXN0UHJpY2VJbmRleAgFAAAACyR0MDM1NDkzNjYwAAAAAl80BAAAABBvcmFjbGVQcmljZUluZGV4CAUAAAALJHQwMzU0OTM2NjAAAAACXzMEAAAAEXNldHRsZWRQcmljZUluZGV4CAUAAAALJHQwMzU0OTM2NjAAAAACXzIEAAAAB2FkZHJlc3MIBQAAAAskdDAzNTQ5MzY2MAAAAAJfMQQAAAALJHQwMzY2NzM3NjAJAQAAAAlwb29sU3RhdGUAAAABBQAAAAdhZGRyZXNzAwkAAAAAAAACBQAAAAskdDAzNjY3Mzc2MAUAAAALJHQw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BQAAAAhiZWFyQ29sMQIAAAAdLCBwcm9qZWN0ZWRCdWxsQ2lyY3VsYXRpb24gPSAJAAGkAAAAAQUAAAAJYnVsbENpcmMxAgAAAB0sIHByb2plY3RlZEJlYXJDaXJjdWxhdGlvbiA9IAkAAaQAAAABBQAAAAliZWFyQ2lyYzECAAAAGiwgcHJvamVjdGVkTWF4SXNzdWVCdWxsID0gCQABpAAAAAEFAAAACG1heEJ1bGwxAgAAABosIHByb2plY3RlZE1heElzc3VlQmVhciA9IAkAAaQAAAABBQAAAAhtYXhCZWFyMQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAFpAQAAAAlzZXR0bGVBbGwAAAACAAAABGRhcHAAAAAPbWluUHJpY2VBZHZhbmNlBAAAAAskdDA1MTM4NTI0NgkBAAAABmNvbW1vbgAAAAEFAAAABGRhcHAEAAAAB2FkZHJlc3MIBQAAAAskdDA1MTM4NTI0NgAAAAJfMQQAAAARc2V0dGxlZFByaWNlSW5kZXgIBQAAAAskdDA1MTM4NTI0NgAAAAJfMgQAAAAQb3JhY2xlUHJpY2VJbmRleAgFAAAACyR0MDUxMzg1MjQ2AAAAAl8zBAAAABFyZXF1ZXN0UHJpY2VJbmRleAgFAAAACyR0MDUxMzg1MjQ2AAAAAl80BAAAABZoYXNQcm9jZXNzYWJsZVJlcXVlc3RzCAUAAAALJHQwNTEzODUyNDYAAAACXzUDAwUAAAAWaGFzUHJvY2Vzc2FibGVSZXF1ZXN0cwYJAABnAAAAAgkAAGUAAAACBQAAABBvcmFjbGVQcmljZUluZGV4BQAAABFzZXR0bGVkUHJpY2VJbmRleAUAAAAPbWluUHJpY2VBZHZhbmNlBAAAAARyZXMxCQEAAAADaW52AAAAAQUAAAAHYWRkcmVzcwMJAAAAAAAAAgUAAAAEcmVzMQUAAAAEcmVzMQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAABOW09LXSBubyBhY3Rpb25zIHF1ZXVlIGFuZCBwcmljZSBxdWV1ZShvcmFjbGVQcmljZUluZGV4IC0gc2V0dGxlZFByaWNlSW5kZXgpID0gCQABpAAAAAEJAABlAAAAAgUAAAAQb3JhY2xlUHJpY2VJbmRleAUAAAARc2V0dGxlZFByaWNlSW5kZXgCAAAACiB0b28gc21hbGwAAAAAAuRV8A==", "chainId": 87, "height": 2675064, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Hk8i78DkPuAYwsn2dyJ6oxqZhWvHPpqdaSUM2gdFc7EU Next: 3yckL9QZ6aaXqQqHyzS2ctT7H4G1Ys9unxQNQ4vVHebi Diff:
OldNewDifferences
55
66 let REBIDXK = "lastSettlementPriceId"
77
8+let BULLK = "BULLId"
9+
10+let BEARK = "BEARId"
11+
12+let POOLUSDNK = "poolMainTokenValue"
13+
14+let POOLUPK = "poolUp"
15+
16+let POOLDWNK = "poolDwn"
17+
18+let BULLCOLK = "bullCollateral"
19+
20+let BEARCOLK = "bearCollateral"
21+
22+let BULLCIRCK = "bullCirculation"
23+
24+let BEARCIRCK = "bearCirculation"
25+
26+let FEEACCK = "feesAccumulated"
27+
828 let MAX = 9223372036854775807
929
1030 func inv (address) = {
11- let a1 = invoke(address, "settle3", nil, nil)
12- if ((a1 == a1))
31+ let a0 = invoke(address, "unstakeAll", nil, nil)
32+ if ((a0 == a0))
1333 then {
14- let a2 = invoke(address, "settle3", nil, nil)
15- if ((a2 == a2))
34+ let a1 = invoke(address, "settle3", nil, nil)
35+ if ((a1 == a1))
1636 then {
17- let a3 = invoke(address, "settle3", nil, nil)
18- if ((a3 == a3))
37+ let a2 = invoke(address, "settle3", nil, nil)
38+ if ((a2 == a2))
1939 then {
20- let a4 = invoke(address, "settle3", nil, nil)
21- if ((a4 == a4))
40+ let a3 = invoke(address, "settle3", nil, nil)
41+ if ((a3 == a3))
2242 then {
23- let a5 = invoke(address, "settle3", nil, nil)
24- if ((a5 == a5))
43+ let a4 = invoke(address, "settle3", nil, nil)
44+ if ((a4 == a4))
2545 then {
26- let a6 = invoke(address, "settle3", nil, nil)
27- if ((a6 == a6))
28- then 0
46+ let a5 = invoke(address, "settle3", nil, nil)
47+ if ((a5 == a5))
48+ then {
49+ let a6 = invoke(address, "settle3", nil, nil)
50+ if ((a6 == a6))
51+ then {
52+ let an = invoke(address, "stakeAll", nil, nil)
53+ if ((an == an))
54+ then 0
55+ else throw("Strict value is not equal to itself.")
56+ }
57+ else throw("Strict value is not equal to itself.")
58+ }
2959 else throw("Strict value is not equal to itself.")
3060 }
3161 else throw("Strict value is not equal to itself.")
6393 }
6494
6595
96+func diffAbs (a1,a2) = {
97+ let diff = (a1 - a2)
98+ if ((diff > 0))
99+ then diff
100+ else (0 - diff)
101+ }
102+
103+
104+func poolState (address) = {
105+ let BULL = getStringValue(address, BULLK)
106+ let BEAR = getStringValue(address, BEARK)
107+ let poolMain = getIntegerValue(address, POOLUSDNK)
108+ let poolUp = getIntegerValue(address, POOLUPK)
109+ let poolDwn = getIntegerValue(address, POOLDWNK)
110+ let bullCol = getIntegerValue(address, BULLCOLK)
111+ let bearCol = getIntegerValue(address, BEARCOLK)
112+ let bullCirc = getIntegerValue(address, BULLCIRCK)
113+ let bearCirc = getIntegerValue(address, BEARCIRCK)
114+ let poolBullExposure = fraction(bullCol, poolUp, bullCirc)
115+ let poolBearExposure = fraction(bearCol, poolDwn, bearCirc)
116+ let userDiffAbs = diffAbs((bullCol - poolBullExposure), (bearCol - poolBearExposure))
117+ let poolValue = ((poolMain + poolBullExposure) + poolBearExposure)
118+ func maxIssue (tokenId) = {
119+ let poolInvestment = if ((poolUp > 0))
120+ then BULL
121+ else BEAR
122+ if ((tokenId != poolInvestment))
123+ then poolMain
124+ else (userDiffAbs + poolValue)
125+ }
126+
127+ $Tuple8(bullCol, bearCol, bullCirc, bearCirc, poolMain, poolValue, maxIssue(BULL), maxIssue(BEAR))
128+ }
129+
130+
66131 func advise (dapp) = {
67- let $t018952052 = common(dapp)
68- if (($t018952052 == $t018952052))
132+ let $t035493660 = common(dapp)
133+ if (($t035493660 == $t035493660))
69134 then {
70- let hasProcessableRequests = $t018952052._5
71- let requestPriceIndex = $t018952052._4
72- let oraclePriceIndex = $t018952052._3
73- let settledPriceIndex = $t018952052._2
74- let address = $t018952052._1
75- let BULLK = "BULLId"
76- let BEARK = "BEARId"
77- let POOLUSDNK = "poolMainTokenValue"
78- let POOLUPK = "poolUp"
79- let POOLDWNK = "poolDwn"
80- let BULLCOLK = "bullCollateral"
81- let BEARCOLK = "bearCollateral"
82- let BULLCIRCK = "bullCirculation"
83- let BEARCIRCK = "bearCirculation"
84- let BULL = getStringValue(address, BULLK)
85- let BEAR = getStringValue(address, BEARK)
86- let poolMain = getIntegerValue(address, POOLUSDNK)
87- let poolUp = getIntegerValue(address, POOLUPK)
88- let poolDwn = getIntegerValue(address, POOLDWNK)
89- let bullCol = getIntegerValue(address, BULLCOLK)
90- let bearCol = getIntegerValue(address, BEARCOLK)
91- let bullCirc = getIntegerValue(address, BULLCIRCK)
92- let bearCirc = getIntegerValue(address, BEARCIRCK)
93- let poolBullExposure = fraction(bullCol, poolUp, bullCirc)
94- let poolBearExposure = fraction(bearCol, poolDwn, bearCirc)
95- let poolValue = ((poolMain + poolBullExposure) + poolBearExposure)
96- func diffAbs (a1,a2) = {
97- let diff = (a1 - a2)
98- if ((diff > 0))
99- then diff
100- else (0 - diff)
101- }
102-
103- func userDiffAbs () = diffAbs((bullCol - poolBullExposure), (bearCol - poolBearExposure))
104-
105- func maxIssue (tokenId) = {
106- let poolInvestment = if ((poolUp > 0))
107- then BULL
108- else BEAR
109- if ((tokenId != poolInvestment))
110- then poolMain
111- else (userDiffAbs() + poolValue)
112- }
113-
114- let basic = ((((((((((((((((("dapp = " + dapp) + ", currentBullCollateral = ") + toString(getIntegerValue(address, "bullCollateral"))) + ", currentBearCollateral = ") + toString(getIntegerValue(address, "bearCollateral"))) + ", currentBullCirculation = ") + toString(getIntegerValue(address, "bullCirculation"))) + ", currentBearCirculation = ") + toString(getIntegerValue(address, "bearCirculation"))) + ", settledPriceIndex = ") + toString(settledPriceIndex)) + ", oraclePriceIndex = ") + toString(oraclePriceIndex)) + ", requestPriceIndex = ") + toString(if ((requestPriceIndex == MAX))
115- then -1
116- else requestPriceIndex)) + ", hasProcessableRequests = ") + (if (hasProcessableRequests)
117- then "true"
118- else "false"))
119- if ((basic == basic))
135+ let hasProcessableRequests = $t035493660._5
136+ let requestPriceIndex = $t035493660._4
137+ let oraclePriceIndex = $t035493660._3
138+ let settledPriceIndex = $t035493660._2
139+ let address = $t035493660._1
140+ let $t036673760 = poolState(address)
141+ if (($t036673760 == $t036673760))
120142 then {
121- let res = inv(address)
122- if ((res == res))
123- then ((((((((((((basic + ", projectedBullCollateral = ") + toString(getIntegerValue(address, "bullCollateral"))) + ", projectedBearCollateral = ") + toString(getIntegerValue(address, "bearCollateral"))) + ", projectedBullCirculation = ") + toString(getIntegerValue(address, "bullCirculation"))) + ", projectedBearCirculation = ") + toString(getIntegerValue(address, "bearCirculation"))) + ", maxIssueBull = ") + toString(maxIssue(BULL))) + ", maxIssueBear = ") + toString(maxIssue(BEAR)))
143+ let poolValue0 = $t036673760._6
144+ let poolMain0 = $t036673760._5
145+ let bearCirc0 = $t036673760._4
146+ let bullCirc0 = $t036673760._3
147+ let bearCol0 = $t036673760._2
148+ let bullCol0 = $t036673760._1
149+ let feesAccumulated0 = getIntegerValue(address, FEEACCK)
150+ if ((feesAccumulated0 == feesAccumulated0))
151+ then {
152+ let res = inv(address)
153+ if ((res == res))
154+ then {
155+ let $t038643977 = poolState(address)
156+ if (($t038643977 == $t038643977))
157+ then {
158+ let maxBear1 = $t038643977._8
159+ let maxBull1 = $t038643977._7
160+ let poolValue1 = $t038643977._6
161+ let poolMain1 = $t038643977._5
162+ let bearCirc1 = $t038643977._4
163+ let bullCirc1 = $t038643977._3
164+ let bearCol1 = $t038643977._2
165+ let bullCol1 = $t038643977._1
166+ ((((((((((((((((((((((((((((((((((("dapp = " + dapp) + ", bullCollateral = ") + toString(bullCol0)) + ", bearCollateral = ") + toString(bearCol0)) + ", bullCirculation = ") + toString(bullCirc0)) + ", bearCirculation = ") + toString(bearCirc0)) + ", poolUsdn = ") + toString(poolMain0)) + ", poolValue = ") + toString(poolValue0)) + ", feesAccumulated") + toString(feesAccumulated0)) + ", settledPriceIndex = ") + toString(settledPriceIndex)) + ", oraclePriceIndex = ") + toString(oraclePriceIndex)) + ", requestPriceIndex = ") + toString(if ((requestPriceIndex == MAX))
167+ then -1
168+ else requestPriceIndex)) + ", hasProcessableRequests = ") + (if (hasProcessableRequests)
169+ then "true"
170+ else "false")) + ", projectedBullCollateral = ") + toString(bullCol1)) + ", projectedBearCollateral = ") + toString(bearCol1)) + ", projectedBullCirculation = ") + toString(bullCirc1)) + ", projectedBearCirculation = ") + toString(bearCirc1)) + ", projectedMaxIssueBull = ") + toString(maxBull1)) + ", projectedMaxIssueBear = ") + toString(maxBear1))
171+ }
172+ else throw("Strict value is not equal to itself.")
173+ }
174+ else throw("Strict value is not equal to itself.")
175+ }
124176 else throw("Strict value is not equal to itself.")
125177 }
126178 else throw("Strict value is not equal to itself.")
131183
132184 @Callable(i)
133185 func settleAll (dapp,minPriceAdvance) = {
134- let $t048614969 = common(dapp)
135- let address = $t048614969._1
136- let settledPriceIndex = $t048614969._2
137- let oraclePriceIndex = $t048614969._3
138- let requestPriceIndex = $t048614969._4
139- let hasProcessableRequests = $t048614969._5
186+ let $t051385246 = common(dapp)
187+ let address = $t051385246._1
188+ let settledPriceIndex = $t051385246._2
189+ let oraclePriceIndex = $t051385246._3
190+ let requestPriceIndex = $t051385246._4
191+ let hasProcessableRequests = $t051385246._5
140192 if (if (hasProcessableRequests)
141193 then true
142194 else ((oraclePriceIndex - settledPriceIndex) >= minPriceAdvance))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let HEADK = "headPointer"
55
66 let REBIDXK = "lastSettlementPriceId"
77
8+let BULLK = "BULLId"
9+
10+let BEARK = "BEARId"
11+
12+let POOLUSDNK = "poolMainTokenValue"
13+
14+let POOLUPK = "poolUp"
15+
16+let POOLDWNK = "poolDwn"
17+
18+let BULLCOLK = "bullCollateral"
19+
20+let BEARCOLK = "bearCollateral"
21+
22+let BULLCIRCK = "bullCirculation"
23+
24+let BEARCIRCK = "bearCirculation"
25+
26+let FEEACCK = "feesAccumulated"
27+
828 let MAX = 9223372036854775807
929
1030 func inv (address) = {
11- let a1 = invoke(address, "settle3", nil, nil)
12- if ((a1 == a1))
31+ let a0 = invoke(address, "unstakeAll", nil, nil)
32+ if ((a0 == a0))
1333 then {
14- let a2 = invoke(address, "settle3", nil, nil)
15- if ((a2 == a2))
34+ let a1 = invoke(address, "settle3", nil, nil)
35+ if ((a1 == a1))
1636 then {
17- let a3 = invoke(address, "settle3", nil, nil)
18- if ((a3 == a3))
37+ let a2 = invoke(address, "settle3", nil, nil)
38+ if ((a2 == a2))
1939 then {
20- let a4 = invoke(address, "settle3", nil, nil)
21- if ((a4 == a4))
40+ let a3 = invoke(address, "settle3", nil, nil)
41+ if ((a3 == a3))
2242 then {
23- let a5 = invoke(address, "settle3", nil, nil)
24- if ((a5 == a5))
43+ let a4 = invoke(address, "settle3", nil, nil)
44+ if ((a4 == a4))
2545 then {
26- let a6 = invoke(address, "settle3", nil, nil)
27- if ((a6 == a6))
28- then 0
46+ let a5 = invoke(address, "settle3", nil, nil)
47+ if ((a5 == a5))
48+ then {
49+ let a6 = invoke(address, "settle3", nil, nil)
50+ if ((a6 == a6))
51+ then {
52+ let an = invoke(address, "stakeAll", nil, nil)
53+ if ((an == an))
54+ then 0
55+ else throw("Strict value is not equal to itself.")
56+ }
57+ else throw("Strict value is not equal to itself.")
58+ }
2959 else throw("Strict value is not equal to itself.")
3060 }
3161 else throw("Strict value is not equal to itself.")
3262 }
3363 else throw("Strict value is not equal to itself.")
3464 }
3565 else throw("Strict value is not equal to itself.")
3666 }
3767 else throw("Strict value is not equal to itself.")
3868 }
3969 else throw("Strict value is not equal to itself.")
4070 }
4171
4272
4373 func common (dapp) = {
4474 let address = valueOrErrorMessage(addressFromString(dapp), "pacewrapper: bad dapp address")
4575 let oraclev2 = valueOrErrorMessage(getString(address, "oraclev2"), "pacewrapper: no oraclev2 key")
4676 let oracle = valueOrErrorMessage(addressFromString(oraclev2), "pacewrapper: bad oracle address")
4777 let assetidv2 = valueOrErrorMessage(getString(address, "assetidv2"), "no assetidv2")
4878 let lastPriceIndexKey = ("%s%s__idxCurrent__" + assetidv2)
4979 let settledPriceIndex = valueOrErrorMessage(getInteger(address, REBIDXK), "no last rebalance price")
5080 let oraclePriceIndex = valueOrErrorMessage(getInteger(oracle, lastPriceIndexKey), ((("pacewrapper: bad oracle data at " + toString(oracle)) + ": no integer at ") + lastPriceIndexKey))
5181 let requestPriceIndex = {
5282 let headPointer = valueOrElse(getString(address, HEADK), "")
5383 if ((headPointer == ""))
5484 then MAX
5585 else {
5686 let data = split(getStringValue(address, headPointer), "|")
5787 let rpi = parseIntValue(data[3])
5888 rpi
5989 }
6090 }
6191 let hasProcessableRequests = (oraclePriceIndex >= requestPriceIndex)
6292 $Tuple5(address, settledPriceIndex, oraclePriceIndex, requestPriceIndex, hasProcessableRequests)
6393 }
6494
6595
96+func diffAbs (a1,a2) = {
97+ let diff = (a1 - a2)
98+ if ((diff > 0))
99+ then diff
100+ else (0 - diff)
101+ }
102+
103+
104+func poolState (address) = {
105+ let BULL = getStringValue(address, BULLK)
106+ let BEAR = getStringValue(address, BEARK)
107+ let poolMain = getIntegerValue(address, POOLUSDNK)
108+ let poolUp = getIntegerValue(address, POOLUPK)
109+ let poolDwn = getIntegerValue(address, POOLDWNK)
110+ let bullCol = getIntegerValue(address, BULLCOLK)
111+ let bearCol = getIntegerValue(address, BEARCOLK)
112+ let bullCirc = getIntegerValue(address, BULLCIRCK)
113+ let bearCirc = getIntegerValue(address, BEARCIRCK)
114+ let poolBullExposure = fraction(bullCol, poolUp, bullCirc)
115+ let poolBearExposure = fraction(bearCol, poolDwn, bearCirc)
116+ let userDiffAbs = diffAbs((bullCol - poolBullExposure), (bearCol - poolBearExposure))
117+ let poolValue = ((poolMain + poolBullExposure) + poolBearExposure)
118+ func maxIssue (tokenId) = {
119+ let poolInvestment = if ((poolUp > 0))
120+ then BULL
121+ else BEAR
122+ if ((tokenId != poolInvestment))
123+ then poolMain
124+ else (userDiffAbs + poolValue)
125+ }
126+
127+ $Tuple8(bullCol, bearCol, bullCirc, bearCirc, poolMain, poolValue, maxIssue(BULL), maxIssue(BEAR))
128+ }
129+
130+
66131 func advise (dapp) = {
67- let $t018952052 = common(dapp)
68- if (($t018952052 == $t018952052))
132+ let $t035493660 = common(dapp)
133+ if (($t035493660 == $t035493660))
69134 then {
70- let hasProcessableRequests = $t018952052._5
71- let requestPriceIndex = $t018952052._4
72- let oraclePriceIndex = $t018952052._3
73- let settledPriceIndex = $t018952052._2
74- let address = $t018952052._1
75- let BULLK = "BULLId"
76- let BEARK = "BEARId"
77- let POOLUSDNK = "poolMainTokenValue"
78- let POOLUPK = "poolUp"
79- let POOLDWNK = "poolDwn"
80- let BULLCOLK = "bullCollateral"
81- let BEARCOLK = "bearCollateral"
82- let BULLCIRCK = "bullCirculation"
83- let BEARCIRCK = "bearCirculation"
84- let BULL = getStringValue(address, BULLK)
85- let BEAR = getStringValue(address, BEARK)
86- let poolMain = getIntegerValue(address, POOLUSDNK)
87- let poolUp = getIntegerValue(address, POOLUPK)
88- let poolDwn = getIntegerValue(address, POOLDWNK)
89- let bullCol = getIntegerValue(address, BULLCOLK)
90- let bearCol = getIntegerValue(address, BEARCOLK)
91- let bullCirc = getIntegerValue(address, BULLCIRCK)
92- let bearCirc = getIntegerValue(address, BEARCIRCK)
93- let poolBullExposure = fraction(bullCol, poolUp, bullCirc)
94- let poolBearExposure = fraction(bearCol, poolDwn, bearCirc)
95- let poolValue = ((poolMain + poolBullExposure) + poolBearExposure)
96- func diffAbs (a1,a2) = {
97- let diff = (a1 - a2)
98- if ((diff > 0))
99- then diff
100- else (0 - diff)
101- }
102-
103- func userDiffAbs () = diffAbs((bullCol - poolBullExposure), (bearCol - poolBearExposure))
104-
105- func maxIssue (tokenId) = {
106- let poolInvestment = if ((poolUp > 0))
107- then BULL
108- else BEAR
109- if ((tokenId != poolInvestment))
110- then poolMain
111- else (userDiffAbs() + poolValue)
112- }
113-
114- let basic = ((((((((((((((((("dapp = " + dapp) + ", currentBullCollateral = ") + toString(getIntegerValue(address, "bullCollateral"))) + ", currentBearCollateral = ") + toString(getIntegerValue(address, "bearCollateral"))) + ", currentBullCirculation = ") + toString(getIntegerValue(address, "bullCirculation"))) + ", currentBearCirculation = ") + toString(getIntegerValue(address, "bearCirculation"))) + ", settledPriceIndex = ") + toString(settledPriceIndex)) + ", oraclePriceIndex = ") + toString(oraclePriceIndex)) + ", requestPriceIndex = ") + toString(if ((requestPriceIndex == MAX))
115- then -1
116- else requestPriceIndex)) + ", hasProcessableRequests = ") + (if (hasProcessableRequests)
117- then "true"
118- else "false"))
119- if ((basic == basic))
135+ let hasProcessableRequests = $t035493660._5
136+ let requestPriceIndex = $t035493660._4
137+ let oraclePriceIndex = $t035493660._3
138+ let settledPriceIndex = $t035493660._2
139+ let address = $t035493660._1
140+ let $t036673760 = poolState(address)
141+ if (($t036673760 == $t036673760))
120142 then {
121- let res = inv(address)
122- if ((res == res))
123- then ((((((((((((basic + ", projectedBullCollateral = ") + toString(getIntegerValue(address, "bullCollateral"))) + ", projectedBearCollateral = ") + toString(getIntegerValue(address, "bearCollateral"))) + ", projectedBullCirculation = ") + toString(getIntegerValue(address, "bullCirculation"))) + ", projectedBearCirculation = ") + toString(getIntegerValue(address, "bearCirculation"))) + ", maxIssueBull = ") + toString(maxIssue(BULL))) + ", maxIssueBear = ") + toString(maxIssue(BEAR)))
143+ let poolValue0 = $t036673760._6
144+ let poolMain0 = $t036673760._5
145+ let bearCirc0 = $t036673760._4
146+ let bullCirc0 = $t036673760._3
147+ let bearCol0 = $t036673760._2
148+ let bullCol0 = $t036673760._1
149+ let feesAccumulated0 = getIntegerValue(address, FEEACCK)
150+ if ((feesAccumulated0 == feesAccumulated0))
151+ then {
152+ let res = inv(address)
153+ if ((res == res))
154+ then {
155+ let $t038643977 = poolState(address)
156+ if (($t038643977 == $t038643977))
157+ then {
158+ let maxBear1 = $t038643977._8
159+ let maxBull1 = $t038643977._7
160+ let poolValue1 = $t038643977._6
161+ let poolMain1 = $t038643977._5
162+ let bearCirc1 = $t038643977._4
163+ let bullCirc1 = $t038643977._3
164+ let bearCol1 = $t038643977._2
165+ let bullCol1 = $t038643977._1
166+ ((((((((((((((((((((((((((((((((((("dapp = " + dapp) + ", bullCollateral = ") + toString(bullCol0)) + ", bearCollateral = ") + toString(bearCol0)) + ", bullCirculation = ") + toString(bullCirc0)) + ", bearCirculation = ") + toString(bearCirc0)) + ", poolUsdn = ") + toString(poolMain0)) + ", poolValue = ") + toString(poolValue0)) + ", feesAccumulated") + toString(feesAccumulated0)) + ", settledPriceIndex = ") + toString(settledPriceIndex)) + ", oraclePriceIndex = ") + toString(oraclePriceIndex)) + ", requestPriceIndex = ") + toString(if ((requestPriceIndex == MAX))
167+ then -1
168+ else requestPriceIndex)) + ", hasProcessableRequests = ") + (if (hasProcessableRequests)
169+ then "true"
170+ else "false")) + ", projectedBullCollateral = ") + toString(bullCol1)) + ", projectedBearCollateral = ") + toString(bearCol1)) + ", projectedBullCirculation = ") + toString(bullCirc1)) + ", projectedBearCirculation = ") + toString(bearCirc1)) + ", projectedMaxIssueBull = ") + toString(maxBull1)) + ", projectedMaxIssueBear = ") + toString(maxBear1))
171+ }
172+ else throw("Strict value is not equal to itself.")
173+ }
174+ else throw("Strict value is not equal to itself.")
175+ }
124176 else throw("Strict value is not equal to itself.")
125177 }
126178 else throw("Strict value is not equal to itself.")
127179 }
128180 else throw("Strict value is not equal to itself.")
129181 }
130182
131183
132184 @Callable(i)
133185 func settleAll (dapp,minPriceAdvance) = {
134- let $t048614969 = common(dapp)
135- let address = $t048614969._1
136- let settledPriceIndex = $t048614969._2
137- let oraclePriceIndex = $t048614969._3
138- let requestPriceIndex = $t048614969._4
139- let hasProcessableRequests = $t048614969._5
186+ let $t051385246 = common(dapp)
187+ let address = $t051385246._1
188+ let settledPriceIndex = $t051385246._2
189+ let oraclePriceIndex = $t051385246._3
190+ let requestPriceIndex = $t051385246._4
191+ let hasProcessableRequests = $t051385246._5
140192 if (if (hasProcessableRequests)
141193 then true
142194 else ((oraclePriceIndex - settledPriceIndex) >= minPriceAdvance))
143195 then {
144196 let res1 = inv(address)
145197 if ((res1 == res1))
146198 then nil
147199 else throw("Strict value is not equal to itself.")
148200 }
149201 else throw((("[OK] no actions queue and price queue(oraclePriceIndex - settledPriceIndex) = " + toString((oraclePriceIndex - settledPriceIndex))) + " too small"))
150202 }
151203
152204

github/deemru/w8io/3ef1775 
50.65 ms