tx · 2i1jQW5DFctdbaq769vF1dYZg7FgqGJV8e7yRmmpk2Zb

3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z:  -0.01000000 Waves

2024.02.01 14:06 [4022851] smart account 3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z > SELF 0.00000000 Waves

{ "type": 13, "id": "2i1jQW5DFctdbaq769vF1dYZg7FgqGJV8e7yRmmpk2Zb", "fee": 1000000, "feeAssetId": null, "timestamp": 1706785599413, "version": 2, "chainId": 87, "sender": "3PChRF3AsJG9YX78ED7wkXLwgCz6LuJBT1Z", "senderPublicKey": "Zqe5SqPv6kYySiE63WTvm2zCtWbEqfp7H1DwyaK8H5n", "proofs": [ "5me4AZRWYjYY2gkrHx2foiPYcNvGbtK4vAD6wcTsr1dPypSGmBSfWGJ1qEnPi3uYJuxk9w6ZeuussANuvY4Tn6Vx" ], "script": "base64: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a2V5UG9vbEFkZHJlc3MAAAAAAQAAABVnZXRQb29sRmFjdG9yeUFkZHJlc3MAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEJAQAAABVrZXlQb29sRmFjdG9yeUFkZHJlc3MAAAAABQAAAA9ERUZBVUxUX0ZBQ1RPUlkBAAAABHBvb2wAAAAACQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAOZ2V0UG9vbEFkZHJlc3MAAAAAAQAAAAdmYWN0b3J5AAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAFWdldFBvb2xGYWN0b3J5QWRkcmVzcwAAAAABAAAABm9yYWNsZQAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAQa2V5T3JhY2xlQWRkcmVzcwAAAAACAAAAEU9yYWNsZSBpcyBub3Qgc2V0AQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkBAAAABGpvaW4AAAABCQAETAAAAAICAAAABiVzJXMlcwkABEwAAAACBQAAABNwb29sQ29udHJhY3RBZGRyZXNzCQAETAAAAAICAAAACG1hcHBpbmdzCQAETAAAAAICAAAAF3Bvb2xDb250cmFjdDJQb29sQXNzZXRzBQAAAANuaWwBAAAADWtleVBvb2xDb25maWcAAAACAAAAE2Ftb3VudEFzc2V0SW50ZXJuYWwAAAAScHJpY2VBc3NldEludGVybmFsCQEAAAAEam9pbgAAAAEJAARMAAAAAgIAAAAGJWQlZCVzCQAETAAAAAIFAAAAE2Ftb3VudEFzc2V0SW50ZXJuYWwJAARMAAAAAgUAAAAScHJpY2VBc3NldEludGVybmFsCQAETAAAAAICAAAABmNvbmZpZwUAAAADbmlsAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAALcG9vbEFkZHJlc3MJAQAAAA5nZXRQb29sQWRkcmVzcwAAAAAEAAAACnBvb2xBc3NldHMJAAS1AAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAAB2ZhY3RvcnkAAAAACQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwUAAAADU0VQBAAAABNhbW91bnRBc3NldEludGVybmFsCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEEAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAACCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAdmYWN0b3J5AAAAAAkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAQY2hlY2tIZWlnaHREZWx0YQAAAAEAAAALcHJpY2VIZWlnaHQEAAAADm1heEhlaWdodERlbHRhBQAAABVNQVhfUkFURV9IRUlHSFRfREVMVEEEAAAAC2N1cnJlbnREaWZmCQAAZQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0BQAAAAtwcmljZUhlaWdodAMJAABnAAAAAgUAAAAObWF4SGVpZ2h0RGVsdGEFAAAAC2N1cnJlbnREaWZmBQAAAAR1bml0CQAAAgAAAAECAAAAEkxhcmdlIHByaWNlIGRlbHRhLgEAAAATZ2V0QW10QXNzZXRVc2RQcmljZQAAAAAEAAAABnRpY2tlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQkBAAAACWtleVRpY2tlcgAAAAAEAAAAC3ByaWNlSGVpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACCQEAAAAGb3JhY2xlAAAAAAkBAAAAGmtleU9yYWNsZVRpY2tlclByaWNlSGVpZ2h0AAAAAQUAAAAGdGlja2VyBAAAAAtjaGVja0hlaWdodAkBAAAAEGNoZWNrSGVpZ2h0RGVsdGEAAAABBQAAAAtwcmljZUhlaWdodAMJAAAAAAAAAgUAAAALY2hlY2tIZWlnaHQFAAAAC2NoZWNrSGVpZ2h0BAAAAAVwcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAABm9y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", "height": 4022851, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BCHCeG5kUqPm1GRRg8KEDiUWDod8EgCanB1Xc3BrtfQs Next: HvUr2B356u5yF9UmXMi8LaSzcVFtt1MxGzpDjgGqb1px Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let DEFAULT_FACTORY = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
55
6-let DECIMAL_18 = toBigInt(1000000000000000000)
6+let DECIMAL_18 = 1000000000000000000
77
88 let SEP = "__"
99
2828 case _ =>
2929 throw("Match error")
3030 }
31+
32+
33+func asInt (val) = match val {
34+ case valInt: Int =>
35+ valInt
36+ case _ =>
37+ throw("fail to cast into Int")
38+}
39+
40+
41+func asString (val) = match val {
42+ case valStr: String =>
43+ valStr
44+ case _ =>
45+ throw("fail to cast into String")
46+}
47+
48+
49+func toIntScale8 (val) = toInt((val / toBigInt(10000000000)))
3150
3251
3352 let IdxPoolAddress = 1
91110 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = join(["%d%d%s", amountAssetInternal, priceAssetInternal, "config"])
92111
93112
94-func asInt (val) = match val {
95- case valInt: Int =>
96- valInt
97- case _ =>
98- throw("fail to cast into Int")
99-}
100-
101-
102-func asString (val) = match val {
103- case valStr: String =>
104- valStr
105- case _ =>
106- throw("fail to cast into String")
107-}
108-
109-
110113 func getPoolConfig () = {
111114 let poolAddress = getPoolAddress()
112115 let poolAssets = split(getStringValue(factory(), keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
147150 let accAmtAssetBalance = asInt(invoke(pool(), "getAccBalanceWrapperREADONLY", [amtAssetId], nil))
148151 let accPriceAssetBalance = asInt(invoke(pool(), "getAccBalanceWrapperREADONLY", [priceAssetId], nil))
149152 let accPriceAssetPrice = if ((poolLpBalance == 0))
150- then toBigInt(0)
151- else parseBigIntValue({
153+ then 0
154+ else toIntScale8(parseBigIntValue({
152155 let @ = ({
153156 let @ = invoke(pool(), "calcPricesWrapperREADONLY", [accAmtAssetBalance, accPriceAssetBalance, poolLpBalance], nil)
154157 if ($isInstanceOf(@, "List[Any]"))
158161 if ($isInstanceOf(@, "String"))
159162 then @
160163 else throw("Couldn't cast Any to String")
161- })
162- let accAmtAssetEq = (toBigInt(accAmtAssetBalance) + fraction(toBigInt(accPriceAssetBalance), DECIMAL_18, accPriceAssetPrice))
164+ }))
165+ let accAmtAssetEq = (accAmtAssetBalance + fraction(accPriceAssetBalance, DECIMAL_18, accPriceAssetPrice))
163166 let accAmtAssetPrice = getAmtAssetUsdPrice()
164- let LPPrice = fraction(accAmtAssetEq, toBigInt(accAmtAssetPrice), toBigInt(poolLpBalance))
165- $Tuple2(nil, [LPPrice, accPriceAssetPrice, accAmtAssetPrice, poolLpBalance])
167+ let LPPrice = fraction(accAmtAssetEq, accAmtAssetPrice, poolLpBalance)
168+ $Tuple2(nil, [poolLpBalance, accAmtAssetBalance, accPriceAssetBalance, accAmtAssetEq, accAmtAssetPrice, LPPrice])
166169 }
167170
168171
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let DEFAULT_FACTORY = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
55
6-let DECIMAL_18 = toBigInt(1000000000000000000)
6+let DECIMAL_18 = 1000000000000000000
77
88 let SEP = "__"
99
1010 let EMPTY = ""
1111
1212 let PRECISION = 1000000000000
1313
1414 let DECIMALS = 100000000
1515
1616 let MAX_RATE_HEIGHT_DELTA = 5
1717
1818 let ORACLE_DECIMALS = 1000000
1919
2020 func join (ar) = makeString(ar, SEP)
2121
2222
2323 func checkAddress (_address) = match addressFromString(_address) {
2424 case address: Address =>
2525 true
2626 case _: Unit =>
2727 throw("Invalid address")
2828 case _ =>
2929 throw("Match error")
3030 }
31+
32+
33+func asInt (val) = match val {
34+ case valInt: Int =>
35+ valInt
36+ case _ =>
37+ throw("fail to cast into Int")
38+}
39+
40+
41+func asString (val) = match val {
42+ case valStr: String =>
43+ valStr
44+ case _ =>
45+ throw("fail to cast into String")
46+}
47+
48+
49+func toIntScale8 (val) = toInt((val / toBigInt(10000000000)))
3150
3251
3352 let IdxPoolAddress = 1
3453
3554 let IdxPoolStatus = 2
3655
3756 let IdxPoolLPAssetId = 3
3857
3958 let IdxAmtAssetId = 4
4059
4160 let IdxPriceAssetId = 5
4261
4362 let IdxAmtAssetDcm = 6
4463
4564 let IdxPriceAssetDcm = 7
4665
4766 let IdxIAmtAssetId = 8
4867
4968 let IdxIPriceAssetId = 9
5069
5170 let IdxLPAssetDcm = 10
5271
5372 let IdxPoolType = 11
5473
5574 func keyPoolAddress () = join(["%s", "poolAddress"])
5675
5776
5877 func keyPoolFactoryAddress () = join(["%s", "poolFactoryAddress"])
5978
6079
6180 func keyTicker () = join(["%s", "ticker"])
6281
6382
6483 func keyOracleTickerPriceHeight (ticker) = join(["%s%s", "lastHeight", ticker])
6584
6685
6786 func keyOracleAddress () = join(["%s", "oracleAddress"])
6887
6988
7089 func keyOracleTickerPrice (ticker) = join(["%s%s", "price", ticker])
7190
7291
7392 func getPoolAddress () = getStringValue(keyPoolAddress())
7493
7594
7695 func getPoolFactoryAddress () = valueOrElse(getString(keyPoolFactoryAddress()), DEFAULT_FACTORY)
7796
7897
7998 func pool () = addressFromStringValue(getPoolAddress())
8099
81100
82101 func factory () = addressFromStringValue(getPoolFactoryAddress())
83102
84103
85104 func oracle () = addressFromStringValue(valueOrErrorMessage(getString(keyOracleAddress()), "Oracle is not set"))
86105
87106
88107 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = join(["%s%s%s", poolContractAddress, "mappings", "poolContract2PoolAssets"])
89108
90109
91110 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = join(["%d%d%s", amountAssetInternal, priceAssetInternal, "config"])
92111
93112
94-func asInt (val) = match val {
95- case valInt: Int =>
96- valInt
97- case _ =>
98- throw("fail to cast into Int")
99-}
100-
101-
102-func asString (val) = match val {
103- case valStr: String =>
104- valStr
105- case _ =>
106- throw("fail to cast into String")
107-}
108-
109-
110113 func getPoolConfig () = {
111114 let poolAddress = getPoolAddress()
112115 let poolAssets = split(getStringValue(factory(), keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
113116 let amountAssetInternal = poolAssets[1]
114117 let priceAssetInternal = poolAssets[2]
115118 split(getStringValue(factory(), keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
116119 }
117120
118121
119122 func checkHeightDelta (priceHeight) = {
120123 let maxHeightDelta = MAX_RATE_HEIGHT_DELTA
121124 let currentDiff = (lastBlock.height - priceHeight)
122125 if ((maxHeightDelta >= currentDiff))
123126 then unit
124127 else throw("Large price delta.")
125128 }
126129
127130
128131 func getAmtAssetUsdPrice () = {
129132 let ticker = getStringValue(keyTicker())
130133 let priceHeight = getIntegerValue(oracle(), keyOracleTickerPriceHeight(ticker))
131134 let checkHeight = checkHeightDelta(priceHeight)
132135 if ((checkHeight == checkHeight))
133136 then {
134137 let price = getIntegerValue(oracle(), keyOracleTickerPrice(ticker))
135138 fraction(price, PRECISION, ORACLE_DECIMALS)
136139 }
137140 else throw("Strict value is not equal to itself.")
138141 }
139142
140143
141144 func getAssetUsdPrice () = {
142145 let cfg = getPoolConfig()
143146 let lpAssetId = fromBase58String(cfg[IdxPoolLPAssetId])
144147 let amtAssetId = cfg[IdxAmtAssetId]
145148 let priceAssetId = cfg[IdxPriceAssetId]
146149 let poolLpBalance = value(assetInfo(lpAssetId)).quantity
147150 let accAmtAssetBalance = asInt(invoke(pool(), "getAccBalanceWrapperREADONLY", [amtAssetId], nil))
148151 let accPriceAssetBalance = asInt(invoke(pool(), "getAccBalanceWrapperREADONLY", [priceAssetId], nil))
149152 let accPriceAssetPrice = if ((poolLpBalance == 0))
150- then toBigInt(0)
151- else parseBigIntValue({
153+ then 0
154+ else toIntScale8(parseBigIntValue({
152155 let @ = ({
153156 let @ = invoke(pool(), "calcPricesWrapperREADONLY", [accAmtAssetBalance, accPriceAssetBalance, poolLpBalance], nil)
154157 if ($isInstanceOf(@, "List[Any]"))
155158 then @
156159 else throw("Couldn't cast Any to List[Any]")
157160 })[0]
158161 if ($isInstanceOf(@, "String"))
159162 then @
160163 else throw("Couldn't cast Any to String")
161- })
162- let accAmtAssetEq = (toBigInt(accAmtAssetBalance) + fraction(toBigInt(accPriceAssetBalance), DECIMAL_18, accPriceAssetPrice))
164+ }))
165+ let accAmtAssetEq = (accAmtAssetBalance + fraction(accPriceAssetBalance, DECIMAL_18, accPriceAssetPrice))
163166 let accAmtAssetPrice = getAmtAssetUsdPrice()
164- let LPPrice = fraction(accAmtAssetEq, toBigInt(accAmtAssetPrice), toBigInt(poolLpBalance))
165- $Tuple2(nil, [LPPrice, accPriceAssetPrice, accAmtAssetPrice, poolLpBalance])
167+ let LPPrice = fraction(accAmtAssetEq, accAmtAssetPrice, poolLpBalance)
168+ $Tuple2(nil, [poolLpBalance, accAmtAssetBalance, accPriceAssetBalance, accAmtAssetEq, accAmtAssetPrice, LPPrice])
166169 }
167170
168171
169172 @Callable(i)
170173 func initialize (_oracleAddress,_poolAddress,_ticker) = {
171174 let doChecks = [checkAddress(_oracleAddress), checkAddress(_poolAddress)]
172175 if ((doChecks == doChecks))
173176 then [StringEntry(keyOracleAddress(), _oracleAddress), StringEntry(keyPoolAddress(), _poolAddress), StringEntry(keyTicker(), _ticker)]
174177 else throw("Strict value is not equal to itself.")
175178 }
176179
177180
178181
179182 @Callable(i)
180183 func getCurrentUsdPrice () = $Tuple2(nil, getAssetUsdPrice())
181184
182185
183186 @Verifier(tx)
184187 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
185188

github/deemru/w8io/6500d08 
32.92 ms