tx · A8wyAFT36JqSVrNFNpEDCfxHCrHYmPQZMBiYeBtBvaHh

3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT:  -0.01700000 Waves

2022.09.01 14:07 [3275466] smart account 3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT > SELF 0.00000000 Waves

{ "type": 13, "id": "A8wyAFT36JqSVrNFNpEDCfxHCrHYmPQZMBiYeBtBvaHh", "fee": 1700000, "feeAssetId": null, "timestamp": 1662030473502, "version": 2, "chainId": 87, "sender": "3PEhGDwvjrjVKRPv5kHkjfDLmBJK1dd2frT", "senderPublicKey": "BjDUSXyo3yUJSxVFdH2pYANz31E6xzH7rdyYLBMRvHE2", "proofs": [ "4ZESbqwPmUVm6RZayVjgr1RLY5yDNhnD59nmYirTg4sMEgo8gxfxy9ZvGAw2epec64RN4zmHd7DQgi9PD4CEzCCe" ], "script": "base64:AAIFAAAAAAAAACsIAhIFCgMECAQSBQoDCAgBEgASBAoCCAESBAoCCAESABIECgIIBBIDCgEEAAAAEQAAAAAGU2NhbGU4AAAAAAAF9eEAAAAAAAdTY2FsZTEwAAAAAAJUC+QAAAAAAAdTY2FsZTE2CQAAaAAAAAIFAAAABlNjYWxlOAUAAAAGU2NhbGU4AAAAAAlkYXlCbG9ja3MAAAAAAAAABaABAAAADXRyeUdldEludGVnZXIAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAEAAAANdHJ5R2V0Qm9vbGVhbgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAgAAAAABAAAADmdldEFzc2V0U3RyaW5nAAAAAQAAAAdhc3NldElkBAAAAAckbWF0Y2gwBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAFiBQAAAAckbWF0Y2gwCQACWAAAAAEFAAAAAWICAAAABVdBVkVTAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQAAAAphc3NldElkU3RyAwkAAAAAAAACBQAAAAphc3NldElkU3RyAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAphc3NldElkU3RyAQAAAA9nZXRNYXJrZXRBc3NldHMAAAAACQAEtQAAAAIJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAAAxzZXR1cF90b2tlbnMCAAAAASwBAAAAC2dldEludGVyZXN0AAAAAQAAAAphc3NldElkU3RyCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADnNldHVwX2ludGVyZXN0AQAAAAVnZXRVcgAAAAEAAAAKYXNzZXRJZFN0cgkAAaAAAAABCQABPAAAAAMJAAE2AAAAAQUAAAAGU2NhbGU4CQABOQAAAAIJAAE2AAAAAQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAICAAAAD3RvdGFsX2JvcnJvd2VkXwUAAAAKYXNzZXRJZFN0cgkAATYAAAABCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAGX2JSYXRlCQABOQAAAAIJAAE2AAAAAQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAICAAAAD3RvdGFsX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgkAATYAAAABCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAGX3NSYXRlAQAAAA10b2tlblJhdGVzR2V0AAAAAQAAAAphc3NldElkU3RyBAAAAAhpbnRlcmVzdAkBAAAAC2dldEludGVyZXN0AAAAAQUAAAAKYXNzZXRJZFN0cgQAAAACdXIJAQAAAAVnZXRVcgAAAAEFAAAACmFzc2V0SWRTdHIEAAAAEGxhc3RSZWNhbGNIZWlnaHQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAObGFzdFJhdGVIZWlnaHQEAAAACWxhc3RCUmF0ZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFzc2V0SWRTdHICAAAABl9iUmF0ZQQAAAAKYlJhdGVBZGRlZAkAAGgAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAAQbGFzdFJlY2FsY0hlaWdodAkAAGsAAAADBQAAAAhpbnRlcmVzdAUAAAAGU2NhbGU4BQAAAAlkYXlCbG9ja3MEAAAACG5ld0JSYXRlCQAAZAAAAAIFAAAACWxhc3RCUmF0ZQUAAAAKYlJhdGVBZGRlZAQAAAAJbGFzdFNSYXRlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAGX3NSYXRlBAAAAAhuZXdTUmF0ZQkAAGQAAAACBQAA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AAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAPdG90YWxfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACAgAAAA90b3RhbF9zdXBwbGllZF8FAAAACmFzc2V0SWRTdHIFAAAABmFtb3VudAUAAAADbmlsBQAAABFyYXRlc1JlY2FsY1Jlc3VsdAAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAKYXNzZXRJZFN0cgAAAAthc3NldEFtb3VudAQAAAALJHQwNTc3NjU4NDMJAQAAAA1nZXRBY3R1YWxSYXRlAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFc1JhdGUEAAAABXNSYXRlCAUAAAALJHQwNTc3NjU4NDMAAAACXzEEAAAAEXJhdGVzUmVjYWxjUmVzdWx0CAUAAAALJHQwNTc3NjU4NDMAAAACXzIEAAAABmFtb3VudAkAAGsAAAADBQAAAAthc3NldEFtb3VudAUAAAAHU2NhbGUxNgUAAAAFc1JhdGUEAAAAB2FkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA1hc3NldFN1cHBsaWVkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyBAAAAA1hc3NldEJvcnJvd2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgIAAAAPdG90YWxfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyBAAAABF1c2VyQXNzZXRTdXBwbGllZAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAKX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgQAAAARdXNlckFzc2V0Qm9ycm93ZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACl9ib3Jyb3dlZF8FAAAACmFzc2V0SWRTdHIDCQEAAAABIQAAAAEJAQAAAA10cnlHZXRCb29sZWFuAAAAAQIAAAAMc2V0dXBfYWN0aXZlCQAAAgAAAAECAAAAEW1hcmtldCBpcyBzdG9wcGVkAwkAAGYAAAACBQAAAAZhbW91bnQJAABlAAAAAgUAAAANYXNzZXRTdXBwbGllZAUAAAANYXNzZXRCb3Jyb3dlZAkAAAIAAAABAgAAACp0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBtYXJrZXQDCQAAZgAAAAIFAAAABmFtb3VudAkAAGUAAAACBQAAABF1c2VyQXNzZXRTdXBwbGllZAUAAAARdXNlckFzc2V0Qm9ycm93ZWQJAAACAAAAAQIAAAAqdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAApfc3VwcGxpZWRfBQAAAAphc3NldElkU3RyCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACl9zdXBwbGllZF8FAAAACmFzc2V0SWRTdHIFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA90b3RhbF9zdXBwbGllZF8FAAAACmFzc2V0SWRTdHIJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAICAAAAD3RvdGFsX3N1cHBsaWVkXwUAAAAKYXNzZXRJZFN0cgUAAAAGYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAACmFzc2V0SWRTdHIFAAAAA25pbAUAAAARcmF0ZXNSZWNhbGNSZXN1bHQAAAABaQEAAAAGYm9ycm93AAAAAgAAAAphc3NldElkU3RyAAAAC2Fzc2V0QW1vdW50BAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALJHQwNjk4ODcwNTUJAQAAAA1nZXRBY3R1YWxSYXRlAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFYlJhdGUEAAAABWJSYXRlCAUAAAALJHQwNjk4ODcwNTUAAAACXzEEAAAAEXJhdGVzUmVjYWxjUmVzdWx0CAUAAAALJHQwNjk4ODcwNTUAAAACXzIEAAAABmFtb3VudAkAAGsAAAADBQAAAAthc3NldEFtb3VudAUAAAAHU2NhbGUxNgUAAAAFYlJhdGUDBwkAAAIAAAABAgAAACF5b3UgaGF2ZSB0byBzdXBwbHkgbW9yZSB0byBib3Jyb3cEAAAADWFzc2V0U3VwcGxpZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACAgAAAA90b3RhbF9zdXBwbGllZF8FAAAACmFzc2V0SWRTdHIEAAAADWFzc2V0Qm9ycm93ZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACAgAAAA90b3RhbF9ib3Jyb3dlZF8FAAAACmFzc2V0SWRTdHIEAAAAEXVzZXJBc3NldEJvcnJvd2VkCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAApfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyAwkAAGYAAAACBQAAAAZhbW91bnQJAABlAAAAAgUAAAANYXNzZXRTdXBwbGllZAUAAAANYXNzZXRCb3Jyb3dlZAkAAAIAAAABAgAAABx0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdhZGRyZXNzAgAAAApfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyCQAAZAAAAAIFAAAAEXVzZXJBc3NldEJvcnJvd2VkBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAPdG90YWxfYm9ycm93ZWRfBQAAAAphc3NldElkU3RyCQAAZAAAAAIFAAAADWFzc2V0Qm9ycm93ZWQFAAAABmFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAkBAAAADWdldEFzc2V0Qnl0ZXMAAAABBQAAAAphc3NldElk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", "height": 3275466, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6t6ZmPtw1dik6fhreZ1atzSdCXUivL2y1Y4puiEngk61 Next: 5gvrjmZGgB5kRfbag5hRUN5aa65yGMH5t21Ww392jgmP Diff:
OldNewDifferences
161161 }
162162 if (debug)
163163 then throw(toString(result))
164- else $Tuple2(nil, result)
164+ else $Tuple2(rates, result)
165165 }
166166
167167
199199 else {
200200 let assetIdStr = getAssetString(i.payments[0].assetId)
201201 let assetAmount = i.payments[0].amount
202- let $t051425209 = getActualRate(assetIdStr, "sRate")
203- let sRate = $t051425209._1
204- let ratesRecalcResult = $t051425209._2
202+ let $t051455212 = getActualRate(assetIdStr, "sRate")
203+ let sRate = $t051455212._1
204+ let ratesRecalcResult = $t051455212._2
205205 let amount = fraction(assetAmount, Scale16, sRate)
206206 let address = toString(i.caller)
207207 if ((indexOf(tryGetString("setup_tokens"), assetIdStr) == unit))
213213
214214 @Callable(i)
215215 func withdraw (assetIdStr,assetAmount) = {
216- let $t057735840 = getActualRate(assetIdStr, "sRate")
217- let sRate = $t057735840._1
218- let ratesRecalcResult = $t057735840._2
216+ let $t057765843 = getActualRate(assetIdStr, "sRate")
217+ let sRate = $t057765843._1
218+ let ratesRecalcResult = $t057765843._2
219219 let amount = fraction(assetAmount, Scale16, sRate)
220220 let address = toString(i.caller)
221221 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
236236 @Callable(i)
237237 func borrow (assetIdStr,assetAmount) = {
238238 let address = toString(i.caller)
239- let $t069857052 = getActualRate(assetIdStr, "bRate")
240- let bRate = $t069857052._1
241- let ratesRecalcResult = $t069857052._2
239+ let $t069887055 = getActualRate(assetIdStr, "bRate")
240+ let bRate = $t069887055._1
241+ let ratesRecalcResult = $t069887055._2
242242 let amount = fraction(assetAmount, Scale16, bRate)
243243 if (false)
244244 then throw("you have to supply more to borrow")
264264 else {
265265 let assetIdStr = getAssetString(i.payments[0].assetId)
266266 let assetAmount = i.payments[0].amount
267- let $t081318198 = getActualRate(assetIdStr, "bRate")
268- let bRate = $t081318198._1
269- let ratesRecalcResult = $t081318198._2
267+ let $t081348201 = getActualRate(assetIdStr, "bRate")
268+ let bRate = $t081348201._1
269+ let ratesRecalcResult = $t081348201._2
270270 let amount = fraction(assetAmount, Scale16, bRate)
271271 let address = toString(i.caller)
272272 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 getInterest (assetIdStr) = tryGetInteger("setup_interest")
5353
5454
5555 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"))))))
5656
5757
5858 func tokenRatesGet (assetIdStr) = {
5959 let interest = getInterest(assetIdStr)
6060 let ur = getUr(assetIdStr)
6161 let lastRecalcHeight = tryGetInteger("lastRateHeight")
6262 let lastBRate = tryGetInteger((assetIdStr + "_bRate"))
6363 let bRateAdded = ((height - lastRecalcHeight) * fraction(interest, Scale8, dayBlocks))
6464 let newBRate = (lastBRate + bRateAdded)
6565 let lastSRate = tryGetInteger((assetIdStr + "_sRate"))
6666 let newSRate = (lastSRate + fraction(bRateAdded, ur, Scale8))
6767 ((toString(newBRate) + "|") + toString(newSRate))
6868 }
6969
7070
7171 func tokenRatesRecalc (assetIdStr) = {
7272 let interest = getInterest(assetIdStr)
7373 let ur = getUr(assetIdStr)
7474 let lastRecalcHeight = tryGetInteger("lastRateHeight")
7575 let lastBRate = tryGetInteger((assetIdStr + "_bRate"))
7676 let newBRate = (lastBRate + ((height - lastRecalcHeight) * interest))
7777 let lastSRate = tryGetInteger((assetIdStr + "_sRate"))
7878 let newSRate = (lastSRate + ((height - lastRecalcHeight) * fraction(interest, ur, Scale8)))
7979 [IntegerEntry((assetIdStr + "_sRate"), newSRate), IntegerEntry((assetIdStr + "_bRate"), newBRate), IntegerEntry("lastRateHeight", height)]
8080 }
8181
8282
8383 func getActualRate (assetIdStr,rateType) = {
8484 func f (accum,token) = {
8585 let recalc = tokenRatesRecalc(token)
8686 $Tuple2(if ((token != assetIdStr))
8787 then accum._1
8888 else if ((rateType == "sRate"))
8989 then recalc[0].value
9090 else recalc[1].value, (accum._2 ++ recalc))
9191 }
9292
9393 let $l = getMarketAssets()
9494 let $s = size($l)
9595 let $acc0 = $Tuple2(0, nil)
9696 func $f0_1 ($a,$i) = if (($i >= $s))
9797 then $a
9898 else f($a, $l[$i])
9999
100100 func $f0_2 ($a,$i) = if (($i >= $s))
101101 then $a
102102 else throw("List size exceeds 8")
103103
104104 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
105105 }
106106
107107
108108 func ratesRecalc () = {
109109 func f (accum,token) = (accum ++ tokenRatesRecalc(token))
110110
111111 let $l = getMarketAssets()
112112 let $s = size($l)
113113 let $acc0 = nil
114114 func $f0_1 ($a,$i) = if (($i >= $s))
115115 then $a
116116 else f($a, $l[$i])
117117
118118 func $f0_2 ($a,$i) = if (($i >= $s))
119119 then $a
120120 else throw("List size exceeds 8")
121121
122122 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
123123 }
124124
125125
126126 func getTokenPrice (assetIdStr) = if ((assetIdStr == "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS"))
127127 then $Tuple2(15000000, 15000000)
128128 else if ((assetIdStr == "WAVES"))
129129 then $Tuple2(5000000, 5000000)
130130 else $Tuple2(1000000, 1000000)
131131
132132
133133 @Callable(i)
134134 func getUserAvailableLoanValue (debug,address,minusBorrowed) = {
135135 let assets = getMarketAssets()
136136 let ltvs = split(tryGetString("setup_ltvs"), ",")
137137 let rates = getActualRate(assets[0], "sRate")._2
138138 func f (accum,next) = if ((next >= size(assets)))
139139 then accum
140140 else {
141141 let assetScale = pow(10, 0, value(assetInfo(fromBase58String(assets[next]))).decimals, 0, 0, DOWN)
142142 let assetPrice = getTokenPrice(assets[next])
143143 ((accum + fraction(fraction(fraction(tryGetInteger(((address + "_supplied_") + assets[next])), rates[(next * 3)].value, Scale16), parseIntValue(ltvs[next]), Scale8), assetPrice._1, assetScale)) - (if (minusBorrowed)
144144 then fraction(fraction(tryGetInteger(((address + "_borrowed_") + assets[next])), rates[((next * 3) + 1)].value, Scale16), assetPrice._2, assetScale)
145145 else 0))
146146 }
147147
148148 let result = {
149149 let $l = [0, 1, 2, 3, 4, 5, 6, 7]
150150 let $s = size($l)
151151 let $acc0 = 0
152152 func $f0_1 ($a,$i) = if (($i >= $s))
153153 then $a
154154 else f($a, $l[$i])
155155
156156 func $f0_2 ($a,$i) = if (($i >= $s))
157157 then $a
158158 else throw("List size exceeds 8")
159159
160160 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
161161 }
162162 if (debug)
163163 then throw(toString(result))
164- else $Tuple2(nil, result)
164+ else $Tuple2(rates, result)
165165 }
166166
167167
168168
169169 @Callable(i)
170170 func preInit (tokens,ltvs,dailyPercent) = {
171171 func f (accum,token) = (accum ++ [IntegerEntry((token + "_bRate"), Scale16), IntegerEntry((token + "_sRate"), Scale16)])
172172
173173 let rates = {
174174 let $l = split(tokens, ",")
175175 let $s = size($l)
176176 let $acc0 = nil
177177 func $f0_1 ($a,$i) = if (($i >= $s))
178178 then $a
179179 else f($a, $l[$i])
180180
181181 func $f0_2 ($a,$i) = if (($i >= $s))
182182 then $a
183183 else throw("List size exceeds 8")
184184
185185 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
186186 }
187187 ([StringEntry("setup_tokens", tokens), StringEntry("setup_ltvs", ltvs), IntegerEntry("setup_interest", dailyPercent), BooleanEntry("setup_active", true)] ++ rates)
188188 }
189189
190190
191191
192192 @Callable(i)
193193 func supply () = if (!(tryGetBoolean("setup_active")))
194194 then throw("market is stopped")
195195 else if (if ((size(i.payments) != 1))
196196 then true
197197 else (i.payments[0].amount == 0))
198198 then throw("1 payment has to be attached")
199199 else {
200200 let assetIdStr = getAssetString(i.payments[0].assetId)
201201 let assetAmount = i.payments[0].amount
202- let $t051425209 = getActualRate(assetIdStr, "sRate")
203- let sRate = $t051425209._1
204- let ratesRecalcResult = $t051425209._2
202+ let $t051455212 = getActualRate(assetIdStr, "sRate")
203+ let sRate = $t051455212._1
204+ let ratesRecalcResult = $t051455212._2
205205 let amount = fraction(assetAmount, Scale16, sRate)
206206 let address = toString(i.caller)
207207 if ((indexOf(tryGetString("setup_tokens"), assetIdStr) == unit))
208208 then throw("this asset is not supported by the market")
209209 else ([IntegerEntry(((address + "_supplied_") + assetIdStr), (tryGetInteger(((address + "_supplied_") + assetIdStr)) + amount)), IntegerEntry(("total_supplied_" + assetIdStr), (tryGetInteger(("total_supplied_" + assetIdStr)) + amount))] ++ ratesRecalcResult)
210210 }
211211
212212
213213
214214 @Callable(i)
215215 func withdraw (assetIdStr,assetAmount) = {
216- let $t057735840 = getActualRate(assetIdStr, "sRate")
217- let sRate = $t057735840._1
218- let ratesRecalcResult = $t057735840._2
216+ let $t057765843 = getActualRate(assetIdStr, "sRate")
217+ let sRate = $t057765843._1
218+ let ratesRecalcResult = $t057765843._2
219219 let amount = fraction(assetAmount, Scale16, sRate)
220220 let address = toString(i.caller)
221221 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
222222 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
223223 let userAssetSupplied = tryGetInteger(((address + "_supplied_") + assetIdStr))
224224 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
225225 if (!(tryGetBoolean("setup_active")))
226226 then throw("market is stopped")
227227 else if ((amount > (assetSupplied - assetBorrowed)))
228228 then throw("this amount is not available on the market")
229229 else if ((amount > (userAssetSupplied - userAssetBorrowed)))
230230 then throw("this amount is not available for this user")
231231 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)
232232 }
233233
234234
235235
236236 @Callable(i)
237237 func borrow (assetIdStr,assetAmount) = {
238238 let address = toString(i.caller)
239- let $t069857052 = getActualRate(assetIdStr, "bRate")
240- let bRate = $t069857052._1
241- let ratesRecalcResult = $t069857052._2
239+ let $t069887055 = getActualRate(assetIdStr, "bRate")
240+ let bRate = $t069887055._1
241+ let ratesRecalcResult = $t069887055._2
242242 let amount = fraction(assetAmount, Scale16, bRate)
243243 if (false)
244244 then throw("you have to supply more to borrow")
245245 else {
246246 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
247247 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
248248 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
249249 if ((amount > (assetSupplied - assetBorrowed)))
250250 then throw("this amount is not available")
251251 else ([IntegerEntry(((address + "_borrowed_") + assetIdStr), (userAssetBorrowed + amount)), IntegerEntry(("total_borrowed_" + assetIdStr), (assetBorrowed + amount)), ScriptTransfer(i.caller, amount, getAssetBytes(assetIdStr))] ++ ratesRecalcResult)
252252 }
253253 }
254254
255255
256256
257257 @Callable(i)
258258 func repay () = if (!(tryGetBoolean("setup_active")))
259259 then throw("market is stopped")
260260 else if (if ((size(i.payments) != 1))
261261 then true
262262 else (i.payments[0].amount == 0))
263263 then throw("1 payment has to be attached")
264264 else {
265265 let assetIdStr = getAssetString(i.payments[0].assetId)
266266 let assetAmount = i.payments[0].amount
267- let $t081318198 = getActualRate(assetIdStr, "bRate")
268- let bRate = $t081318198._1
269- let ratesRecalcResult = $t081318198._2
267+ let $t081348201 = getActualRate(assetIdStr, "bRate")
268+ let bRate = $t081348201._1
269+ let ratesRecalcResult = $t081348201._2
270270 let amount = fraction(assetAmount, Scale16, bRate)
271271 let address = toString(i.caller)
272272 let assetSupplied = tryGetInteger(("total_supplied_" + assetIdStr))
273273 let assetBorrowed = tryGetInteger(("total_borrowed_" + assetIdStr))
274274 let userAssetBorrowed = tryGetInteger(((address + "_borrowed_") + assetIdStr))
275275 if ((indexOf(tryGetString("setup_tokens"), assetIdStr) == unit))
276276 then throw("this asset is not supported by the market")
277277 else if ((amount > userAssetBorrowed))
278278 then throw("payed amount is bigger than user's borrowed amount")
279279 else ([IntegerEntry(((address + "_borrowed_") + assetIdStr), (userAssetBorrowed - amount)), IntegerEntry(("total_borrowed_" + assetIdStr), (assetBorrowed - amount))] ++ ratesRecalcResult)
280280 }
281281
282282
283283
284284 @Callable(i)
285285 func calculateUtilizationRatio (assetIdStr,debug) = if (debug)
286286 then throw(toString(getUr(assetIdStr)))
287287 else $Tuple2(nil, getUr(assetIdStr))
288288
289289
290290
291291 @Callable(i)
292292 func calculateTokenRates (debug) = {
293293 func f (accum,assetIdStr) = ((accum + tokenRatesGet(assetIdStr)) + ",")
294294
295295 let parameter = {
296296 let $l = getMarketAssets()
297297 let $s = size($l)
298298 let $acc0 = ""
299299 func $f0_1 ($a,$i) = if (($i >= $s))
300300 then $a
301301 else f($a, $l[$i])
302302
303303 func $f0_2 ($a,$i) = if (($i >= $s))
304304 then $a
305305 else throw("List size exceeds 8")
306306
307307 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
308308 }
309309 if (debug)
310310 then throw(parameter)
311311 else $Tuple2(nil, parameter)
312312 }
313313
314314
315315 @Verifier(tx)
316316 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
317317

github/deemru/w8io/3ef1775 
63.76 ms