tx · ELy36RtVUhM4cRTatj7zeUM26ictd9qQ8tPhkPeXcvgf

3MvGMtmdY1eSW4iY922zj5bx8hBfyP1qgHo:  -0.04000000 Waves

2021.09.05 01:00 [1688872] smart account 3MvGMtmdY1eSW4iY922zj5bx8hBfyP1qgHo > SELF 0.00000000 Waves

{ "type": 13, "id": "ELy36RtVUhM4cRTatj7zeUM26ictd9qQ8tPhkPeXcvgf", "fee": 4000000, "feeAssetId": null, "timestamp": 1630792801940, "version": 2, "chainId": 84, "sender": "3MvGMtmdY1eSW4iY922zj5bx8hBfyP1qgHo", "senderPublicKey": "CD4N2SBeZVBUwmtsqwfmQ3ZKnBP3AxpZCvJ5QkHytUed", "proofs": [ "3EU7UUEVQsbeAZjUFJa49MoHZBme3aPKYX9e3T7NiJdK5TqQMghE6f2efSKtHYgGzynuSEhFfMfk2zP6Ut2xHHC1" ], "script": "base64:AAIFAAAAAAAAACIIAhIECgIIGBIDCgEIEgMKAQgSBAoCCAQSAwoBCBIDCgEIAAAADAAAAAAGY29uZmlnCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzAgAAAAZjb25maWcCAAAAAAAAAAAFYWRtaW4JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAABmNvbmZpZwIAAAAFYWRtaW4CAAAAAAAAAAAFcG9vbHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMCAAAABXBvb2xzAgAAAAABAAAAB2lzQWRtaW4AAAABAAAADWNhbGxlckFkZHJlc3MDCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAABWFkbWluBgcBAAAACWNoZWNrUG9vbAAAAAEAAAAHcG9vbEFkZAMJAQAAAAhjb250YWlucwAAAAIFAAAABXBvb2xzBQAAAAdwb29sQWRkBgcBAAAAC3dyaXRlU3RyaW5nAAAAAgAAAANrZXkAAAALc3RyaW5nVmFsdWUJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAALc3RyaW5nVmFsdWUBAAAADHdyaXRlSW50ZWdlcgAAAAIAAAADa2V5AAAADGludGVnZXJWYWx1ZQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAMaW50ZWdlclZhbHVlAQAAABJjaGVja1Bvb2xMaXF1aWRpdHkAAAACAAAAC3Bvb2xBZGRyZXNzAAAABmFtb3VudAQAAAALdG90YWxTdXBwbHkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAC3Bvb2xBZGRyZXNzAgAAAAt0b3RhbFN1cHBseQQAAAALdG90YWxCb3Jyb3cJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAC3Bvb2xBZGRyZXNzAgAAAAt0b3RhbEJvcnJvdwQAAAASYXZhaWxhYmxlTGlxdWlkaXR5CQAAZQAAAAIFAAAAC3RvdGFsU3VwcGx5BQAAAAt0b3RhbEJvcnJvdwMJAABnAAAAAgUAAAASYXZhaWxhYmxlTGlxdWlkaXR5BQAAAAZhbW91bnQGBwEAAAASZ2V0SGVhbHRoUGFyYW1ldGVyAAAABgAAAAR1c2VyAAAAC3Bvb2xBZGRyZXNzAAAADW5ld0RlYnRBbW91bnQAAAAJbmV3RGVidElkAAAAEGNvbGxhdGVyYWxBbW91bnQAAAAMY29sbGF0ZXJhbElkBAAAAAZyZXN1bHQJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALcG9vbEFkZHJlc3MCAAAAFmdldFVzZXJIZWFsdGhQYXJhbWV0ZXIJAARMAAAAAgUAAAAEdXNlcgkABEwAAAACBQAAABBjb2xsYXRlcmFsQW1vdW50CQAETAAAAAIFAAAADGNvbGxhdGVyYWxJZAkABEwAAAACBQAAAA1uZXdEZWJ0QW1vdW50CQAETAAAAAIFAAAACW5ld0RlYnRJZAUAAAADbmlsBQAAAANuaWwEAAAAByRtYXRjaDAFAAAABnJlc3VsdAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKKEludCwgSW50KQQAAAABdAUAAAAHJG1hdGNoMAUAAAABdAkAAAIAAAABAgAAAA5Xcm9uZyBEYXRhdHlwIQEAAAAQY2FsY0hlYWx0aEZhY3RvcgAAAAIAAAAOYm9ycm93Q2FwYWNpdHkAAAASYm9ycm93Q2FwYWNpdHlVc2VkCQAAawAAAAMJAABlAAAAAgUAAAAOYm9ycm93Q2FwYWNpdHkFAAAAEmJvcnJvd0NhcGFjaXR5VXNlZAAAAAAAAAAD6AUAAAAOYm9ycm93Q2FwYWNpdHkBAAAAE2NhbGNCb3Jyb3dDQm9ycm93Q1UAAAAFAAAABHVzZXIAAAANbmV3RGVidEFtb3VudAAAAAluZXdEZWJ0SWQAAAAQY29sbGF0ZXJhbEFtb3VudAAAAAxjb2xsYXRlcmFsSWQEAAAACHBvb2xMaXN0CQAEtQAAAAIFAAAABXBvb2xzAgAAAAE7BAAAAAhsaXN0U2l6ZQkAAZAAAAAB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", "height": 1688872, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2ehweuJj3L4cs8z2KexseLPW9khArwqqVXp2s389N2jm Next: 9QR8esDcrJZjo3oK8ufJsz3Hhq7Zn8MaiQxfnSv6GLuP Diff:
OldNewDifferences
2121
2222
2323 func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
24+
25+
26+func checkPoolLiquidity (poolAddress,amount) = {
27+ let totalSupply = getIntegerValue(addressFromStringValue(poolAddress), "totalSupply")
28+ let totalBorrow = getIntegerValue(addressFromStringValue(poolAddress), "totalBorrow")
29+ let availableLiquidity = (totalSupply - totalBorrow)
30+ if ((availableLiquidity >= amount))
31+ then true
32+ else false
33+ }
34+
35+
36+func getHealthParameter (user,poolAddress,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
37+ let result = invoke(addressFromStringValue(poolAddress), "getUserHealthParameter", [user, collateralAmount, collateralId, newDebtAmount, newDebtId], nil)
38+ match result {
39+ case t: (Int, Int) =>
40+ t
41+ case _ =>
42+ throw("Wrong Datatyp!")
43+ }
44+ }
45+
46+
47+func calcHealthFactor (borrowCapacity,borrowCapacityUsed) = fraction((borrowCapacity - borrowCapacityUsed), 1000, borrowCapacity)
48+
49+
50+func calcBorrowCBorrowCU (user,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
51+ let poolList = split(pools, ";")
52+ let listSize = size(poolList)
53+ func foldPools (accum,next) = {
54+ let healthParams = getHealthParameter(user, next, newDebtAmount, newDebtId, collateralAmount, collateralId)
55+ match healthParams {
56+ case t: (Int, Int) =>
57+ $Tuple2((accum._1 + healthParams._1), (accum._2 + healthParams._1))
58+ case e =>
59+ throw("Test")
60+ }
61+ }
62+
63+ let $list22872321 = poolList
64+ let $size22872321 = size($list22872321)
65+ let $acc022872321 = $Tuple2(0, 0)
66+ if (($size22872321 == 0))
67+ then $acc022872321
68+ else {
69+ let $acc122872321 = foldPools($acc022872321, $list22872321[0])
70+ if (($size22872321 == 1))
71+ then $acc122872321
72+ else {
73+ let $acc222872321 = foldPools($acc122872321, $list22872321[1])
74+ if (($size22872321 == 2))
75+ then $acc222872321
76+ else {
77+ let $acc322872321 = foldPools($acc222872321, $list22872321[2])
78+ throw("List size exceed 2")
79+ }
80+ }
81+ }
82+ }
83+
84+
85+func checkUserHealth (user,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
86+ let bcBcu = calcBorrowCBorrowCU(user, newDebtAmount, newDebtId, collateralAmount, collateralId)
87+ let userHealth = calcHealthFactor(bcBcu._1, bcBcu._2)
88+ if ((userHealth >= 0))
89+ then true
90+ else false
91+ }
2492
2593
2694 @Callable(i)
135203 else throw("Pool address not found!")
136204
137205
138-@Verifier(tx)
139-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
140-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let config = valueOrElse(getStringValue(this, "config"), "")
55
66 let admin = valueOrElse(getStringValue(addressFromStringValue(config), "admin"), "")
77
88 let pools = valueOrElse(getStringValue(this, "pools"), "")
99
1010 func isAdmin (callerAddress) = if ((callerAddress == addressFromStringValue(admin)))
1111 then true
1212 else false
1313
1414
1515 func checkPool (poolAdd) = if (contains(pools, poolAdd))
1616 then true
1717 else false
1818
1919
2020 func writeString (key,stringValue) = StringEntry(key, stringValue)
2121
2222
2323 func writeInteger (key,integerValue) = IntegerEntry(key, integerValue)
24+
25+
26+func checkPoolLiquidity (poolAddress,amount) = {
27+ let totalSupply = getIntegerValue(addressFromStringValue(poolAddress), "totalSupply")
28+ let totalBorrow = getIntegerValue(addressFromStringValue(poolAddress), "totalBorrow")
29+ let availableLiquidity = (totalSupply - totalBorrow)
30+ if ((availableLiquidity >= amount))
31+ then true
32+ else false
33+ }
34+
35+
36+func getHealthParameter (user,poolAddress,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
37+ let result = invoke(addressFromStringValue(poolAddress), "getUserHealthParameter", [user, collateralAmount, collateralId, newDebtAmount, newDebtId], nil)
38+ match result {
39+ case t: (Int, Int) =>
40+ t
41+ case _ =>
42+ throw("Wrong Datatyp!")
43+ }
44+ }
45+
46+
47+func calcHealthFactor (borrowCapacity,borrowCapacityUsed) = fraction((borrowCapacity - borrowCapacityUsed), 1000, borrowCapacity)
48+
49+
50+func calcBorrowCBorrowCU (user,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
51+ let poolList = split(pools, ";")
52+ let listSize = size(poolList)
53+ func foldPools (accum,next) = {
54+ let healthParams = getHealthParameter(user, next, newDebtAmount, newDebtId, collateralAmount, collateralId)
55+ match healthParams {
56+ case t: (Int, Int) =>
57+ $Tuple2((accum._1 + healthParams._1), (accum._2 + healthParams._1))
58+ case e =>
59+ throw("Test")
60+ }
61+ }
62+
63+ let $list22872321 = poolList
64+ let $size22872321 = size($list22872321)
65+ let $acc022872321 = $Tuple2(0, 0)
66+ if (($size22872321 == 0))
67+ then $acc022872321
68+ else {
69+ let $acc122872321 = foldPools($acc022872321, $list22872321[0])
70+ if (($size22872321 == 1))
71+ then $acc122872321
72+ else {
73+ let $acc222872321 = foldPools($acc122872321, $list22872321[1])
74+ if (($size22872321 == 2))
75+ then $acc222872321
76+ else {
77+ let $acc322872321 = foldPools($acc222872321, $list22872321[2])
78+ throw("List size exceed 2")
79+ }
80+ }
81+ }
82+ }
83+
84+
85+func checkUserHealth (user,newDebtAmount,newDebtId,collateralAmount,collateralId) = {
86+ let bcBcu = calcBorrowCBorrowCU(user, newDebtAmount, newDebtId, collateralAmount, collateralId)
87+ let userHealth = calcHealthFactor(bcBcu._1, bcBcu._2)
88+ if ((userHealth >= 0))
89+ then true
90+ else false
91+ }
2492
2593
2694 @Callable(i)
2795 func setup (configAddress,pools) = if (if (!(isDefined(getString(this, "config"))))
2896 then !(isDefined(getString(this, "pools")))
2997 else false)
3098 then [writeString("config", configAddress), writeString("pools", makeString(pools, ";"))]
3199 else throw("Admin and config address already definied!")
32100
33101
34102
35103 @Callable(i)
36104 func addPool (poolAddress) = if (isAdmin(i.caller))
37105 then {
38106 let poolList = split(pools, ";")
39107 if ((containsElement(poolList, poolAddress) == false))
40108 then {
41109 let newPools = (poolList :+ poolAddress)
42110 [writeString("pools", makeString(newPools, ";"))]
43111 }
44112 else throw("Pool already exists!")
45113 }
46114 else throw("Address does not match with admin address!")
47115
48116
49117
50118 @Callable(i)
51119 func updateConfig (configAddress) = if (isAdmin(i.caller))
52120 then [writeString("config", configAddress)]
53121 else throw("Address does not match with admin address!")
54122
55123
56124
57125 @Callable(i)
58126 func depositAt (poolAddress,isCollateral) = if (checkPool(poolAddress))
59127 then if ((size(i.payments) > 0))
60128 then {
61129 let user = toBase58String(i.caller.bytes)
62130 let tokenAmount = invoke(addressFromStringValue(poolAddress), "deposit", [user, isCollateral], i.payments)
63131 if ((tokenAmount == tokenAmount))
64132 then {
65133 let tokenId = getStringValue(addressFromStringValue(poolAddress), "dTokenId")
66134 match tokenAmount {
67135 case t: Int =>
68136 [ScriptTransfer(i.caller, t, fromBase58String(tokenId))]
69137 case t: String =>
70138 nil
71139 case _ =>
72140 throw("Incorrect invoke result!")
73141 }
74142 }
75143 else throw("Strict value is not equal to itself.")
76144 }
77145 else throw("No payment attached!")
78146 else throw("Pool address not found!")
79147
80148
81149
82150 @Callable(i)
83151 func withdrawFrom (poolAddress) = if (checkPool(poolAddress))
84152 then {
85153 let dTokenId = getStringValue(addressFromStringValue(poolAddress), "dTokenId")
86154 if ((fromBase58String(dTokenId) == i.payments[0].assetId))
87155 then if ((size(i.payments) > 0))
88156 then {
89157 let user = toBase58String(i.caller.bytes)
90158 let tokenAmount = invoke(addressFromStringValue(poolAddress), "withdraw", [user], i.payments)
91159 if ((tokenAmount == tokenAmount))
92160 then {
93161 let tokenId = getStringValue(addressFromStringValue(poolAddress), "assetId")
94162 match tokenAmount {
95163 case t: Int =>
96164 if ((tokenId == "WAVES"))
97165 then [ScriptTransfer(i.caller, t, unit)]
98166 else [ScriptTransfer(i.caller, t, fromBase58String(tokenId))]
99167 case t: String =>
100168 nil
101169 case _ =>
102170 throw("Incorrect invoke result!")
103171 }
104172 }
105173 else throw("Strict value is not equal to itself.")
106174 }
107175 else throw("No payment attached!")
108176 else throw("AssetIds does not match")
109177 }
110178 else throw("Pool address not found!")
111179
112180
113181
114182 @Callable(i)
115183 func lockAsCollateralAt (poolAddress) = if (checkPool(poolAddress))
116184 then {
117185 let dTokenId = getStringValue(addressFromStringValue(poolAddress), "dTokenId")
118186 if ((fromBase58String(dTokenId) == i.payments[0].assetId))
119187 then if ((size(i.payments) > 0))
120188 then {
121189 let user = toBase58String(i.caller.bytes)
122190 let msg = invoke(addressFromStringValue(poolAddress), "lockAsCollateral", [user], i.payments)
123191 if ((msg == msg))
124192 then match msg {
125193 case t: String =>
126194 nil
127195 case _ =>
128196 throw("Incorrect invoke result!")
129197 }
130198 else throw("Strict value is not equal to itself.")
131199 }
132200 else throw("No payment attached!")
133201 else throw("AssetIds does not match")
134202 }
135203 else throw("Pool address not found!")
136204
137205
138-@Verifier(tx)
139-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
140-

github/deemru/w8io/169f3d6 
292.47 ms