tx · Hk1QfMJW8SM95G5F5naXfbrY79bzSp7MG6zi1qztNJRH

3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT:  -0.01800000 Waves

2022.09.03 03:20 [3277726] smart account 3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT > SELF 0.00000000 Waves

{ "type": 13, "id": "Hk1QfMJW8SM95G5F5naXfbrY79bzSp7MG6zi1qztNJRH", "fee": 1800000, "feeAssetId": null, "timestamp": 1662164431675, "version": 2, "chainId": 87, "sender": "3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT", "senderPublicKey": "BjDUSXyo3yUJSxVFdH2pYANz31E6xzH7rdyYLBMRvHE2", "proofs": [ "3838h2W5GbhxBBW2Gd2H2uXXsMgAesuHMbbhkQAHs5C8veAcqCtvsnpCNZfVbzQke43hwWbNot7H5XUMFiUQ7duv" ], "script": "base64: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cnlHZXRTdHJpbmcAAAABAgAAAAxzZXR1cF90b2tlbnMFAAAACmFzc2V0SWRTdHIFAAAABHVuaXQJAAACAAAAAQIAAAApdGhpcyBhc3NldCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXJrZXQJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACl9zdXBwbGllZF8FAAAACmFzc2V0SWRTdHIJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAKX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAD3RvdGFsX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyBQAAAAZhbW91bnQFAAAAA25pbAUAAAARcmF0ZXNSZWNhbGNSZXN1bHQAAAABaQEAAAAId2l0aGRyYXcAAAACAAAACmFzc2V0SWRTdHIAAAALYXNzZXRBbW91bnQEAAAACyR0MDQyNTA0MzE3CQEAAAANZ2V0QWN0dWFsUmF0ZQAAAAIFAAAACmFzc2V0SWRTdHICAAAABXNSYXRlBAAAAAVzUmF0ZQgFAAAACyR0MDQyNTA0MzE3AAAAAl8xBAAAABFyYXRlc1JlY2FsY1Jlc3VsdAgFAAAACyR0MDQyNTA0MzE3AAAAAl8yBAAAAAZhbW91bnQJAABrAAAAAwUAAAALYXNzZXRBbW91bnQFAAAAB1NjYWxlMTYFAAAABXNSYXRlBAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANYXNzZXRTdXBwbGllZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAICAAAAD3RvdGFsX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgQAAAANYXNzZXRCb3Jyb3dlZAkBAAAADXRyeUdldEludGVn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ABJjb2xsYXRlcmFsVmFsdWVJbnYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABeAUAAAAHJG1hdGNoMAUAAAABeAkAAAIAAAABAgAAAB9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkAAGYAAAACBQAAAA11c2RFcXVpdmFsZW50BQAAAA9jb2xsYXRlcmFsVmFsdWUJAAACAAAAAQIAAAAheW91IGhhdmUgdG8gc3VwcGx5IG1vcmUgdG8gYm9ycm93BAAAAA1hc3NldFN1cHBsaWVkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyBAAAAA1hc3NldEJvcnJvd2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyBAAAABF1c2VyQXNzZXRCb3Jyb3dlZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAKX2JvcnJvd2VkXwUAAAAKYXNzZXRJZFN0cgMJAABmAAAAAgUAAAAGYW1vdW50CQAAZQAAAAIFAAAADWFzc2V0U3VwcGxpZWQFAAAADWFzc2V0Qm9ycm93ZWQJAAACAAAAAQIAAAAcdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZQkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAKX2JvcnJvd2VkXwUAAAAKYXNzZXRJZFN0cgkAAGQAAAACBQAAABF1c2VyQXNzZXRCb3Jyb3dlZAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAD3RvdGFsX2JvcnJvd2VkXwUAAAAKYXNzZXRJZFN0cgkAAGQAAAACBQAAAA1hc3NldEJvcnJvd2VkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZhbW91bnQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBQAAABFyYXRlc1JlY2FsY1Jlc3VsdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAFcmVwYXkAAAAAAwkBAAAAASEAAAABCQEAAAANdHJ5R2V0Qm9vbGVhbgAAAAECAAAADHNldHVwX2FjdGl2ZQkAAAIAAAABAgAAABFtYXJrZXQgaXMgc3RvcHBlZAMDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABBgkAAAAAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQAAAAKYXNzZXRJZFN0cgkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAALYXNzZXRBbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAALJHQwNzAzMTcwOTgJAQAAAA1nZXRBY3R1YWxSYXRlAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFYlJhdGUEAAAABWJSYXRlCAUAAAALJHQwNzAzMTcwOTgAAAACXzEEAAAAEXJhdGVzUmVjYWxjUmVzdWx0CAUAAAALJHQwNzAzMTcwOTgAAAACXzIEAAAABmFtb3VudAkAAGsAAAADBQAAAAthc3NldEFtb3VudAUAAAAHU2NhbGUxNgUAAAAFYlJhdGUEAAAAB2FkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA1hc3NldFN1cHBsaWVkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyBAAAAA1hc3NldEJvcnJvd2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyBAAAABF1c2VyQXNzZXRCb3Jyb3dlZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAKX2JvcnJvd2VkXwUAAAAKYXNzZXRJZFN0cgMJAAAAAAAAAgkABLMAAAACCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQIAAAAMc2V0dXBfdG9rZW5zBQAAAAphc3NldElkU3RyBQAAAAR1bml0CQAAAgAAAAECAAAAKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0AwkAAGYAAAACBQAAAAZhbW91bnQFAAAAEXVzZXJBc3NldEJvcnJvd2VkCQAAAgAAAAECAAAAMnBheWVkIGFtb3VudCBpcyBiaWdnZXIgdGhhbiB1c2VyJ3MgYm9ycm93ZWQgYW1vdW50CQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAApfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyCQAAZQAAAAIFAAAAEXVzZXJBc3NldEJvcnJvd2VkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAPdG90YWxfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyCQAAZQAAAAIFAAAADWFzc2V0Qm9ycm93ZWQFAAAABmFtb3VudAUAAAADbmlsBQAAABFyYXRlc1JlY2FsY1Jlc3VsdAAAAAFpAQAAABljYWxjdWxhdGVVdGlsaXphdGlvblJhdGlvAAAAAgAAAAphc3NldElkU3RyAAAABWRlYnVnAwUAAAAFZGVidWcJAAACAAAAAQkAAaQAAAABCQEAAAAFZ2V0VXIAAAABBQAAAAphc3NldElkU3RyCQAFFAAAAAIFAAAAA25pbAkBAAAABWdldFVyAAAAAQUAAAAKYXNzZXRJZFN0cgAAAAFpAQAAABNjYWxjdWxhdGVUb2tlblJhdGVzAAAAAQAAAAVkZWJ1ZwoBAAAAAWYAAAACAAAABWFjY3VtAAAACmFzc2V0SWRTdHIEAAAABXJhdGVzCQEAAAAQdG9r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", "height": 3277726, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GYJWZwD7WSXQr8KvwGF5w2sC3UsCmyyEDbHGHZ1j6ZSJ Next: 2CFoF9fYGsUPz9S28qn443bm8Wa5ont8M9BiqMiNJ9Xr Diff:
OldNewDifferences
198198 let price = getTokenPrice(assetIdStr)._2
199199 let assetScale = pow(10, 0, value(assetInfo(fromBase58String(assetIdStr))).decimals, 0, 0, DOWN)
200200 let usdEquivalent = fraction(amount, price, assetScale)
201- let collateralValueInv = invoke(this, "getUserCollateral", [address], nil)
201+ let collateralValueInv = invoke(this, "getUserCollateral", [false, address, true], nil)
202202 if ((collateralValueInv == collateralValueInv))
203203 then {
204204 let collateralValue = match collateralValueInv {
233233 else {
234234 let assetIdStr = getAssetString(i.payments[0].assetId)
235235 let assetAmount = i.payments[0].amount
236- let $t070187085 = getActualRate(assetIdStr, "bRate")
237- let bRate = $t070187085._1
238- let ratesRecalcResult = $t070187085._2
236+ let $t070317098 = getActualRate(assetIdStr, "bRate")
237+ let bRate = $t070317098._1
238+ let ratesRecalcResult = $t070317098._2
239239 let amount = fraction(assetAmount, Scale16, bRate)
240240 let address = toString(i.caller)
241241 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale8 = 100000000
55
66 let Scale10 = 10000000000
77
88 let Scale16 = (Scale8 * Scale8)
99
1010 let dayBlocks = 1440
1111
1212 func tryGetInteger (key) = match getInteger(this, key) {
1313 case b: Int =>
1414 b
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func tryGetBoolean (key) = match getBoolean(this, key) {
2121 case b: Boolean =>
2222 b
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func tryGetString (key) = match getString(this, key) {
2929 case b: String =>
3030 b
3131 case _ =>
3232 ""
3333 }
3434
3535
3636 func getAssetString (assetId) = match assetId {
3737 case b: ByteVector =>
3838 toBase58String(b)
3939 case _ =>
4040 "WAVES"
4141 }
4242
4343
4444 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
4545 then unit
4646 else fromBase58String(assetIdStr)
4747
4848
4949 func getMarketAssets () = split(tryGetString("setup_tokens"), ",")
5050
5151
5252 func getUr (assetIdStr) = toInt(fraction(toBigInt(Scale8), (toBigInt(tryGetInteger(("total_borrowed_" + assetIdStr))) * toBigInt(tryGetInteger((assetIdStr + "_bRate")))), (toBigInt(tryGetInteger(("total_supplied_" + assetIdStr))) * toBigInt(tryGetInteger((assetIdStr + "_sRate"))))))
5353
5454
5555 func getInterest (assetIdStr) = {
5656 let ur = getUr(assetIdStr)
5757 let dailyInterest = tryGetInteger("setup_interest")
5858 max([(fraction(dailyInterest, ur, dayBlocks) / Scale8), 1])
5959 }
6060
6161
6262 func tokenRatesRecalc (assetIdStr) = {
6363 let interest = getInterest(assetIdStr)
6464 let ur = getUr(assetIdStr)
6565 let lastRecalcHeight = tryGetInteger("lastRateHeight")
6666 let lastBRate = tryGetInteger((assetIdStr + "_bRate"))
6767 let newBRate = (lastBRate + ((height - lastRecalcHeight) * interest))
6868 let lastSRate = tryGetInteger((assetIdStr + "_sRate"))
6969 let newSRate = (lastSRate + ((height - lastRecalcHeight) * fraction(interest, ur, Scale8)))
7070 [IntegerEntry((assetIdStr + "_sRate"), newSRate), IntegerEntry((assetIdStr + "_bRate"), newBRate), IntegerEntry("lastRateHeight", height)]
7171 }
7272
7373
7474 func getActualRate (assetIdStr,rateType) = {
7575 func f (accum,token) = {
7676 let recalc = tokenRatesRecalc(token)
7777 $Tuple2(if ((token != assetIdStr))
7878 then accum._1
7979 else if ((rateType == "sRate"))
8080 then recalc[0].value
8181 else recalc[1].value, (accum._2 ++ recalc))
8282 }
8383
8484 let $l = getMarketAssets()
8585 let $s = size($l)
8686 let $acc0 = $Tuple2(0, nil)
8787 func $f0_1 ($a,$i) = if (($i >= $s))
8888 then $a
8989 else f($a, $l[$i])
9090
9191 func $f0_2 ($a,$i) = if (($i >= $s))
9292 then $a
9393 else throw("List size exceeds 6")
9494
9595 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
9696 }
9797
9898
9999 func ratesRecalc () = {
100100 func f (accum,token) = (accum ++ tokenRatesRecalc(token))
101101
102102 let $l = getMarketAssets()
103103 let $s = size($l)
104104 let $acc0 = nil
105105 func $f0_1 ($a,$i) = if (($i >= $s))
106106 then $a
107107 else f($a, $l[$i])
108108
109109 func $f0_2 ($a,$i) = if (($i >= $s))
110110 then $a
111111 else throw("List size exceeds 6")
112112
113113 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
114114 }
115115
116116
117117 func getTokenPrice (assetIdStr) = if ((assetIdStr == "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS"))
118118 then $Tuple2(15000000, 15000000)
119119 else if ((assetIdStr == "WAVES"))
120120 then $Tuple2(5000000, 5000000)
121121 else $Tuple2(1000000, 1000000)
122122
123123
124124 @Callable(i)
125125 func preInit (tokens,ltvs,dailyPercent) = {
126126 func f (accum,token) = (accum ++ [IntegerEntry((token + "_bRate"), Scale16), IntegerEntry((token + "_sRate"), Scale16)])
127127
128128 let rates = {
129129 let $l = split(tokens, ",")
130130 let $s = size($l)
131131 let $acc0 = nil
132132 func $f0_1 ($a,$i) = if (($i >= $s))
133133 then $a
134134 else f($a, $l[$i])
135135
136136 func $f0_2 ($a,$i) = if (($i >= $s))
137137 then $a
138138 else throw("List size exceeds 6")
139139
140140 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
141141 }
142142 ([StringEntry("setup_tokens", tokens), StringEntry("setup_ltvs", ltvs), IntegerEntry("setup_interest", dailyPercent), BooleanEntry("setup_active", true)] ++ rates)
143143 }
144144
145145
146146
147147 @Callable(i)
148148 func supply () = if (!(tryGetBoolean("setup_active")))
149149 then throw("market is stopped")
150150 else if (if ((size(i.payments) != 1))
151151 then true
152152 else (i.payments[0].amount == 0))
153153 then throw("1 payment has to be attached")
154154 else {
155155 let assetIdStr = getAssetString(i.payments[0].assetId)
156156 let assetAmount = i.payments[0].amount
157157 let $t036193686 = getActualRate(assetIdStr, "sRate")
158158 let sRate = $t036193686._1
159159 let ratesRecalcResult = $t036193686._2
160160 let amount = fraction(assetAmount, Scale16, sRate)
161161 let address = toString(i.caller)
162162 if ((indexOf(tryGetString("setup_tokens"), assetIdStr) == unit))
163163 then throw("this asset is not supported by the market")
164164 else ([IntegerEntry(((address + "_supplied_") + assetIdStr), (tryGetInteger(((address + "_supplied_") + assetIdStr)) + amount)), IntegerEntry(("total_supplied_" + assetIdStr), (tryGetInteger(("total_supplied_" + assetIdStr)) + amount))] ++ ratesRecalcResult)
165165 }
166166
167167
168168
169169 @Callable(i)
170170 func withdraw (assetIdStr,assetAmount) = {
171171 let $t042504317 = getActualRate(assetIdStr, "sRate")
172172 let sRate = $t042504317._1
173173 let ratesRecalcResult = $t042504317._2
174174 let amount = fraction(assetAmount, Scale16, sRate)
175175 let address = toString(i.caller)
176176 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
177177 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
178178 let userAssetSupplied = tryGetInteger(((address + "_supplied_") + assetIdStr))
179179 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
180180 if (!(tryGetBoolean("setup_active")))
181181 then throw("market is stopped")
182182 else if ((amount > (assetSupplied - assetBorrowed)))
183183 then throw("this amount is not available on the market")
184184 else if ((amount > (userAssetSupplied - userAssetBorrowed)))
185185 then throw("this amount is not available for this user")
186186 else ([IntegerEntry(((address + "_supplied_") + assetIdStr), (tryGetInteger(((address + "_supplied_") + assetIdStr)) - amount)), IntegerEntry(("total_supplied_" + assetIdStr), (tryGetInteger(("total_supplied_" + assetIdStr)) - amount)), ScriptTransfer(i.caller, amount, getAssetBytes(assetIdStr))] ++ ratesRecalcResult)
187187 }
188188
189189
190190
191191 @Callable(i)
192192 func borrow (assetIdStr,assetAmount) = {
193193 let address = toString(i.caller)
194194 let $t054625529 = getActualRate(assetIdStr, "bRate")
195195 let bRate = $t054625529._1
196196 let ratesRecalcResult = $t054625529._2
197197 let amount = fraction(assetAmount, Scale16, bRate)
198198 let price = getTokenPrice(assetIdStr)._2
199199 let assetScale = pow(10, 0, value(assetInfo(fromBase58String(assetIdStr))).decimals, 0, 0, DOWN)
200200 let usdEquivalent = fraction(amount, price, assetScale)
201- let collateralValueInv = invoke(this, "getUserCollateral", [address], nil)
201+ let collateralValueInv = invoke(this, "getUserCollateral", [false, address, true], nil)
202202 if ((collateralValueInv == collateralValueInv))
203203 then {
204204 let collateralValue = match collateralValueInv {
205205 case x: Int =>
206206 x
207207 case _ =>
208208 throw("can't get user collateral value")
209209 }
210210 if ((usdEquivalent > collateralValue))
211211 then throw("you have to supply more to borrow")
212212 else {
213213 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
214214 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
215215 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
216216 if ((amount > (assetSupplied - assetBorrowed)))
217217 then throw("this amount is not available")
218218 else ([IntegerEntry(((address + "_borrowed_") + assetIdStr), (userAssetBorrowed + amount)), IntegerEntry(("total_borrowed_" + assetIdStr), (assetBorrowed + amount)), ScriptTransfer(i.caller, amount, getAssetBytes(assetIdStr))] ++ ratesRecalcResult)
219219 }
220220 }
221221 else throw("Strict value is not equal to itself.")
222222 }
223223
224224
225225
226226 @Callable(i)
227227 func repay () = if (!(tryGetBoolean("setup_active")))
228228 then throw("market is stopped")
229229 else if (if ((size(i.payments) != 1))
230230 then true
231231 else (i.payments[0].amount == 0))
232232 then throw("1 payment has to be attached")
233233 else {
234234 let assetIdStr = getAssetString(i.payments[0].assetId)
235235 let assetAmount = i.payments[0].amount
236- let $t070187085 = getActualRate(assetIdStr, "bRate")
237- let bRate = $t070187085._1
238- let ratesRecalcResult = $t070187085._2
236+ let $t070317098 = getActualRate(assetIdStr, "bRate")
237+ let bRate = $t070317098._1
238+ let ratesRecalcResult = $t070317098._2
239239 let amount = fraction(assetAmount, Scale16, bRate)
240240 let address = toString(i.caller)
241241 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
242242 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
243243 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
244244 if ((indexOf(tryGetString("setup_tokens"), assetIdStr) == unit))
245245 then throw("this asset is not supported by the market")
246246 else if ((amount > userAssetBorrowed))
247247 then throw("payed amount is bigger than user's borrowed amount")
248248 else ([IntegerEntry(((address + "_borrowed_") + assetIdStr), (userAssetBorrowed - amount)), IntegerEntry(("total_borrowed_" + assetIdStr), (assetBorrowed - amount))] ++ ratesRecalcResult)
249249 }
250250
251251
252252
253253 @Callable(i)
254254 func calculateUtilizationRatio (assetIdStr,debug) = if (debug)
255255 then throw(toString(getUr(assetIdStr)))
256256 else $Tuple2(nil, getUr(assetIdStr))
257257
258258
259259
260260 @Callable(i)
261261 func calculateTokenRates (debug) = {
262262 func f (accum,assetIdStr) = {
263263 let rates = tokenRatesRecalc(assetIdStr)
264264 ((((accum + toString(rates[1].value)) + "|") + toString(rates[0].value)) + ",")
265265 }
266266
267267 let parameter = {
268268 let $l = getMarketAssets()
269269 let $s = size($l)
270270 let $acc0 = ""
271271 func $f0_1 ($a,$i) = if (($i >= $s))
272272 then $a
273273 else f($a, $l[$i])
274274
275275 func $f0_2 ($a,$i) = if (($i >= $s))
276276 then $a
277277 else throw("List size exceeds 6")
278278
279279 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
280280 }
281281 if (debug)
282282 then throw(parameter)
283283 else $Tuple2(nil, parameter)
284284 }
285285
286286
287287
288288 @Callable(i)
289289 func calculateTokensInterest (debug) = {
290290 let dailyInterest = tryGetInteger("setup_interest")
291291 func f (accum,assetIdStr) = {
292292 let ur = getUr(assetIdStr)
293293 let rate = max([fraction(dailyInterest, ur, Scale8), dayBlocks])
294294 ((accum + toString(rate)) + ",")
295295 }
296296
297297 let parameter = {
298298 let $l = getMarketAssets()
299299 let $s = size($l)
300300 let $acc0 = ""
301301 func $f0_1 ($a,$i) = if (($i >= $s))
302302 then $a
303303 else f($a, $l[$i])
304304
305305 func $f0_2 ($a,$i) = if (($i >= $s))
306306 then $a
307307 else throw("List size exceeds 6")
308308
309309 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
310310 }
311311 if (debug)
312312 then throw(parameter)
313313 else $Tuple2(nil, parameter)
314314 }
315315
316316
317317
318318 @Callable(i)
319319 func getUserCollateral (debug,address,minusBorrowed) = {
320320 let assets = getMarketAssets()
321321 let ltvs = split(tryGetString("setup_ltvs"), ",")
322322 let rates = getActualRate(assets[0], "sRate")._2
323323 func f (accum,next) = if ((next >= size(assets)))
324324 then accum
325325 else {
326326 let assetScale = pow(10, 0, value(assetInfo(fromBase58String(assets[next]))).decimals, 0, 0, DOWN)
327327 let assetPrice = getTokenPrice(assets[next])
328328 ((accum + fraction(fraction(fraction(tryGetInteger(((address + "_supplied_") + assets[next])), rates[(next * 3)].value, Scale16), parseIntValue(ltvs[next]), Scale8), assetPrice._1, assetScale)) - (if (minusBorrowed)
329329 then fraction(fraction(tryGetInteger(((address + "_borrowed_") + assets[next])), rates[((next * 3) + 1)].value, Scale16), assetPrice._2, assetScale)
330330 else 0))
331331 }
332332
333333 let result = {
334334 let $l = [0, 1, 2, 3, 4, 5]
335335 let $s = size($l)
336336 let $acc0 = 0
337337 func $f0_1 ($a,$i) = if (($i >= $s))
338338 then $a
339339 else f($a, $l[$i])
340340
341341 func $f0_2 ($a,$i) = if (($i >= $s))
342342 then $a
343343 else throw("List size exceeds 6")
344344
345345 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
346346 }
347347 if (debug)
348348 then throw(toString(result))
349349 else $Tuple2(rates, result)
350350 }
351351
352352
353353 @Verifier(tx)
354354 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
355355

github/deemru/w8io/3ef1775 
73.59 ms