tx · GctJ3TsQsEVdWkAXm937qNffDjiqwhJPuXKd1N9vyGes

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.05000000 Waves

2023.03.31 09:26 [2513761] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "GctJ3TsQsEVdWkAXm937qNffDjiqwhJPuXKd1N9vyGes", "fee": 5000000, "feeAssetId": null, "timestamp": 1680244017847, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "2yonvjSiPGVDX91rv3b3R849EXLBv6xLfUJxxhNWXVnV8DHt8VZgBU3Ufd46i1BwhVwVkqDiBVfEq522gZ2bvA4G" ], "script": "base64:BgIECAISABAAA1NFUAICX18ADGNvbnRyYWN0RmlsZQIOcmViYWxhbmNlLnJpZGUAEWtleUZhY3RvcnlBZGRyZXNzAgslc19fZmFjdG9yeQEUa2V5QWRkaXRpb25hbEJhbGFuY2UBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICEWFkZGl0aW9uYWxCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARxrZXlJbnRlcm5hbEFkZGl0aW9uYWxCYWxhbmNlAQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhlpbnRlcm5hbEFkZGl0aW9uYWxCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARZrZXlTdGFraW5nQXNzZXRCYWxhbmNlAQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhNzdGFraW5nQXNzZXRCYWxhbmNlCQDMCAIFB2Fzc2V0SWQFA25pbAUDU0VQARRnZXRBZGRpdGlvbmFsQmFsYW5jZQEHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEUa2V5QWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkAAABHGdldEludGVybmFsQWRkaXRpb25hbEJhbGFuY2UBB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBHGtleUludGVybmFsQWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkAAABFmdldFN0YWtpbmdBc3NldEJhbGFuY2UBB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFmtleVN0YWtpbmdBc3NldEJhbGFuY2UBBQdhc3NldElkAAABCnRocm93RXJyb3IBCGVycm9yTXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFCGVycm9yTXNnAQdnZXRSYXRlAQVwcm94eQQDaW52CQD8BwQFBXByb3h5AgdnZXRSYXRlBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQHJG1hdGNoMAUDaW52AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBDXBhcnNlSW50VmFsdWUBBQFzCQEKdGhyb3dFcnJvcgECF2dldFJhdGUoKSByZXR1cm5lZCB6ZXJvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARNnZXRMZWFzZVByb3h5Q29uZmlnAQdhc3NldElkBAdmYWN0b3J5CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCiCAEFEWtleUZhY3RvcnlBZGRyZXNzAgAED215QWRkcmVzc1N0cmluZwkApQgBBQR0aGlzCQD8BwQFB2ZhY3RvcnkCGmdldFBvb2xMZWFzZUNvbmZpZ1JFQURPTkxZCQDMCAIFD215QWRkcmVzc1N0cmluZwkAzAgCBQdhc3NldElkBQNuaWwFA25pbAEHZGVwb3NpdAQHYXNzZXRJZAZhbW91bnQOc3Rha2luZ0Fzc2V0SWQFcHJveHkEGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQkBFGdldEFkZGl0aW9uYWxCYWxhbmNlAQUHYXNzZXRJZAMJAAACBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQQgY3VycmVudEludGVybmFsQWRkaXRpb25hbEJhbGFuY2UJARxnZXRJbnRlcm5hbEFkZGl0aW9uYWxCYWxhbmNlAQUHYXNzZXRJZAMJAAACBSBjdXJyZW50SW50ZXJuYWxBZGRpdGlvbmFsQmFsYW5jZQUgY3VycmVudEludGVybmFsQWRkaXRpb25hbEJhbGFuY2UEGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlCQEWZ2V0U3Rha2luZ0Fzc2V0QmFsYW5jZQEFDnN0YWtpbmdBc3NldElkAwkAAAIFGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQQFYXNzZXQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAMJAGYCBQZhbW91bnQAAAQNZGVwb3NpdEludm9rZQkA/AcEBQVwcm94eQIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQVhc3NldAUGYW1vdW50BQNuaWwDCQAAAgUNZGVwb3NpdEludm9rZQUNZGVwb3NpdEludm9rZQQHJG1hdGNoMAUNZGVwb3NpdEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEFHJlY2VpdmVkU3Rha2luZ0Fzc2V0BQckbWF0Y2gwBBxuZXdJbnRlcm5hbEFkZGl0aW9uYWxCYWxhbmNlCQBkAgUgY3VycmVudEludGVybmFsQWRkaXRpb25hbEJhbGFuY2UFBmFtb3VudAQWbmV3U3Rha2luZ0Fzc2V0QmFsYW5jZQkAZAIFGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlBRRyZWNlaXZlZFN0YWtpbmdBc3NldAQRYWRkaXRpb25hbEJhbGFuY2UJAGUCBRxuZXdJbnRlcm5hbEFkZGl0aW9uYWxCYWxhbmNlBRZuZXdTdGFraW5nQXNzZXRCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEca2V5SW50ZXJuYWxBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQFHG5ld0ludGVybmFsQWRkaXRpb25hbEJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFraW5nQXNzZXRCYWxhbmNlAQUOc3Rha2luZ0Fzc2V0SWQFFm5ld1N0YWtpbmdBc3NldEJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQFEWFkZGl0aW9uYWxCYWxhbmNlBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQh3aXRoZHJhdwUHYXNzZXRJZAZhbW91bnQOc3Rha2luZ0Fzc2V0SWQFcHJveHkMcHJveHlSYXRlTXVsBBhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UJARRnZXRBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQDCQAAAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UEGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlCQEWZ2V0U3Rha2luZ0Fzc2V0QmFsYW5jZQEFDnN0YWtpbmdBc3NldElkAwkAAAIFGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQQQY3VycmVudFByb3h5UmF0ZQkBB2dldFJhdGUBBQVwcm94eQMJAAACBRBjdXJyZW50UHJveHlSYXRlBRBjdXJyZW50UHJveHlSYXRlBBZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50CQBrAwUMcHJveHlSYXRlTXVsBQZhbW91bnQFEGN1cnJlbnRQcm94eVJhdGUDCQBmAgUWc2VuZFN0YWtpbmdBc3NldEFtb3VudAAABA53aXRoZHJhd0ludm9rZQkA/AcEBQVwcm94eQIId2l0aGRyYXcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQ5zdGFraW5nQXNzZXRJZAUWc2VuZFN0YWtpbmdBc3NldEFtb3VudAUDbmlsAwkAAAIFDndpdGhkcmF3SW52b2tlBQ53aXRoZHJhd0ludm9rZQQHJG1hdGNoMAUOd2l0aGRyYXdJbnZva2UDCQABAgUHJG1hdGNoMAIDSW50BA5yZWNlaXZlZEFzc2V0cwUHJG1hdGNoMAQUbmV3QWRkaXRpb25hbEJhbGFuY2UJAGUCBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFDnJlY2VpdmVkQXNzZXRzBBBuZXdTV2F2ZXNCYWxhbmNlCQBlAgUaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UFFnNlbmRTdGFraW5nQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlBZGRpdGlvbmFsQmFsYW5jZQEFB2Fzc2V0SWQFFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2luZ0Fzc2V0QmFsYW5jZQEFDnN0YWtpbmdBc3NldElkBRBuZXdTV2F2ZXNCYWxhbmNlBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFyZWJhbGFuY2VJbnRlcm5hbAYLdGFyZ2V0UmF0aW8HYXNzZXRJZA5zdGFraW5nQXNzZXRJZAptaW5CYWxhbmNlBXByb3h5DHByb3h5UmF0ZU11bAQYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlCQEUZ2V0QWRkaXRpb25hbEJhbGFuY2UBBQdhc3NldElkAwkAAAIFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBBpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQkBFmdldFN0YWtpbmdBc3NldEJhbGFuY2UBBQ5zdGFraW5nQXNzZXRJZAMJAAACBRpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZQUaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UEEGF2YWlsYWJsZUJhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAMJAAACBRBhdmFpbGFibGVCYWxhbmNlBRBhdmFpbGFibGVCYWxhbmNlBAx3aG9sZUJhbGFuY2UJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGQCBRBhdmFpbGFibGVCYWxhbmNlBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFCm1pbkJhbGFuY2UFA25pbAQXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UJAGsDBQt0YXJnZXRSYXRpbwUMd2hvbGVCYWxhbmNlAGQEBGRpZmYJAGUCBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFF3RhcmdldEFkZGl0aW9uYWxCYWxhbmNlAwkAAAIFBGRpZmYAAAUDbmlsAwkAZgIAAAUEZGlmZgQPc2VuZEFzc2V0QW1vdW50CQEBLQEFBGRpZmYJAQdkZXBvc2l0BAUHYXNzZXRJZAUPc2VuZEFzc2V0QW1vdW50BQ5zdGFraW5nQXNzZXRJZAUFcHJveHkEDmdldEFzc2V0QW1vdW50BQRkaWZmCQEId2l0aGRyYXcFBQdhc3NldElkBQ5nZXRBc3NldEFtb3VudAUOc3Rha2luZ0Fzc2V0SWQFBXByb3h5BQxwcm94eVJhdGVNdWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDnJlYmFsYW5jZUFzc2V0AQdhc3NldElkBAckbWF0Y2gwCQETZ2V0TGVhc2VQcm94eUNvbmZpZwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIwKEJvb2xlYW4sIEludCwgSW50LCBTdHJpbmcsIFN0cmluZywgSW50LCBTdHJpbmcpBAFhBQckbWF0Y2gwBAskdDA0ODg5NDk5OAUBYQQKaXNMZWFzYWJsZQgFCyR0MDQ4ODk0OTk4Al8xBAtsZWFzZWRSYXRpbwgFCyR0MDQ4ODk0OTk4Al8yBAptaW5CYWxhbmNlCAULJHQwNDg4OTQ5OTgCXzMEDHByb3h5QWRkcmVzcwgFCyR0MDQ4ODk0OTk4Al80BAxwcm94eUFzc2V0SWQIBQskdDA0ODg5NDk5OAJfNQQMcHJveHlSYXRlTXVsCAULJHQwNDg4OTQ5OTgCXzYEFHN0YWtpbmdQcm9maXRBZGRyZXNzCAULJHQwNDg4OTQ5OTgCXzcDBQppc0xlYXNhYmxlCQERcmViYWxhbmNlSW50ZXJuYWwGBQtsZWFzZWRSYXRpbwUHYXNzZXRJZAUMcHJveHlBc3NldElkBQptaW5CYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA2MikBBQxwcm94eUFkZHJlc3MFDHByb3h5UmF0ZU11bAUDbmlsCQEKdGhyb3dFcnJvcgEJAKwCAgkArAICAgFbBQdhc3NldElkAhFdIFJlYmFsYW5jZSBlcnJvcgEBaQEJcmViYWxhbmNlAAkBDnJlYmFsYW5jZUFzc2V0AQIFV0FWRVMA4i6Mvg==", "height": 2513761, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E2AYH9iR5teHM54BQBnsut7vra1dEtDS9zwSorEAccuK Next: EVWMpF8k1zCAFsSpYSVSPX5GeCi5n3UCiBeuc62qepDN Diff:
OldNewDifferences
1010 func keyAdditionalBalance (assetId) = makeString(["%s%s", "additionalBalance", assetId], SEP)
1111
1212
13+func keyInternalAdditionalBalance (assetId) = makeString(["%s%s", "internalAdditionalBalance", assetId], SEP)
14+
15+
1316 func keyStakingAssetBalance (assetId) = makeString(["%s%s", "stakingAssetBalance", assetId], SEP)
1417
1518
1619 func getAdditionalBalance (assetId) = valueOrElse(getInteger(this, keyAdditionalBalance(assetId)), 0)
20+
21+
22+func getInternalAdditionalBalance (assetId) = valueOrElse(getInteger(this, keyInternalAdditionalBalance(assetId)), 0)
1723
1824
1925 func getStakingAssetBalance (assetId) = valueOrElse(getInteger(this, keyStakingAssetBalance(assetId)), 0)
4652 let currentAdditionalBalance = getAdditionalBalance(assetId)
4753 if ((currentAdditionalBalance == currentAdditionalBalance))
4854 then {
49- let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
50- if ((currentStakingAssetBalance == currentStakingAssetBalance))
55+ let currentInternalAdditionalBalance = getInternalAdditionalBalance(assetId)
56+ if ((currentInternalAdditionalBalance == currentInternalAdditionalBalance))
5157 then {
52- let asset = if ((assetId == "WAVES"))
53- then unit
54- else fromBase58String(assetId)
55- if ((amount > 0))
58+ let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
59+ if ((currentStakingAssetBalance == currentStakingAssetBalance))
5660 then {
57- let depositInvoke = invoke(proxy, "deposit", nil, [AttachedPayment(asset, amount)])
58- if ((depositInvoke == depositInvoke))
59- then match depositInvoke {
60- case receivedStakingAsset: Int =>
61- let newAdditionalBalance = (currentAdditionalBalance + amount)
62- let newSWavesBalance = (currentStakingAssetBalance + receivedStakingAsset)
63-[IntegerEntry(keyAdditionalBalance(assetId), newAdditionalBalance), IntegerEntry(keyStakingAssetBalance(stakingAssetId), newSWavesBalance)]
64- case _ =>
65- nil
66- }
67- else throw("Strict value is not equal to itself.")
61+ let asset = if ((assetId == "WAVES"))
62+ then unit
63+ else fromBase58String(assetId)
64+ if ((amount > 0))
65+ then {
66+ let depositInvoke = invoke(proxy, "deposit", nil, [AttachedPayment(asset, amount)])
67+ if ((depositInvoke == depositInvoke))
68+ then match depositInvoke {
69+ case receivedStakingAsset: Int =>
70+ let newInternalAdditionalBalance = (currentInternalAdditionalBalance + amount)
71+ let newStakingAssetBalance = (currentStakingAssetBalance + receivedStakingAsset)
72+ let additionalBalance = (newInternalAdditionalBalance - newStakingAssetBalance)
73+[IntegerEntry(keyInternalAdditionalBalance(assetId), newInternalAdditionalBalance), IntegerEntry(keyStakingAssetBalance(stakingAssetId), newStakingAssetBalance), IntegerEntry(keyAdditionalBalance(assetId), additionalBalance)]
74+ case _ =>
75+ nil
76+ }
77+ else throw("Strict value is not equal to itself.")
78+ }
79+ else nil
6880 }
69- else nil
81+ else throw("Strict value is not equal to itself.")
7082 }
7183 else throw("Strict value is not equal to itself.")
7284 }
144156 }
145157
146158
147-@Callable(i)
148159 func rebalanceAsset (assetId) = match getLeaseProxyConfig(assetId) {
149160 case a: (Boolean, Int, Int, String, String, Int, String) =>
150- let $t043564465 = a
151- let isLeasable = $t043564465._1
152- let leasedRatio = $t043564465._2
153- let minBalance = $t043564465._3
154- let proxyAddress = $t043564465._4
155- let proxyAssetId = $t043564465._5
156- let proxyRateMul = $t043564465._6
157- let stakingProfitAddress = $t043564465._7
161+ let $t048894998 = a
162+ let isLeasable = $t048894998._1
163+ let leasedRatio = $t048894998._2
164+ let minBalance = $t048894998._3
165+ let proxyAddress = $t048894998._4
166+ let proxyAssetId = $t048894998._5
167+ let proxyRateMul = $t048894998._6
168+ let stakingProfitAddress = $t048894998._7
158169 if (isLeasable)
159170 then rebalanceInternal(leasedRatio, assetId, proxyAssetId, minBalance, addressFromStringValue(proxyAddress), proxyRateMul)
160171 else nil
163174 }
164175
165176
177+@Callable(i)
178+func rebalance () = rebalanceAsset("WAVES")
179+
180+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let contractFile = "rebalance.ride"
77
88 let keyFactoryAddress = "%s__factory"
99
1010 func keyAdditionalBalance (assetId) = makeString(["%s%s", "additionalBalance", assetId], SEP)
1111
1212
13+func keyInternalAdditionalBalance (assetId) = makeString(["%s%s", "internalAdditionalBalance", assetId], SEP)
14+
15+
1316 func keyStakingAssetBalance (assetId) = makeString(["%s%s", "stakingAssetBalance", assetId], SEP)
1417
1518
1619 func getAdditionalBalance (assetId) = valueOrElse(getInteger(this, keyAdditionalBalance(assetId)), 0)
20+
21+
22+func getInternalAdditionalBalance (assetId) = valueOrElse(getInteger(this, keyInternalAdditionalBalance(assetId)), 0)
1723
1824
1925 func getStakingAssetBalance (assetId) = valueOrElse(getInteger(this, keyStakingAssetBalance(assetId)), 0)
2026
2127
2228 func throwError (errorMsg) = throw(((contractFile + ": ") + errorMsg))
2329
2430
2531 func getRate (proxy) = {
2632 let inv = invoke(proxy, "getRate", nil, nil)
2733 if ((inv == inv))
2834 then match inv {
2935 case s: String =>
3036 parseIntValue(s)
3137 case _ =>
3238 throwError("getRate() returned zero")
3339 }
3440 else throw("Strict value is not equal to itself.")
3541 }
3642
3743
3844 func getLeaseProxyConfig (assetId) = {
3945 let factory = addressFromStringValue(valueOrElse(getString(keyFactoryAddress), ""))
4046 let myAddressString = toString(this)
4147 invoke(factory, "getPoolLeaseConfigREADONLY", [myAddressString, assetId], nil)
4248 }
4349
4450
4551 func deposit (assetId,amount,stakingAssetId,proxy) = {
4652 let currentAdditionalBalance = getAdditionalBalance(assetId)
4753 if ((currentAdditionalBalance == currentAdditionalBalance))
4854 then {
49- let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
50- if ((currentStakingAssetBalance == currentStakingAssetBalance))
55+ let currentInternalAdditionalBalance = getInternalAdditionalBalance(assetId)
56+ if ((currentInternalAdditionalBalance == currentInternalAdditionalBalance))
5157 then {
52- let asset = if ((assetId == "WAVES"))
53- then unit
54- else fromBase58String(assetId)
55- if ((amount > 0))
58+ let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
59+ if ((currentStakingAssetBalance == currentStakingAssetBalance))
5660 then {
57- let depositInvoke = invoke(proxy, "deposit", nil, [AttachedPayment(asset, amount)])
58- if ((depositInvoke == depositInvoke))
59- then match depositInvoke {
60- case receivedStakingAsset: Int =>
61- let newAdditionalBalance = (currentAdditionalBalance + amount)
62- let newSWavesBalance = (currentStakingAssetBalance + receivedStakingAsset)
63-[IntegerEntry(keyAdditionalBalance(assetId), newAdditionalBalance), IntegerEntry(keyStakingAssetBalance(stakingAssetId), newSWavesBalance)]
64- case _ =>
65- nil
66- }
67- else throw("Strict value is not equal to itself.")
61+ let asset = if ((assetId == "WAVES"))
62+ then unit
63+ else fromBase58String(assetId)
64+ if ((amount > 0))
65+ then {
66+ let depositInvoke = invoke(proxy, "deposit", nil, [AttachedPayment(asset, amount)])
67+ if ((depositInvoke == depositInvoke))
68+ then match depositInvoke {
69+ case receivedStakingAsset: Int =>
70+ let newInternalAdditionalBalance = (currentInternalAdditionalBalance + amount)
71+ let newStakingAssetBalance = (currentStakingAssetBalance + receivedStakingAsset)
72+ let additionalBalance = (newInternalAdditionalBalance - newStakingAssetBalance)
73+[IntegerEntry(keyInternalAdditionalBalance(assetId), newInternalAdditionalBalance), IntegerEntry(keyStakingAssetBalance(stakingAssetId), newStakingAssetBalance), IntegerEntry(keyAdditionalBalance(assetId), additionalBalance)]
74+ case _ =>
75+ nil
76+ }
77+ else throw("Strict value is not equal to itself.")
78+ }
79+ else nil
6880 }
69- else nil
81+ else throw("Strict value is not equal to itself.")
7082 }
7183 else throw("Strict value is not equal to itself.")
7284 }
7385 else throw("Strict value is not equal to itself.")
7486 }
7587
7688
7789 func withdraw (assetId,amount,stakingAssetId,proxy,proxyRateMul) = {
7890 let currentAdditionalBalance = getAdditionalBalance(assetId)
7991 if ((currentAdditionalBalance == currentAdditionalBalance))
8092 then {
8193 let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
8294 if ((currentStakingAssetBalance == currentStakingAssetBalance))
8395 then {
8496 let currentProxyRate = getRate(proxy)
8597 if ((currentProxyRate == currentProxyRate))
8698 then {
8799 let sendStakingAssetAmount = fraction(proxyRateMul, amount, currentProxyRate)
88100 if ((sendStakingAssetAmount > 0))
89101 then {
90102 let withdrawInvoke = invoke(proxy, "withdraw", nil, [AttachedPayment(fromBase58String(stakingAssetId), sendStakingAssetAmount)])
91103 if ((withdrawInvoke == withdrawInvoke))
92104 then match withdrawInvoke {
93105 case receivedAssets: Int =>
94106 let newAdditionalBalance = (currentAdditionalBalance - receivedAssets)
95107 let newSWavesBalance = (currentStakingAssetBalance - sendStakingAssetAmount)
96108 [IntegerEntry(keyAdditionalBalance(assetId), newAdditionalBalance), IntegerEntry(keyStakingAssetBalance(stakingAssetId), newSWavesBalance)]
97109 case _ =>
98110 nil
99111 }
100112 else throw("Strict value is not equal to itself.")
101113 }
102114 else nil
103115 }
104116 else throw("Strict value is not equal to itself.")
105117 }
106118 else throw("Strict value is not equal to itself.")
107119 }
108120 else throw("Strict value is not equal to itself.")
109121 }
110122
111123
112124 func rebalanceInternal (targetRatio,assetId,stakingAssetId,minBalance,proxy,proxyRateMul) = {
113125 let currentAdditionalBalance = getAdditionalBalance(assetId)
114126 if ((currentAdditionalBalance == currentAdditionalBalance))
115127 then {
116128 let currentStakingAssetBalance = getStakingAssetBalance(stakingAssetId)
117129 if ((currentStakingAssetBalance == currentStakingAssetBalance))
118130 then {
119131 let availableBalance = if ((assetId == "WAVES"))
120132 then wavesBalance(this).available
121133 else assetBalance(this, fromBase58String(assetId))
122134 if ((availableBalance == availableBalance))
123135 then {
124136 let wholeBalance = max([0, ((availableBalance + currentAdditionalBalance) - minBalance)])
125137 let targetAdditionalBalance = fraction(targetRatio, wholeBalance, 100)
126138 let diff = (currentAdditionalBalance - targetAdditionalBalance)
127139 if ((diff == 0))
128140 then nil
129141 else if ((0 > diff))
130142 then {
131143 let sendAssetAmount = -(diff)
132144 deposit(assetId, sendAssetAmount, stakingAssetId, proxy)
133145 }
134146 else {
135147 let getAssetAmount = diff
136148 withdraw(assetId, getAssetAmount, stakingAssetId, proxy, proxyRateMul)
137149 }
138150 }
139151 else throw("Strict value is not equal to itself.")
140152 }
141153 else throw("Strict value is not equal to itself.")
142154 }
143155 else throw("Strict value is not equal to itself.")
144156 }
145157
146158
147-@Callable(i)
148159 func rebalanceAsset (assetId) = match getLeaseProxyConfig(assetId) {
149160 case a: (Boolean, Int, Int, String, String, Int, String) =>
150- let $t043564465 = a
151- let isLeasable = $t043564465._1
152- let leasedRatio = $t043564465._2
153- let minBalance = $t043564465._3
154- let proxyAddress = $t043564465._4
155- let proxyAssetId = $t043564465._5
156- let proxyRateMul = $t043564465._6
157- let stakingProfitAddress = $t043564465._7
161+ let $t048894998 = a
162+ let isLeasable = $t048894998._1
163+ let leasedRatio = $t048894998._2
164+ let minBalance = $t048894998._3
165+ let proxyAddress = $t048894998._4
166+ let proxyAssetId = $t048894998._5
167+ let proxyRateMul = $t048894998._6
168+ let stakingProfitAddress = $t048894998._7
158169 if (isLeasable)
159170 then rebalanceInternal(leasedRatio, assetId, proxyAssetId, minBalance, addressFromStringValue(proxyAddress), proxyRateMul)
160171 else nil
161172 case _ =>
162173 throwError((("[" + assetId) + "] Rebalance error"))
163174 }
164175
165176
177+@Callable(i)
178+func rebalance () = rebalanceAsset("WAVES")
179+
180+

github/deemru/w8io/873ac7e 
42.61 ms