tx · Fte7wojy8nEuiZ6HfL4AenCu4ErHt6wVBmV7X7Szsy9Z

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.09.16 14:54 [1705569] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "Fte7wojy8nEuiZ6HfL4AenCu4ErHt6wVBmV7X7Szsy9Z", "fee": 1400000, "feeAssetId": null, "timestamp": 1631793308416, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "4hWLnZ9yBzFaNHVdukRXCnMgo1gxLV5dvcsaR8cofAEaukfJVin1WSpfxbMWShFXLUunftUZccWupxsZVNb7mVfw", "4oPXeoZm3b4DKNVUgqZURZ9QzxZpYG26BRBfmCMieX4S3n7ASydSLomb3LDW85mhAq4dLRhHcvF8xwXpteTY1g3n" ], "script": "base64:AAIEAAAAAAAAEKIIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgMKAQgSABIAGhIKAmExEgxhZG1pblB1YktleTEaEgoCYTISDGFkbWluUHViS2V5MhoSCgJhMxIMYWRtaW5QdWJLZXkzGhoKAmE0EhRrZXlTaGFyZVRva2Vuc0xvY2tlZBoRCgJhNRILa1NoYXJlTGltaXQaDwoCYTYSCWtleUFjdGl2ZRoOCgJhNxIIa2V5Q2F1c2UaIgoCYTgSHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaIwoCYTkSHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzGhsKAmIxEhVrZXlIZWlnaHRQb29sRnJhY3Rpb24aIwoCYjISHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiQKAmIzEh5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaGwoCYjQSFWtleVJld2FyZFVwZGF0ZUhlaWdodBoVCgJiNRIPa2V5TGFzdEludGVyZXN0GhsKAmI2EhVrZXlMYXN0SW50ZXJlc3RIZWlnaHQaHgoCYjcSGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZBoZCgJiOBITa2V5VXNlckxhc3RJbnRlcmVzdBoPCgJiORIJa2V5U1dPUGlkGh4KAmMxEhhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQaIgoCYzISHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQaFgoCYzMSEGtleUF2YWlsYWJsZVNXT1AaGwoCYzQSFWtleUZhcm1pbmdTdGFydEhlaWdodBoMCgJjNRIGa2V5QVBZGhwKAmM2EhZrUHJldmlvdXNUb3RhbFZvdGVTV09QGhkKAmM3EhNrZXlTd29wWWVhckVtaXNzaW9uGhUKAmM4Eg9rZXlCYWxhbmNlY3BtbUEaFQoCYzkSD2tleUJhbGFuY2VjcG1tQhonCgJkMRIha0hhcnZlc3RQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGisKAmQyEiVrSGFydmVzdFVzZXJQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGh8KAmQzEhlrZXlMaW1pdFNoYXJlRmlyc3RIYXJ2ZXN0GhEKAmQ0EgtrZXlBc3NldElkQRoRCgJkNRILa2V5QXNzZXRJZEIaGwoCZDYSFWtleUZpcnN0SGFydmVzdEhlaWdodBoZCgJkNxITa2V5Zmlyc3RIYXJ2ZXN0Q3BtbRoUCgJkOBIOa2V5VGVtcFByZXZTdW0aEwoCZDkSDWtleVRlbXBDdXJTdW0aFwoCZTESEWdvdmVybmFuY2VBZGRyZXNzGgwKAmUyEgZ3YWxsZXQaEwoCZTMSDXZvdGluZ0FkZHJlc3MaIgoCZTQSHGFkbWluSW5jcmVhc2VJbnRlcmVzdEFkZHJlc3MaFAoCZTUSDm9uZVdlZWtJbkJsb2NrGhQKAmU2Eg50b3RhbFZvdGVTaGFyZRoRCgJlNxILc2NhbGVWYWx1ZTEaEQoCZTgSC3NjYWxlVmFsdWUzGhEKAmU5EgtzY2FsZVZhbHVlNRoRCgJmMRILc2NhbGVWYWx1ZTYaEQoCZjISC3NjYWxlVmFsdWU4GhIKAmYzEgxzY2FsZVZhbHVlMTEaEQoCZjQSC3N0ckFzc2V0SWRBGgoKAmY1EgRwb29sGhEKAmY2EgtzdHJBc3NldElkQhoOCgJmNxIIYXNzZXRJZEEaDgoCZjgSCGFzc2V0SWRCGhEKAmY5EgtrQmFzZVBlcmlvZBoTCgJnMRINa1BlcmlvZExlbmd0aBoSCgJnMhIMa1N0YXJ0SGVpZ2h0GhkKAmczEhNrRmlyc3RIYXJ2ZXN0SGVpZ2h0GhwKAmc0EhZrRHVyYXRpb25GdWxsVm90ZVBvd2VyGhMKAmc1Eg1rTWluVm90ZVBvd2VyGhAKAmc2EgpiYXNlUGVyaW9kGhEKAmc3EgtzdGFydEhlaWdodBoSCgJnOBIMcGVyaW9kTGVuZ3RoGhsKAmc5EhVkdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEgoCaDESDG1pblZvdGVQb3dlchoOCgJoMhIIaXNBY3RpdmUaEAoCaDMSCmN1cnJQZXJpb2QaEwoCaDQSDWdldExpbWl0VG9rZW4aCQoCaDUSA0FQWRoWCgJoNhIQU3dvcFllYXJFbWlzc2lvbhoQCgJoNxIKYXNzZXROYW1lQRoNCgJoOBIHJG1hdGNoMBoICgJoORICaWQaCwoCaTESBXdhdmVzGhAKAmkyEgphc3NldE5hbWVCGgoKAmkzEgRTV09QGhQKAmk0Eg5pc0ZpcnN0SGFydmVzdBobCgJpNRIVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0GhEKAmk2EgtnZXRCYWxhbmNlQRoRCgJpNxILZ2V0QmFsYW5jZUIaGAoCaTgSEmdldFNoYXJlTGltaXRUb2tlbhoeCgJpORIYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkGhUKAmoxEg9nZXRTaGFyZUFzc2V0SWQaFAoCajISDmFjY291bnRCYWxhbmNlGg0KAmozEgdhc3NldElkGhIKAmo0EgxnZXRBc3NldEluZm8aDgoCajUSCHN0cmluZ0lkGgoKAmo2EgRpbmZvGhQKAmo3Eg5jYWxjU2NhbGVWYWx1ZRoOCgJqOBIIYXNzZXRJZDEaDgoCajkSCGFzc2V0SWQyGhYKAmsxEhBhc3NldElkMURlY2ltYWxzGhYKAmsyEhBhc3NldElkMkRlY2ltYWxzGhEKAmszEgtzY2FsZURpZ2l0cxoXCgJrNBIRdXNlckF2YWlsYWJsZVNXT1AaCgoCazUSBHVzZXIaEAoCazYSCnJld2FyZEluZm8aIAoCazcSGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiEKAms4Eht0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaHwoCazkSGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaGAoCbDESEnJld2FyZFVwZGF0ZUhlaWdodBocCgJsMhIWcG9vbFJld2FyZFVwZGF0ZUhlaWdodBogCgJsMxIacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaFwoCbDQSEXJld2FyZFBvb2xDdXJyZW50GhgKAmw1EhJyZXdhcmRQb29sUHJldmlvdXMaGQoCbDYSE2dldExhc3RJbnRlcmVzdEluZm8aEgoCbDcSDGxhc3RJbnRlcmVzdBoYCgJsOBISbGFzdEludGVyZXN0SGVpZ2h0GhkKAmw5EhNnZXRVc2VySW50ZXJlc3RJbmZvGhEKAm0xEgt1c2VyQWRkcmVzcxoWCgJtMhIQdXNlckxhc3RJbnRlcmVzdBoPCgJtMxIJdXNlclNoYXJlGhsKAm00EhV1c2VyTGFzdEludGVyZXN0VmFsdWUaGwoCbTUSFXVzZXJTaGFyZVRva2Vuc0Ftb3VudBoSCgJtNhIMY2FsY0ludGVyZXN0GhsKAm03EhVjdXJyZW50UmV3YXJkUGVyQmxvY2saFgoCbTgSEHNoYXJlVG9rZW5Mb2NrZWQaHAoCbTkSFnByZXZpb3VzUmV3YXJkUGVyQmxvY2saEgoCbjESDHNoYXJlQXNzZXRJZBoQCgJuMhIKc2NhbGVWYWx1ZRoPCgJuMxIJcG10QW1vdW50GgwKAm40EgZyZXdhcmQaMAoCbjUSKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZRoZCgJuNhITaW50ZXJlc3RBZnRlclVwZGF0ZRoPCgJuNxIJY2xhaW1DYWxjGgwKAm44EgZjYWxsZXIaEwoCbjkSDSR0MDEzMTUzMTMyMTgaEwoCbzESDSR0MDEzMjIzMTMzMzUaEwoCbzISDSR0MDEzMzQwMTM0MTkaFQoCbzMSD2N1cnJlbnRJbnRlcmVzdBoRCgJvNBILY2xhaW1BbW91bnQaFQoCbzUSD3VzZXJOZXdJbnRlcmVzdBodCgJvNhIXY2FsY3VsYXRlUHJvdG9jb2xSZXdhcmQaEwoCbzcSDSR0MDEzOTM3MTQwMDIaEwoCbzgSDSR0MDE0MDA3MTQxMTgaHAoCbzkSFmNoZWNrUG10QXNzZXRJZENvcnJlY3QaEAoCcDESCnBtdEFzc2V0SWQaFgoCcDISEHBvb2xTaGFyZUFzc2V0SWQaHgoCcDMSGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudBoNCgJwNBIHc3VzcGVuZBoLCgJwNRIFY2F1c2UaBwoCcDYSAWkaDQoCcDcSB2Vhcmx5TFAaEAoCcDgSCmluaXRBbW91bnQaDwoCcDkSCVNXT1Bpc3N1ZRoMCgJxMRIGU1dPUGlkGhMKAnEyEg0kdDAxNzEwMDE3MjAzGhMKAnEzEg1jdXJyZW50UmV3YXJkGhMKAnE0Eg0kdDAxNzYxMjE3NzMyGhMKAnE1Eg0kdDAxNzczNzE3ODQwGhMKAnE2Eg0kdDAxODAzMjE4MTA3GhMKAnE3Eg0kdDAxODExMjE4MTg1GhMKAnE4Eg1wbXRTdHJBc3NldElkGhIKAnE5EgxwbXRBc3NldE5hbWUaEQoCcjESC3BtdERlY2ltYWxzGhMKAnIyEg0kdDAxODE5MDE4Mjk4GhgKAnIzEhJ1c2VyU2hhcmVBbW91bnROZXcaFwoCcjQSEWF2YWlsYWJsZUZ1bmRzTmV3GhYKAnI1EhB0b3RhbFNoYXJlQW1vdW50GhkKAnI2EhN0b3RhbFNoYXJlQW1vdW50TmV3GhcKAnI3EhF1c2VyQ2xhaW1lZEFtb3VudBoaCgJyOBIUdXNlckNsYWltZWRBbW91bnROZXcaDwoCcjkSCWJhc2VFbnRyeRoTCgJzMRINaGFydmVzdFBlcmlvZBoUCgJzMhIOYW1vdW50T2ZWb3RpbmcaFgoCczMSEGFtb3VudFBvb2xTdHJhY3QaJAoCczQSHmFtb3VudEFjdGl2ZVZvdGVVc2VyUG9vbFN0cmFjdBogCgJzNRIaYW1vdW50UG9vbEFjdGl2ZVZvdGVTdHJhY3QaGgoCczYSFHVzZXJTaGFyZVRva2VuTG9ja2VkGhgKAnM3EhJ1c2VyUG9vbEFjdGl2ZVZvdGUaFAoCczgSDnBvb2xBY3RpdmVWb3RlGhQKAnM5Eg5wcm90b2NvbFJld2FyZBoVCgJ0MRIPbGltaXRTaGFyZVRva2VuGhAKAnQyEgpzaGFyZVRva2VuGh8KAnQzEhlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50GhMKAnQ0Eg1zaGFyZVRva2Vuc0lkGhMKAnQ1Eg0kdDAyMjc0ODIyODQ4GhMKAnQ2Eg0kdDAyNDg1NTI0OTIwGhMKAnQ3Eg0kdDAyNDkyNTI1MDM3GhMKAnQ4Eg0kdDAyNTA0MjI1MTQyGhMKAnQ5Eg1hdmFpbGFibGVGdW5kGggKAnUxEgJ0eBoMCgJ1MhIGdmVyaWZ5GhgKAnUzEhJhZG1pblB1YktleTFTaWduZWQaGAoCdTQSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJ1NRISYWRtaW5QdWJLZXkzU2lnbmVkAAAAWwAAAAACYTEBAAAAIOKnjEA7hs0X5rRLh9vloYOsriqh7DcuXmUFE/K17O8EAAAAAAJhMgEAAAAg6jisuQG1iDxyo54oPYHUGiJlERON346DjXz9V/GbEVkAAAAAAmEzAQAAACCnNJaCsKPJx10yYgF/O0UnTzPqvzbEAc8Qt3RwqifMbgAAAAACYTQCAAAAGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJhNQIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACYTYCAAAABmFjdGl2ZQAAAAACYTcCAAAADnNodXRkb3duX2NhdXNlAAAAAAJhOAIAAAAdX2N1cnJlbnRfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmE5AgAAAB5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmIxAgAAABpfcG9vbF9yZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjICAAAAHnRvdGFsX3Jld2FyZF9wZXJfYmxvY2tfY3VycmVudAAAAAACYjMCAAAAH3RvdGFsX3Jld2FyZF9wZXJfYmxvY2tfcHJldmlvdXMAAAAAAmI0AgAAABRyZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjUCAAAADl9sYXN0X2ludGVyZXN0AAAAAAJiNgIAAAAVX2xhc3RfaW50ZXJlc3RfaGVpZ2h0AAAAAAJiNwIAAAAUX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAAmI4AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYjkCAAAAB1NXT1BfaWQAAAAAAmMxAgAAABRfU1dPUF9jbGFpbWVkX2Ftb3VudAAAAAACYzICAAAAGV9TV09QX2xhc3RfY2xhaW1lZF9hbW91bnQAAAAAAmMzAgAAAA9fYXZhaWxhYmxlX1NXT1AAAAAAAmM0AgAAABRmYXJtaW5nX3N0YXJ0X2hlaWdodAAAAAACYzUCAAAAA2FweQAAAAACYzYCAAAAGHByZXZpb3VzX3RvdGFsX3ZvdGVfU1dPUAAAAAACYzcCAAAAEnN3b3BfeWVhcl9lbWlzc2lvbgAAAAACYzgCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAACYzkCAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAACZDECAAAAHl9oYXJ2ZXN0X3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACZDICAAAAI19oYXJ2ZXN0X3VzZXJfcG9vbF9hY3RpdmVWb3RlX3N0cnVjAAAAAAJkMwIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACZDQCAAAACkFfYXNzZXRfaWQAAAAAAmQ1AgAAAApCX2Fzc2V0X2lkAAAAAAJkNgIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAAmQ3AgAAAA1maXJzdF9oYXJ2ZXN0AAAAAAJk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", "height": 1705569, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BnPQP9ridg9HH8p8BfqaBVUwGn8GQtxKP2AUugyiH7bB Next: 41WXnGFiJ7c7WMKXnLj314dNjgpCKN55kN9eRTeCcErN Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
66 let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
77
88 let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
9-
10-let admStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
119
1210 let keyShareTokensLocked = "_total_share_tokens_locked"
1311
217215 let assetId1Decimals = value(assetInfo(assetId1)).decimals
218216 let assetId2Decimals = value(assetInfo(assetId2)).decimals
219217 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
220- pow(10, 0, scaleDigits, 0, 0, FLOOR)
218+ pow(10, 0, scaleDigits, 0, 0, HALFDOWN)
221219 }
222220
223221
224-func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyAvailableSWOP)), 0)
222+func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyAvailableSWOP)), 0)
225223
226224
227225 func rewardInfo (pool) = {
248246 }
249247
250248
251-func getUserInterestInfo (pool,userAddrStr) = {
252- let userLastInterest = getInteger(this, (((pool + "_") + userAddrStr) + keyUserLastInterest))
253- let userShare = getInteger(this, (((pool + "_") + userAddrStr) + keyUserShareTokensLocked))
249+func getUserInterestInfo (pool,userAddress) = {
250+ let userLastInterest = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserLastInterest))
251+ let userShare = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserShareTokensLocked))
254252 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
255253 let userLastInterestValue = match userLastInterest {
256254 case userLastInterest: Int =>
268266 }
269267
270268
271-func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,scaleValue,h) = if ((shareTokenLocked == 0))
269+func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,shareAssetId,scaleValue,pmtAmount) = if ((shareTokenLocked == 0))
272270 then 0
273271 else if ((poolRewardUpdateHeight != 0))
274- then if (if ((rewardUpdateHeight > h))
272+ then if (if ((rewardUpdateHeight > height))
275273 then (rewardUpdateHeight == poolRewardUpdateHeight)
276274 else false)
277275 then {
278- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
276+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
279277 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
280278 }
281- else if (if ((h > rewardUpdateHeight))
279+ else if (if ((height > rewardUpdateHeight))
282280 then (rewardUpdateHeight != poolRewardUpdateHeight)
283281 else false)
284282 then {
285- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
283+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
286284 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
287285 }
288- else if (if (if ((h > rewardUpdateHeight))
286+ else if (if (if ((height > rewardUpdateHeight))
289287 then (rewardUpdateHeight == poolRewardUpdateHeight)
290288 else false)
291289 then (lastInterestHeight > rewardUpdateHeight)
292290 else false)
293291 then {
294- let reward = (currentRewardPerBlock * (h - lastInterestHeight))
292+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
295293 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
296294 }
297295 else {
298296 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
299297 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
300- let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
298+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
301299 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
302300 }
303- else if ((rewardUpdateHeight > h))
301+ else if ((rewardUpdateHeight > height))
304302 then {
305- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
303+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
306304 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
307305 }
308306 else if ((lastInterestHeight > rewardUpdateHeight))
309307 then {
310- let reward = (currentRewardPerBlock * (h - lastInterestHeight))
308+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
311309 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
312310 }
313311 else {
314312 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
315313 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
316- let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
314+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
317315 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
318316 }
319317
320318
321-func claimCalc (pool,userAddrStr,h) = {
319+func claimCalc (pool,caller,pmtAmount) = {
322320 let shareAssetId = getShareAssetId(pool)
323321 let scaleValue = calcScaleValue(SWOP, shareAssetId)
324322 let shareTokenLocked = getTotalShareTokenLocked(pool)
325- let $t01309613161 = getLastInterestInfo(pool)
326- let lastInterestHeight = $t01309613161._1
327- let lastInterest = $t01309613161._2
328- let $t01316613278 = rewardInfo(pool)
329- let currentRewardPerBlock = $t01316613278._1
330- let rewardUpdateHeight = $t01316613278._2
331- let previousRewardPerBlock = $t01316613278._3
332- let poolRewardUpdateHeight = $t01316613278._4
333- let $t01328313367 = getUserInterestInfo(pool, userAddrStr)
334- let userLastInterest = $t01328313367._1
335- let userShareTokensAmount = $t01328313367._2
336- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
337- let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
338- let userNewInterest = currentInterest
339- $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
340- }
341-
342-
343-func claimCalcForMigration (pool,userAddrStr,h) = {
344- let shareAssetId = getShareAssetId(pool)
345- let scaleValue = calcScaleValue(SWOP, shareAssetId)
346- let shareTokenLocked = getTotalShareTokenLocked(pool)
347- let $t01409014155 = getLastInterestInfo(pool)
348- let lastInterestHeight = $t01409014155._1
349- let lastInterest = $t01409014155._2
350- let $t01416014272 = rewardInfo(pool)
351- let currentRewardPerBlock = $t01416014272._1
352- let rewardUpdateHeight = $t01416014272._2
353- let previousRewardPerBlock = $t01416014272._3
354- let poolRewardUpdateHeight = $t01416014272._4
355- let $t01427714361 = getUserInterestInfo(pool, userAddrStr)
356- let userLastInterest = $t01427714361._1
357- let userShareTokensAmount = $t01427714361._2
358- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
323+ let $t01315313218 = getLastInterestInfo(pool)
324+ let lastInterestHeight = $t01315313218._1
325+ let lastInterest = $t01315313218._2
326+ let $t01322313335 = rewardInfo(pool)
327+ let currentRewardPerBlock = $t01322313335._1
328+ let rewardUpdateHeight = $t01322313335._2
329+ let previousRewardPerBlock = $t01322313335._3
330+ let poolRewardUpdateHeight = $t01322313335._4
331+ let $t01334013419 = getUserInterestInfo(pool, caller)
332+ let userLastInterest = $t01334013419._1
333+ let userShareTokensAmount = $t01334013419._2
334+ let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
359335 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360336 let userNewInterest = currentInterest
361337 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
363339
364340
365341 func calculateProtocolReward (pool) = {
366- let $t01486514930 = getLastInterestInfo(pool)
367- let lastInterestHeight = $t01486514930._1
368- let lastInterest = $t01486514930._2
369- let $t01493515046 = rewardInfo(pool)
370- let currentRewardPerBlock = $t01493515046._1
371- let rewardUpdateHeight = $t01493515046._2
372- let previousRewardPerBlock = $t01493515046._3
373- let poolRewardUpdateHeight = $t01493515046._4
342+ let $t01393714002 = getLastInterestInfo(pool)
343+ let lastInterestHeight = $t01393714002._1
344+ let lastInterest = $t01393714002._2
345+ let $t01400714118 = rewardInfo(pool)
346+ let currentRewardPerBlock = $t01400714118._1
347+ let rewardUpdateHeight = $t01400714118._2
348+ let previousRewardPerBlock = $t01400714118._3
349+ let poolRewardUpdateHeight = $t01400714118._4
374350 let shareTokenLocked = getTotalShareTokenLocked(pool)
375351 if (if ((shareTokenLocked == 0))
376352 then (poolRewardUpdateHeight == 0)
433409 }
434410
435411
436-func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
412+func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
437413
438414
439415 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
455431 func initPoolShareFarming (pool) = if ((i.caller != this))
456432 then throw("Only the DApp itself can call this function")
457433 else {
458- let $t01801618119 = rewardInfo(pool)
459- let currentReward = $t01801618119._1
460- let rewardUpdateHeight = $t01801618119._2
461- let previousRewardPerBlock = $t01801618119._3
462- let poolRewardUpdateHeight = $t01801618119._4
434+ let $t01710017203 = rewardInfo(pool)
435+ let currentReward = $t01710017203._1
436+ let rewardUpdateHeight = $t01710017203._2
437+ let previousRewardPerBlock = $t01710017203._3
438+ let poolRewardUpdateHeight = $t01710017203._4
463439 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464440 }
465441
471447 else if (!(isActive))
472448 then throw("DApp is inactive at this moment")
473449 else {
474- let $t01852818664 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475- let userNewInterest = $t01852818664._1
476- let currentInterest = $t01852818664._2
477- let claimAmount = $t01852818664._3
478- let userShareTokensAmount = $t01852818664._4
479- let $t01866918772 = rewardInfo(pool)
480- let currentReward = $t01866918772._1
481- let rewardUpdateHeight = $t01866918772._2
482- let previousRewardPerBlock = $t01866918772._3
483- let poolRewardUpdateHeight = $t01866918772._4
450+ let $t01761217732 = claimCalc(pool, adminIncreaseInterestAddress, 0)
451+ let userNewInterest = $t01761217732._1
452+ let currentInterest = $t01761217732._2
453+ let claimAmount = $t01761217732._3
454+ let userShareTokensAmount = $t01761217732._4
455+ let $t01773717840 = rewardInfo(pool)
456+ let currentReward = $t01773717840._1
457+ let rewardUpdateHeight = $t01773717840._2
458+ let previousRewardPerBlock = $t01773717840._3
459+ let poolRewardUpdateHeight = $t01773717840._4
484460 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485461 }
486462
488464
489465 @Callable(i)
490466 func lockShareTokens (pool) = {
491- let userAddrStr = toString(i.caller)
492- let $t01900619081 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493- let pmtAmount = $t01900619081._1
494- let pmtAssetId = $t01900619081._2
495- let $t01908619159 = getAssetInfo(pmtAssetId)
496- let pmtStrAssetId = $t01908619159._1
497- let pmtAssetName = $t01908619159._2
498- let pmtDecimals = $t01908619159._3
499- let $t01916419280 = claimCalc(pool, toString(i.caller), height)
500- let userNewInterest = $t01916419280._1
501- let currentInterest = $t01916419280._2
502- let claimAmount = $t01916419280._3
503- let userShareTokensAmount = $t01916419280._4
467+ let $t01803218107 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
468+ let pmtAmount = $t01803218107._1
469+ let pmtAssetId = $t01803218107._2
470+ let $t01811218185 = getAssetInfo(pmtAssetId)
471+ let pmtStrAssetId = $t01811218185._1
472+ let pmtAssetName = $t01811218185._2
473+ let pmtDecimals = $t01811218185._3
474+ let $t01819018298 = claimCalc(pool, i.caller, pmtAmount)
475+ let userNewInterest = $t01819018298._1
476+ let currentInterest = $t01819018298._2
477+ let claimAmount = $t01819018298._3
478+ let userShareTokensAmount = $t01819018298._4
504479 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
480+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
506481 let totalShareAmount = getTotalShareTokenLocked(pool)
507482 let totalShareAmountNew = (totalShareAmount + pmtAmount)
508- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
483+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
509484 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
510- let baseEntry = [IntegerEntry((((pool + "_") + userAddrStr) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + userAddrStr) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + userAddrStr) + keyAvailableSWOP), availableFundsNew)]
511- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
512- then true
513- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
514- then throw()
515- else if ((0 >= pmtAmount))
516- then throw("You can't lock token")
517- else if (!(isActive))
518- then throw("DApp is inactive at this moment")
519- else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
520- then throw("Incorrect pmtAssetId")
521- else if (if (isFirstHarvest(Address(fromBase58String(pool))))
522- then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
523- else false)
524- then {
525- let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
526- let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
527- let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
528- let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
529- let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
530- let userShareTokenLocked = userShareTokensAmount
531- let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
532- then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
533- else valueOrElse(parseInt(amountOfVoting[1]), 0)
534- let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
535- then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
536- else valueOrElse(parseInt(amountPoolStract[1]), 0)
537- let protocolReward = calculateProtocolReward(pool)
538- if ((userPoolActiveVote != 0))
539- then {
540- let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
541- let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
542- if (if ((size(amountActiveVoteUserPoolStract) > 1))
543- then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
544- else false)
545- then throw("You can't share token")
546- else if ((pmtAmount > limitShareToken))
547- then throw(("You can't share token more than " + toString(limitShareToken)))
548- else if ((shareToken > 0))
549- then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
550- then throw("Balance of share-token is greater than totalAmount")
551- else if ((totalShareAmount == 0))
552- then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
553- else if ((shareToken >= pmtAmount))
554- then baseEntry
555- else throw(("Your maximum share token is " + toString(shareToken)))
556- else throw("You can't share token")
557- }
558- else throw("Your amount of token less than 0")
559- }
560- else baseEntry
485+ let baseEntry = [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew)]
486+ if ((0 >= pmtAmount))
487+ then throw("You can't lock token")
488+ else if (!(isActive))
489+ then throw("DApp is inactive at this moment")
490+ else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
491+ then throw("Incorrect pmtAssetId")
492+ else if (if (isFirstHarvest(Address(fromBase58String(pool))))
493+ then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
494+ else false)
495+ then {
496+ let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
497+ let amountOfVoting = split(getStringValue(votingAddress, (((toString(i.caller) + "_") + pool) + "_user_pool_struc")), "_")
498+ let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
499+ let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((toString(i.caller) + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
500+ let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
501+ let userShareTokenLocked = userShareTokensAmount
502+ let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
503+ then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
504+ else valueOrElse(parseInt(amountOfVoting[1]), 0)
505+ let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
506+ then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
507+ else valueOrElse(parseInt(amountPoolStract[1]), 0)
508+ let protocolReward = calculateProtocolReward(pool)
509+ if ((userPoolActiveVote != 0))
510+ then {
511+ let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
512+ let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
513+ if (if ((size(amountActiveVoteUserPoolStract) > 1))
514+ then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
515+ else false)
516+ then throw("You can't share token")
517+ else if ((pmtAmount > limitShareToken))
518+ then throw(("You can't share token more than " + toString(limitShareToken)))
519+ else if ((shareToken > 0))
520+ then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
521+ then throw("Balance of share-token is greater than totalAmount")
522+ else if ((totalShareAmount == 0))
523+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
524+ else if ((shareToken >= pmtAmount))
525+ then baseEntry
526+ else throw(("Your maximum share token is " + toString(shareToken)))
527+ else throw("You can't share token")
528+ }
529+ else throw("Your amount of token less than 0")
530+ }
531+ else baseEntry
561532 }
562533
563534
565536 @Callable(i)
566537 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567538 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568- let $t02381523931 = claimCalc(pool, toString(i.caller), height)
569- let userNewInterest = $t02381523931._1
570- let currentInterest = $t02381523931._2
571- let claimAmount = $t02381523931._3
572- let userShareTokensAmount = $t02381523931._4
539+ let $t02274822848 = claimCalc(pool, i.caller, 1)
540+ let userNewInterest = $t02274822848._1
541+ let currentInterest = $t02274822848._2
542+ let claimAmount = $t02274822848._3
543+ let userShareTokensAmount = $t02274822848._4
573544 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
545+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
575546 let totalShareAmount = getTotalShareTokenLocked(pool)
576547 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
577- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
548+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
578549 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
579- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
580- then true
581- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
582- then throw()
583- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
584- then throw("Withdraw amount more then user locked amount")
585- else if (!(isActive))
586- then throw("DApp is inactive at this moment")
587- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
588- then throw("Withdraw amount more then user locked amount")
589- else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
590- then throw("Balance of share-token is greater than totalAmount")
591- else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, shareTokensWithdrawAmount, shareTokensId)]
550+ if ((shareTokensWithdrawAmount > userShareTokensAmount))
551+ then throw("Withdraw amount more then user locked amount")
552+ else if (!(isActive))
553+ then throw("DApp is inactive at this moment")
554+ else if ((shareTokensWithdrawAmount > userShareTokensAmount))
555+ then throw("Withdraw amount more then user locked amount")
556+ else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
557+ then throw("Balance of share-token is greater than totalAmount")
558+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, shareTokensWithdrawAmount, shareTokensId)]
592559 }
593-
594-
595-
596-@Callable(i)
597-func egg0 (pool,users,migrationHeight) = if (if ((pool != "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598- then (pool != "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8")
599- else false)
600- then throw()
601- else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602- then throw("Only admin can call this function")
603- else {
604- func updateUser (accum,u) = {
605- let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
606- if ((r == r))
607- then accum
608- else throw("Strict value is not equal to itself.")
609- }
610-
611- let $list2639726428 = users
612- let $size2639726428 = size($list2639726428)
613- let $acc02639726428 = nil
614- if (($size2639726428 == 0))
615- then $acc02639726428
616- else {
617- let $acc12639726428 = updateUser($acc02639726428, $list2639726428[0])
618- if (($size2639726428 == 1))
619- then $acc12639726428
620- else {
621- let $acc22639726428 = updateUser($acc12639726428, $list2639726428[1])
622- if (($size2639726428 == 2))
623- then $acc22639726428
624- else {
625- let $acc32639726428 = updateUser($acc22639726428, $list2639726428[2])
626- if (($size2639726428 == 3))
627- then $acc32639726428
628- else {
629- let $acc42639726428 = updateUser($acc32639726428, $list2639726428[3])
630- if (($size2639726428 == 4))
631- then $acc42639726428
632- else {
633- let $acc52639726428 = updateUser($acc42639726428, $list2639726428[4])
634- if (($size2639726428 == 5))
635- then $acc52639726428
636- else {
637- let $acc62639726428 = updateUser($acc52639726428, $list2639726428[5])
638- if (($size2639726428 == 6))
639- then $acc62639726428
640- else {
641- let $acc72639726428 = updateUser($acc62639726428, $list2639726428[6])
642- if (($size2639726428 == 7))
643- then $acc72639726428
644- else {
645- let $acc82639726428 = updateUser($acc72639726428, $list2639726428[7])
646- if (($size2639726428 == 8))
647- then $acc82639726428
648- else {
649- let $acc92639726428 = updateUser($acc82639726428, $list2639726428[8])
650- if (($size2639726428 == 9))
651- then $acc92639726428
652- else {
653- let $acc102639726428 = updateUser($acc92639726428, $list2639726428[9])
654- if (($size2639726428 == 10))
655- then $acc102639726428
656- else {
657- let $acc112639726428 = updateUser($acc102639726428, $list2639726428[10])
658- if (($size2639726428 == 11))
659- then $acc112639726428
660- else {
661- let $acc122639726428 = updateUser($acc112639726428, $list2639726428[11])
662- if (($size2639726428 == 12))
663- then $acc122639726428
664- else {
665- let $acc132639726428 = updateUser($acc122639726428, $list2639726428[12])
666- throw("List size exceed 12")
667- }
668- }
669- }
670- }
671- }
672- }
673- }
674- }
675- }
676- }
677- }
678- }
679- }
680- }
681-
682-
683-
684-@Callable(i)
685-func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
686- then throw("Only contract itself can invoke this function")
687- else {
688- let shareTokenMultiplyer = 1000
689- let $t02663926751 = claimCalc(pool, u, migrationHeight)
690- let userNewInterest = $t02663926751._1
691- let currentInterest = $t02663926751._2
692- let claimAmount = $t02663926751._3
693- let userShareTokensAmount = $t02663926751._4
694- let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
695- let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
696- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
697- let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
698- let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
699-[IntegerEntry((((pool + "_") + u) + keyUserLastInterest), 0), IntegerEntry((((pool + "_") + u) + keyUserShareTokensLocked), userShareTokensAmountNew), IntegerEntry((((pool + "_") + u) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry(((pool + "_") + "tansl"), (totalAmountNewShareTokenLocked + userShareTokensAmountNew))]
700- }
701-
702-
703-
704-@Callable(i)
705-func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
706- then throw("Only admin can call this function")
707- else {
708- let shareTokenMultiplyer = 1000
709- let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
710- let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
711- if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
712- then throw("New total amount share tockens != old total amount")
713- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
714- }
715560
716561
717562
719564 func claim (pool) = {
720565 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
721566 let shareTokenLocked = getTotalShareTokenLocked(pool)
722- let $t02881528880 = getLastInterestInfo(pool)
723- let lastInterestHeight = $t02881528880._1
724- let lastInterest = $t02881528880._2
725- let $t02888528997 = rewardInfo(pool)
726- let currentRewardPerBlock = $t02888528997._1
727- let rewardUpdateHeight = $t02888528997._2
728- let previousRewardPerBlock = $t02888528997._3
729- let poolRewardUpdateHeight = $t02888528997._4
730- let $t02900229118 = claimCalc(pool, toString(i.caller), height)
731- let userNewInterest = $t02900229118._1
732- let currentInterest = $t02900229118._2
733- let claimAmount = $t02900229118._3
734- let userShareTokensAmount = $t02900229118._4
735- let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
736- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
567+ let $t02485524920 = getLastInterestInfo(pool)
568+ let lastInterestHeight = $t02485524920._1
569+ let lastInterest = $t02485524920._2
570+ let $t02492525037 = rewardInfo(pool)
571+ let currentRewardPerBlock = $t02492525037._1
572+ let rewardUpdateHeight = $t02492525037._2
573+ let previousRewardPerBlock = $t02492525037._3
574+ let poolRewardUpdateHeight = $t02492525037._4
575+ let $t02504225142 = claimCalc(pool, i.caller, 1)
576+ let userNewInterest = $t02504225142._1
577+ let currentInterest = $t02504225142._2
578+ let claimAmount = $t02504225142._3
579+ let userShareTokensAmount = $t02504225142._4
580+ let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
581+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
737582 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
738- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
739- then true
740- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
741- then throw()
742- else if ((availableFund == 0))
743- then throw("You have 0 available SWOP")
744- else if (!(isActive))
745- then throw("DApp is inactive at this moment")
746- else if ((availableFund == 0))
747- then throw("You have 0 available SWOP")
748- else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
749- then throw("Balance of share-token is greater than totalAmount")
750- else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
583+ if ((availableFund == 0))
584+ then throw("You have 0 available SWOP")
585+ else if (!(isActive))
586+ then throw("DApp is inactive at this moment")
587+ else if ((availableFund == 0))
588+ then throw("You have 0 available SWOP")
589+ else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
590+ then throw("Balance of share-token is greater than totalAmount")
591+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
751592 }
752593
753594
771612
772613 @Verifier(tx)
773614 func verify () = match tx {
774- case inv: InvokeScriptTransaction =>
775- let callEgg1 = if ((inv.dApp == this))
776- then (inv.function == "egg1")
777- else false
778- let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
779- then true
780- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
781- then true
782- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
783- then true
784- else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
785- if (callEgg1)
786- then signedByAdmin
787- else false
788615 case _ =>
789616 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
790617 then 1
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
55
66 let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
77
88 let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
9-
10-let admStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
119
1210 let keyShareTokensLocked = "_total_share_tokens_locked"
1311
1412 let kShareLimit = "share_limit_on_first_harvest"
1513
1614 let keyActive = "active"
1715
1816 let keyCause = "shutdown_cause"
1917
2018 let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
2119
2220 let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
2321
2422 let keyHeightPoolFraction = "_pool_reward_update_height"
2523
2624 let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
2725
2826 let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
2927
3028 let keyRewardUpdateHeight = "reward_update_height"
3129
3230 let keyLastInterest = "_last_interest"
3331
3432 let keyLastInterestHeight = "_last_interest_height"
3533
3634 let keyUserShareTokensLocked = "_share_tokens_locked"
3735
3836 let keyUserLastInterest = "_last_interest"
3937
4038 let keySWOPid = "SWOP_id"
4139
4240 let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
4341
4442 let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
4543
4644 let keyAvailableSWOP = "_available_SWOP"
4745
4846 let keyFarmingStartHeight = "farming_start_height"
4947
5048 let keyAPY = "apy"
5149
5250 let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
5351
5452 let keySwopYearEmission = "swop_year_emission"
5553
5654 let keyBalancecpmmA = "A_asset_balance"
5755
5856 let keyBalancecpmmB = "B_asset_balance"
5957
6058 let kHarvestPoolActiveVoteStrucVoting = "_harvest_pool_activeVote_struc"
6159
6260 let kHarvestUserPoolActiveVoteStrucVoting = "_harvest_user_pool_activeVote_struc"
6361
6462 let keyLimitShareFirstHarvest = "share_limit_on_first_harvest"
6563
6664 let keyAssetIdA = "A_asset_id"
6765
6866 let keyAssetIdB = "B_asset_id"
6967
7068 let keyFirstHarvestHeight = "first_harvest_height"
7169
7270 let keyfirstHarvestCpmm = "first_harvest"
7371
7472 let keyTempPrevSum = "sum_reward_previous"
7573
7674 let keyTempCurSum = "sum_reward_current"
7775
7876 let governanceAddress = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
7977
8078 let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8179
8280 let votingAddress = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8381
8482 let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8583
8684 let oneWeekInBlock = 10106
8785
8886 let totalVoteShare = 10000000000
8987
9088 let scaleValue1 = 10
9189
9290 let scaleValue3 = 1000
9391
9492 let scaleValue5 = 100000
9593
9694 let scaleValue6 = 1000000
9795
9896 let scaleValue8 = 100000000
9997
10098 let scaleValue11 = 100000000000
10199
102100 func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
103101
104102
105103 func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
106104
107105
108106 func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
109107 then unit
110108 else fromBase58String(strAssetIdA(pool))
111109
112110
113111 func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
114112 then unit
115113 else fromBase58String(strAssetIdB(pool))
116114
117115
118116 let kBasePeriod = "base_period"
119117
120118 let kPeriodLength = "period_length"
121119
122120 let kStartHeight = "start_height"
123121
124122 let kFirstHarvestHeight = "first_harvest_height"
125123
126124 let kDurationFullVotePower = "duration_full_vote_power"
127125
128126 let kMinVotePower = "min_vote_power"
129127
130128 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
131129
132130 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
133131
134132 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
135133
136134 let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
137135
138136 let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
139137
140138 let isActive = getBooleanValue(this, keyActive)
141139
142140 let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
143141
144142 func getLimitToken (pool) = valueOrElse(getIntegerValue(pool, keyLimitShareFirstHarvest), 0)
145143
146144
147145 let APY = getIntegerValue(this, keyAPY)
148146
149147 let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
150148
151149 func assetNameA (pool) = match assetIdA(pool) {
152150 case id: ByteVector =>
153151 value(assetInfo(id)).name
154152 case waves: Unit =>
155153 "WAVES"
156154 case _ =>
157155 throw("Match error")
158156 }
159157
160158
161159 func assetNameB (pool) = match assetIdB(pool) {
162160 case id: ByteVector =>
163161 value(assetInfo(id)).name
164162 case waves: Unit =>
165163 "WAVES"
166164 case _ =>
167165 throw("Match error")
168166 }
169167
170168
171169 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
172170
173171 func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
174172
175173
176174 func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
177175
178176
179177 func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
180178
181179
182180 func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
183181
184182
185183 func getShareLimitToken (pool) = valueOrErrorMessage(getInteger(pool, kShareLimit), ("No data on the key: " + kShareLimit))
186184
187185
188186 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
189187
190188
191189 func getShareAssetId (pool) = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
192190
193191
194192 func accountBalance (assetId) = match assetId {
195193 case id: ByteVector =>
196194 assetBalance(this, id)
197195 case waves: Unit =>
198196 wavesBalance(this).available
199197 case _ =>
200198 throw("Match error")
201199 }
202200
203201
204202 func getAssetInfo (assetId) = match assetId {
205203 case id: ByteVector =>
206204 let stringId = toBase58String(id)
207205 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
208206 $Tuple3(stringId, info.name, info.decimals)
209207 case waves: Unit =>
210208 $Tuple3("WAVES", "WAVES", 8)
211209 case _ =>
212210 throw("Match error")
213211 }
214212
215213
216214 func calcScaleValue (assetId1,assetId2) = {
217215 let assetId1Decimals = value(assetInfo(assetId1)).decimals
218216 let assetId2Decimals = value(assetInfo(assetId2)).decimals
219217 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
220- pow(10, 0, scaleDigits, 0, 0, FLOOR)
218+ pow(10, 0, scaleDigits, 0, 0, HALFDOWN)
221219 }
222220
223221
224-func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyAvailableSWOP)), 0)
222+func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyAvailableSWOP)), 0)
225223
226224
227225 func rewardInfo (pool) = {
228226 let totalRewardPerBlockCurrent = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockCurrent), ((("No data on the key: " + keyTotalRewardPerBlockCurrent) + " at address ") + toString(governanceAddress)))
229227 let totalRewardPerBlockPrevious = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockPrevious), ((("No data on the key: " + keyTotalRewardPerBlockPrevious) + " at address ") + toString(governanceAddress)))
230228 let rewardPoolFractionCurrent = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionCurrent)), (((("No data on the key: " + pool) + keyRewardPoolFractionCurrent) + " at address ") + toString(governanceAddress)))
231229 let rewardUpdateHeight = valueOrErrorMessage(getInteger(governanceAddress, keyRewardUpdateHeight), ((("No data on the key: " + keyRewardUpdateHeight) + " at address ") + toString(governanceAddress)))
232230 let poolRewardUpdateHeight = valueOrElse(getInteger(governanceAddress, (pool + keyHeightPoolFraction)), 0)
233231 let rewardPoolFractionPrevious = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionPrevious)), (((("No data on the key: " + pool) + keyRewardPoolFractionPrevious) + " at address ") + toString(governanceAddress)))
234232 let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
235233 let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
236234 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
237235 then true
238236 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
239237 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
240238 else $Tuple4(rewardPoolCurrent, rewardUpdateHeight, rewardPoolPrevious, poolRewardUpdateHeight)
241239 }
242240
243241
244242 func getLastInterestInfo (pool) = {
245243 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
246244 let lastInterestHeight = valueOrElse(getInteger(this, (pool + keyLastInterestHeight)), height)
247245 $Tuple2(lastInterestHeight, lastInterest)
248246 }
249247
250248
251-func getUserInterestInfo (pool,userAddrStr) = {
252- let userLastInterest = getInteger(this, (((pool + "_") + userAddrStr) + keyUserLastInterest))
253- let userShare = getInteger(this, (((pool + "_") + userAddrStr) + keyUserShareTokensLocked))
249+func getUserInterestInfo (pool,userAddress) = {
250+ let userLastInterest = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserLastInterest))
251+ let userShare = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserShareTokensLocked))
254252 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
255253 let userLastInterestValue = match userLastInterest {
256254 case userLastInterest: Int =>
257255 userLastInterest
258256 case _ =>
259257 lastInterest
260258 }
261259 let userShareTokensAmount = match userShare {
262260 case userShare: Int =>
263261 userShare
264262 case _ =>
265263 0
266264 }
267265 $Tuple2(userLastInterestValue, userShareTokensAmount)
268266 }
269267
270268
271-func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,scaleValue,h) = if ((shareTokenLocked == 0))
269+func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,shareAssetId,scaleValue,pmtAmount) = if ((shareTokenLocked == 0))
272270 then 0
273271 else if ((poolRewardUpdateHeight != 0))
274- then if (if ((rewardUpdateHeight > h))
272+ then if (if ((rewardUpdateHeight > height))
275273 then (rewardUpdateHeight == poolRewardUpdateHeight)
276274 else false)
277275 then {
278- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
276+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
279277 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
280278 }
281- else if (if ((h > rewardUpdateHeight))
279+ else if (if ((height > rewardUpdateHeight))
282280 then (rewardUpdateHeight != poolRewardUpdateHeight)
283281 else false)
284282 then {
285- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
283+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
286284 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
287285 }
288- else if (if (if ((h > rewardUpdateHeight))
286+ else if (if (if ((height > rewardUpdateHeight))
289287 then (rewardUpdateHeight == poolRewardUpdateHeight)
290288 else false)
291289 then (lastInterestHeight > rewardUpdateHeight)
292290 else false)
293291 then {
294- let reward = (currentRewardPerBlock * (h - lastInterestHeight))
292+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
295293 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
296294 }
297295 else {
298296 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
299297 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
300- let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
298+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
301299 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
302300 }
303- else if ((rewardUpdateHeight > h))
301+ else if ((rewardUpdateHeight > height))
304302 then {
305- let reward = (previousRewardPerBlock * (h - lastInterestHeight))
303+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
306304 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
307305 }
308306 else if ((lastInterestHeight > rewardUpdateHeight))
309307 then {
310- let reward = (currentRewardPerBlock * (h - lastInterestHeight))
308+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
311309 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
312310 }
313311 else {
314312 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
315313 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
316- let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
314+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
317315 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
318316 }
319317
320318
321-func claimCalc (pool,userAddrStr,h) = {
319+func claimCalc (pool,caller,pmtAmount) = {
322320 let shareAssetId = getShareAssetId(pool)
323321 let scaleValue = calcScaleValue(SWOP, shareAssetId)
324322 let shareTokenLocked = getTotalShareTokenLocked(pool)
325- let $t01309613161 = getLastInterestInfo(pool)
326- let lastInterestHeight = $t01309613161._1
327- let lastInterest = $t01309613161._2
328- let $t01316613278 = rewardInfo(pool)
329- let currentRewardPerBlock = $t01316613278._1
330- let rewardUpdateHeight = $t01316613278._2
331- let previousRewardPerBlock = $t01316613278._3
332- let poolRewardUpdateHeight = $t01316613278._4
333- let $t01328313367 = getUserInterestInfo(pool, userAddrStr)
334- let userLastInterest = $t01328313367._1
335- let userShareTokensAmount = $t01328313367._2
336- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
337- let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
338- let userNewInterest = currentInterest
339- $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
340- }
341-
342-
343-func claimCalcForMigration (pool,userAddrStr,h) = {
344- let shareAssetId = getShareAssetId(pool)
345- let scaleValue = calcScaleValue(SWOP, shareAssetId)
346- let shareTokenLocked = getTotalShareTokenLocked(pool)
347- let $t01409014155 = getLastInterestInfo(pool)
348- let lastInterestHeight = $t01409014155._1
349- let lastInterest = $t01409014155._2
350- let $t01416014272 = rewardInfo(pool)
351- let currentRewardPerBlock = $t01416014272._1
352- let rewardUpdateHeight = $t01416014272._2
353- let previousRewardPerBlock = $t01416014272._3
354- let poolRewardUpdateHeight = $t01416014272._4
355- let $t01427714361 = getUserInterestInfo(pool, userAddrStr)
356- let userLastInterest = $t01427714361._1
357- let userShareTokensAmount = $t01427714361._2
358- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
323+ let $t01315313218 = getLastInterestInfo(pool)
324+ let lastInterestHeight = $t01315313218._1
325+ let lastInterest = $t01315313218._2
326+ let $t01322313335 = rewardInfo(pool)
327+ let currentRewardPerBlock = $t01322313335._1
328+ let rewardUpdateHeight = $t01322313335._2
329+ let previousRewardPerBlock = $t01322313335._3
330+ let poolRewardUpdateHeight = $t01322313335._4
331+ let $t01334013419 = getUserInterestInfo(pool, caller)
332+ let userLastInterest = $t01334013419._1
333+ let userShareTokensAmount = $t01334013419._2
334+ let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
359335 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360336 let userNewInterest = currentInterest
361337 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
362338 }
363339
364340
365341 func calculateProtocolReward (pool) = {
366- let $t01486514930 = getLastInterestInfo(pool)
367- let lastInterestHeight = $t01486514930._1
368- let lastInterest = $t01486514930._2
369- let $t01493515046 = rewardInfo(pool)
370- let currentRewardPerBlock = $t01493515046._1
371- let rewardUpdateHeight = $t01493515046._2
372- let previousRewardPerBlock = $t01493515046._3
373- let poolRewardUpdateHeight = $t01493515046._4
342+ let $t01393714002 = getLastInterestInfo(pool)
343+ let lastInterestHeight = $t01393714002._1
344+ let lastInterest = $t01393714002._2
345+ let $t01400714118 = rewardInfo(pool)
346+ let currentRewardPerBlock = $t01400714118._1
347+ let rewardUpdateHeight = $t01400714118._2
348+ let previousRewardPerBlock = $t01400714118._3
349+ let poolRewardUpdateHeight = $t01400714118._4
374350 let shareTokenLocked = getTotalShareTokenLocked(pool)
375351 if (if ((shareTokenLocked == 0))
376352 then (poolRewardUpdateHeight == 0)
377353 else false)
378354 then if ((rewardUpdateHeight > height))
379355 then {
380356 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
381357 reward
382358 }
383359 else if ((lastInterestHeight > rewardUpdateHeight))
384360 then {
385361 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
386362 reward
387363 }
388364 else {
389365 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
390366 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
391367 (reward + rewardAfterLastInterestBeforeReawardUpdate)
392368 }
393369 else if (if ((shareTokenLocked == 0))
394370 then (poolRewardUpdateHeight != 0)
395371 else false)
396372 then if (if ((rewardUpdateHeight > height))
397373 then (rewardUpdateHeight == poolRewardUpdateHeight)
398374 else false)
399375 then {
400376 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
401377 reward
402378 }
403379 else if (if ((height > rewardUpdateHeight))
404380 then (rewardUpdateHeight != poolRewardUpdateHeight)
405381 else false)
406382 then {
407383 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
408384 reward
409385 }
410386 else if (if (if ((height > rewardUpdateHeight))
411387 then (rewardUpdateHeight == poolRewardUpdateHeight)
412388 else false)
413389 then (lastInterestHeight > rewardUpdateHeight)
414390 else false)
415391 then {
416392 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
417393 reward
418394 }
419395 else {
420396 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
421397 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
422398 (reward + rewardAfterLastInterestBeforeReawardUpdate)
423399 }
424400 else 0
425401 }
426402
427403
428404 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
429405 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
430406 if ((pmtAssetId == poolShareAssetId))
431407 then true
432408 else false
433409 }
434410
435411
436-func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
412+func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
437413
438414
439415 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
440416
441417
442418 @Callable(i)
443419 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
444420 then throw("SWOP already initialized")
445421 else {
446422 let initAmount = 100000000000000
447423 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
448424 let SWOPid = calculateAssetId(SWOPissue)
449425 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
450426 }
451427
452428
453429
454430 @Callable(i)
455431 func initPoolShareFarming (pool) = if ((i.caller != this))
456432 then throw("Only the DApp itself can call this function")
457433 else {
458- let $t01801618119 = rewardInfo(pool)
459- let currentReward = $t01801618119._1
460- let rewardUpdateHeight = $t01801618119._2
461- let previousRewardPerBlock = $t01801618119._3
462- let poolRewardUpdateHeight = $t01801618119._4
434+ let $t01710017203 = rewardInfo(pool)
435+ let currentReward = $t01710017203._1
436+ let rewardUpdateHeight = $t01710017203._2
437+ let previousRewardPerBlock = $t01710017203._3
438+ let poolRewardUpdateHeight = $t01710017203._4
463439 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464440 }
465441
466442
467443
468444 @Callable(i)
469445 func updatePoolInterest (pool) = if ((i.caller != wallet))
470446 then throw("Only the Admin itself can call this function")
471447 else if (!(isActive))
472448 then throw("DApp is inactive at this moment")
473449 else {
474- let $t01852818664 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475- let userNewInterest = $t01852818664._1
476- let currentInterest = $t01852818664._2
477- let claimAmount = $t01852818664._3
478- let userShareTokensAmount = $t01852818664._4
479- let $t01866918772 = rewardInfo(pool)
480- let currentReward = $t01866918772._1
481- let rewardUpdateHeight = $t01866918772._2
482- let previousRewardPerBlock = $t01866918772._3
483- let poolRewardUpdateHeight = $t01866918772._4
450+ let $t01761217732 = claimCalc(pool, adminIncreaseInterestAddress, 0)
451+ let userNewInterest = $t01761217732._1
452+ let currentInterest = $t01761217732._2
453+ let claimAmount = $t01761217732._3
454+ let userShareTokensAmount = $t01761217732._4
455+ let $t01773717840 = rewardInfo(pool)
456+ let currentReward = $t01773717840._1
457+ let rewardUpdateHeight = $t01773717840._2
458+ let previousRewardPerBlock = $t01773717840._3
459+ let poolRewardUpdateHeight = $t01773717840._4
484460 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485461 }
486462
487463
488464
489465 @Callable(i)
490466 func lockShareTokens (pool) = {
491- let userAddrStr = toString(i.caller)
492- let $t01900619081 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493- let pmtAmount = $t01900619081._1
494- let pmtAssetId = $t01900619081._2
495- let $t01908619159 = getAssetInfo(pmtAssetId)
496- let pmtStrAssetId = $t01908619159._1
497- let pmtAssetName = $t01908619159._2
498- let pmtDecimals = $t01908619159._3
499- let $t01916419280 = claimCalc(pool, toString(i.caller), height)
500- let userNewInterest = $t01916419280._1
501- let currentInterest = $t01916419280._2
502- let claimAmount = $t01916419280._3
503- let userShareTokensAmount = $t01916419280._4
467+ let $t01803218107 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
468+ let pmtAmount = $t01803218107._1
469+ let pmtAssetId = $t01803218107._2
470+ let $t01811218185 = getAssetInfo(pmtAssetId)
471+ let pmtStrAssetId = $t01811218185._1
472+ let pmtAssetName = $t01811218185._2
473+ let pmtDecimals = $t01811218185._3
474+ let $t01819018298 = claimCalc(pool, i.caller, pmtAmount)
475+ let userNewInterest = $t01819018298._1
476+ let currentInterest = $t01819018298._2
477+ let claimAmount = $t01819018298._3
478+ let userShareTokensAmount = $t01819018298._4
504479 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
480+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
506481 let totalShareAmount = getTotalShareTokenLocked(pool)
507482 let totalShareAmountNew = (totalShareAmount + pmtAmount)
508- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
483+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
509484 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
510- let baseEntry = [IntegerEntry((((pool + "_") + userAddrStr) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + userAddrStr) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + userAddrStr) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + userAddrStr) + keyAvailableSWOP), availableFundsNew)]
511- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
512- then true
513- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
514- then throw()
515- else if ((0 >= pmtAmount))
516- then throw("You can't lock token")
517- else if (!(isActive))
518- then throw("DApp is inactive at this moment")
519- else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
520- then throw("Incorrect pmtAssetId")
521- else if (if (isFirstHarvest(Address(fromBase58String(pool))))
522- then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
523- else false)
524- then {
525- let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
526- let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
527- let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
528- let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
529- let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
530- let userShareTokenLocked = userShareTokensAmount
531- let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
532- then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
533- else valueOrElse(parseInt(amountOfVoting[1]), 0)
534- let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
535- then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
536- else valueOrElse(parseInt(amountPoolStract[1]), 0)
537- let protocolReward = calculateProtocolReward(pool)
538- if ((userPoolActiveVote != 0))
539- then {
540- let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
541- let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
542- if (if ((size(amountActiveVoteUserPoolStract) > 1))
543- then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
544- else false)
545- then throw("You can't share token")
546- else if ((pmtAmount > limitShareToken))
547- then throw(("You can't share token more than " + toString(limitShareToken)))
548- else if ((shareToken > 0))
549- then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
550- then throw("Balance of share-token is greater than totalAmount")
551- else if ((totalShareAmount == 0))
552- then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
553- else if ((shareToken >= pmtAmount))
554- then baseEntry
555- else throw(("Your maximum share token is " + toString(shareToken)))
556- else throw("You can't share token")
557- }
558- else throw("Your amount of token less than 0")
559- }
560- else baseEntry
485+ let baseEntry = [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew)]
486+ if ((0 >= pmtAmount))
487+ then throw("You can't lock token")
488+ else if (!(isActive))
489+ then throw("DApp is inactive at this moment")
490+ else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
491+ then throw("Incorrect pmtAssetId")
492+ else if (if (isFirstHarvest(Address(fromBase58String(pool))))
493+ then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
494+ else false)
495+ then {
496+ let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
497+ let amountOfVoting = split(getStringValue(votingAddress, (((toString(i.caller) + "_") + pool) + "_user_pool_struc")), "_")
498+ let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
499+ let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((toString(i.caller) + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
500+ let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
501+ let userShareTokenLocked = userShareTokensAmount
502+ let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
503+ then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
504+ else valueOrElse(parseInt(amountOfVoting[1]), 0)
505+ let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
506+ then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
507+ else valueOrElse(parseInt(amountPoolStract[1]), 0)
508+ let protocolReward = calculateProtocolReward(pool)
509+ if ((userPoolActiveVote != 0))
510+ then {
511+ let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
512+ let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
513+ if (if ((size(amountActiveVoteUserPoolStract) > 1))
514+ then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
515+ else false)
516+ then throw("You can't share token")
517+ else if ((pmtAmount > limitShareToken))
518+ then throw(("You can't share token more than " + toString(limitShareToken)))
519+ else if ((shareToken > 0))
520+ then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
521+ then throw("Balance of share-token is greater than totalAmount")
522+ else if ((totalShareAmount == 0))
523+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
524+ else if ((shareToken >= pmtAmount))
525+ then baseEntry
526+ else throw(("Your maximum share token is " + toString(shareToken)))
527+ else throw("You can't share token")
528+ }
529+ else throw("Your amount of token less than 0")
530+ }
531+ else baseEntry
561532 }
562533
563534
564535
565536 @Callable(i)
566537 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567538 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568- let $t02381523931 = claimCalc(pool, toString(i.caller), height)
569- let userNewInterest = $t02381523931._1
570- let currentInterest = $t02381523931._2
571- let claimAmount = $t02381523931._3
572- let userShareTokensAmount = $t02381523931._4
539+ let $t02274822848 = claimCalc(pool, i.caller, 1)
540+ let userNewInterest = $t02274822848._1
541+ let currentInterest = $t02274822848._2
542+ let claimAmount = $t02274822848._3
543+ let userShareTokensAmount = $t02274822848._4
573544 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
545+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
575546 let totalShareAmount = getTotalShareTokenLocked(pool)
576547 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
577- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
548+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
578549 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
579- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
580- then true
581- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
582- then throw()
583- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
584- then throw("Withdraw amount more then user locked amount")
585- else if (!(isActive))
586- then throw("DApp is inactive at this moment")
587- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
588- then throw("Withdraw amount more then user locked amount")
589- else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
590- then throw("Balance of share-token is greater than totalAmount")
591- else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, shareTokensWithdrawAmount, shareTokensId)]
550+ if ((shareTokensWithdrawAmount > userShareTokensAmount))
551+ then throw("Withdraw amount more then user locked amount")
552+ else if (!(isActive))
553+ then throw("DApp is inactive at this moment")
554+ else if ((shareTokensWithdrawAmount > userShareTokensAmount))
555+ then throw("Withdraw amount more then user locked amount")
556+ else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
557+ then throw("Balance of share-token is greater than totalAmount")
558+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, shareTokensWithdrawAmount, shareTokensId)]
592559 }
593-
594-
595-
596-@Callable(i)
597-func egg0 (pool,users,migrationHeight) = if (if ((pool != "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598- then (pool != "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8")
599- else false)
600- then throw()
601- else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602- then throw("Only admin can call this function")
603- else {
604- func updateUser (accum,u) = {
605- let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
606- if ((r == r))
607- then accum
608- else throw("Strict value is not equal to itself.")
609- }
610-
611- let $list2639726428 = users
612- let $size2639726428 = size($list2639726428)
613- let $acc02639726428 = nil
614- if (($size2639726428 == 0))
615- then $acc02639726428
616- else {
617- let $acc12639726428 = updateUser($acc02639726428, $list2639726428[0])
618- if (($size2639726428 == 1))
619- then $acc12639726428
620- else {
621- let $acc22639726428 = updateUser($acc12639726428, $list2639726428[1])
622- if (($size2639726428 == 2))
623- then $acc22639726428
624- else {
625- let $acc32639726428 = updateUser($acc22639726428, $list2639726428[2])
626- if (($size2639726428 == 3))
627- then $acc32639726428
628- else {
629- let $acc42639726428 = updateUser($acc32639726428, $list2639726428[3])
630- if (($size2639726428 == 4))
631- then $acc42639726428
632- else {
633- let $acc52639726428 = updateUser($acc42639726428, $list2639726428[4])
634- if (($size2639726428 == 5))
635- then $acc52639726428
636- else {
637- let $acc62639726428 = updateUser($acc52639726428, $list2639726428[5])
638- if (($size2639726428 == 6))
639- then $acc62639726428
640- else {
641- let $acc72639726428 = updateUser($acc62639726428, $list2639726428[6])
642- if (($size2639726428 == 7))
643- then $acc72639726428
644- else {
645- let $acc82639726428 = updateUser($acc72639726428, $list2639726428[7])
646- if (($size2639726428 == 8))
647- then $acc82639726428
648- else {
649- let $acc92639726428 = updateUser($acc82639726428, $list2639726428[8])
650- if (($size2639726428 == 9))
651- then $acc92639726428
652- else {
653- let $acc102639726428 = updateUser($acc92639726428, $list2639726428[9])
654- if (($size2639726428 == 10))
655- then $acc102639726428
656- else {
657- let $acc112639726428 = updateUser($acc102639726428, $list2639726428[10])
658- if (($size2639726428 == 11))
659- then $acc112639726428
660- else {
661- let $acc122639726428 = updateUser($acc112639726428, $list2639726428[11])
662- if (($size2639726428 == 12))
663- then $acc122639726428
664- else {
665- let $acc132639726428 = updateUser($acc122639726428, $list2639726428[12])
666- throw("List size exceed 12")
667- }
668- }
669- }
670- }
671- }
672- }
673- }
674- }
675- }
676- }
677- }
678- }
679- }
680- }
681-
682-
683-
684-@Callable(i)
685-func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
686- then throw("Only contract itself can invoke this function")
687- else {
688- let shareTokenMultiplyer = 1000
689- let $t02663926751 = claimCalc(pool, u, migrationHeight)
690- let userNewInterest = $t02663926751._1
691- let currentInterest = $t02663926751._2
692- let claimAmount = $t02663926751._3
693- let userShareTokensAmount = $t02663926751._4
694- let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
695- let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
696- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
697- let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
698- let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
699-[IntegerEntry((((pool + "_") + u) + keyUserLastInterest), 0), IntegerEntry((((pool + "_") + u) + keyUserShareTokensLocked), userShareTokensAmountNew), IntegerEntry((((pool + "_") + u) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry(((pool + "_") + "tansl"), (totalAmountNewShareTokenLocked + userShareTokensAmountNew))]
700- }
701-
702-
703-
704-@Callable(i)
705-func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
706- then throw("Only admin can call this function")
707- else {
708- let shareTokenMultiplyer = 1000
709- let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
710- let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
711- if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
712- then throw("New total amount share tockens != old total amount")
713- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
714- }
715560
716561
717562
718563 @Callable(i)
719564 func claim (pool) = {
720565 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
721566 let shareTokenLocked = getTotalShareTokenLocked(pool)
722- let $t02881528880 = getLastInterestInfo(pool)
723- let lastInterestHeight = $t02881528880._1
724- let lastInterest = $t02881528880._2
725- let $t02888528997 = rewardInfo(pool)
726- let currentRewardPerBlock = $t02888528997._1
727- let rewardUpdateHeight = $t02888528997._2
728- let previousRewardPerBlock = $t02888528997._3
729- let poolRewardUpdateHeight = $t02888528997._4
730- let $t02900229118 = claimCalc(pool, toString(i.caller), height)
731- let userNewInterest = $t02900229118._1
732- let currentInterest = $t02900229118._2
733- let claimAmount = $t02900229118._3
734- let userShareTokensAmount = $t02900229118._4
735- let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
736- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
567+ let $t02485524920 = getLastInterestInfo(pool)
568+ let lastInterestHeight = $t02485524920._1
569+ let lastInterest = $t02485524920._2
570+ let $t02492525037 = rewardInfo(pool)
571+ let currentRewardPerBlock = $t02492525037._1
572+ let rewardUpdateHeight = $t02492525037._2
573+ let previousRewardPerBlock = $t02492525037._3
574+ let poolRewardUpdateHeight = $t02492525037._4
575+ let $t02504225142 = claimCalc(pool, i.caller, 1)
576+ let userNewInterest = $t02504225142._1
577+ let currentInterest = $t02504225142._2
578+ let claimAmount = $t02504225142._3
579+ let userShareTokensAmount = $t02504225142._4
580+ let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
581+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
737582 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
738- if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
739- then true
740- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
741- then throw()
742- else if ((availableFund == 0))
743- then throw("You have 0 available SWOP")
744- else if (!(isActive))
745- then throw("DApp is inactive at this moment")
746- else if ((availableFund == 0))
747- then throw("You have 0 available SWOP")
748- else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
749- then throw("Balance of share-token is greater than totalAmount")
750- else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
583+ if ((availableFund == 0))
584+ then throw("You have 0 available SWOP")
585+ else if (!(isActive))
586+ then throw("DApp is inactive at this moment")
587+ else if ((availableFund == 0))
588+ then throw("You have 0 available SWOP")
589+ else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
590+ then throw("Balance of share-token is greater than totalAmount")
591+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
751592 }
752593
753594
754595
755596 @Callable(i)
756597 func shutdown () = if (!(isActive))
757598 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
758599 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
759600 then throw("Only admin can call this function")
760601 else suspend("Paused by admin")
761602
762603
763604
764605 @Callable(i)
765606 func activate () = if (isActive)
766607 then throw("DApp is already active")
767608 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
768609 then throw("Only admin can call this function")
769610 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
770611
771612
772613 @Verifier(tx)
773614 func verify () = match tx {
774- case inv: InvokeScriptTransaction =>
775- let callEgg1 = if ((inv.dApp == this))
776- then (inv.function == "egg1")
777- else false
778- let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
779- then true
780- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
781- then true
782- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
783- then true
784- else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
785- if (callEgg1)
786- then signedByAdmin
787- else false
788615 case _ =>
789616 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
790617 then 1
791618 else 0
792619 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
793620 then 1
794621 else 0
795622 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
796623 then 1
797624 else 0
798625 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
799626 }
800627

github/deemru/w8io/169f3d6 
126.65 ms