tx · HWsBV7EkxWfEgq9XPE7hS3izXe8mznUrhSqNEEjW6h8S

3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z:  -0.01000000 Waves

2024.04.02 20:03 [4111341] smart account 3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z > SELF 0.00000000 Waves

{ "type": 13, "id": "HWsBV7EkxWfEgq9XPE7hS3izXe8mznUrhSqNEEjW6h8S", "fee": 1000000, "feeAssetId": null, "timestamp": 1712077463011, "version": 2, "chainId": 87, "sender": "3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z", "senderPublicKey": "Zqe5SqPv6kYySiE63WTvm2zCtWbEqfp7H1DwyaK8H5n", "proofs": [ "9GbnitmYjDtNiBJtAr7oqsHJux3LtATxTapxQMvJueuxa1xxZ4MULoCJ7Vxd6Mq2eYcuJ2bbGuYbSUkES1i6VP7" ], "script": "base64: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Y2VBc3NldEludGVybmFsCQAETAAAAAICAAAABmNvbmZpZwUAAAADbmlsAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAALcG9vbEFkZHJlc3MJAQAAAA5nZXRQb29sQWRkcmVzcwAAAAAEAAAACnBvb2xBc3NldHMJAAS1AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAB2ZhY3RvcnkAAAAACQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwUAAAADU0VQBAAAABNhbW91bnRBc3NldEludGVybmFsCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEEAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAACCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAdmYWN0b3J5AAAAAAkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAQY2hlY2tIZWlnaHREZWx0YQAAAAEAAAALcHJpY2VIZWlnaHQEAAAADm1heEhlaWdodERlbHRhBQAAABVNQVhfUkFURV9IRUlHSFRfREVMVEEEAAAAC2N1cnJlbnREaWZmCQAAZQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0BQAAAAtwcmljZUhlaWdodAMJAABnAAAAAgUAAAAObWF4SGVpZ2h0RGVsdGEFAAAAC2N1cnJlbnREaWZmBQAAAAR1bml0CQAAAgAAAAECAAAAEkxhcmdlIHByaWNlIGRlbHRhLgEAAAATZ2V0QW10QXNzZXRVc2RQcmljZQAAAAAEAAAABnRpY2tlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQkBAAAACWtleVRpY2tlcgAAAAAEAAAAC3ByaWNlSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAGb3JhY2xlAAAAAAkBAAAAGmtleU9yYWNsZVRpY2tlclByaWNlSGVpZ2h0AAAAAQUAAAAGdGlja2VyBAAAAAtjaGVja0hlaWdodAkBAAAAEGNoZWNrSGVpZ2h0RGVsdGEAAAABBQAAAAtwcmljZUhlaWdodAMJAAAAAAAAAgUAAAALY2hlY2tIZWlnaHQFAAAAC2NoZWNrSGVpZ2h0BAAAAAVwcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAABm9yYWNsZQAAAAAJAQAAABRrZXlPcmFjbGVUaWNrZXJQcmljZQAAAAEFAAAABnRpY2tlcgkAAGsAAAADBQAAAAVwcmljZQUAAAAJUFJFQ0lTSU9OBQAAAA9PUkFDTEVfREVDSU1BTFMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAABBnZXRBc3NldFVzZFByaWNlAAAAAAQAAAADY2ZnCQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAABnN0YXR1cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANSWR4UG9vbFN0YXR1cwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwAAAAAAAAAAAQkAAAIAAAABAgAAABRQb29sIGlzIG5vdCBlbmFibGVkLgQAAAAJbHBBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAABBJZHhQb29sTFBBc3NldElkBAAAAAphbXRBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAANSWR4QW10QXNzZXRJZAQAAAALYW10QXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADklkeEFtdEFzc2V0RGNtBAAAAA1wb29sTHBCYWxhbmNlCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAlscEFzc2V0SWQAAAAIcXVhbnRpdHkEAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQkBAAAACHRvU2NhbGU4AAAAAgkBAAAABWFzSW50AAAAAQkAA/wAAAAECQEAAAAEcG9vbAAAAAACAAAAHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAARMAAAAAgUAAAAKYW10QXNzZXRJZAUAAAADbmlsBQAAAANuaWwFAAAAC2FtdEFzc2V0RGNtBAAAABBhY2NBbXRBc3NldFByaWNlCQEAAAATZ2V0QW10QXNzZXRVc2RQcmljZQAAAAAEAAAABXByaWNlCQAAawAAAAMFAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQkAAGgAAAACBQAAABBhY2NBbXRBc3NldFByaWNlAAAAAAAAAAACBQAAAA1wb29sTHBCYWxhbmNlCQAFFAAAAAIFAAAAA25pbAkABEwAAAACBQAAAAVwcmljZQkABEwAAAACBQAAABJhY2NBbXRBc3NldEJhbGFuY2UJAARMAAAAAgUAAAAQYWNjQW10QXNzZXRQcmljZQkABEwAAAACBQAAAA1wb29sTHBCYWxhbmNlBQAAAANuaWwBAAAAD2dldExQQXNzZXRQcmljZQAAAAQAAAAPX2ZhY3RvcnlBZGRyZXNzAAAADF9wb29sQWRkcmVzcwAAAA5fb3JhY2xlQWRkcmVzcwAAAAdfdGlja2VyBAAAAAhkb0NoZWNrcwkABEwAAAACCQEAAAAMY2hlY2tBZGRyZXNzAAAAAQUAAAAPX2ZhY3RvcnlBZGRyZXNzCQAETAAAAAIJAQAAAAxjaGVja0FkZHJlc3MAAAABBQAAAAxfcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAADGNoZWNrQWRkcmVzcwAAAAEFAAAADl9vcmFjbGVBZGRyZXNzBQAAAANuaWwDCQAAAAAAAAIFAAAACGRvQ2hlY2tzBQAAAAhkb0NoZWNrcwQAAAAOZmFjdG9yeUFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAD19mYWN0b3J5QWRkcmVzcwQAAAALcG9vbEFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADF9wb29sQWRkcmVzcwQAAAANb3JhY2xlQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAOX29yYWNsZUFkZHJlc3MEAAAACnBvb2xBc3NldHMJAAS1AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEFAAAADF9wb29sQWRkcmVzcwUAAAADU0VQBAAAABNhbW91bnRBc3NldEludGVybmFsCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEEAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAACBAAAAANjZmcJAAS1AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgUAAAATYW1vdW50QXNzZXRJbnRlcm5hbAUAAAAScHJpY2VBc3NldEludGVybmFsBQAAAANTRVAEAAAABnN0YXR1cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAA2NmZwUAAAANSWR4UG9vbFN0YXR1cwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwAAAAAAAAAAAgkAAAIAAAABAgAAABRQb29sIGlzIG5vdCBlbmFibGVkLgQAAAAJbHBBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAADY2ZnBQAAABBJZHhQb29sTFBBc3NldElkBAAAAAphbXRBc3NldElkCQABkQAAAAIFAAAAA2NmZwUAAAANSWR4QW10QXNzZXRJZAQAAAALYW10QXNzZXREY20JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAANjZmcFAAAADklkeEFtdEFzc2V0RGNtBAAAAA1wb29sTHBCYWxhbmNlCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAlscEFzc2V0SWQAAAAIcXVhbnRpdHkEAAAAEmFjY0FtdEFzc2V0QmFsYW5jZQkBAAAACHRvU2NhbGU4AAAAAgkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAtwb29sQWRkcmVzcwIAAAAcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkABEwAAAACBQAAAAphbXRBc3NldElkBQAAAANuaWwFAAAAA25pbAUAAAALYW10QXNzZXREY20EAAAAC3ByaWNlSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1vcmFjbGVBZGRyZXNzCQEAAAAaa2V5T3JhY2xlVGlja2VyUHJpY2VIZWlnaHQAAAABBQAAAAdfdGlja2VyBAAAAAtjaGVja0hlaWdodAkBAAAAEGNoZWNrSGVpZ2h0RGVsdGEAAAABBQAAAAtwcmljZUhlaWdodAMJAAAAAAAAAgUAAAALY2hlY2tIZWlnaHQFAAAAC2NoZWNrSGVpZ2h0BAAAABBhY2NBbXRBc3NldFByaWNlCQAAawAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAADW9yYWNsZUFkZHJlc3MJAQAAABRrZXlPcmFjbGVUaWNrZXJQcmljZQAAAAEFAAAAB190aWNrZXIFAAAACVBSRUNJU0lPTgUAAAAPT1JBQ0xFX0RFQ0lNQUxTBAAAAAVwcmljZQkAAGsAAAADBQAAABJhY2NBbXRBc3NldEJhbGFuY2UJAABoAAAAAgUAAAAQYWNjQW10QXNzZXRQcmljZQAAAAAAAAAAAgUAAAANcG9vbExwQmFsYW5jZQkABRQAAAACBQAAAANuaWwJAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAASYWNjQW10QXNzZXRCYWxhbmNlCQAETAAAAAIFAAAAEGFjY0FtdEFzc2V0UHJpY2UJAARMAAAAAgUAAAANcG9vbExwQmFsYW5jZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAAAAAAAET7RGA=", "height": 4111341, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7KYL26QUhpsdUjXsk1gwTjx7sbKHk6rZVk7ucPaNRgnX Next: none Diff:
OldNewDifferences
156156 func getAssetUsdPrice () = {
157157 let cfg = getPoolConfig()
158158 let status = parseIntValue(cfg[IdxPoolStatus])
159- if ((status != 2))
159+ if ((status != 1))
160160 then throw("Pool is not enabled.")
161161 else {
162162 let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
182182 let amountAssetInternal = poolAssets[1]
183183 let priceAssetInternal = poolAssets[2]
184184 let cfg = split(getStringValue(factoryAddress, keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
185- let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
186- let amtAssetId = cfg[IdxAmtAssetId]
187- let amtAssetDcm = parseIntValue(cfg[IdxAmtAssetDcm])
188- let poolLpBalance = value(assetInfo(lpAssetId)).quantity
189- let accAmtAssetBalance = toScale8(asInt(invoke(poolAddress, "getAccBalanceWrapperREADONLY", [amtAssetId], nil)), amtAssetDcm)
190- let priceHeight = getIntegerValue(oracleAddress, keyOracleTickerPriceHeight(_ticker))
191- let checkHeight = checkHeightDelta(priceHeight)
192- if ((checkHeight == checkHeight))
193- then {
194- let accAmtAssetPrice = fraction(getIntegerValue(oracleAddress, keyOracleTickerPrice(_ticker)), PRECISION, ORACLE_DECIMALS)
195- let price = fraction(accAmtAssetBalance, (accAmtAssetPrice * 2), poolLpBalance)
196- $Tuple2(nil, [price, accAmtAssetBalance, accAmtAssetPrice, poolLpBalance])
185+ let status = parseIntValue(cfg[IdxPoolStatus])
186+ if ((status != 2))
187+ then throw("Pool is not enabled.")
188+ else {
189+ let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
190+ let amtAssetId = cfg[IdxAmtAssetId]
191+ let amtAssetDcm = parseIntValue(cfg[IdxAmtAssetDcm])
192+ let poolLpBalance = value(assetInfo(lpAssetId)).quantity
193+ let accAmtAssetBalance = toScale8(asInt(invoke(poolAddress, "getAccBalanceWrapperREADONLY", [amtAssetId], nil)), amtAssetDcm)
194+ let priceHeight = getIntegerValue(oracleAddress, keyOracleTickerPriceHeight(_ticker))
195+ let checkHeight = checkHeightDelta(priceHeight)
196+ if ((checkHeight == checkHeight))
197+ then {
198+ let accAmtAssetPrice = fraction(getIntegerValue(oracleAddress, keyOracleTickerPrice(_ticker)), PRECISION, ORACLE_DECIMALS)
199+ let price = fraction(accAmtAssetBalance, (accAmtAssetPrice * 2), poolLpBalance)
200+ $Tuple2(nil, [price, accAmtAssetBalance, accAmtAssetPrice, poolLpBalance])
201+ }
202+ else throw("Strict value is not equal to itself.")
197203 }
198- else throw("Strict value is not equal to itself.")
199204 }
200205 else throw("Strict value is not equal to itself.")
201206 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let DEFAULT_FACTORY = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
55
66 let DECIMAL_18 = 1000000000000000000
77
88 let DECIMAL_10 = 10000000000
99
1010 let DECIMAL_8 = 100000000
1111
1212 let DECIMAL_6 = 1000000
1313
1414 let SEP = "__"
1515
1616 let EMPTY = ""
1717
1818 let PRECISION = 1000000000000
1919
2020 let DECIMALS = 100000000
2121
2222 let MAX_RATE_HEIGHT_DELTA = 5
2323
2424 let ORACLE_DECIMALS = 1000000
2525
2626 func join (ar) = makeString(ar, SEP)
2727
2828
2929 func checkAddress (_address) = match addressFromString(_address) {
3030 case address: Address =>
3131 true
3232 case _: Unit =>
3333 throw("Invalid address")
3434 case _ =>
3535 throw("Match error")
3636 }
3737
3838
3939 func asInt (val) = match val {
4040 case valInt: Int =>
4141 valInt
4242 case _ =>
4343 throw("fail to cast into Int")
4444 }
4545
4646
4747 func asString (val) = match val {
4848 case valStr: String =>
4949 valStr
5050 case _ =>
5151 throw("fail to cast into String")
5252 }
5353
5454
5555 func toScale8 (val,dcm) = {
5656 let k = (DECIMAL_8 / dcm)
5757 (val * k)
5858 }
5959
6060
6161 func toIntScale8 (val) = toInt((val / toBigInt(DECIMAL_18)))
6262
6363
6464 let IdxPoolAddress = 1
6565
6666 let IdxPoolStatus = 2
6767
6868 let IdxPoolLPAssetId = 3
6969
7070 let IdxAmtAssetId = 4
7171
7272 let IdxPriceAssetId = 5
7373
7474 let IdxAmtAssetDcm = 6
7575
7676 let IdxPriceAssetDcm = 7
7777
7878 let IdxIAmtAssetId = 8
7979
8080 let IdxIPriceAssetId = 9
8181
8282 let IdxLPAssetDcm = 10
8383
8484 let IdxPoolType = 11
8585
8686 func keyPoolAddress () = join(["%s", "poolAddress"])
8787
8888
8989 func keyPoolFactoryAddress () = join(["%s", "poolFactoryAddress"])
9090
9191
9292 func keyTicker () = join(["%s", "ticker"])
9393
9494
9595 func keyOracleTickerPriceHeight (ticker) = join(["%s%s", "lastHeight", ticker])
9696
9797
9898 func keyOracleAddress () = join(["%s", "oracleAddress"])
9999
100100
101101 func keyOracleTickerPrice (ticker) = join(["%s%s", "price", ticker])
102102
103103
104104 func getPoolAddress () = getStringValue(keyPoolAddress())
105105
106106
107107 func getPoolFactoryAddress () = valueOrElse(getString(keyPoolFactoryAddress()), DEFAULT_FACTORY)
108108
109109
110110 func pool () = addressFromStringValue(getPoolAddress())
111111
112112
113113 func factory () = addressFromStringValue(getPoolFactoryAddress())
114114
115115
116116 func oracle () = addressFromStringValue(valueOrErrorMessage(getString(keyOracleAddress()), "Oracle is not set"))
117117
118118
119119 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = join(["%s%s%s", poolContractAddress, "mappings", "poolContract2PoolAssets"])
120120
121121
122122 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = join(["%d%d%s", amountAssetInternal, priceAssetInternal, "config"])
123123
124124
125125 func getPoolConfig () = {
126126 let poolAddress = getPoolAddress()
127127 let poolAssets = split(getStringValue(factory(), keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
128128 let amountAssetInternal = poolAssets[1]
129129 let priceAssetInternal = poolAssets[2]
130130 split(getStringValue(factory(), keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
131131 }
132132
133133
134134 func checkHeightDelta (priceHeight) = {
135135 let maxHeightDelta = MAX_RATE_HEIGHT_DELTA
136136 let currentDiff = (lastBlock.height - priceHeight)
137137 if ((maxHeightDelta >= currentDiff))
138138 then unit
139139 else throw("Large price delta.")
140140 }
141141
142142
143143 func getAmtAssetUsdPrice () = {
144144 let ticker = getStringValue(keyTicker())
145145 let priceHeight = getIntegerValue(oracle(), keyOracleTickerPriceHeight(ticker))
146146 let checkHeight = checkHeightDelta(priceHeight)
147147 if ((checkHeight == checkHeight))
148148 then {
149149 let price = getIntegerValue(oracle(), keyOracleTickerPrice(ticker))
150150 fraction(price, PRECISION, ORACLE_DECIMALS)
151151 }
152152 else throw("Strict value is not equal to itself.")
153153 }
154154
155155
156156 func getAssetUsdPrice () = {
157157 let cfg = getPoolConfig()
158158 let status = parseIntValue(cfg[IdxPoolStatus])
159- if ((status != 2))
159+ if ((status != 1))
160160 then throw("Pool is not enabled.")
161161 else {
162162 let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
163163 let amtAssetId = cfg[IdxAmtAssetId]
164164 let amtAssetDcm = parseIntValue(cfg[IdxAmtAssetDcm])
165165 let poolLpBalance = value(assetInfo(lpAssetId)).quantity
166166 let accAmtAssetBalance = toScale8(asInt(invoke(pool(), "getAccBalanceWrapperREADONLY", [amtAssetId], nil)), amtAssetDcm)
167167 let accAmtAssetPrice = getAmtAssetUsdPrice()
168168 let price = fraction(accAmtAssetBalance, (accAmtAssetPrice * 2), poolLpBalance)
169169 $Tuple2(nil, [price, accAmtAssetBalance, accAmtAssetPrice, poolLpBalance])
170170 }
171171 }
172172
173173
174174 func getLPAssetPrice (_factoryAddress,_poolAddress,_oracleAddress,_ticker) = {
175175 let doChecks = [checkAddress(_factoryAddress), checkAddress(_poolAddress), checkAddress(_oracleAddress)]
176176 if ((doChecks == doChecks))
177177 then {
178178 let factoryAddress = addressFromStringValue(_factoryAddress)
179179 let poolAddress = addressFromStringValue(_poolAddress)
180180 let oracleAddress = addressFromStringValue(_oracleAddress)
181181 let poolAssets = split(getStringValue(factoryAddress, keyMappingPoolContractAddressToPoolAssets(_poolAddress)), SEP)
182182 let amountAssetInternal = poolAssets[1]
183183 let priceAssetInternal = poolAssets[2]
184184 let cfg = split(getStringValue(factoryAddress, keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
185- let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
186- let amtAssetId = cfg[IdxAmtAssetId]
187- let amtAssetDcm = parseIntValue(cfg[IdxAmtAssetDcm])
188- let poolLpBalance = value(assetInfo(lpAssetId)).quantity
189- let accAmtAssetBalance = toScale8(asInt(invoke(poolAddress, "getAccBalanceWrapperREADONLY", [amtAssetId], nil)), amtAssetDcm)
190- let priceHeight = getIntegerValue(oracleAddress, keyOracleTickerPriceHeight(_ticker))
191- let checkHeight = checkHeightDelta(priceHeight)
192- if ((checkHeight == checkHeight))
193- then {
194- let accAmtAssetPrice = fraction(getIntegerValue(oracleAddress, keyOracleTickerPrice(_ticker)), PRECISION, ORACLE_DECIMALS)
195- let price = fraction(accAmtAssetBalance, (accAmtAssetPrice * 2), poolLpBalance)
196- $Tuple2(nil, [price, accAmtAssetBalance, accAmtAssetPrice, poolLpBalance])
185+ let status = parseIntValue(cfg[IdxPoolStatus])
186+ if ((status != 2))
187+ then throw("Pool is not enabled.")
188+ else {
189+ let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
190+ let amtAssetId = cfg[IdxAmtAssetId]
191+ let amtAssetDcm = parseIntValue(cfg[IdxAmtAssetDcm])
192+ let poolLpBalance = value(assetInfo(lpAssetId)).quantity
193+ let accAmtAssetBalance = toScale8(asInt(invoke(poolAddress, "getAccBalanceWrapperREADONLY", [amtAssetId], nil)), amtAssetDcm)
194+ let priceHeight = getIntegerValue(oracleAddress, keyOracleTickerPriceHeight(_ticker))
195+ let checkHeight = checkHeightDelta(priceHeight)
196+ if ((checkHeight == checkHeight))
197+ then {
198+ let accAmtAssetPrice = fraction(getIntegerValue(oracleAddress, keyOracleTickerPrice(_ticker)), PRECISION, ORACLE_DECIMALS)
199+ let price = fraction(accAmtAssetBalance, (accAmtAssetPrice * 2), poolLpBalance)
200+ $Tuple2(nil, [price, accAmtAssetBalance, accAmtAssetPrice, poolLpBalance])
201+ }
202+ else throw("Strict value is not equal to itself.")
197203 }
198- else throw("Strict value is not equal to itself.")
199204 }
200205 else throw("Strict value is not equal to itself.")
201206 }
202207
203208
204209

github/deemru/w8io/6500d08 
47.33 ms