tx · A2saRMNi6Am5rvtqqKKFHBnS3rYLnNEtJS9CaAVKVhb2

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.05000000 Waves

2023.03.29 09:05 [2510847] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "A2saRMNi6Am5rvtqqKKFHBnS3rYLnNEtJS9CaAVKVhb2", "fee": 5000000, "feeAssetId": null, "timestamp": 1680069961116, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "5wXfRBLLHzUPB16Rofxxw2WcTiQ75USDgfb26zTAaBZchGT4NNyYw177gzVWwVU2H2EjUkz6n4tYy2Bh6cigwYBm" ], "script": "base64:BgIHCAISAwoBAQwADGNvbnRyYWN0RmlsZQIJcmViYWxhbmNlAA9rZXlzVGFyZ2V0UmF0aW8CDyVzX190YXJnZXRSYXRpbwAUa2V5QWRkaXRpb25hbEJhbGFuY2UCGiVzX19hZGRpdGlvbmFsV2F2ZXNCYWxhbmNlABprZXlTV2F2ZXNBZGRpdGlvbmFsQmFsYW5jZQIRJXNfX3NXYXZlc0JhbGFuY2UAEGtleVNXYXZlc0Fzc2V0SWQCESVzX19zV2F2ZXNBc3NldElkAA9rZXlQcm94eUFkZHJlc3MCECVzX19wcm94eUFkZHJlc3MBEGdldEludGVnZXJPclplcm8BCmludGVnZXJLZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUKaW50ZWdlcktleQMJAAECBQckbWF0Y2gwAgNJbnQEA3ZhbAUHJG1hdGNoMAUDdmFsAAABEGdldFN0cmluZ09yVGhyb3cBCXN0cmluZ0tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQlzdHJpbmdLZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQkArAICCQCsAgICAVsFCXN0cmluZ0tleQIKXSBpcyBlbXB0eQEOZ2V0VGFyZ2V0UmF0aW8ABAckbWF0Y2gwCQCfCAEFD2tleXNUYXJnZXRSYXRpbwMJAAECBQckbWF0Y2gwAgNJbnQEAXMFByRtYXRjaDAJAJcDAQkAzAgCAGQJAMwIAgkAlgMBCQDMCAIAAAkAzAgCBQFzBQNuaWwFA25pbABQAQdnZXRSYXRlAAQFcHJveHkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARBnZXRTdHJpbmdPclRocm93AQUPa2V5UHJveHlBZGRyZXNzBANpbnYJAPwHBAUFcHJveHkCB2dldFJhdGUFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAckbWF0Y2gwBQNpbnYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQENcGFyc2VJbnRWYWx1ZQEFAXMJAAIBAglaRVJPIHJhdGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BB2RlcG9zaXQBC3dhdmVzQW1vdW50BAVwcm94eQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEGdldFN0cmluZ09yVGhyb3cBBQ9rZXlQcm94eUFkZHJlc3MEGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQkBEGdldEludGVnZXJPclplcm8BBRRrZXlBZGRpdGlvbmFsQmFsYW5jZQMJAAACBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQQUY3VycmVudFNXYXZlc0JhbGFuY2UJARBnZXRJbnRlZ2VyT3JaZXJvAQUaa2V5U1dhdmVzQWRkaXRpb25hbEJhbGFuY2UDCQAAAgUUY3VycmVudFNXYXZlc0JhbGFuY2UFFGN1cnJlbnRTV2F2ZXNCYWxhbmNlAwkAZgIFC3dhdmVzQW1vdW50AAAEDWRlcG9zaXRJbnZva2UJAPwHBAUFcHJveHkCB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAULd2F2ZXNBbW91bnQFA25pbAMJAAACBQ1kZXBvc2l0SW52b2tlBQ1kZXBvc2l0SW52b2tlBAckbWF0Y2gwBQ1kZXBvc2l0SW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQOcmVjZWl2ZWRTV2F2ZXMFByRtYXRjaDAEFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQBkAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBQt3YXZlc0Ftb3VudAQQbmV3U1dhdmVzQmFsYW5jZQkAZAIFFGN1cnJlbnRTV2F2ZXNCYWxhbmNlBQ5yZWNlaXZlZFNXYXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5QWRkaXRpb25hbEJhbGFuY2UFFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRprZXlTV2F2ZXNBZGRpdGlvbmFsQmFsYW5jZQUQbmV3U1dhdmVzQmFsYW5jZQUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEId2l0aGRyYXcBC3dhdmVzQW1vdW50BAVwcm94eQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEGdldFN0cmluZ09yVGhyb3cBBQ9rZXlQcm94eUFkZHJlc3MECHNXYXZlc0lkCQDZBAEJARBnZXRTdHJpbmdPclRocm93AQUQa2V5U1dhdmVzQXNzZXRJZAMJAAACBQhzV2F2ZXNJZAUIc1dhdmVzSWQEGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQkBEGdldEludGVnZXJPclplcm8BBRRrZXlBZGRpdGlvbmFsQmFsYW5jZQMJAAACBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQQUY3VycmVudFNXYXZlc0JhbGFuY2UJARBnZXRJbnRlZ2VyT3JaZXJvAQUaa2V5U1dhdmVzQWRkaXRpb25hbEJhbGFuY2UDCQAAAgUUY3VycmVudFNXYXZlc0JhbGFuY2UFFGN1cnJlbnRTV2F2ZXNCYWxhbmNlBBBjdXJyZW50UHJveHlSYXRlCQEHZ2V0UmF0ZQADCQAAAgUQY3VycmVudFByb3h5UmF0ZQUQY3VycmVudFByb3h5UmF0ZQQQc2VuZFNXYXZlc0Ftb3VudAkAawMAgKCUpY0dBQt3YXZlc0Ftb3VudAUQY3VycmVudFByb3h5UmF0ZQMJAGYCBRBzZW5kU1dhdmVzQW1vdW50AAAEDWRlcG9zaXRJbnZva2UJAPwHBAUFcHJveHkCCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHNXYXZlc0lkBRBzZW5kU1dhdmVzQW1vdW50BQNuaWwDCQAAAgUNZGVwb3NpdEludm9rZQUNZGVwb3NpdEludm9rZQQHJG1hdGNoMAUNZGVwb3NpdEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEDXJlY2VpdmVkV2F2ZXMFByRtYXRjaDAEFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQBlAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBQ1yZWNlaXZlZFdhdmVzBBBuZXdTV2F2ZXNCYWxhbmNlCQBlAgUUY3VycmVudFNXYXZlc0JhbGFuY2UFEHNlbmRTV2F2ZXNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtleUFkZGl0aW9uYWxCYWxhbmNlBRRuZXdBZGRpdGlvbmFsQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUaa2V5U1dhdmVzQWRkaXRpb25hbEJhbGFuY2UFEG5ld1NXYXZlc0JhbGFuY2UFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAWkBDnJlYmFsYW5jZVJhdGlvAQt0YXJnZXRSYXRpbwQOcmVndWxhckJhbGFuY2UICQDvBwEFBHRoaXMHcmVndWxhcgMJAAACBQ5yZWd1bGFyQmFsYW5jZQUOcmVndWxhckJhbGFuY2UEEWFkZGl0aW9uYWxCYWxhbmNlCQEQZ2V0SW50ZWdlck9yWmVybwEFFGtleUFkZGl0aW9uYWxCYWxhbmNlAwkAAAIFEWFkZGl0aW9uYWxCYWxhbmNlBRFhZGRpdGlvbmFsQmFsYW5jZQQMd2hvbGVCYWxhbmNlCQBkAgUOcmVndWxhckJhbGFuY2UFEWFkZGl0aW9uYWxCYWxhbmNlBBd0YXJnZXRBZGRpdGlvbmFsQmFsYW5jZQkAawMFC3RhcmdldFJhdGlvBQx3aG9sZUJhbGFuY2UAZAQGY2hhbmdlCQBlAgURYWRkaXRpb25hbEJhbGFuY2UFF3RhcmdldEFkZGl0aW9uYWxCYWxhbmNlBAZuZXdSZWcJAGQCBQ5yZWd1bGFyQmFsYW5jZQUGY2hhbmdlAwkAAAIFBmNoYW5nZQAABQNuaWwDCQBmAgAABQZjaGFuZ2UED3NlbmRXYXZlc0Ftb3VudAkAaAIFBmNoYW5nZQD///////////8BCQEHZGVwb3NpdAEFD3NlbmRXYXZlc0Ftb3VudAQOZ2V0V2F2ZXNBbW91bnQFBmNoYW5nZQkBCHdpdGhkcmF3AQUOZ2V0V2F2ZXNBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AiasUFg==", "height": 2510847, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8vn7jQm3xrr5emPUkFcVhBFSghRNd1VwaTFoh145uxMB Next: 36UVQqSDA8X6FYQvznVGRyYbXPYZyp6AecqTJBzfp4u1 Diff:
OldNewDifferences
3131
3232 func getTargetRatio () = match getInteger(keysTargetRatio) {
3333 case s: Int =>
34- s
34+ min([100, max([0, s])])
3535 case _ =>
3636 80
3737 }
38-
39-
40-func internalWavesBalance () = (wavesBalance(this).regular + getIntegerOrZero(keyAdditionalBalance))
41-
42-
43-func internalRate () = {
44- let additionalBalance = getIntegerOrZero(keyAdditionalBalance)
45- let sWavesBalance = getIntegerOrZero(keySWavesAdditionalBalance)
46- if ((additionalBalance == 0))
47- then 0
48- else fraction(100000000000, additionalBalance, sWavesBalance)
49- }
5038
5139
5240 func getRate () = {
133121
134122
135123 @Callable(i)
136-func calcRatio () = {
137- let regularWavesBalance = wavesBalance(this).regular
138- let additional = getIntegerOrZero(keyAdditionalBalance)
139- let ratio = fraction(100, additional, (additional + regularWavesBalance))
140- $Tuple2(nil, ratio)
141- }
142-
143-
144-
145-@Callable(i)
146-func calcRatioTest (regularBalance,additional,targetRatio) = {
147- let sum = (regularBalance + additional)
148- let targetAdditionalBalance = fraction(targetRatio, sum, 100)
149- let change = (additional - targetAdditionalBalance)
150- let newReg = (regularBalance + change)
151- if ((0 > change))
152- then {
153- let sendAmount = (change * -1)
154- $Tuple2(nil, [newReg, targetAdditionalBalance, change, ("deposit: " + toString(sendAmount))])
155- }
156- else {
157- let sendAmount = change
158- $Tuple2(nil, [newReg, targetAdditionalBalance, change, ("withdraw: " + toString(sendAmount))])
159- }
160- }
161-
162-
163-
164-@Callable(i)
165124 func rebalanceRatio (targetRatio) = {
166125 let regularBalance = wavesBalance(this).regular
167126 if ((regularBalance == regularBalance))
169128 let additionalBalance = getIntegerOrZero(keyAdditionalBalance)
170129 if ((additionalBalance == additionalBalance))
171130 then {
172- let wholeBlalance = (regularBalance + additionalBalance)
173- let targetAdditionalBalance = fraction(targetRatio, wholeBlalance, 100)
131+ let wholeBalance = (regularBalance + additionalBalance)
132+ let targetAdditionalBalance = fraction(targetRatio, wholeBalance, 100)
174133 let change = (additionalBalance - targetAdditionalBalance)
175134 let newReg = (regularBalance + change)
176135 if ((change == 0))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "rebalance"
55
66 let keysTargetRatio = "%s__targetRatio"
77
88 let keyAdditionalBalance = "%s__additionalWavesBalance"
99
1010 let keySWavesAdditionalBalance = "%s__sWavesBalance"
1111
1212 let keySWavesAssetId = "%s__sWavesAssetId"
1313
1414 let keyProxyAddress = "%s__proxyAddress"
1515
1616 func getIntegerOrZero (integerKey) = match getInteger(this, integerKey) {
1717 case val: Int =>
1818 val
1919 case _ =>
2020 0
2121 }
2222
2323
2424 func getStringOrThrow (stringKey) = match getString(this, stringKey) {
2525 case s: String =>
2626 s
2727 case _ =>
2828 throw((("[" + stringKey) + "] is empty"))
2929 }
3030
3131
3232 func getTargetRatio () = match getInteger(keysTargetRatio) {
3333 case s: Int =>
34- s
34+ min([100, max([0, s])])
3535 case _ =>
3636 80
3737 }
38-
39-
40-func internalWavesBalance () = (wavesBalance(this).regular + getIntegerOrZero(keyAdditionalBalance))
41-
42-
43-func internalRate () = {
44- let additionalBalance = getIntegerOrZero(keyAdditionalBalance)
45- let sWavesBalance = getIntegerOrZero(keySWavesAdditionalBalance)
46- if ((additionalBalance == 0))
47- then 0
48- else fraction(100000000000, additionalBalance, sWavesBalance)
49- }
5038
5139
5240 func getRate () = {
5341 let proxy = addressFromStringValue(getStringOrThrow(keyProxyAddress))
5442 let inv = invoke(proxy, "getRate", nil, nil)
5543 if ((inv == inv))
5644 then match inv {
5745 case s: String =>
5846 parseIntValue(s)
5947 case _ =>
6048 throw("ZERO rate")
6149 }
6250 else throw("Strict value is not equal to itself.")
6351 }
6452
6553
6654 func deposit (wavesAmount) = {
6755 let proxy = addressFromStringValue(getStringOrThrow(keyProxyAddress))
6856 let currentAdditionalBalance = getIntegerOrZero(keyAdditionalBalance)
6957 if ((currentAdditionalBalance == currentAdditionalBalance))
7058 then {
7159 let currentSWavesBalance = getIntegerOrZero(keySWavesAdditionalBalance)
7260 if ((currentSWavesBalance == currentSWavesBalance))
7361 then if ((wavesAmount > 0))
7462 then {
7563 let depositInvoke = invoke(proxy, "deposit", nil, [AttachedPayment(unit, wavesAmount)])
7664 if ((depositInvoke == depositInvoke))
7765 then match depositInvoke {
7866 case receivedSWaves: Int =>
7967 let newAdditionalBalance = (currentAdditionalBalance + wavesAmount)
8068 let newSWavesBalance = (currentSWavesBalance + receivedSWaves)
8169 [IntegerEntry(keyAdditionalBalance, newAdditionalBalance), IntegerEntry(keySWavesAdditionalBalance, newSWavesBalance)]
8270 case _ =>
8371 nil
8472 }
8573 else throw("Strict value is not equal to itself.")
8674 }
8775 else nil
8876 else throw("Strict value is not equal to itself.")
8977 }
9078 else throw("Strict value is not equal to itself.")
9179 }
9280
9381
9482 func withdraw (wavesAmount) = {
9583 let proxy = addressFromStringValue(getStringOrThrow(keyProxyAddress))
9684 let sWavesId = fromBase58String(getStringOrThrow(keySWavesAssetId))
9785 if ((sWavesId == sWavesId))
9886 then {
9987 let currentAdditionalBalance = getIntegerOrZero(keyAdditionalBalance)
10088 if ((currentAdditionalBalance == currentAdditionalBalance))
10189 then {
10290 let currentSWavesBalance = getIntegerOrZero(keySWavesAdditionalBalance)
10391 if ((currentSWavesBalance == currentSWavesBalance))
10492 then {
10593 let currentProxyRate = getRate()
10694 if ((currentProxyRate == currentProxyRate))
10795 then {
10896 let sendSWavesAmount = fraction(1000000000000, wavesAmount, currentProxyRate)
10997 if ((sendSWavesAmount > 0))
11098 then {
11199 let depositInvoke = invoke(proxy, "withdraw", nil, [AttachedPayment(sWavesId, sendSWavesAmount)])
112100 if ((depositInvoke == depositInvoke))
113101 then match depositInvoke {
114102 case receivedWaves: Int =>
115103 let newAdditionalBalance = (currentAdditionalBalance - receivedWaves)
116104 let newSWavesBalance = (currentSWavesBalance - sendSWavesAmount)
117105 [IntegerEntry(keyAdditionalBalance, newAdditionalBalance), IntegerEntry(keySWavesAdditionalBalance, newSWavesBalance)]
118106 case _ =>
119107 nil
120108 }
121109 else throw("Strict value is not equal to itself.")
122110 }
123111 else nil
124112 }
125113 else throw("Strict value is not equal to itself.")
126114 }
127115 else throw("Strict value is not equal to itself.")
128116 }
129117 else throw("Strict value is not equal to itself.")
130118 }
131119 else throw("Strict value is not equal to itself.")
132120 }
133121
134122
135123 @Callable(i)
136-func calcRatio () = {
137- let regularWavesBalance = wavesBalance(this).regular
138- let additional = getIntegerOrZero(keyAdditionalBalance)
139- let ratio = fraction(100, additional, (additional + regularWavesBalance))
140- $Tuple2(nil, ratio)
141- }
142-
143-
144-
145-@Callable(i)
146-func calcRatioTest (regularBalance,additional,targetRatio) = {
147- let sum = (regularBalance + additional)
148- let targetAdditionalBalance = fraction(targetRatio, sum, 100)
149- let change = (additional - targetAdditionalBalance)
150- let newReg = (regularBalance + change)
151- if ((0 > change))
152- then {
153- let sendAmount = (change * -1)
154- $Tuple2(nil, [newReg, targetAdditionalBalance, change, ("deposit: " + toString(sendAmount))])
155- }
156- else {
157- let sendAmount = change
158- $Tuple2(nil, [newReg, targetAdditionalBalance, change, ("withdraw: " + toString(sendAmount))])
159- }
160- }
161-
162-
163-
164-@Callable(i)
165124 func rebalanceRatio (targetRatio) = {
166125 let regularBalance = wavesBalance(this).regular
167126 if ((regularBalance == regularBalance))
168127 then {
169128 let additionalBalance = getIntegerOrZero(keyAdditionalBalance)
170129 if ((additionalBalance == additionalBalance))
171130 then {
172- let wholeBlalance = (regularBalance + additionalBalance)
173- let targetAdditionalBalance = fraction(targetRatio, wholeBlalance, 100)
131+ let wholeBalance = (regularBalance + additionalBalance)
132+ let targetAdditionalBalance = fraction(targetRatio, wholeBalance, 100)
174133 let change = (additionalBalance - targetAdditionalBalance)
175134 let newReg = (regularBalance + change)
176135 if ((change == 0))
177136 then nil
178137 else if ((0 > change))
179138 then {
180139 let sendWavesAmount = (change * -1)
181140 deposit(sendWavesAmount)
182141 }
183142 else {
184143 let getWavesAmount = change
185144 withdraw(getWavesAmount)
186145 }
187146 }
188147 else throw("Strict value is not equal to itself.")
189148 }
190149 else throw("Strict value is not equal to itself.")
191150 }
192151
193152

github/deemru/w8io/873ac7e 
48.79 ms