tx · EnKM2uzz3pzDPXm9cNqp41b9z4L9NN5RrPTVvVB9XwHD

3PK96JEnr5x2PjdcXXJJG66ceS6rdPAjQqb:  -0.01000000 Waves

2023.08.03 14:56 [3760006] smart account 3PK96JEnr5x2PjdcXXJJG66ceS6rdPAjQqb > SELF 0.00000000 Waves

{ "type": 13, "id": "EnKM2uzz3pzDPXm9cNqp41b9z4L9NN5RrPTVvVB9XwHD", "fee": 1000000, "feeAssetId": null, "timestamp": 1691063832286, "version": 2, "chainId": 87, "sender": "3PK96JEnr5x2PjdcXXJJG66ceS6rdPAjQqb", "senderPublicKey": "DSBc8x4auxeG7ybvNFBct5Nj7GcYHsSjofJji46zCMu5", "proofs": [ "5WKeepMj32zyB5bTPdicRCq1HHnrnJooZDDVVZfMp86VCHcreWGW6j3dweaw9SgD4mcH3KL8YB716QSH5woaxk3S" ], "script": "base64:BgIECAISACAAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAHV0FWRVNJRAEEE6vZMwAIWFROSURTVFICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAhORVVUUklOTwIjM1BDOUJmUndKV1dpdzlBUkVFMkIzZVd6Q2tzM0NZdGc0eW8AE1dYX1NXQVBfQUREUkVTU19TVFICIzNQNjh6Tml1ZnN1MXZpWnB1MWFZM2NkYWhSUktjdlY1TjkzAA9XWF9TV0FQX0FERFJFU1MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFE1dYX1NXQVBfQUREUkVTU19TVFIAFldYX0ZBQ1RPUllfQUREUkVTU19TVFICIzNQQ3VIc1RVNThXS2hDcW90YmNTd0FCdmRQenFxVkFiYlR2ABNXWF9SRVNUX0FERFJFU1NfU1RSAiMzUDhNb1Buc2F1cm9mazFWeWhzZEFGa2VRNmlqcEpZWENwVwAbV1hfV0FWRVNYVE5QT09MX0FERFJFU1NfU1RSAiMzUFBaV2dGTlJLSEx2TTUxcHdTOTM0QzhWWjdkMkY0WjU4ZwASV1hfV0FWRVNVU0ROTFBfU1RSAiw3S1piSnJWb3B3SmhrZHdiZTFlRkRCYmV4NGRrWTYzTXhqVE5qcVh0cnpqMQASU1dPUEZJX0FERFJFU1NfU1RSAiMzUEhhTmdvbUJrcnZFTDJRbnVKYXJRVkphNzF3anc5cWlxRwAOU1dPUEZJX0FERFJFU1MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFElNXT1BGSV9BRERSRVNTX1NUUgAZU1dPUEZJX09SQUNMRV9BRERSRVNTX1NUUgIjM1BFYnFWaUVSQ29Lbm1jU1VMaDZuMmFpTXZVZFNRZENzb20AFVNXT1BGSV9PUkFDTEVfQUREUkVTUwkBEUBleHRyTmF0aXZlKDEwNjIpAQUZU1dPUEZJX09SQUNMRV9BRERSRVNTX1NUUgEWa2V5TWluRGlzdHJpYnV0ZUFtb3VudAACISVzJXNfX2NvbmZpZ19fbWluRGlzdHJpYnV0ZUFtb3VudAERa2V5Q29udHJvbEFkZHJlc3MAAhwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzARlrZXlMYXN0RGlzdHJpYnV0aW9uSGVpZ2h0AAIlJXMlc19fcnVudGltZV9fbGFzdERpc3RyaWJ1dGlvbkhlaWdodAAPY29udHJvbENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARFrZXlDb250cm9sQWRkcmVzcwACIzNQNUJmZDU4UFBmTnZCTTJIeThRZmJjRHFNZU50emc3S2ZQAQlhc0FueUxpc3QBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55TGlzdAUHJG1hdGNoMAUKdmFsQW55TGlzdAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBDGFzQnl0ZVZlY3RvcgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFpBQckbWF0Y2gwBQFpCQACAQIcZmFpbCB0byBjYXN0IGludG8gQnl0ZVZlY3RvcgENc3dvcGZpSGVhbHRoeQADAwkBEUBleHRyTmF0aXZlKDEwNTEpAgUOU1dPUEZJX0FERFJFU1MCBmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUVU1dPUEZJX09SQUNMRV9BRERSRVNTAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwcJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAmwgCBRVTV09QRklfT1JBQ0xFX0FERFJFU1MJAKwCAgILZGVwcmVjYXRlZF8FElNXT1BGSV9BRERSRVNTX1NUUgcHAApQb29sQWN0aXZlAAEAD1Bvb2xQdXREaXNhYmxlZAACABNQb29sTWF0Y2hlckRpc2FibGVkAAMADFBvb2xTaHV0ZG93bgAEAQ13eFBvb2xIZWFsdGh5AAQGc3RhdHVzCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFldYX0ZBQ1RPUllfQUREUkVTU19TVFICFWdldFBvb2xTdGF0dXNSRUFET05MWQkAzAgCBRtXWF9XQVZFU1hUTlBPT0xfQUREUkVTU19TVFIFA25pbAUDbmlsCQAAAgUGc3RhdHVzBQpQb29sQWN0aXZlAQ1zd29wZmlCYWxhbmNlAAkBEUBleHRyTmF0aXZlKDEwNTApAgUOU1dPUEZJX0FERFJFU1MCD0FfYXNzZXRfYmFsYW5jZQENd3hQb29sQmFsYW5jZQAEDHd4UmVzdFJlc3VsdAkAtQkCCQEIYXNTdHJpbmcBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFE1dYX1JFU1RfQUREUkVTU19TVFICEXBvb2xTdGF0c1JFQURPTkxZCQDMCAIFEldYX1dBVkVTVVNETkxQX1NUUgUDbmlsBQNuaWwCAl9fCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMd3hSZXN0UmVzdWx0AAEBAWkBB2RlZmF1bHQABApidXlCYWNrQW10CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZrZXlNaW5EaXN0cmlidXRlQW1vdW50AAkAaAIAAQUFTVVMVDgDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQDCQECIT0CCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgkAAgECImRhcHAgdG8gZGFwcCBjYWxscyBhcmUgbm90IGFsbG93ZWQEBmZlZUFtdAgFAWkDZmVlBApmZWVBc3NldElkCQELdmFsdWVPckVsc2UCCAUBaQpmZWVBc3NldElkBQdXQVZFU0lEBAphbGxvd2VkRmVlCQBpAgkAaAIABQUFTVVMVDgA6AcEDGNhbGxlclJld2FyZAkAaAIAAgUKYWxsb3dlZEZlZQQXbWluUmVxdWlyZWRXYXZlc0JhbGFuY2UJAGQCBQpidXlCYWNrQW10BQxjYWxsZXJSZXdhcmQECmxhc3RIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBGWtleUxhc3REaXN0cmlidXRpb25IZWlnaHQAAAADCQBmAgABCQBlAgUGaGVpZ2h0BQpsYXN0SGVpZ2h0CQACAQIvb25seSBvbmUgZGlzdHJpYnV0aW9uIHBlciBvbmUgaGVpZ2h0IGlzIGFsbG93ZWQDCQECIT0CBQpmZWVBc3NldElkBQdXQVZFU0lECQACAQIeb25seSBXYXZlcyBjYW4gYmUgdXNlZCBpbiBmZWVzAwkBAiE9AgUGZmVlQW10BQphbGxvd2VkRmVlCQACAQIgZmVlIGFtb3VudCBjb3VsZG4ndCBleGNlZWQgMC4wMDUDCQBmAgUXbWluUmVxdWlyZWRXYXZlc0JhbGFuY2UICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQkArAICAh53YXZlbGV0cyBiYWxhbmNlIGlzIGxlc3MgdGhlbiAJAKQDAQUXbWluUmVxdWlyZWRXYXZlc0JhbGFuY2UEDnd4V2F2ZXNCYWxhbmNlAwkBDXd4UG9vbEhlYWx0aHkACQENd3hQb29sQmFsYW5jZQAAAAQSc3dvcGZpV2F2ZXNCYWxhbmNlAwkBDXN3b3BmaUhlYWx0aHkACQENc3dvcGZpQmFsYW5jZQAAAAQFdG90YWwJAGQCBQ53eFdhdmVzQmFsYW5jZQUSc3dvcGZpV2F2ZXNCYWxhbmNlAwkAAAIFBXRvdGFsAAAFA25pbAQFd3hCdXkJAGsDBQpidXlCYWNrQW10BQ53eFdhdmVzQmFsYW5jZQUFdG90YWwECXN3b3BmaUJ1eQkAawMFCmJ1eUJhY2tBbXQFEnN3b3BmaVdhdmVzQmFsYW5jZQUFdG90YWwECHd4UmVzdWx0AwkAZgIFBXd4QnV5AAAJAPwHBAUPV1hfU1dBUF9BRERSRVNTAgRzd2FwCQDMCAIAAQkAzAgCBQhYVE5JRFNUUgkAzAgCBQhORVVUUklOTwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQV3eEJ1eQUDbmlsBQR1bml0AwkAAAIFCHd4UmVzdWx0BQh3eFJlc3VsdAQMc3dvcGZpQWN0aW9uAwkAZgIFCXN3b3BmaUJ1eQAABAxzd29wZmlSZXN1bHQJAQlhc0FueUxpc3QBCQD8BwQFDlNXT1BGSV9BRERSRVNTAghleGNoYW5nZQkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUJc3dvcGZpQnV5BQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUITkVVVFJJTk8JAQVhc0ludAEJAJEDAgUMc3dvcGZpUmVzdWx0AAAJANkEAQUIWFROSURTVFIFA25pbAUDbmlsCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxjYWxsZXJSZXdhcmQFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJARlrZXlMYXN0RGlzdHJpYnV0aW9uSGVpZ2h0AAUGaGVpZ2h0BQNuaWwFDHN3b3BmaUFjdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgDCTYus", "height": 3760006, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3kvAZ3ssYhsah7kdhB4fAW9KMrccSdLgaEYYQNeDENH7 Next: 4NsdjAEEbaD97FMFH3QHMnxLLe7GJhLsKe8Q8usLWJLM Diff:
OldNewDifferences
7676 }
7777
7878
79-func swopfiHealthy () = if (getBooleanValue(SWOPFI_ADDRESS, "active"))
79+func swopfiHealthy () = if (if (getBooleanValue(SWOPFI_ADDRESS, "active"))
8080 then getBooleanValue(SWOPFI_ORACLE_ADDRESS, "active_all_contracts")
81+ else false)
82+ then !(valueOrElse(getBoolean(SWOPFI_ORACLE_ADDRESS, ("deprecated_" + SWOPFI_ADDRESS_STR)), false))
8183 else false
8284
8385
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT6 = 1000000
77
88 let MULT8 = 100000000
99
1010 let WAVESID = base58'WAVES'
1111
1212 let XTNIDSTR = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
1313
1414 let NEUTRINO = "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo"
1515
1616 let WX_SWAP_ADDRESS_STR = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
1717
1818 let WX_SWAP_ADDRESS = addressFromStringValue(WX_SWAP_ADDRESS_STR)
1919
2020 let WX_FACTORY_ADDRESS_STR = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
2121
2222 let WX_REST_ADDRESS_STR = "3P8MoPnsaurofk1VyhsdAFkeQ6ijpJYXCpW"
2323
2424 let WX_WAVESXTNPOOL_ADDRESS_STR = "3PPZWgFNRKHLvM51pwS934C8VZ7d2F4Z58g"
2525
2626 let WX_WAVESUSDNLP_STR = "7KZbJrVopwJhkdwbe1eFDBbex4dkY63MxjTNjqXtrzj1"
2727
2828 let SWOPFI_ADDRESS_STR = "3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG"
2929
3030 let SWOPFI_ADDRESS = addressFromStringValue(SWOPFI_ADDRESS_STR)
3131
3232 let SWOPFI_ORACLE_ADDRESS_STR = "3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom"
3333
3434 let SWOPFI_ORACLE_ADDRESS = addressFromStringValue(SWOPFI_ORACLE_ADDRESS_STR)
3535
3636 func keyMinDistributeAmount () = "%s%s__config__minDistributeAmount"
3737
3838
3939 func keyControlAddress () = "%s%s__config__controlAddress"
4040
4141
4242 func keyLastDistributionHeight () = "%s%s__runtime__lastDistributionHeight"
4343
4444
4545 let controlContract = addressFromStringValue(valueOrElse(getString(this, keyControlAddress()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP"))
4646
4747 func asAnyList (val) = match val {
4848 case valAnyList: List[Any] =>
4949 valAnyList
5050 case _ =>
5151 throw("fail to cast into List[Any]")
5252 }
5353
5454
5555 func asInt (v) = match v {
5656 case i: Int =>
5757 i
5858 case _ =>
5959 throw("fail to cast into Int")
6060 }
6161
6262
6363 func asString (v) = match v {
6464 case s: String =>
6565 s
6666 case _ =>
6767 throw("fail to cast into String")
6868 }
6969
7070
7171 func asByteVector (v) = match v {
7272 case i: ByteVector =>
7373 i
7474 case _ =>
7575 throw("fail to cast into ByteVector")
7676 }
7777
7878
79-func swopfiHealthy () = if (getBooleanValue(SWOPFI_ADDRESS, "active"))
79+func swopfiHealthy () = if (if (getBooleanValue(SWOPFI_ADDRESS, "active"))
8080 then getBooleanValue(SWOPFI_ORACLE_ADDRESS, "active_all_contracts")
81+ else false)
82+ then !(valueOrElse(getBoolean(SWOPFI_ORACLE_ADDRESS, ("deprecated_" + SWOPFI_ADDRESS_STR)), false))
8183 else false
8284
8385
8486 let PoolActive = 1
8587
8688 let PoolPutDisabled = 2
8789
8890 let PoolMatcherDisabled = 3
8991
9092 let PoolShutdown = 4
9193
9294 func wxPoolHealthy () = {
9395 let status = asInt(invoke(addressFromStringValue(WX_FACTORY_ADDRESS_STR), "getPoolStatusREADONLY", [WX_WAVESXTNPOOL_ADDRESS_STR], nil))
9496 (status == PoolActive)
9597 }
9698
9799
98100 func swopfiBalance () = getIntegerValue(SWOPFI_ADDRESS, "A_asset_balance")
99101
100102
101103 func wxPoolBalance () = {
102104 let wxRestResult = split(asString(invoke(addressFromStringValue(WX_REST_ADDRESS_STR), "poolStatsREADONLY", [WX_WAVESUSDNLP_STR], nil)), "__")
103105 parseIntValue(wxRestResult[1])
104106 }
105107
106108
107109 @Callable(i)
108110 func default () = {
109111 let buyBackAmt = valueOrElse(getInteger(this, keyMinDistributeAmount()), (1 * MULT8))
110112 if ((size(i.payments) != 0))
111113 then throw("no payments are expected")
112114 else if ((i.caller != i.originCaller))
113115 then throw("dapp to dapp calls are not allowed")
114116 else {
115117 let feeAmt = i.fee
116118 let feeAssetId = valueOrElse(i.feeAssetId, WAVESID)
117119 let allowedFee = ((5 * MULT8) / 1000)
118120 let callerReward = (2 * allowedFee)
119121 let minRequiredWavesBalance = (buyBackAmt + callerReward)
120122 let lastHeight = valueOrElse(getInteger(keyLastDistributionHeight()), 0)
121123 if ((1 > (height - lastHeight)))
122124 then throw("only one distribution per one height is allowed")
123125 else if ((feeAssetId != WAVESID))
124126 then throw("only Waves can be used in fees")
125127 else if ((feeAmt != allowedFee))
126128 then throw("fee amount couldn't exceed 0.005")
127129 else if ((minRequiredWavesBalance > wavesBalance(this).available))
128130 then throw(("wavelets balance is less then " + toString(minRequiredWavesBalance)))
129131 else {
130132 let wxWavesBalance = if (wxPoolHealthy())
131133 then wxPoolBalance()
132134 else 0
133135 let swopfiWavesBalance = if (swopfiHealthy())
134136 then swopfiBalance()
135137 else 0
136138 let total = (wxWavesBalance + swopfiWavesBalance)
137139 if ((total == 0))
138140 then nil
139141 else {
140142 let wxBuy = fraction(buyBackAmt, wxWavesBalance, total)
141143 let swopfiBuy = fraction(buyBackAmt, swopfiWavesBalance, total)
142144 let wxResult = if ((wxBuy > 0))
143145 then invoke(WX_SWAP_ADDRESS, "swap", [1, XTNIDSTR, NEUTRINO], [AttachedPayment(unit, wxBuy)])
144146 else unit
145147 if ((wxResult == wxResult))
146148 then {
147149 let swopfiAction = if ((swopfiBuy > 0))
148150 then {
149151 let swopfiResult = asAnyList(invoke(SWOPFI_ADDRESS, "exchange", [1], [AttachedPayment(unit, swopfiBuy)]))
150152 [ScriptTransfer(addressFromStringValue(NEUTRINO), asInt(swopfiResult[0]), fromBase58String(XTNIDSTR))]
151153 }
152154 else nil
153155 ([ScriptTransfer(i.caller, callerReward, unit), IntegerEntry(keyLastDistributionHeight(), height)] ++ swopfiAction)
154156 }
155157 else throw("Strict value is not equal to itself.")
156158 }
157159 }
158160 }
159161 }
160162
161163

github/deemru/w8io/6500d08 
39.04 ms