2021.09.15 22:30 [2769515] smart account 3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw > SELF 0.00000000 Waves

{ "type": 13, "id": "ALYRaThyiwVSbvLwGJMjnpL3WJmAnJ15Fv6RY67eGAm1", "fee": 1400000, "feeAssetId": null, "timestamp": 1631734196932, "version": 2, "chainId": 87, "sender": "3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw", "senderPublicKey": "B3jG1KiAb24bgwe28D9JKKkg9mtpiGTeEAYmQPrtHwQQ", "proofs": [ "", "2pEV7x7NZ2TjMmkYhxBqxDaeEpmZxrWdX5pcp7svDdDE8yraMrs2VhqjPSWegKisYPMwgPppngmGJaYggK6Etnrw", "4FNSqK3NYEk9oQJa4vojxj4hJ8tSCJp9AcGpEAcX1C8HcX5NtWpxW5oGFoe83M42S8ZLyfLiw1KTxTrkacL1q3YU" ], "script": "base64:AAIEAAAAAAAAEKIIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgMKAQgSABIAGhIKAmExEgxhZG1pblB1YktleTEaEgoCYTISDGFkbWluUHViS2V5MhoSCgJhMxIMYWRtaW5QdWJLZXkzGhoKAmE0EhRrZXlTaGFyZVRva2Vuc0xvY2tlZBoRCgJhNRILa1NoYXJlTGltaXQaDwoCYTYSCWtleUFjdGl2ZRoOCgJhNxIIa2V5Q2F1c2UaIgoCYTgSHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaIwoCYTkSHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzGhsKAmIxEhVrZXlIZWlnaHRQb29sRnJhY3Rpb24aIwoCYjISHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiQKAmIzEh5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaGwoCYjQSFWtleVJld2FyZFVwZGF0ZUhlaWdodBoVCgJiNRIPa2V5TGFzdEludGVyZXN0GhsKAmI2EhVrZXlMYXN0SW50ZXJlc3RIZWlnaHQaHgoCYjcSGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZBoZCgJiOBITa2V5VXNlckxhc3RJbnRlcmVzdBoPCgJiORIJa2V5U1dPUGlkGh4KAmMxEhhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQaIgoCYzISHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQaFgoCYzMSEGtleUF2YWlsYWJsZVNXT1AaGwoCYzQSFWtleUZhcm1pbmdTdGFydEhlaWdodBoMCgJjNRIGa2V5QVBZGhwKAmM2EhZrUHJldmlvdXNUb3RhbFZvdGVTV09QGhkKAmM3EhNrZXlTd29wWWVhckVtaXNzaW9uGhUKAmM4Eg9rZXlCYWxhbmNlY3BtbUEaFQoCYzkSD2tleUJhbGFuY2VjcG1tQhonCgJkMRIha0hhcnZlc3RQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGisKAmQyEiVrSGFydmVzdFVzZXJQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGh8KAmQzEhlrZXlMaW1pdFNoYXJlRmlyc3RIYXJ2ZXN0GhEKAmQ0EgtrZXlBc3NldElkQRoRCgJkNRILa2V5QXNzZXRJZEIaGwoCZDYSFWtleUZpcnN0SGFydmVzdEhlaWdodBoZCgJkNxITa2V5Zmlyc3RIYXJ2ZXN0Q3BtbRoUCgJkOBIOa2V5VGVtcFByZXZTdW0aEwoCZDkSDWtleVRlbXBDdXJTdW0aFwoCZTESEWdvdmVybmFuY2VBZGRyZXNzGgwKAmUyEgZ3YWxsZXQaEwoCZTMSDXZvdGluZ0FkZHJlc3MaIgoCZTQSHGFkbWluSW5jcmVhc2VJbnRlcmVzdEFkZHJlc3MaFAoCZTUSDm9uZVdlZWtJbkJsb2NrGhQKAmU2Eg50b3RhbFZvdGVTaGFyZRoRCgJlNxILc2NhbGVWYWx1ZTEaEQoCZTgSC3NjYWxlVmFsdWUzGhEKAmU5EgtzY2FsZVZhbHVlNRoRCgJmMRILc2NhbGVWYWx1ZTYaEQoCZjISC3NjYWxlVmFsdWU4GhIKAmYzEgxzY2FsZVZhbHVlMTEaEQoCZjQSC3N0ckFzc2V0SWRBGgoKAmY1EgRwb29sGhEKAmY2EgtzdHJBc3NldElkQhoOCgJmNxIIYXNzZXRJZEEaDgoCZjgSCGFzc2V0SWRCGhEKAmY5EgtrQmFzZVBlcmlvZBoTCgJnMRINa1BlcmlvZExlbmd0aBoSCgJnMhIMa1N0YXJ0SGVpZ2h0GhkKAmczEhNrRmlyc3RIYXJ2ZXN0SGVpZ2h0GhwKAmc0EhZrRHVyYXRpb25GdWxsVm90ZVBvd2VyGhMKAmc1Eg1rTWluVm90ZVBvd2VyGhAKAmc2EgpiYXNlUGVyaW9kGhEKAmc3EgtzdGFydEhlaWdodBoSCgJnOBIMcGVyaW9kTGVuZ3RoGhsKAmc5EhVkdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEgoCaDESDG1pblZvdGVQb3dlchoOCgJoMhIIaXNBY3RpdmUaEAoCaDMSCmN1cnJQZXJpb2QaEwoCaDQSDWdldExpbWl0VG9rZW4aCQoCaDUSA0FQWRoWCgJoNhIQU3dvcFllYXJFbWlzc2lvbhoQCgJoNxIKYXNzZXROYW1lQRoNCgJoOBIHJG1hdGNoMBoICgJoORICaWQaCwoCaTESBXdhdmVzGhAKAmkyEgphc3NldE5hbWVCGgoKAmkzEgRTV09QGhQKAmk0Eg5pc0ZpcnN0SGFydmVzdBobCgJpNRIVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0GhEKAmk2EgtnZXRCYWxhbmNlQRoRCgJpNxILZ2V0QmFsYW5jZUIaGAoCaTgSEmdldFNoYXJlTGltaXRUb2tlbhoeCgJpORIYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkGhUKAmoxEg9nZXRTaGFyZUFzc2V0SWQaFAoCajISDmFjY291bnRCYWxhbmNlGg0KAmozEgdhc3NldElkGhIKAmo0EgxnZXRBc3NldEluZm8aDgoCajUSCHN0cmluZ0lkGgoKAmo2EgRpbmZvGhQKAmo3Eg5jYWxjU2NhbGVWYWx1ZRoOCgJqOBIIYXNzZXRJZDEaDgoCajkSCGFzc2V0SWQyGhYKAmsxEhBhc3NldElkMURlY2ltYWxzGhYKAmsyEhBhc3NldElkMkRlY2ltYWxzGhEKAmszEgtzY2FsZURpZ2l0cxoXCgJrNBIRdXNlckF2YWlsYWJsZVNXT1AaCgoCazUSBHVzZXIaEAoCazYSCnJld2FyZEluZm8aIAoCazcSGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiEKAms4Eht0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaHwoCazkSGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaGAoCbDESEnJld2FyZFVwZGF0ZUhlaWdodBocCgJsMhIWcG9vbFJld2FyZFVwZGF0ZUhlaWdodBogCgJsMxIacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaFwoCbDQSEXJld2FyZFBvb2xDdXJyZW50GhgKAmw1EhJyZXdhcmRQb29sUHJldmlvdXMaGQoCbDYSE2dldExhc3RJbnRlcmVzdEluZm8aEgoCbDcSDGxhc3RJbnRlcmVzdBoYCgJsOBISbGFzdEludGVyZXN0SGVpZ2h0GhkKAmw5EhNnZXRVc2VySW50ZXJlc3RJbmZvGhEKAm0xEgt1c2VyQWRkcmVzcxoWCgJtMhIQdXNlckxhc3RJbnRlcmVzdBoPCgJtMxIJdXNlclNoYXJlGhsKAm00EhV1c2VyTGFzdEludGVyZXN0VmFsdWUaGwoCbTUSFXVzZXJTaGFyZVRva2Vuc0Ftb3VudBoSCgJtNhIMY2FsY0ludGVyZXN0GhsKAm03EhVjdXJyZW50UmV3YXJkUGVyQmxvY2saFgoCbTgSEHNoYXJlVG9rZW5Mb2NrZWQaHAoCbTkSFnByZXZpb3VzUmV3YXJkUGVyQmxvY2saEgoCbjESDHNoYXJlQXNzZXRJZBoQCgJuMhIKc2NhbGVWYWx1ZRoPCgJuMxIJcG10QW1vdW50GgwKAm40EgZyZXdhcmQaMAoCbjUSKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZRoZCgJuNhITaW50ZXJlc3RBZnRlclVwZGF0ZRoPCgJuNxIJY2xhaW1DYWxjGgwKAm44EgZjYWxsZXIaEwoCbjkSDSR0MDEzMDk1MTMxNjAaEwoCbzESDSR0MDEzMTY1MTMyNzcaEwoCbzISDSR0MDEzMjgyMTMzNjEaFQoCbzMSD2N1cnJlbnRJbnRlcmVzdBoRCgJvNBILY2xhaW1BbW91bnQaFQoCbzUSD3VzZXJOZXdJbnRlcmVzdBodCgJvNhIXY2FsY3VsYXRlUHJvdG9jb2xSZXdhcmQaEwoCbzcSDSR0MDEzODc5MTM5NDQaEwoCbzgSDSR0MDEzOTQ5MTQwNjAaHAoCbzkSFmNoZWNrUG10QXNzZXRJZENvcnJlY3QaEAoCcDESCnBtdEFzc2V0SWQaFgoCcDISEHBvb2xTaGFyZUFzc2V0SWQaHgoCcDMSGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudBoNCgJwNBIHc3VzcGVuZBoLCgJwNRIFY2F1c2UaBwoCcDYSAWkaDQoCcDcSB2Vhcmx5TFAaEAoCcDgSCmluaXRBbW91bnQaDwoCcDkSCVNXT1Bpc3N1ZRoMCgJxMRIGU1dPUGlkGhMKAnEyEg0kdDAxNzA0MjE3MTQ1GhMKAnEzEg1jdXJyZW50UmV3YXJkGhMKAnE0Eg0kdDAxNzU1NDE3Njc0GhMKAnE1Eg0kdDAxNzY3OTE3NzgyGhMKAnE2Eg0kdDAxNzk3NDE4MDQ5GhMKAnE3Eg0kdDAxODA1NDE4MTI3GhMKAnE4Eg1wbXRTdHJBc3NldElkGhIKAnE5EgxwbXRBc3NldE5hbWUaEQoCcjESC3BtdERlY2ltYWxzGhMKAnIyEg0kdDAxODEzMjE4MjQwGhgKAnIzEhJ1c2VyU2hhcmVBbW91bnROZXcaFwoCcjQSEWF2YWlsYWJsZUZ1bmRzTmV3GhYKAnI1EhB0b3RhbFNoYXJlQW1vdW50GhkKAnI2EhN0b3RhbFNoYXJlQW1vdW50TmV3GhcKAnI3EhF1c2VyQ2xhaW1lZEFtb3VudBoaCgJyOBIUdXNlckNsYWltZWRBbW91bnROZXcaDwoCcjkSCWJhc2VFbnRyeRoTCgJzMRINaGFydmVzdFBlcmlvZBoUCgJzMhIOYW1vdW50T2ZWb3RpbmcaFgoCczMSEGFtb3VudFBvb2xTdHJhY3QaJAoCczQSHmFtb3VudEFjdGl2ZVZvdGVVc2VyUG9vbFN0cmFjdBogCgJzNRIaYW1vdW50UG9vbEFjdGl2ZVZvdGVTdHJhY3QaGgoCczYSFHVzZXJTaGFyZVRva2VuTG9ja2VkGhgKAnM3EhJ1c2VyUG9vbEFjdGl2ZVZvdGUaFAoCczgSDnBvb2xBY3RpdmVWb3RlGhQKAnM5Eg5wcm90b2NvbFJld2FyZBoVCgJ0MRIPbGltaXRTaGFyZVRva2VuGhAKAnQyEgpzaGFyZVRva2VuGh8KAnQzEhlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50GhMKAnQ0Eg1zaGFyZVRva2Vuc0lkGhMKAnQ1Eg0kdDAyMjY4NzIyNzg3GhMKAnQ2Eg0kdDAyNDc5NDI0ODU5GhMKAnQ3Eg0kdDAyNDg2NDI0OTc2GhMKAnQ4Eg0kdDAyNDk4MTI1MDgxGhMKAnQ5Eg1hdmFpbGFibGVGdW5kGggKAnUxEgJ0eBoMCgJ1MhIGdmVyaWZ5GhgKAnUzEhJhZG1pblB1YktleTFTaWduZWQaGAoCdTQSEmFkbWluUHViS2V5MlNpZ25lZBoYCgJ1NRISYWRtaW5QdWJLZXkzU2lnbmVkAAAAWwAAAAACYTEBAAAAILoJ1zuJWaTRXaD/8bsz0KrhOWkPy+K9kdY77k9eqOATAAAAAAJhMgEAAAAgwpFEmbPSsLQNIqWRWL2IvKE3uwjL/92M5pTvWxYOfkAAAAAAAmEzAQAAACCOHhcueLEHO/RITnozKGB2KHf8meWSMKMgws+oq+kOVQAAAAACYTQCAAAAGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJhNQIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACYTYCAAAABmFjdGl2ZQAAAAACYTcCAAAADnNodXRkb3duX2NhdXNlAAAAAAJhOAIAAAAdX2N1cnJlbnRfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmE5AgAAAB5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAAmIxAgAAABpfcG9vbF9yZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjICAAAAHnRvdGFsX3Jld2FyZF9wZXJfYmxvY2tfY3VycmVudAAAAAACYjMCAAAAH3RvdGFsX3Jld2FyZF9wZXJfYmxvY2tfcHJldmlvdXMAAAAAAmI0AgAAABRyZXdhcmRfdXBkYXRlX2hlaWdodAAAAAACYjUCAAAADl9sYXN0X2ludGVyZXN0AAAAAAJiNgIAAAAVX2xhc3RfaW50ZXJlc3RfaGVpZ2h0AAAAAAJiNwIAAAAUX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAAmI4AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYjkCAAAAB1NXT1BfaWQAAAAAAmMxAgAAABRfU1dPUF9jbGFpbWVkX2Ftb3VudAAAAAACYzICAAAAGV9TV09QX2xhc3RfY2xhaW1lZF9hbW91bnQAAAAAAmMzAgAAAA9fYXZhaWxhYmxlX1NXT1AAAAAAAmM0AgAAABRmYXJtaW5nX3N0YXJ0X2hlaWdodAAAAAACYzUCAAAAA2FweQAAAAACYzYCAAAAGHByZXZpb3VzX3RvdGFsX3ZvdGVfU1dPUAAAAAACYzcCAAAAEnN3b3BfeWVhcl9lbWlzc2lvbgAAAAACYzgCAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAACYzkCAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAACZDECAAAAHl9oYXJ2ZXN0X3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACZDICAAAAI19oYXJ2ZXN0X3VzZXJfcG9vbF9hY3RpdmVWb3RlX3N0cnVjAAAAAAJkMwIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAACZDQCAAAACkFfYXNzZXRfaWQAAAAAAmQ1AgAAAApCX2Fzc2V0X2lkAAAAAAJkNgIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAAmQ3AgAAAA1maXJzdF9oYXJ2ZXN0AAAAAAJk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", "height": 2769515, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9RU8FE6i7LNWMGNma3UmvNTbTj2LL6SCB45hhivnuk5C Next: 7XZeFVAg5JVhDbpWjQiGCwmH6pCisxg8TGfMD5JcAdWJ Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
66 let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
77
88 let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
9-
10-let admStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
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 $t01305013115 = getLastInterestInfo(pool)
326- let lastInterestHeight = $t01305013115._1
327- let lastInterest = $t01305013115._2
328- let $t01312013232 = rewardInfo(pool)
329- let currentRewardPerBlock = $t01312013232._1
330- let rewardUpdateHeight = $t01312013232._2
331- let previousRewardPerBlock = $t01312013232._3
332- let poolRewardUpdateHeight = $t01312013232._4
333- let $t01323713321 = getUserInterestInfo(pool, userAddrStr)
334- let userLastInterest = $t01323713321._1
335- let userShareTokensAmount = $t01323713321._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 scaleValue = if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
345- then 100000
346- else if ((pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
347- then 10000
348- else throw("pool must be egg")
349- let shareTokenLocked = getTotalShareTokenLocked(pool)
350- let $t01411714182 = getLastInterestInfo(pool)
351- let lastInterestHeight = $t01411714182._1
352- let lastInterest = $t01411714182._2
353- let $t01418714299 = rewardInfo(pool)
354- let currentRewardPerBlock = $t01418714299._1
355- let rewardUpdateHeight = $t01418714299._2
356- let previousRewardPerBlock = $t01418714299._3
357- let poolRewardUpdateHeight = $t01418714299._4
358- let $t01430414388 = getUserInterestInfo(pool, userAddrStr)
359- let userLastInterest = $t01430414388._1
360- let userShareTokensAmount = $t01430414388._2
361- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
323+ let $t01309513160 = getLastInterestInfo(pool)
324+ let lastInterestHeight = $t01309513160._1
325+ let lastInterest = $t01309513160._2
326+ let $t01316513277 = rewardInfo(pool)
327+ let currentRewardPerBlock = $t01316513277._1
328+ let rewardUpdateHeight = $t01316513277._2
329+ let previousRewardPerBlock = $t01316513277._3
330+ let poolRewardUpdateHeight = $t01316513277._4
331+ let $t01328213361 = getUserInterestInfo(pool, caller)
332+ let userLastInterest = $t01328213361._1
333+ let userShareTokensAmount = $t01328213361._2
334+ let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
362335 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
363336 let userNewInterest = currentInterest
364337 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
366339
367340
368341 func calculateProtocolReward (pool) = {
369- let $t01489214957 = getLastInterestInfo(pool)
370- let lastInterestHeight = $t01489214957._1
371- let lastInterest = $t01489214957._2
372- let $t01496215073 = rewardInfo(pool)
373- let currentRewardPerBlock = $t01496215073._1
374- let rewardUpdateHeight = $t01496215073._2
375- let previousRewardPerBlock = $t01496215073._3
376- let poolRewardUpdateHeight = $t01496215073._4
342+ let $t01387913944 = getLastInterestInfo(pool)
343+ let lastInterestHeight = $t01387913944._1
344+ let lastInterest = $t01387913944._2
345+ let $t01394914060 = rewardInfo(pool)
346+ let currentRewardPerBlock = $t01394914060._1
347+ let rewardUpdateHeight = $t01394914060._2
348+ let previousRewardPerBlock = $t01394914060._3
349+ let poolRewardUpdateHeight = $t01394914060._4
377350 let shareTokenLocked = getTotalShareTokenLocked(pool)
378351 if (if ((shareTokenLocked == 0))
379352 then (poolRewardUpdateHeight == 0)
436409 }
437410
438411
439-func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
412+func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
440413
441414
442415 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
458431 func initPoolShareFarming (pool) = if ((i.caller != this))
459432 then throw("Only the DApp itself can call this function")
460433 else {
461- let $t01804318146 = rewardInfo(pool)
462- let currentReward = $t01804318146._1
463- let rewardUpdateHeight = $t01804318146._2
464- let previousRewardPerBlock = $t01804318146._3
465- let poolRewardUpdateHeight = $t01804318146._4
434+ let $t01704217145 = rewardInfo(pool)
435+ let currentReward = $t01704217145._1
436+ let rewardUpdateHeight = $t01704217145._2
437+ let previousRewardPerBlock = $t01704217145._3
438+ let poolRewardUpdateHeight = $t01704217145._4
466439 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
467440 }
468441
474447 else if (!(isActive))
475448 then throw("DApp is inactive at this moment")
476449 else {
477- let $t01855518691 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
478- let userNewInterest = $t01855518691._1
479- let currentInterest = $t01855518691._2
480- let claimAmount = $t01855518691._3
481- let userShareTokensAmount = $t01855518691._4
482- let $t01869618799 = rewardInfo(pool)
483- let currentReward = $t01869618799._1
484- let rewardUpdateHeight = $t01869618799._2
485- let previousRewardPerBlock = $t01869618799._3
486- let poolRewardUpdateHeight = $t01869618799._4
450+ let $t01755417674 = claimCalc(pool, adminIncreaseInterestAddress, 0)
451+ let userNewInterest = $t01755417674._1
452+ let currentInterest = $t01755417674._2
453+ let claimAmount = $t01755417674._3
454+ let userShareTokensAmount = $t01755417674._4
455+ let $t01767917782 = rewardInfo(pool)
456+ let currentReward = $t01767917782._1
457+ let rewardUpdateHeight = $t01767917782._2
458+ let previousRewardPerBlock = $t01767917782._3
459+ let poolRewardUpdateHeight = $t01767917782._4
487460 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
488461 }
489462
491464
492465 @Callable(i)
493466 func lockShareTokens (pool) = {
494- let userAddrStr = toString(i.caller)
495- let $t01903319108 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
496- let pmtAmount = $t01903319108._1
497- let pmtAssetId = $t01903319108._2
498- let $t01911319186 = getAssetInfo(pmtAssetId)
499- let pmtStrAssetId = $t01911319186._1
500- let pmtAssetName = $t01911319186._2
501- let pmtDecimals = $t01911319186._3
502- let $t01919119307 = claimCalc(pool, toString(i.caller), height)
503- let userNewInterest = $t01919119307._1
504- let currentInterest = $t01919119307._2
505- let claimAmount = $t01919119307._3
506- let userShareTokensAmount = $t01919119307._4
467+ let $t01797418049 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
468+ let pmtAmount = $t01797418049._1
469+ let pmtAssetId = $t01797418049._2
470+ let $t01805418127 = getAssetInfo(pmtAssetId)
471+ let pmtStrAssetId = $t01805418127._1
472+ let pmtAssetName = $t01805418127._2
473+ let pmtDecimals = $t01805418127._3
474+ let $t01813218240 = claimCalc(pool, i.caller, pmtAmount)
475+ let userNewInterest = $t01813218240._1
476+ let currentInterest = $t01813218240._2
477+ let claimAmount = $t01813218240._3
478+ let userShareTokensAmount = $t01813218240._4
507479 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
508- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
480+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
509481 let totalShareAmount = getTotalShareTokenLocked(pool)
510482 let totalShareAmountNew = (totalShareAmount + pmtAmount)
511- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
483+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
512484 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
513- 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)]
514- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
515- then true
516- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
517- then throw()
518- else if ((0 >= pmtAmount))
519- then throw("You can't lock token")
520- else if (!(isActive))
521- then throw("DApp is inactive at this moment")
522- else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
523- then throw("Incorrect pmtAssetId")
524- else if (if (isFirstHarvest(Address(fromBase58String(pool))))
525- then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
526- else false)
527- then {
528- let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
529- let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
530- let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
531- let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
532- let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
533- let userShareTokenLocked = userShareTokensAmount
534- let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
535- then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
536- else valueOrElse(parseInt(amountOfVoting[1]), 0)
537- let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
538- then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
539- else valueOrElse(parseInt(amountPoolStract[1]), 0)
540- let protocolReward = calculateProtocolReward(pool)
541- if ((userPoolActiveVote != 0))
542- then {
543- let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
544- let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
545- if (if ((size(amountActiveVoteUserPoolStract) > 1))
546- then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
547- else false)
548- then throw("You can't share token")
549- else if ((pmtAmount > limitShareToken))
550- then throw(("You can't share token more than " + toString(limitShareToken)))
551- else if ((shareToken > 0))
552- then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
553- then throw("Balance of share-token is greater than totalAmount")
554- else if ((totalShareAmount == 0))
555- then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
556- else if ((shareToken >= pmtAmount))
557- then baseEntry
558- else throw(("Your maximum share token is " + toString(shareToken)))
559- else throw("You can't share token")
560- }
561- else throw("Your amount of token less than 0")
562- }
563- 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 ++ [Reissue(SWOP, protocolReward, true), 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
564532 }
565533
566534
568536 @Callable(i)
569537 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
570538 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
571- let $t02384223958 = claimCalc(pool, toString(i.caller), height)
572- let userNewInterest = $t02384223958._1
573- let currentInterest = $t02384223958._2
574- let claimAmount = $t02384223958._3
575- let userShareTokensAmount = $t02384223958._4
539+ let $t02268722787 = claimCalc(pool, i.caller, 1)
540+ let userNewInterest = $t02268722787._1
541+ let currentInterest = $t02268722787._2
542+ let claimAmount = $t02268722787._3
543+ let userShareTokensAmount = $t02268722787._4
576544 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
577- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
545+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
578546 let totalShareAmount = getTotalShareTokenLocked(pool)
579547 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
580- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
548+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
581549 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
582- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
583- then true
584- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
585- then throw()
586- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
587- then throw("Withdraw amount more then user locked amount")
588- else if (!(isActive))
589- then throw("DApp is inactive at this moment")
590- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
591- then throw("Withdraw amount more then user locked amount")
592- else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
593- then throw("Balance of share-token is greater than totalAmount")
594- 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)]
595559 }
596-
597-
598-
599-@Callable(i)
600-func egg0 (pool,users,migrationHeight) = if (if ((pool != "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
601- then (pool != "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ")
602- else false)
603- then throw()
604- else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
605- then throw("Only admin can call this function")
606- else {
607- func updateUser (accum,u) = {
608- let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
609- if ((r == r))
610- then accum
611- else throw("Strict value is not equal to itself.")
612- }
613-
614- let $list2642526455 = users
615- let $size2642526455 = size($list2642526455)
616- let $acc02642526455 = nil
617- if (($size2642526455 == 0))
618- then $acc02642526455
619- else {
620- let $acc12642526455 = updateUser($acc02642526455, $list2642526455[0])
621- if (($size2642526455 == 1))
622- then $acc12642526455
623- else {
624- let $acc22642526455 = updateUser($acc12642526455, $list2642526455[1])
625- if (($size2642526455 == 2))
626- then $acc22642526455
627- else {
628- let $acc32642526455 = updateUser($acc22642526455, $list2642526455[2])
629- if (($size2642526455 == 3))
630- then $acc32642526455
631- else {
632- let $acc42642526455 = updateUser($acc32642526455, $list2642526455[3])
633- if (($size2642526455 == 4))
634- then $acc42642526455
635- else {
636- let $acc52642526455 = updateUser($acc42642526455, $list2642526455[4])
637- if (($size2642526455 == 5))
638- then $acc52642526455
639- else {
640- let $acc62642526455 = updateUser($acc52642526455, $list2642526455[5])
641- if (($size2642526455 == 6))
642- then $acc62642526455
643- else {
644- let $acc72642526455 = updateUser($acc62642526455, $list2642526455[6])
645- if (($size2642526455 == 7))
646- then $acc72642526455
647- else {
648- let $acc82642526455 = updateUser($acc72642526455, $list2642526455[7])
649- if (($size2642526455 == 8))
650- then $acc82642526455
651- else {
652- let $acc92642526455 = updateUser($acc82642526455, $list2642526455[8])
653- if (($size2642526455 == 9))
654- then $acc92642526455
655- else {
656- let $acc102642526455 = updateUser($acc92642526455, $list2642526455[9])
657- throw("List size exceed 9")
658- }
659- }
660- }
661- }
662- }
663- }
664- }
665- }
666- }
667- }
668- }
669-
670-
671-
672-@Callable(i)
673-func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
674- then throw("Only contract itself can invoke this function")
675- else {
676- let shareTokenMultiplyer = 1000
677- let $t02667426798 = claimCalcForMigration(pool, u, migrationHeight)
678- let userNewInterest = $t02667426798._1
679- let currentInterest = $t02667426798._2
680- let claimAmount = $t02667426798._3
681- let userShareTokensAmount = $t02667426798._4
682- let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
683- let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
684- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
685- let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
686- let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
687-[IntegerEntry((((pool + "_") + u) + keyUserLastInterest), 0), IntegerEntry((((pool + "_") + u) + keyUserShareTokensLocked), userShareTokensAmountNew), IntegerEntry((((pool + "_") + u) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + u) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + u) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry(((pool + "_") + "tansl"), (totalAmountNewShareTokenLocked + userShareTokensAmountNew))]
688- }
689-
690-
691-
692-@Callable(i)
693-func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
694- then throw("Only admin can call this function")
695- else {
696- let shareTokenMultiplyer = 1000
697- let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
698- let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
699- if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
700- then throw("New total amount share tockens != old total amount")
701- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
702- }
703560
704561
705562
707564 func claim (pool) = {
708565 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
709566 let shareTokenLocked = getTotalShareTokenLocked(pool)
710- let $t02892128986 = getLastInterestInfo(pool)
711- let lastInterestHeight = $t02892128986._1
712- let lastInterest = $t02892128986._2
713- let $t02899129103 = rewardInfo(pool)
714- let currentRewardPerBlock = $t02899129103._1
715- let rewardUpdateHeight = $t02899129103._2
716- let previousRewardPerBlock = $t02899129103._3
717- let poolRewardUpdateHeight = $t02899129103._4
718- let $t02910829224 = claimCalc(pool, toString(i.caller), height)
719- let userNewInterest = $t02910829224._1
720- let currentInterest = $t02910829224._2
721- let claimAmount = $t02910829224._3
722- let userShareTokensAmount = $t02910829224._4
723- let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
724- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
567+ let $t02479424859 = getLastInterestInfo(pool)
568+ let lastInterestHeight = $t02479424859._1
569+ let lastInterest = $t02479424859._2
570+ let $t02486424976 = rewardInfo(pool)
571+ let currentRewardPerBlock = $t02486424976._1
572+ let rewardUpdateHeight = $t02486424976._2
573+ let previousRewardPerBlock = $t02486424976._3
574+ let poolRewardUpdateHeight = $t02486424976._4
575+ let $t02498125081 = claimCalc(pool, i.caller, 1)
576+ let userNewInterest = $t02498125081._1
577+ let currentInterest = $t02498125081._2
578+ let claimAmount = $t02498125081._3
579+ let userShareTokensAmount = $t02498125081._4
580+ let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
581+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
725582 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
726- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
727- then true
728- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
729- then throw()
730- else if ((availableFund == 0))
731- then throw("You have 0 available SWOP")
732- else if (!(isActive))
733- then throw("DApp is inactive at this moment")
734- else if ((availableFund == 0))
735- then throw("You have 0 available SWOP")
736- else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
737- then throw("Balance of share-token is greater than totalAmount")
738- 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), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
739592 }
740593
741594
759612
760613 @Verifier(tx)
761614 func verify () = match tx {
762- case inv: InvokeScriptTransaction =>
763- let callEgg1 = if ((inv.dApp == this))
764- then (inv.function == "egg1")
765- else false
766- let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
767- then true
768- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
769- then true
770- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
771- then true
772- else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
773- if (callEgg1)
774- then signedByAdmin
775- else false
776615 case _ =>
777616 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
778617 then 1
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
55
66 let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
77
88 let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
9-
10-let admStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
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'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
7977
8078 let wallet = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
8179
8280 let votingAddress = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8381
8482 let adminIncreaseInterestAddress = Address(base58'3PPupsBVHgDXaRhyMbkTxminzAotp8AMsr6')
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 $t01305013115 = getLastInterestInfo(pool)
326- let lastInterestHeight = $t01305013115._1
327- let lastInterest = $t01305013115._2
328- let $t01312013232 = rewardInfo(pool)
329- let currentRewardPerBlock = $t01312013232._1
330- let rewardUpdateHeight = $t01312013232._2
331- let previousRewardPerBlock = $t01312013232._3
332- let poolRewardUpdateHeight = $t01312013232._4
333- let $t01323713321 = getUserInterestInfo(pool, userAddrStr)
334- let userLastInterest = $t01323713321._1
335- let userShareTokensAmount = $t01323713321._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 scaleValue = if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
345- then 100000
346- else if ((pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
347- then 10000
348- else throw("pool must be egg")
349- let shareTokenLocked = getTotalShareTokenLocked(pool)
350- let $t01411714182 = getLastInterestInfo(pool)
351- let lastInterestHeight = $t01411714182._1
352- let lastInterest = $t01411714182._2
353- let $t01418714299 = rewardInfo(pool)
354- let currentRewardPerBlock = $t01418714299._1
355- let rewardUpdateHeight = $t01418714299._2
356- let previousRewardPerBlock = $t01418714299._3
357- let poolRewardUpdateHeight = $t01418714299._4
358- let $t01430414388 = getUserInterestInfo(pool, userAddrStr)
359- let userLastInterest = $t01430414388._1
360- let userShareTokensAmount = $t01430414388._2
361- let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
323+ let $t01309513160 = getLastInterestInfo(pool)
324+ let lastInterestHeight = $t01309513160._1
325+ let lastInterest = $t01309513160._2
326+ let $t01316513277 = rewardInfo(pool)
327+ let currentRewardPerBlock = $t01316513277._1
328+ let rewardUpdateHeight = $t01316513277._2
329+ let previousRewardPerBlock = $t01316513277._3
330+ let poolRewardUpdateHeight = $t01316513277._4
331+ let $t01328213361 = getUserInterestInfo(pool, caller)
332+ let userLastInterest = $t01328213361._1
333+ let userShareTokensAmount = $t01328213361._2
334+ let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
362335 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
363336 let userNewInterest = currentInterest
364337 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
365338 }
366339
367340
368341 func calculateProtocolReward (pool) = {
369- let $t01489214957 = getLastInterestInfo(pool)
370- let lastInterestHeight = $t01489214957._1
371- let lastInterest = $t01489214957._2
372- let $t01496215073 = rewardInfo(pool)
373- let currentRewardPerBlock = $t01496215073._1
374- let rewardUpdateHeight = $t01496215073._2
375- let previousRewardPerBlock = $t01496215073._3
376- let poolRewardUpdateHeight = $t01496215073._4
342+ let $t01387913944 = getLastInterestInfo(pool)
343+ let lastInterestHeight = $t01387913944._1
344+ let lastInterest = $t01387913944._2
345+ let $t01394914060 = rewardInfo(pool)
346+ let currentRewardPerBlock = $t01394914060._1
347+ let rewardUpdateHeight = $t01394914060._2
348+ let previousRewardPerBlock = $t01394914060._3
349+ let poolRewardUpdateHeight = $t01394914060._4
377350 let shareTokenLocked = getTotalShareTokenLocked(pool)
378351 if (if ((shareTokenLocked == 0))
379352 then (poolRewardUpdateHeight == 0)
380353 else false)
381354 then if ((rewardUpdateHeight > height))
382355 then {
383356 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
384357 reward
385358 }
386359 else if ((lastInterestHeight > rewardUpdateHeight))
387360 then {
388361 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
389362 reward
390363 }
391364 else {
392365 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
393366 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
394367 (reward + rewardAfterLastInterestBeforeReawardUpdate)
395368 }
396369 else if (if ((shareTokenLocked == 0))
397370 then (poolRewardUpdateHeight != 0)
398371 else false)
399372 then if (if ((rewardUpdateHeight > height))
400373 then (rewardUpdateHeight == poolRewardUpdateHeight)
401374 else false)
402375 then {
403376 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
404377 reward
405378 }
406379 else if (if ((height > rewardUpdateHeight))
407380 then (rewardUpdateHeight != poolRewardUpdateHeight)
408381 else false)
409382 then {
410383 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
411384 reward
412385 }
413386 else if (if (if ((height > rewardUpdateHeight))
414387 then (rewardUpdateHeight == poolRewardUpdateHeight)
415388 else false)
416389 then (lastInterestHeight > rewardUpdateHeight)
417390 else false)
418391 then {
419392 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
420393 reward
421394 }
422395 else {
423396 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
424397 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
425398 (reward + rewardAfterLastInterestBeforeReawardUpdate)
426399 }
427400 else 0
428401 }
429402
430403
431404 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
432405 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
433406 if ((pmtAssetId == poolShareAssetId))
434407 then true
435408 else false
436409 }
437410
438411
439-func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
412+func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
440413
441414
442415 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
443416
444417
445418 @Callable(i)
446419 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
447420 then throw("SWOP already initialized")
448421 else {
449422 let initAmount = 100000000000000
450423 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
451424 let SWOPid = calculateAssetId(SWOPissue)
452425 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
453426 }
454427
455428
456429
457430 @Callable(i)
458431 func initPoolShareFarming (pool) = if ((i.caller != this))
459432 then throw("Only the DApp itself can call this function")
460433 else {
461- let $t01804318146 = rewardInfo(pool)
462- let currentReward = $t01804318146._1
463- let rewardUpdateHeight = $t01804318146._2
464- let previousRewardPerBlock = $t01804318146._3
465- let poolRewardUpdateHeight = $t01804318146._4
434+ let $t01704217145 = rewardInfo(pool)
435+ let currentReward = $t01704217145._1
436+ let rewardUpdateHeight = $t01704217145._2
437+ let previousRewardPerBlock = $t01704217145._3
438+ let poolRewardUpdateHeight = $t01704217145._4
466439 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
467440 }
468441
469442
470443
471444 @Callable(i)
472445 func updatePoolInterest (pool) = if ((i.caller != wallet))
473446 then throw("Only the Admin itself can call this function")
474447 else if (!(isActive))
475448 then throw("DApp is inactive at this moment")
476449 else {
477- let $t01855518691 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
478- let userNewInterest = $t01855518691._1
479- let currentInterest = $t01855518691._2
480- let claimAmount = $t01855518691._3
481- let userShareTokensAmount = $t01855518691._4
482- let $t01869618799 = rewardInfo(pool)
483- let currentReward = $t01869618799._1
484- let rewardUpdateHeight = $t01869618799._2
485- let previousRewardPerBlock = $t01869618799._3
486- let poolRewardUpdateHeight = $t01869618799._4
450+ let $t01755417674 = claimCalc(pool, adminIncreaseInterestAddress, 0)
451+ let userNewInterest = $t01755417674._1
452+ let currentInterest = $t01755417674._2
453+ let claimAmount = $t01755417674._3
454+ let userShareTokensAmount = $t01755417674._4
455+ let $t01767917782 = rewardInfo(pool)
456+ let currentReward = $t01767917782._1
457+ let rewardUpdateHeight = $t01767917782._2
458+ let previousRewardPerBlock = $t01767917782._3
459+ let poolRewardUpdateHeight = $t01767917782._4
487460 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
488461 }
489462
490463
491464
492465 @Callable(i)
493466 func lockShareTokens (pool) = {
494- let userAddrStr = toString(i.caller)
495- let $t01903319108 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
496- let pmtAmount = $t01903319108._1
497- let pmtAssetId = $t01903319108._2
498- let $t01911319186 = getAssetInfo(pmtAssetId)
499- let pmtStrAssetId = $t01911319186._1
500- let pmtAssetName = $t01911319186._2
501- let pmtDecimals = $t01911319186._3
502- let $t01919119307 = claimCalc(pool, toString(i.caller), height)
503- let userNewInterest = $t01919119307._1
504- let currentInterest = $t01919119307._2
505- let claimAmount = $t01919119307._3
506- let userShareTokensAmount = $t01919119307._4
467+ let $t01797418049 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
468+ let pmtAmount = $t01797418049._1
469+ let pmtAssetId = $t01797418049._2
470+ let $t01805418127 = getAssetInfo(pmtAssetId)
471+ let pmtStrAssetId = $t01805418127._1
472+ let pmtAssetName = $t01805418127._2
473+ let pmtDecimals = $t01805418127._3
474+ let $t01813218240 = claimCalc(pool, i.caller, pmtAmount)
475+ let userNewInterest = $t01813218240._1
476+ let currentInterest = $t01813218240._2
477+ let claimAmount = $t01813218240._3
478+ let userShareTokensAmount = $t01813218240._4
507479 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
508- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
480+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
509481 let totalShareAmount = getTotalShareTokenLocked(pool)
510482 let totalShareAmountNew = (totalShareAmount + pmtAmount)
511- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
483+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
512484 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
513- 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)]
514- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
515- then true
516- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
517- then throw()
518- else if ((0 >= pmtAmount))
519- then throw("You can't lock token")
520- else if (!(isActive))
521- then throw("DApp is inactive at this moment")
522- else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
523- then throw("Incorrect pmtAssetId")
524- else if (if (isFirstHarvest(Address(fromBase58String(pool))))
525- then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
526- else false)
527- then {
528- let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
529- let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
530- let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
531- let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
532- let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
533- let userShareTokenLocked = userShareTokensAmount
534- let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
535- then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
536- else valueOrElse(parseInt(amountOfVoting[1]), 0)
537- let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
538- then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
539- else valueOrElse(parseInt(amountPoolStract[1]), 0)
540- let protocolReward = calculateProtocolReward(pool)
541- if ((userPoolActiveVote != 0))
542- then {
543- let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
544- let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
545- if (if ((size(amountActiveVoteUserPoolStract) > 1))
546- then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
547- else false)
548- then throw("You can't share token")
549- else if ((pmtAmount > limitShareToken))
550- then throw(("You can't share token more than " + toString(limitShareToken)))
551- else if ((shareToken > 0))
552- then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
553- then throw("Balance of share-token is greater than totalAmount")
554- else if ((totalShareAmount == 0))
555- then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
556- else if ((shareToken >= pmtAmount))
557- then baseEntry
558- else throw(("Your maximum share token is " + toString(shareToken)))
559- else throw("You can't share token")
560- }
561- else throw("Your amount of token less than 0")
562- }
563- 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 ++ [Reissue(SWOP, protocolReward, true), 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
564532 }
565533
566534
567535
568536 @Callable(i)
569537 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
570538 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
571- let $t02384223958 = claimCalc(pool, toString(i.caller), height)
572- let userNewInterest = $t02384223958._1
573- let currentInterest = $t02384223958._2
574- let claimAmount = $t02384223958._3
575- let userShareTokensAmount = $t02384223958._4
539+ let $t02268722787 = claimCalc(pool, i.caller, 1)
540+ let userNewInterest = $t02268722787._1
541+ let currentInterest = $t02268722787._2
542+ let claimAmount = $t02268722787._3
543+ let userShareTokensAmount = $t02268722787._4
576544 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
577- let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
545+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
578546 let totalShareAmount = getTotalShareTokenLocked(pool)
579547 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
580- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
548+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
581549 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
582- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
583- then true
584- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
585- then throw()
586- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
587- then throw("Withdraw amount more then user locked amount")
588- else if (!(isActive))
589- then throw("DApp is inactive at this moment")
590- else if ((shareTokensWithdrawAmount > userShareTokensAmount))
591- then throw("Withdraw amount more then user locked amount")
592- else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
593- then throw("Balance of share-token is greater than totalAmount")
594- 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)]
595559 }
596-
597-
598-
599-@Callable(i)
600-func egg0 (pool,users,migrationHeight) = if (if ((pool != "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
601- then (pool != "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ")
602- else false)
603- then throw()
604- else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
605- then throw("Only admin can call this function")
606- else {
607- func updateUser (accum,u) = {
608- let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
609- if ((r == r))
610- then accum
611- else throw("Strict value is not equal to itself.")
612- }
613-
614- let $list2642526455 = users
615- let $size2642526455 = size($list2642526455)
616- let $acc02642526455 = nil
617- if (($size2642526455 == 0))
618- then $acc02642526455
619- else {
620- let $acc12642526455 = updateUser($acc02642526455, $list2642526455[0])
621- if (($size2642526455 == 1))
622- then $acc12642526455
623- else {
624- let $acc22642526455 = updateUser($acc12642526455, $list2642526455[1])
625- if (($size2642526455 == 2))
626- then $acc22642526455
627- else {
628- let $acc32642526455 = updateUser($acc22642526455, $list2642526455[2])
629- if (($size2642526455 == 3))
630- then $acc32642526455
631- else {
632- let $acc42642526455 = updateUser($acc32642526455, $list2642526455[3])
633- if (($size2642526455 == 4))
634- then $acc42642526455
635- else {
636- let $acc52642526455 = updateUser($acc42642526455, $list2642526455[4])
637- if (($size2642526455 == 5))
638- then $acc52642526455
639- else {
640- let $acc62642526455 = updateUser($acc52642526455, $list2642526455[5])
641- if (($size2642526455 == 6))
642- then $acc62642526455
643- else {
644- let $acc72642526455 = updateUser($acc62642526455, $list2642526455[6])
645- if (($size2642526455 == 7))
646- then $acc72642526455
647- else {
648- let $acc82642526455 = updateUser($acc72642526455, $list2642526455[7])
649- if (($size2642526455 == 8))
650- then $acc82642526455
651- else {
652- let $acc92642526455 = updateUser($acc82642526455, $list2642526455[8])
653- if (($size2642526455 == 9))
654- then $acc92642526455
655- else {
656- let $acc102642526455 = updateUser($acc92642526455, $list2642526455[9])
657- throw("List size exceed 9")
658- }
659- }
660- }
661- }
662- }
663- }
664- }
665- }
666- }
667- }
668- }
669-
670-
671-
672-@Callable(i)
673-func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
674- then throw("Only contract itself can invoke this function")
675- else {
676- let shareTokenMultiplyer = 1000
677- let $t02667426798 = claimCalcForMigration(pool, u, migrationHeight)
678- let userNewInterest = $t02667426798._1
679- let currentInterest = $t02667426798._2
680- let claimAmount = $t02667426798._3
681- let userShareTokensAmount = $t02667426798._4
682- let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
683- let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
684- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
685- let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
686- let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
687-[IntegerEntry((((pool + "_") + u) + keyUserLastInterest), 0), IntegerEntry((((pool + "_") + u) + keyUserShareTokensLocked), userShareTokensAmountNew), IntegerEntry((((pool + "_") + u) + keyAvailableSWOP), availableFundsNew), IntegerEntry((((pool + "_") + u) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + u) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry(((pool + "_") + "tansl"), (totalAmountNewShareTokenLocked + userShareTokensAmountNew))]
688- }
689-
690-
691-
692-@Callable(i)
693-func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
694- then throw("Only admin can call this function")
695- else {
696- let shareTokenMultiplyer = 1000
697- let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
698- let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
699- if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
700- then throw("New total amount share tockens != old total amount")
701- else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
702- }
703560
704561
705562
706563 @Callable(i)
707564 func claim (pool) = {
708565 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
709566 let shareTokenLocked = getTotalShareTokenLocked(pool)
710- let $t02892128986 = getLastInterestInfo(pool)
711- let lastInterestHeight = $t02892128986._1
712- let lastInterest = $t02892128986._2
713- let $t02899129103 = rewardInfo(pool)
714- let currentRewardPerBlock = $t02899129103._1
715- let rewardUpdateHeight = $t02899129103._2
716- let previousRewardPerBlock = $t02899129103._3
717- let poolRewardUpdateHeight = $t02899129103._4
718- let $t02910829224 = claimCalc(pool, toString(i.caller), height)
719- let userNewInterest = $t02910829224._1
720- let currentInterest = $t02910829224._2
721- let claimAmount = $t02910829224._3
722- let userShareTokensAmount = $t02910829224._4
723- let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
724- let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
567+ let $t02479424859 = getLastInterestInfo(pool)
568+ let lastInterestHeight = $t02479424859._1
569+ let lastInterest = $t02479424859._2
570+ let $t02486424976 = rewardInfo(pool)
571+ let currentRewardPerBlock = $t02486424976._1
572+ let rewardUpdateHeight = $t02486424976._2
573+ let previousRewardPerBlock = $t02486424976._3
574+ let poolRewardUpdateHeight = $t02486424976._4
575+ let $t02498125081 = claimCalc(pool, i.caller, 1)
576+ let userNewInterest = $t02498125081._1
577+ let currentInterest = $t02498125081._2
578+ let claimAmount = $t02498125081._3
579+ let userShareTokensAmount = $t02498125081._4
580+ let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
581+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
725582 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
726- if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
727- then true
728- else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
729- then throw()
730- else if ((availableFund == 0))
731- then throw("You have 0 available SWOP")
732- else if (!(isActive))
733- then throw("DApp is inactive at this moment")
734- else if ((availableFund == 0))
735- then throw("You have 0 available SWOP")
736- else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
737- then throw("Balance of share-token is greater than totalAmount")
738- 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), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
739592 }
740593
741594
742595
743596 @Callable(i)
744597 func shutdown () = if (!(isActive))
745598 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
746599 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
747600 then throw("Only admin can call this function")
748601 else suspend("Paused by admin")
749602
750603
751604
752605 @Callable(i)
753606 func activate () = if (isActive)
754607 then throw("DApp is already active")
755608 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
756609 then throw("Only admin can call this function")
757610 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
758611
759612
760613 @Verifier(tx)
761614 func verify () = match tx {
762- case inv: InvokeScriptTransaction =>
763- let callEgg1 = if ((inv.dApp == this))
764- then (inv.function == "egg1")
765- else false
766- let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
767- then true
768- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
769- then true
770- else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
771- then true
772- else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
773- if (callEgg1)
774- then signedByAdmin
775- else false
776615 case _ =>
777616 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
778617 then 1
779618 else 0
780619 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
781620 then 1
782621 else 0
783622 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
784623 then 1
785624 else 0
786625 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
787626 }
788627

github/deemru/w8io/786bc32 
119.21 ms