tx · 5BA3VBgH32UAYwHy5f7vEDHN53m4CFkg8FjCM8KVcfwP 3PMLDU7uLs9diGm4vg2tHjG9TocMx5jhDMn: -0.01000000 Waves 2022.01.23 21:11 [2957018] smart account 3PMLDU7uLs9diGm4vg2tHjG9TocMx5jhDMn > SELF 0.00000000 Waves
{ "type": 13, "id": "5BA3VBgH32UAYwHy5f7vEDHN53m4CFkg8FjCM8KVcfwP", "fee": 1000000, "feeAssetId": null, "timestamp": 1642961516933, "version": 2, "chainId": 87, "sender": "3PMLDU7uLs9diGm4vg2tHjG9TocMx5jhDMn", "senderPublicKey": "BdQ4RuEmtibshZ3dozVgwTHaHbdqTBvAUZm1gGRWvutJ", "proofs": [ "3tUjKjQeXAzbDznjJN6W96zJmvQQ74f26gtnY3MWNRYsdfdZs12iSaVcYhPnYSbe5vPVT1hcurdFvFdmjBQh4kvf" ], "script": "base64:AAIFAAAAAAAABMcIAhIAEgQKAgEEEgMKAQQSAwoBCBIAGhIKAUESDXRyeUdldEludGVnZXIaCAoBQhIDa2V5GhEKAUMSDHRyeUdldFN0cmluZxoGCgFEEgFhGhcKAUUSEmNsYWltU3Rha2luZ1Jlc3VsdBoUCgFGEg9jdXJyZW50SW50ZXJlc3QaFgoBRxIRbGFzdENoZWNrSW50ZXJlc3QaEQoBSBIMc3Rha2VkQW1vdW50GgsKAUkSBnJld2FyZBoYCgFKEhNoYW5kbGVDb21wb3VuZFRvcFVwGgsKAUsSBmFtb3VudBoPCgFMEgplZ2dBc3NldElkGhEKAU0SDGludmVzdEFtb3VudBoQCgFOEgt0b2tlbkFtb3VudBoGCgFPEgFyGgsKAVASBnN0YWtlZBoHCgFREgJ2cBoXCgFSEhJoYW5kbGVTdGFraW5nVG9wVXAaFgoBUxIRdG90YWxTdGFrZWRBbW91bnQaEgoBVBINaW50ZXJlc3REZWx0YRoGCgFVEgFpGhIKAVYSDXRvdGFsQ29tcG91bmQaEAoBVxILdG90YWxMb2NrZWQaFgoBWBIRYW1vdW50Rm9yQ29tcG91bmQaFgoBWRIRcmVzSGFuZGxlQ29tcG91bmQaFQoBWhIQYW1vdW50Rm9yU3Rha2VycxoNCgFhEghtQWNjUEtleRoWCgJhYRIQcmVzSGFuZGxlU3Rha2luZxoOCgJhYhIIY29tcG91bmQaEgoCYWMSDHNoYXJlVG9rZW5JZBoPCgJhZBIJdmlydHVhbFdkGhgKAmFlEhJrZXlTdGFrZWRDb21wb3VuZFUaFAoCYWYSDnBlcnNvbmFsU3Rha2VkGhAKAmFnEgphZGRyZXNzU3RyGg4KAmFoEghpc0xvY2tlZBoTCgJhaRINYWxyZWFkeVN0YWtlZBoUCgJhahIOcmF3U3Rha2VBbW91bnQaFgoCYWsSEGV4YWN0U3Rha2VBbW91bnQaDQoBYhIIbUFjY0FkZHIaFQoBYxIQa2V5VG90YWxDb21wb3VuZBoWCgFkEhFrZXlTdGFrZWRDb21wb3VuZBoOCgFlEglrZXlMYXN0VlAaGgoBZhIVa2V5U3Rha2VkQ29tcG91bmRVc2VyGgkKAWcSBHVzZXIaFQoBaBIQY2FsY1ZpcnR1YWxQcmljZRoQCgFpEgt0b3RhbFN0YWtl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", "height": 2957018, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FPCTbffZmR9huMVu7PGesm1ueJy4gFqvoYHvCbpvHNJh Next: D2M3fsbrWmVvYy8FzZcC7p5uzP9skSVte7yN16fVWjvU Diff:
Old | New | Differences | |
---|---|---|---|
57 | 57 | func setCFAddress (address) = [StringEntry("CF_ADDRESS", address)] | |
58 | 58 | ||
59 | 59 | ||
60 | - | func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), " | |
60 | + | func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), "SHARE_ASSET_ID")) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func tryGetInteger (key) = match getInteger(this, key) { |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let mAccPKey = base58'HyXCiJpt1eh1M1zZWDpYzbVW81yZL4XBjiJjGwxZqk2' | |
5 | 5 | ||
6 | 6 | let mAccAddr = addressFromPublicKey(mAccPKey) | |
7 | 7 | ||
8 | 8 | let keyTotalCompound = "total_compound" | |
9 | 9 | ||
10 | 10 | let keyStakedCompound = "staked_compound" | |
11 | 11 | ||
12 | 12 | let keyLastVP = "last_virtual_price" | |
13 | 13 | ||
14 | 14 | func keyStakedCompoundUser (user) = ((toString(user) + "_") + keyStakedCompound) | |
15 | 15 | ||
16 | 16 | ||
17 | 17 | func calcVirtualPrice (totalStaked,total) = if ((total == 0)) | |
18 | 18 | then 1 | |
19 | 19 | else if ((totalStaked == 0)) | |
20 | 20 | then 1 | |
21 | 21 | else (total / totalStaked) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | let Scale = 1 | |
25 | 25 | ||
26 | 26 | func keyStakedAmount (address) = (toString(address) + "_farm_staked") | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func keyLastCheckInterest (address) = (toString(address) + "_lastCheck_interest") | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func keyEggClaimed (address) = (toString(address) + "_claimed") | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | let keyGlobalLastInterest = "global_lastCheck_interest" | |
36 | 36 | ||
37 | 37 | let keyGlobalStaked = "global_staked" | |
38 | 38 | ||
39 | 39 | let keyGlobalEggEarned = "global_earnings" | |
40 | 40 | ||
41 | 41 | let kLockedInvestments = "locked_investments" | |
42 | 42 | ||
43 | 43 | func getCFAddress () = addressFromStringValue(getStringValue(this, "CF_ADDRESS")) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func isCollectiveFarmLocked () = match getBoolean(getCFAddress(), kLockedInvestments) { | |
47 | 47 | case b: Boolean => | |
48 | 48 | b | |
49 | 49 | case _ => | |
50 | 50 | true | |
51 | 51 | } | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func getEggId () = fromBase58String(getStringValue(mAccAddr, "EGG_ASSET_ID")) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func setCFAddress (address) = [StringEntry("CF_ADDRESS", address)] | |
58 | 58 | ||
59 | 59 | ||
60 | - | func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), " | |
60 | + | func getShareAssetId () = fromBase58String(getStringValue(getCFAddress(), "SHARE_ASSET_ID")) | |
61 | 61 | ||
62 | 62 | ||
63 | 63 | func tryGetInteger (key) = match getInteger(this, key) { | |
64 | 64 | case b: Int => | |
65 | 65 | b | |
66 | 66 | case _ => | |
67 | 67 | 0 | |
68 | 68 | } | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func tryGetString (key) = match getString(this, key) { | |
72 | 72 | case a: String => | |
73 | 73 | a | |
74 | 74 | case _ => | |
75 | 75 | "" | |
76 | 76 | } | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func claimStakingResult (address) = { | |
80 | 80 | let currentInterest = tryGetInteger(keyGlobalLastInterest) | |
81 | 81 | let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address)) | |
82 | 82 | let stakedAmount = tryGetInteger(keyStakedAmount(address)) | |
83 | 83 | let reward = if ((lastCheckInterest > 0)) | |
84 | 84 | then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale) | |
85 | 85 | else 0 | |
86 | 86 | [IntegerEntry(keyLastCheckInterest(address), currentInterest), IntegerEntry(keyEggClaimed(address), (tryGetInteger(keyEggClaimed(address)) + reward)), ScriptTransfer(address, reward, getShareAssetId())] | |
87 | 87 | } | |
88 | 88 | ||
89 | 89 | ||
90 | 90 | func handleCompoundTopUp (amount) = { | |
91 | 91 | let eggAssetId = getEggId() | |
92 | 92 | let investAmount = invoke(getCFAddress(), "provideLiquidity", nil, [AttachedPayment(eggAssetId, amount)]) | |
93 | 93 | if ((investAmount == investAmount)) | |
94 | 94 | then { | |
95 | 95 | let tokenAmount = match investAmount { | |
96 | 96 | case r: Int => | |
97 | 97 | r | |
98 | 98 | case _ => | |
99 | 99 | throw("Incorrect invoke result, contact the administrators") | |
100 | 100 | } | |
101 | 101 | let total = (tryGetInteger(keyTotalCompound) + tokenAmount) | |
102 | 102 | let staked = tryGetInteger(keyStakedCompound) | |
103 | 103 | let vp = calcVirtualPrice(staked, total) | |
104 | 104 | [IntegerEntry(keyTotalCompound, total), IntegerEntry(keyLastVP, vp)] | |
105 | 105 | } | |
106 | 106 | else throw("Strict value is not equal to itself.") | |
107 | 107 | } | |
108 | 108 | ||
109 | 109 | ||
110 | 110 | func handleStakingTopUp (amount) = { | |
111 | 111 | let currentInterest = tryGetInteger(keyGlobalLastInterest) | |
112 | 112 | let totalStakedAmount = tryGetInteger(keyGlobalStaked) | |
113 | 113 | let interestDelta = if ((totalStakedAmount > 0)) | |
114 | 114 | then fraction(amount, Scale, totalStakedAmount) | |
115 | 115 | else 0 | |
116 | 116 | [IntegerEntry(keyGlobalEggEarned, (tryGetInteger(keyGlobalEggEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))] | |
117 | 117 | } | |
118 | 118 | ||
119 | 119 | ||
120 | 120 | @Callable(i) | |
121 | 121 | func topUpReward () = { | |
122 | 122 | let totalCompound = tryGetInteger(keyTotalCompound) | |
123 | 123 | let totalStaked = tryGetInteger(keyGlobalStaked) | |
124 | 124 | let totalLocked = (totalStaked + totalCompound) | |
125 | 125 | let eggAssetId = getEggId() | |
126 | 126 | if ((i.payments[0].assetId != eggAssetId)) | |
127 | 127 | then throw("Wrong assetId") | |
128 | 128 | else { | |
129 | 129 | let amount = fraction(i.payments[0].amount, 98, 100) | |
130 | 130 | let amountForCompound = fraction(amount, totalCompound, totalLocked) | |
131 | 131 | let resHandleCompound = handleCompoundTopUp(amountForCompound) | |
132 | 132 | let amountForStakers = fraction(amount, totalStaked, totalLocked) | |
133 | 133 | let resHandleStaking = handleStakingTopUp(amountForStakers) | |
134 | 134 | $Tuple2((resHandleCompound ++ resHandleStaking), true) | |
135 | 135 | } | |
136 | 136 | } | |
137 | 137 | ||
138 | 138 | ||
139 | 139 | ||
140 | 140 | @Callable(i) | |
141 | 141 | func withdrawFarmTokens (amount,compound) = { | |
142 | 142 | let shareTokenId = getShareAssetId() | |
143 | 143 | if (compound) | |
144 | 144 | then { | |
145 | 145 | let staked = tryGetInteger(keyStakedCompound) | |
146 | 146 | let total = tryGetInteger(keyTotalCompound) | |
147 | 147 | let vp = calcVirtualPrice(staked, total) | |
148 | 148 | let virtualWd = (amount / vp) | |
149 | 149 | let keyStakedCompoundU = keyStakedCompoundUser(i.caller) | |
150 | 150 | let personalStaked = tryGetInteger(keyStakedCompoundU) | |
151 | 151 | if ((virtualWd > personalStaked)) | |
152 | 152 | then throw("You don't have so much funds to withdraw") | |
153 | 153 | else [IntegerEntry(keyStakedCompoundU, (personalStaked - virtualWd)), IntegerEntry(keyStakedCompound, (staked - virtualWd)), IntegerEntry(keyTotalCompound, (total - amount)), ScriptTransfer(i.caller, amount, shareTokenId), IntegerEntry(keyLastVP, vp)] | |
154 | 154 | } | |
155 | 155 | else { | |
156 | 156 | let addressStr = toString(i.caller) | |
157 | 157 | let stakedAmount = tryGetInteger(keyStakedAmount(i.caller)) | |
158 | 158 | if ((amount > stakedAmount)) | |
159 | 159 | then throw("you don't have tokens available") | |
160 | 160 | else (claimStakingResult(i.caller) ++ [IntegerEntry(keyStakedAmount(i.caller), (stakedAmount - amount)), IntegerEntry(keyGlobalStaked, (tryGetInteger(keyGlobalStaked) - amount)), ScriptTransfer(i.caller, amount, shareTokenId)]) | |
161 | 161 | } | |
162 | 162 | } | |
163 | 163 | ||
164 | 164 | ||
165 | 165 | ||
166 | 166 | @Callable(i) | |
167 | 167 | func stakeFarmTokens (compound) = { | |
168 | 168 | let shareTokenId = getShareAssetId() | |
169 | 169 | if ((i.payments[0].assetId != shareTokenId)) | |
170 | 170 | then throw("Wrong assetId") | |
171 | 171 | else if (compound) | |
172 | 172 | then { | |
173 | 173 | let isLocked = isCollectiveFarmLocked() | |
174 | 174 | if (isLocked) | |
175 | 175 | then throw("The farm is closed for investments, it can't compound") | |
176 | 176 | else { | |
177 | 177 | let keyStakedCompoundU = keyStakedCompoundUser(i.caller) | |
178 | 178 | let alreadyStaked = tryGetInteger(keyStakedCompoundU) | |
179 | 179 | let total = tryGetInteger(keyTotalCompound) | |
180 | 180 | let staked = tryGetInteger(keyStakedCompound) | |
181 | 181 | let vp = calcVirtualPrice(staked, total) | |
182 | 182 | let rawStakeAmount = i.payments[0].amount | |
183 | 183 | let exactStakeAmount = (rawStakeAmount / vp) | |
184 | 184 | [IntegerEntry(keyStakedCompoundU, (alreadyStaked + exactStakeAmount)), IntegerEntry(keyTotalCompound, (total + rawStakeAmount)), IntegerEntry(keyStakedCompound, (staked + exactStakeAmount)), IntegerEntry(keyLastVP, vp)] | |
185 | 185 | } | |
186 | 186 | } | |
187 | 187 | else { | |
188 | 188 | let amount = i.payments[0].amount | |
189 | 189 | let addressStr = toString(i.caller) | |
190 | 190 | let totalStakedAmount = tryGetInteger(keyGlobalStaked) | |
191 | 191 | if ((i.payments[0].assetId != shareTokenId)) | |
192 | 192 | then throw("wrong asset attached") | |
193 | 193 | else (claimStakingResult(i.caller) ++ [IntegerEntry(keyGlobalStaked, (totalStakedAmount + amount)), IntegerEntry(keyStakedAmount(i.caller), (tryGetInteger(keyStakedAmount(i.caller)) + amount))]) | |
194 | 194 | } | |
195 | 195 | } | |
196 | 196 | ||
197 | 197 | ||
198 | 198 | ||
199 | 199 | @Callable(i) | |
200 | 200 | func initiateDapp (address) = if ((i.caller != this)) | |
201 | 201 | then throw("Can be called only by the account") | |
202 | 202 | else setCFAddress(address) | |
203 | 203 | ||
204 | 204 | ||
205 | 205 | ||
206 | 206 | @Callable(i) | |
207 | 207 | func claimReward () = claimStakingResult(i.caller) | |
208 | 208 | ||
209 | 209 |
github/deemru/w8io/3ef1775 45.67 ms ◑