tx · ACtTTUaWqyUBWTRBYAurorzACJ9F8W7a1wcava6wN5kH

3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw:  -0.01400000 Waves

2021.09.15 19:38 [2769331] smart account 3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw > SELF 0.00000000 Waves

{ "type": 13, "id": "ACtTTUaWqyUBWTRBYAurorzACJ9F8W7a1wcava6wN5kH", "fee": 1400000, "feeAssetId": null, "timestamp": 1631723878141, "version": 2, "chainId": 87, "sender": "3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw", "senderPublicKey": "B3jG1KiAb24bgwe28D9JKKkg9mtpiGTeEAYmQPrtHwQQ", "proofs": [ "", "3DqxWdGES1MYkuQmYB6eGhhdJdSUmhv15Nrq7mHdrR91s9mfm4g86LTbfnMZjUaxKNWXU93qE4vXun7KDnuLKMzB", "3knVR5CQaAKSD3s4gbct3y9CJ3EMSZcaoNdAgmVJKKjvEteruK12H6py9ACWhr9qNecJRyHqoexqqVmnvB6f2GnM" ], "script": "base64:AAIFAAAAAAAAE5gIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgUKAwgYARIFCgMICAESBAoCCAESAwoBCBIAEgAaEgoCYTESDGFkbWluUHViS2V5MRoSCgJhMhIMYWRtaW5QdWJLZXkyGhIKAmEzEgxhZG1pblB1YktleTMaEAoCYTQSCmFkbVN0YWtpbmcaGgoCYTUSFGtleVNoYXJlVG9rZW5zTG9ja2VkGhEKAmE2EgtrU2hhcmVMaW1pdBoPCgJhNxIJa2V5QWN0aXZlGg4KAmE4EghrZXlDYXVzZRoiCgJhORIca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBojCgJiMRIda2V5UmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaGwoCYjISFWtleUhlaWdodFBvb2xGcmFjdGlvbhojCgJiMxIda2V5VG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaJAoCYjQSHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxobCgJiNRIVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0GhUKAmI2Eg9rZXlMYXN0SW50ZXJlc3QaGwoCYjcSFWtleUxhc3RJbnRlcmVzdEhlaWdodBoeCgJiOBIYa2V5VXNlclNoYXJlVG9rZW5zTG9ja2VkGhkKAmI5EhNrZXlVc2VyTGFzdEludGVyZXN0Gg8KAmMxEglrZXlTV09QaWQaHgoCYzISGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudBoiCgJjMxIca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudBoWCgJjNBIQa2V5QXZhaWxhYmxlU1dPUBobCgJjNRIVa2V5RmFybWluZ1N0YXJ0SGVpZ2h0GgwKAmM2EgZrZXlBUFkaHAoCYzcSFmtQcmV2aW91c1RvdGFsVm90ZVNXT1AaGQoCYzgSE2tleVN3b3BZZWFyRW1pc3Npb24aFQoCYzkSD2tleUJhbGFuY2VjcG1tQRoVCgJkMRIPa2V5QmFsYW5jZWNwbW1CGicKAmQyEiFrSGFydmVzdFBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaKwoCZDMSJWtIYXJ2ZXN0VXNlclBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaHwoCZDQSGWtleUxpbWl0U2hhcmVGaXJzdEhhcnZlc3QaEQoCZDUSC2tleUFzc2V0SWRBGhEKAmQ2EgtrZXlBc3NldElkQhobCgJkNxIVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0GhkKAmQ4EhNrZXlmaXJzdEhhcnZlc3RDcG1tGhQKAmQ5Eg5rZXlUZW1wUHJldlN1bRoTCgJlMRINa2V5VGVtcEN1clN1bRoXCgJlMhIRZ292ZXJuYW5jZUFkZHJlc3MaDAoCZTMSBndhbGxldBoTCgJlNBINdm90aW5nQWRkcmVzcxoiCgJlNRIcYWRtaW5JbmNyZWFzZUludGVyZXN0QWRkcmVzcxoUCgJlNhIOb25lV2Vla0luQmxvY2saFAoCZTcSDnRvdGFsVm90ZVNoYXJlGhEKAmU4EgtzY2FsZVZhbHVlMRoRCgJlORILc2NhbGVWYWx1ZTMaEQoCZjESC3NjYWxlVmFsdWU1GhEKAmYyEgtzY2FsZVZhbHVlNhoRCgJmMxILc2NhbGVWYWx1ZTgaEgoCZjQSDHNjYWxlVmFsdWUxMRoRCgJmNRILc3RyQXNzZXRJZEEaCgoCZjYSBHBvb2waEQoCZjcSC3N0ckFzc2V0SWRCGg4KAmY4Eghhc3NldElkQRoOCgJmORIIYXNzZXRJZEIaEQoCZzESC2tCYXNlUGVyaW9kGhMKAmcyEg1rUGVyaW9kTGVuZ3RoGhIKAmczEgxrU3RhcnRIZWlnaHQaGQoCZzQSE2tGaXJzdEhhcnZlc3RIZWlnaHQaHAoCZzUSFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEwoCZzYSDWtNaW5Wb3RlUG93ZXIaEAoCZzcSCmJhc2VQZXJpb2QaEQoCZzgSC3N0YXJ0SGVpZ2h0GhIKAmc5EgxwZXJpb2RMZW5ndGgaGwoCaDESFWR1cmF0aW9uRnVsbFZvdGVQb3dlchoSCgJoMhIMbWluVm90ZVBvd2VyGg4KAmgzEghpc0FjdGl2ZRoQCgJoNBIKY3VyclBlcmlvZBoTCgJoNRINZ2V0TGltaXRUb2tlbhoJCgJoNhIDQVBZGhYKAmg3EhBTd29wWWVhckVtaXNzaW9uGhAKAmg4Egphc3NldE5hbWVBGg0KAmg5EgckbWF0Y2gwGggKAmkxEgJpZBoLCgJpMhIFd2F2ZXMaEAoCaTMSCmFzc2V0TmFtZUIaCgoCaTQSBFNXT1AaFAoCaTUSDmlzRmlyc3RIYXJ2ZXN0GhsKAmk2EhVnZXRIZWlnaHRGaXJzdEhhcnZlc3QaEQoCaTcSC2dldEJhbGFuY2VBGhEKAmk4EgtnZXRCYWxhbmNlQhoYCgJpORISZ2V0U2hhcmVMaW1pdFRva2VuGh4KAmoxEhhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQaFQoCajISD2dldFNoYXJlQXNzZXRJZBoUCgJqMxIOYWNjb3VudEJhbGFuY2UaDQoCajQSB2Fzc2V0SWQaEgoCajUSDGdldEFzc2V0SW5mbxoOCgJqNhIIc3RyaW5nSWQaCgoCajcSBGluZm8aFAoCajgSDmNhbGNTY2FsZVZhbHVlGg4KAmo5Eghhc3NldElkMRoOCgJrMRIIYXNzZXRJZDIaFgoCazISEGFzc2V0SWQxRGVjaW1hbHMaFgoCazMSEGFzc2V0SWQyRGVjaW1hbHMaEQoCazQSC3NjYWxlRGlnaXRzGhcKAms1EhF1c2VyQXZhaWxhYmxlU1dPUBoKCgJrNhIEdXNlchoQCgJrNxIKcmV3YXJkSW5mbxogCgJrOBIadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaIQoCazkSG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxofCgJsMRIZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBoYCgJsMhIScmV3YXJkVXBkYXRlSGVpZ2h0GhwKAmwzEhZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0GiAKAmw0EhpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cxoXCgJsNRIRcmV3YXJkUG9vbEN1cnJlbnQaGAoCbDYSEnJld2FyZFBvb2xQcmV2aW91cxoZCgJsNxITZ2V0TGFzdEludGVyZXN0SW5mbxoSCgJsOBIMbGFzdEludGVyZXN0GhgKAmw5EhJsYXN0SW50ZXJlc3RIZWlnaHQaGQoCbTESE2dldFVzZXJJbnRlcmVzdEluZm8aEQoCbTISC3VzZXJBZGRyU3RyGhYKAm0zEhB1c2VyTGFzdEludGVyZXN0Gg8KAm00Egl1c2VyU2hhcmUaGwoCbTUSFXVzZXJMYXN0SW50ZXJlc3RWYWx1ZRobCgJtNhIVdXNlclNoYXJlVG9rZW5zQW1vdW50GhIKAm03EgxjYWxjSW50ZXJlc3QaGwoCbTgSFWN1cnJlbnRSZXdhcmRQZXJCbG9jaxoWCgJtORIQc2hhcmVUb2tlbkxvY2tlZBocCgJuMRIWcHJldmlvdXNSZXdhcmRQZXJCbG9jaxoQCgJuMhIKc2NhbGVWYWx1ZRoHCgJuMxIBaBoMCgJuNBIGcmV3YXJkGjAKAm41EipyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUaGQoCbjYSE2ludGVyZXN0QWZ0ZXJVcGRhdGUaDwoCbjcSCWNsYWltQ2FsYxoSCgJuOBIMc2hhcmVBc3NldElkGhMKAm45Eg0kdDAxMzA1MDEzMTE1GhMKAm8xEg0kdDAxMzEyMDEzMjMyGhMKAm8yEg0kdDAxMzIzNzEzMzIxGhUKAm8zEg9jdXJyZW50SW50ZXJlc3QaEQoCbzQSC2NsYWltQW1vdW50GhUKAm81Eg91c2VyTmV3SW50ZXJlc3QaGwoCbzYSFWNsYWltQ2FsY0Zvck1pZ3JhdGlvbhoTCgJvNxINJHQwMTQxMTcxNDE4MhoTCgJvOBINJHQwMTQxODcxNDI5ORoTCgJvORINJHQwMTQzMDQxNDM4OBodCgJwMRIXY2FsY3VsYXRlUHJvdG9jb2xSZXdhcmQaEwoCcDISDSR0MDE0ODkyMTQ5NTcaEwoCcDMSDSR0MDE0OTYyMTUwNzMaHAoCcDQSFmNoZWNrUG10QXNzZXRJZENvcnJlY3QaEAoCcDUSCnBtdEFzc2V0SWQaFgoCcDYSEHBvb2xTaGFyZUFzc2V0SWQaHgoCcDcSGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudBoNCgJwOBIHc3VzcGVuZBoLCgJwORIFY2F1c2UaBwoCcTESAWkaDQoCcTISB2Vhcmx5TFAaEAoCcTMSCmluaXRBbW91bnQaDwoCcTQSCVNXT1Bpc3N1ZRoMCgJxNRIGU1dPUGlkGhMKAnE2Eg0kdDAxODA0MzE4MTQ2GhMKAnE3Eg1jdXJyZW50UmV3YXJkGhMKAnE4Eg0kdDAxODU1NTE4NjkxGhMKAnE5Eg0kdDAxODY5NjE4Nzk5GhMKAnIxEg0kdDAxOTAzMzE5MTA4Gg8KAnIyEglwbXRBbW91bnQaEwoCcjMSDSR0MDE5MTEzMTkxODYaEwoCcjQSDXBtdFN0ckFzc2V0SWQaEgoCcjUSDHBtdEFzc2V0TmFtZRoRCgJyNhILcG10RGVjaW1hbHMaEwoCcjcSDSR0MDE5MTkxMTkzMDcaGAoCcjgSEnVzZXJTaGFyZUFtb3VudE5ldxoXCgJyORIRYXZhaWxhYmxlRnVuZHNOZXcaFgoCczESEHRvdGFsU2hhcmVBbW91bnQaGQoCczISE3RvdGFsU2hhcmVBbW91bnROZXcaFwoCczMSEXVzZXJDbGFpbWVkQW1vdW50GhoKAnM0EhR1c2VyQ2xhaW1lZEFtb3VudE5ldxoPCgJzNRIJYmFzZUVudHJ5GhMKAnM2Eg1oYXJ2ZXN0UGVyaW9kGhQKAnM3Eg5hbW91bnRPZlZvdGluZxoWCgJzOBIQYW1vdW50UG9vbFN0cmFjdBokCgJzORIeYW1vdW50QWN0aXZlVm90ZVVzZXJQb29sU3RyYWN0GiAKAnQxEhphbW91bnRQb29sQWN0aXZlVm90ZVN0cmFjdBoaCgJ0MhIUdXNlclNoYXJlVG9rZW5Mb2NrZWQaGAoCdDMSEnVzZXJQb29sQWN0aXZlVm90ZRoUCgJ0NBIOcG9vbEFjdGl2ZVZvdGUaFAoCdDUSDnByb3RvY29sUmV3YXJkGhUKAnQ2Eg9saW1pdFNoYXJlVG9rZW4aEAoCdDcSCnNoYXJlVG9rZW4aHwoCdDgSGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQaEwoCdDkSDXNoYXJlVG9rZW5zSWQaEwoCdTESDSR0MDIzODQyMjM5NTgaCwoCdTISBXVzZXJzGhUKAnUzEg9taWdyYXRpb25IZWlnaHQaEAoCdTQSCnVwZGF0ZVVzZXIaCwoCdTUSBWFjY3VtGgcKAnU2EgF1GgcKAnU3EgFyGhUKAnU4Eg8kbGlzdDI2NDI1MjY0NTUaFQoCdTkSDyRzaXplMjY0MjUyNjQ1NRoVCgJ2MRIPJGFjYzAyNjQyNTI2NDU1GhUKAnYyEg8kYWNjMTI2NDI1MjY0NTUaFQoCdjMSDyRhY2MyMjY0MjUyNjQ1NRoVCgJ2NBIPJGFjYzMyNjQyNTI2NDU1GhUKAnY1Eg8kYWNjNDI2NDI1MjY0NTUaFQoCdjYSDyRhY2M1MjY0MjUyNjQ1NRoVCgJ2NxIPJGFjYzYyNjQyNTI2NDU1GhUKAnY4Eg8kYWNjNzI2NDI1MjY0NTUaFQoCdjkSDyRhY2M4MjY0MjUyNjQ1NRoVCgJ3MRIPJGFjYzkyNjQyNTI2NDU1GhYKAncyEhAkYWNjMTAyNjQyNTI2NDU1GhoKAnczEhRzaGFyZVRva2VuTXVsdGlwbHllchoTCgJ3NBINJHQwMjY2NzQyNjc5OBoeCgJ3NRIYdXNlclNoYXJlVG9rZW5zQW1vdW50TmV3GiQKAnc2Eh50b3RhbEFtb3VudE5ld1NoYXJlVG9rZW5Mb2NrZWQaKAoCdzcSInRvdGFsQW1vdW50U2hhcmVUb2tlbnNMb2NrZWRCZWZvcmUaJQoCdzgSH3RvdGFsQW1vdW50U2hhcmVUb2tlbnNMb2NrZWROZXcaEwoCdzkSDSR0MDI4OTU3MjkwMjIaEwoCeDESDSR0MDI5MDI3MjkxMzkaEwoCeDISDSR0MDI5MTQ0MjkyNjAaEwoCeDMSDWF2YWlsYWJsZUZ1bmQaCAoCeDQSAnR4GgwKAng1EgZ2ZXJpZnkaCQoCeDYSA2ludhoOCgJ4NxIIY2FsbEVnZzEaEwoCeDgSDXNpZ25lZEJ5QWRtaW4aGAoCeDkSEmFkbWluUHViS2V5MVNpZ25lZBoYCgJ5MRISYWRtaW5QdWJLZXkyU2lnbmVkGhgKAnkyEhJhZG1pblB1YktleTNTaWduZWQAAABdAAAAAAJhMQEAAAAgugnXO4lZpNFdoP/xuzPQquE5aQ/L4r2R1jvuT16o4BMAAAAAAmEyAQAAACDCkUSZs9KwtA0ipZFYvYi8oTe7CMv/3YzmlO9bFg5+QAAAAAACYTMBAAAAII4eFy54sQc79EhOejMoYHYod/yZ5ZIwoyDCz6ir6Q5VAAAAAAJhNAEAAAAgsj2fHYY3mleF5iNR9OE3eyOPalgB3T7oDWjAjnR7WCgAAAAAAmE1AgAAABpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAAAAAACYTYCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmE3AgAAAAZhY3RpdmUAAAAAAmE4AgAAAA5zaHV0ZG93bl9jYXVzZQAAAAACYTkCAAAAHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJiMQIAAAAeX3ByZXZpb3VzX3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJiMgIAAAAaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmIzAgAAAB50b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX2N1cnJlbnQAAAAAAmI0AgAAAB90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzAAAAAAJiNQIAAAAUcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmI2AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYjcCAAAAFV9sYXN0X2ludGVyZXN0X2hlaWdodAAAAAACYjgCAAAAFF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJiOQIAAAAOX2xhc3RfaW50ZXJlc3QAAAAAAmMxAgAAAAdTV09QX2lkAAAAAAJjMgIAAAAUX1NXT1BfY2xhaW1lZF9hbW91bnQAAAAAAmMzAgAAABlfU1dPUF9sYXN0X2NsYWltZWRfYW1vdW50AAAAAAJjNAIAAAAPX2F2YWlsYWJsZV9TV09QAAAAAAJjNQIAAAAUZmFybWluZ19zdGFydF9oZWlnaHQAAAAAAmM2AgAAAANhcHkAAAAAAmM3AgAAABhwcmV2aW91c190b3RhbF92b3RlX1NXT1AAAAAAAmM4AgAAABJzd29wX3llYXJfZW1pc3Npb24AAAAAAmM5AgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAAmQxAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAAmQyAgAAAB5faGFydmVzdF9wb29sX2FjdGl2ZVZvdGVfc3RydWMAAAAAAmQzAgAAACNfaGFydmVzdF91c2VyX3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACZDQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmQ1AgAAAApBX2Fzc2V0X2lkAAAAAAJkNgIAAAAKQl9hc3NldF9pZAAAAAACZDcCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAJkOAIAAAANZmlyc3RfaGFydmVzdAAAAAACZDkCAAAAE3N1bV9yZXdhcmRfcHJldmlvdXMAAAAAAmUxAgAAABJzdW1fcmV3YXJkX2N1cnJlbnQAAAAAAmUyCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXyVect296lgzLCCI5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", "height": 2769331, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B4fW4UajahkcpvRFRoue4KzfhZUfS6VFkxmetKm8F8Z8 Next: 9RU8FE6i7LNWMGNma3UmvNTbTj2LL6SCB45hhivnuk5C Diff:
OldNewDifferences
341341
342342
343343 func claimCalcForMigration (pool,userAddrStr,h) = {
344- let shareAssetId = getShareAssetId(pool)
345- let scaleValue = calcScaleValue(SWOP, shareAssetId)
344+ let scaleValue = if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
345+ then 100000
346+ else if ((pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
347+ then 10000
348+ else throw("pool must be egg")
346349 let shareTokenLocked = getTotalShareTokenLocked(pool)
347- let $t01404414109 = getLastInterestInfo(pool)
348- let lastInterestHeight = $t01404414109._1
349- let lastInterest = $t01404414109._2
350- let $t01411414226 = rewardInfo(pool)
351- let currentRewardPerBlock = $t01411414226._1
352- let rewardUpdateHeight = $t01411414226._2
353- let previousRewardPerBlock = $t01411414226._3
354- let poolRewardUpdateHeight = $t01411414226._4
355- let $t01423114315 = getUserInterestInfo(pool, userAddrStr)
356- let userLastInterest = $t01423114315._1
357- let userShareTokensAmount = $t01423114315._2
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
358361 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
359362 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360363 let userNewInterest = currentInterest
363366
364367
365368 func calculateProtocolReward (pool) = {
366- let $t01481914884 = getLastInterestInfo(pool)
367- let lastInterestHeight = $t01481914884._1
368- let lastInterest = $t01481914884._2
369- let $t01488915000 = rewardInfo(pool)
370- let currentRewardPerBlock = $t01488915000._1
371- let rewardUpdateHeight = $t01488915000._2
372- let previousRewardPerBlock = $t01488915000._3
373- let poolRewardUpdateHeight = $t01488915000._4
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
374377 let shareTokenLocked = getTotalShareTokenLocked(pool)
375378 if (if ((shareTokenLocked == 0))
376379 then (poolRewardUpdateHeight == 0)
455458 func initPoolShareFarming (pool) = if ((i.caller != this))
456459 then throw("Only the DApp itself can call this function")
457460 else {
458- let $t01797018073 = rewardInfo(pool)
459- let currentReward = $t01797018073._1
460- let rewardUpdateHeight = $t01797018073._2
461- let previousRewardPerBlock = $t01797018073._3
462- let poolRewardUpdateHeight = $t01797018073._4
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
463466 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464467 }
465468
471474 else if (!(isActive))
472475 then throw("DApp is inactive at this moment")
473476 else {
474- let $t01848218618 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475- let userNewInterest = $t01848218618._1
476- let currentInterest = $t01848218618._2
477- let claimAmount = $t01848218618._3
478- let userShareTokensAmount = $t01848218618._4
479- let $t01862318726 = rewardInfo(pool)
480- let currentReward = $t01862318726._1
481- let rewardUpdateHeight = $t01862318726._2
482- let previousRewardPerBlock = $t01862318726._3
483- let poolRewardUpdateHeight = $t01862318726._4
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
484487 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485488 }
486489
489492 @Callable(i)
490493 func lockShareTokens (pool) = {
491494 let userAddrStr = toString(i.caller)
492- let $t01896019035 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493- let pmtAmount = $t01896019035._1
494- let pmtAssetId = $t01896019035._2
495- let $t01904019113 = getAssetInfo(pmtAssetId)
496- let pmtStrAssetId = $t01904019113._1
497- let pmtAssetName = $t01904019113._2
498- let pmtDecimals = $t01904019113._3
499- let $t01911819234 = claimCalc(pool, toString(i.caller), height)
500- let userNewInterest = $t01911819234._1
501- let currentInterest = $t01911819234._2
502- let claimAmount = $t01911819234._3
503- let userShareTokensAmount = $t01911819234._4
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
504507 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505508 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
506509 let totalShareAmount = getTotalShareTokenLocked(pool)
565568 @Callable(i)
566569 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567570 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568- let $t02376923885 = claimCalc(pool, toString(i.caller), height)
569- let userNewInterest = $t02376923885._1
570- let currentInterest = $t02376923885._2
571- let claimAmount = $t02376923885._3
572- let userShareTokensAmount = $t02376923885._4
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
573576 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574577 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
575578 let totalShareAmount = getTotalShareTokenLocked(pool)
608611 else throw("Strict value is not equal to itself.")
609612 }
610613
611- let $list2635226383 = users
612- let $size2635226383 = size($list2635226383)
613- let $acc02635226383 = nil
614- if (($size2635226383 == 0))
615- then $acc02635226383
614+ let $list2642526455 = users
615+ let $size2642526455 = size($list2642526455)
616+ let $acc02642526455 = nil
617+ if (($size2642526455 == 0))
618+ then $acc02642526455
616619 else {
617- let $acc12635226383 = updateUser($acc02635226383, $list2635226383[0])
618- if (($size2635226383 == 1))
619- then $acc12635226383
620+ let $acc12642526455 = updateUser($acc02642526455, $list2642526455[0])
621+ if (($size2642526455 == 1))
622+ then $acc12642526455
620623 else {
621- let $acc22635226383 = updateUser($acc12635226383, $list2635226383[1])
622- if (($size2635226383 == 2))
623- then $acc22635226383
624+ let $acc22642526455 = updateUser($acc12642526455, $list2642526455[1])
625+ if (($size2642526455 == 2))
626+ then $acc22642526455
624627 else {
625- let $acc32635226383 = updateUser($acc22635226383, $list2635226383[2])
626- if (($size2635226383 == 3))
627- then $acc32635226383
628+ let $acc32642526455 = updateUser($acc22642526455, $list2642526455[2])
629+ if (($size2642526455 == 3))
630+ then $acc32642526455
628631 else {
629- let $acc42635226383 = updateUser($acc32635226383, $list2635226383[3])
630- if (($size2635226383 == 4))
631- then $acc42635226383
632+ let $acc42642526455 = updateUser($acc32642526455, $list2642526455[3])
633+ if (($size2642526455 == 4))
634+ then $acc42642526455
632635 else {
633- let $acc52635226383 = updateUser($acc42635226383, $list2635226383[4])
634- if (($size2635226383 == 5))
635- then $acc52635226383
636+ let $acc52642526455 = updateUser($acc42642526455, $list2642526455[4])
637+ if (($size2642526455 == 5))
638+ then $acc52642526455
636639 else {
637- let $acc62635226383 = updateUser($acc52635226383, $list2635226383[5])
638- if (($size2635226383 == 6))
639- then $acc62635226383
640+ let $acc62642526455 = updateUser($acc52642526455, $list2642526455[5])
641+ if (($size2642526455 == 6))
642+ then $acc62642526455
640643 else {
641- let $acc72635226383 = updateUser($acc62635226383, $list2635226383[6])
642- if (($size2635226383 == 7))
643- then $acc72635226383
644+ let $acc72642526455 = updateUser($acc62642526455, $list2642526455[6])
645+ if (($size2642526455 == 7))
646+ then $acc72642526455
644647 else {
645- let $acc82635226383 = updateUser($acc72635226383, $list2635226383[7])
646- if (($size2635226383 == 8))
647- then $acc82635226383
648+ let $acc82642526455 = updateUser($acc72642526455, $list2642526455[7])
649+ if (($size2642526455 == 8))
650+ then $acc82642526455
648651 else {
649- let $acc92635226383 = updateUser($acc82635226383, $list2635226383[8])
650- if (($size2635226383 == 9))
651- then $acc92635226383
652+ let $acc92642526455 = updateUser($acc82642526455, $list2642526455[8])
653+ if (($size2642526455 == 9))
654+ then $acc92642526455
652655 else {
653- let $acc102635226383 = updateUser($acc92635226383, $list2635226383[9])
654- if (($size2635226383 == 10))
655- then $acc102635226383
656- else {
657- let $acc112635226383 = updateUser($acc102635226383, $list2635226383[10])
658- if (($size2635226383 == 11))
659- then $acc112635226383
660- else {
661- let $acc122635226383 = updateUser($acc112635226383, $list2635226383[11])
662- if (($size2635226383 == 12))
663- then $acc122635226383
664- else {
665- let $acc132635226383 = updateUser($acc122635226383, $list2635226383[12])
666- throw("List size exceed 12")
667- }
668- }
669- }
656+ let $acc102642526455 = updateUser($acc92642526455, $list2642526455[9])
657+ throw("List size exceed 9")
670658 }
671659 }
672660 }
686674 then throw("Only contract itself can invoke this function")
687675 else {
688676 let shareTokenMultiplyer = 1000
689- let $t02660226714 = claimCalc(pool, u, migrationHeight)
690- let userNewInterest = $t02660226714._1
691- let currentInterest = $t02660226714._2
692- let claimAmount = $t02660226714._3
693- let userShareTokensAmount = $t02660226714._4
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
694682 let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
695683 let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
696684 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
719707 func claim (pool) = {
720708 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
721709 let shareTokenLocked = getTotalShareTokenLocked(pool)
722- let $t02887328938 = getLastInterestInfo(pool)
723- let lastInterestHeight = $t02887328938._1
724- let lastInterest = $t02887328938._2
725- let $t02894329055 = rewardInfo(pool)
726- let currentRewardPerBlock = $t02894329055._1
727- let rewardUpdateHeight = $t02894329055._2
728- let previousRewardPerBlock = $t02894329055._3
729- let poolRewardUpdateHeight = $t02894329055._4
730- let $t02906029176 = claimCalc(pool, toString(i.caller), height)
731- let userNewInterest = $t02906029176._1
732- let currentInterest = $t02906029176._2
733- let claimAmount = $t02906029176._3
734- let userShareTokensAmount = $t02906029176._4
710+ let $t02895729022 = getLastInterestInfo(pool)
711+ let lastInterestHeight = $t02895729022._1
712+ let lastInterest = $t02895729022._2
713+ let $t02902729139 = rewardInfo(pool)
714+ let currentRewardPerBlock = $t02902729139._1
715+ let rewardUpdateHeight = $t02902729139._2
716+ let previousRewardPerBlock = $t02902729139._3
717+ let poolRewardUpdateHeight = $t02902729139._4
718+ let $t02914429260 = claimCalc(pool, toString(i.caller), height)
719+ let userNewInterest = $t02914429260._1
720+ let currentInterest = $t02914429260._2
721+ let claimAmount = $t02914429260._3
722+ let userShareTokensAmount = $t02914429260._4
735723 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
736724 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
737725 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
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'
99
1010 let admStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
1111
1212 let keyShareTokensLocked = "_total_share_tokens_locked"
1313
1414 let kShareLimit = "share_limit_on_first_harvest"
1515
1616 let keyActive = "active"
1717
1818 let keyCause = "shutdown_cause"
1919
2020 let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
2121
2222 let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
2323
2424 let keyHeightPoolFraction = "_pool_reward_update_height"
2525
2626 let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
2727
2828 let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
2929
3030 let keyRewardUpdateHeight = "reward_update_height"
3131
3232 let keyLastInterest = "_last_interest"
3333
3434 let keyLastInterestHeight = "_last_interest_height"
3535
3636 let keyUserShareTokensLocked = "_share_tokens_locked"
3737
3838 let keyUserLastInterest = "_last_interest"
3939
4040 let keySWOPid = "SWOP_id"
4141
4242 let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
4343
4444 let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
4545
4646 let keyAvailableSWOP = "_available_SWOP"
4747
4848 let keyFarmingStartHeight = "farming_start_height"
4949
5050 let keyAPY = "apy"
5151
5252 let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
5353
5454 let keySwopYearEmission = "swop_year_emission"
5555
5656 let keyBalancecpmmA = "A_asset_balance"
5757
5858 let keyBalancecpmmB = "B_asset_balance"
5959
6060 let kHarvestPoolActiveVoteStrucVoting = "_harvest_pool_activeVote_struc"
6161
6262 let kHarvestUserPoolActiveVoteStrucVoting = "_harvest_user_pool_activeVote_struc"
6363
6464 let keyLimitShareFirstHarvest = "share_limit_on_first_harvest"
6565
6666 let keyAssetIdA = "A_asset_id"
6767
6868 let keyAssetIdB = "B_asset_id"
6969
7070 let keyFirstHarvestHeight = "first_harvest_height"
7171
7272 let keyfirstHarvestCpmm = "first_harvest"
7373
7474 let keyTempPrevSum = "sum_reward_previous"
7575
7676 let keyTempCurSum = "sum_reward_current"
7777
7878 let governanceAddress = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
7979
8080 let wallet = Address(base58'3P6J84oH51DzY6xk2mT5TheXRbrCwBMxonp')
8181
8282 let votingAddress = Address(base58'3PQZWxShKGRgBN1qoJw6B4s9YWS9FneZTPg')
8383
8484 let adminIncreaseInterestAddress = Address(base58'3PPupsBVHgDXaRhyMbkTxminzAotp8AMsr6')
8585
8686 let oneWeekInBlock = 10106
8787
8888 let totalVoteShare = 10000000000
8989
9090 let scaleValue1 = 10
9191
9292 let scaleValue3 = 1000
9393
9494 let scaleValue5 = 100000
9595
9696 let scaleValue6 = 1000000
9797
9898 let scaleValue8 = 100000000
9999
100100 let scaleValue11 = 100000000000
101101
102102 func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
103103
104104
105105 func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
106106
107107
108108 func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
109109 then unit
110110 else fromBase58String(strAssetIdA(pool))
111111
112112
113113 func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
114114 then unit
115115 else fromBase58String(strAssetIdB(pool))
116116
117117
118118 let kBasePeriod = "base_period"
119119
120120 let kPeriodLength = "period_length"
121121
122122 let kStartHeight = "start_height"
123123
124124 let kFirstHarvestHeight = "first_harvest_height"
125125
126126 let kDurationFullVotePower = "duration_full_vote_power"
127127
128128 let kMinVotePower = "min_vote_power"
129129
130130 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
131131
132132 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
133133
134134 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
135135
136136 let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
137137
138138 let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
139139
140140 let isActive = getBooleanValue(this, keyActive)
141141
142142 let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
143143
144144 func getLimitToken (pool) = valueOrElse(getIntegerValue(pool, keyLimitShareFirstHarvest), 0)
145145
146146
147147 let APY = getIntegerValue(this, keyAPY)
148148
149149 let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
150150
151151 func assetNameA (pool) = match assetIdA(pool) {
152152 case id: ByteVector =>
153153 value(assetInfo(id)).name
154154 case waves: Unit =>
155155 "WAVES"
156156 case _ =>
157157 throw("Match error")
158158 }
159159
160160
161161 func assetNameB (pool) = match assetIdB(pool) {
162162 case id: ByteVector =>
163163 value(assetInfo(id)).name
164164 case waves: Unit =>
165165 "WAVES"
166166 case _ =>
167167 throw("Match error")
168168 }
169169
170170
171171 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
172172
173173 func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
174174
175175
176176 func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
177177
178178
179179 func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
180180
181181
182182 func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
183183
184184
185185 func getShareLimitToken (pool) = valueOrErrorMessage(getInteger(pool, kShareLimit), ("No data on the key: " + kShareLimit))
186186
187187
188188 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
189189
190190
191191 func getShareAssetId (pool) = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
192192
193193
194194 func accountBalance (assetId) = match assetId {
195195 case id: ByteVector =>
196196 assetBalance(this, id)
197197 case waves: Unit =>
198198 wavesBalance(this).available
199199 case _ =>
200200 throw("Match error")
201201 }
202202
203203
204204 func getAssetInfo (assetId) = match assetId {
205205 case id: ByteVector =>
206206 let stringId = toBase58String(id)
207207 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
208208 $Tuple3(stringId, info.name, info.decimals)
209209 case waves: Unit =>
210210 $Tuple3("WAVES", "WAVES", 8)
211211 case _ =>
212212 throw("Match error")
213213 }
214214
215215
216216 func calcScaleValue (assetId1,assetId2) = {
217217 let assetId1Decimals = value(assetInfo(assetId1)).decimals
218218 let assetId2Decimals = value(assetInfo(assetId2)).decimals
219219 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
220220 pow(10, 0, scaleDigits, 0, 0, FLOOR)
221221 }
222222
223223
224224 func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyAvailableSWOP)), 0)
225225
226226
227227 func rewardInfo (pool) = {
228228 let totalRewardPerBlockCurrent = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockCurrent), ((("No data on the key: " + keyTotalRewardPerBlockCurrent) + " at address ") + toString(governanceAddress)))
229229 let totalRewardPerBlockPrevious = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockPrevious), ((("No data on the key: " + keyTotalRewardPerBlockPrevious) + " at address ") + toString(governanceAddress)))
230230 let rewardPoolFractionCurrent = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionCurrent)), (((("No data on the key: " + pool) + keyRewardPoolFractionCurrent) + " at address ") + toString(governanceAddress)))
231231 let rewardUpdateHeight = valueOrErrorMessage(getInteger(governanceAddress, keyRewardUpdateHeight), ((("No data on the key: " + keyRewardUpdateHeight) + " at address ") + toString(governanceAddress)))
232232 let poolRewardUpdateHeight = valueOrElse(getInteger(governanceAddress, (pool + keyHeightPoolFraction)), 0)
233233 let rewardPoolFractionPrevious = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionPrevious)), (((("No data on the key: " + pool) + keyRewardPoolFractionPrevious) + " at address ") + toString(governanceAddress)))
234234 let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
235235 let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
236236 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
237237 then true
238238 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
239239 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
240240 else $Tuple4(rewardPoolCurrent, rewardUpdateHeight, rewardPoolPrevious, poolRewardUpdateHeight)
241241 }
242242
243243
244244 func getLastInterestInfo (pool) = {
245245 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
246246 let lastInterestHeight = valueOrElse(getInteger(this, (pool + keyLastInterestHeight)), height)
247247 $Tuple2(lastInterestHeight, lastInterest)
248248 }
249249
250250
251251 func getUserInterestInfo (pool,userAddrStr) = {
252252 let userLastInterest = getInteger(this, (((pool + "_") + userAddrStr) + keyUserLastInterest))
253253 let userShare = getInteger(this, (((pool + "_") + userAddrStr) + keyUserShareTokensLocked))
254254 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
255255 let userLastInterestValue = match userLastInterest {
256256 case userLastInterest: Int =>
257257 userLastInterest
258258 case _ =>
259259 lastInterest
260260 }
261261 let userShareTokensAmount = match userShare {
262262 case userShare: Int =>
263263 userShare
264264 case _ =>
265265 0
266266 }
267267 $Tuple2(userLastInterestValue, userShareTokensAmount)
268268 }
269269
270270
271271 func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,scaleValue,h) = if ((shareTokenLocked == 0))
272272 then 0
273273 else if ((poolRewardUpdateHeight != 0))
274274 then if (if ((rewardUpdateHeight > h))
275275 then (rewardUpdateHeight == poolRewardUpdateHeight)
276276 else false)
277277 then {
278278 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
279279 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
280280 }
281281 else if (if ((h > rewardUpdateHeight))
282282 then (rewardUpdateHeight != poolRewardUpdateHeight)
283283 else false)
284284 then {
285285 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
286286 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
287287 }
288288 else if (if (if ((h > rewardUpdateHeight))
289289 then (rewardUpdateHeight == poolRewardUpdateHeight)
290290 else false)
291291 then (lastInterestHeight > rewardUpdateHeight)
292292 else false)
293293 then {
294294 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
295295 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
296296 }
297297 else {
298298 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
299299 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
300300 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
301301 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
302302 }
303303 else if ((rewardUpdateHeight > h))
304304 then {
305305 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
306306 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
307307 }
308308 else if ((lastInterestHeight > rewardUpdateHeight))
309309 then {
310310 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
311311 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
312312 }
313313 else {
314314 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
315315 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
316316 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
317317 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
318318 }
319319
320320
321321 func claimCalc (pool,userAddrStr,h) = {
322322 let shareAssetId = getShareAssetId(pool)
323323 let scaleValue = calcScaleValue(SWOP, shareAssetId)
324324 let shareTokenLocked = getTotalShareTokenLocked(pool)
325325 let $t01305013115 = getLastInterestInfo(pool)
326326 let lastInterestHeight = $t01305013115._1
327327 let lastInterest = $t01305013115._2
328328 let $t01312013232 = rewardInfo(pool)
329329 let currentRewardPerBlock = $t01312013232._1
330330 let rewardUpdateHeight = $t01312013232._2
331331 let previousRewardPerBlock = $t01312013232._3
332332 let poolRewardUpdateHeight = $t01312013232._4
333333 let $t01323713321 = getUserInterestInfo(pool, userAddrStr)
334334 let userLastInterest = $t01323713321._1
335335 let userShareTokensAmount = $t01323713321._2
336336 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
337337 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
338338 let userNewInterest = currentInterest
339339 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
340340 }
341341
342342
343343 func claimCalcForMigration (pool,userAddrStr,h) = {
344- let shareAssetId = getShareAssetId(pool)
345- let scaleValue = calcScaleValue(SWOP, shareAssetId)
344+ let scaleValue = if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
345+ then 100000
346+ else if ((pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
347+ then 10000
348+ else throw("pool must be egg")
346349 let shareTokenLocked = getTotalShareTokenLocked(pool)
347- let $t01404414109 = getLastInterestInfo(pool)
348- let lastInterestHeight = $t01404414109._1
349- let lastInterest = $t01404414109._2
350- let $t01411414226 = rewardInfo(pool)
351- let currentRewardPerBlock = $t01411414226._1
352- let rewardUpdateHeight = $t01411414226._2
353- let previousRewardPerBlock = $t01411414226._3
354- let poolRewardUpdateHeight = $t01411414226._4
355- let $t01423114315 = getUserInterestInfo(pool, userAddrStr)
356- let userLastInterest = $t01423114315._1
357- let userShareTokensAmount = $t01423114315._2
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
358361 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
359362 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360363 let userNewInterest = currentInterest
361364 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
362365 }
363366
364367
365368 func calculateProtocolReward (pool) = {
366- let $t01481914884 = getLastInterestInfo(pool)
367- let lastInterestHeight = $t01481914884._1
368- let lastInterest = $t01481914884._2
369- let $t01488915000 = rewardInfo(pool)
370- let currentRewardPerBlock = $t01488915000._1
371- let rewardUpdateHeight = $t01488915000._2
372- let previousRewardPerBlock = $t01488915000._3
373- let poolRewardUpdateHeight = $t01488915000._4
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
374377 let shareTokenLocked = getTotalShareTokenLocked(pool)
375378 if (if ((shareTokenLocked == 0))
376379 then (poolRewardUpdateHeight == 0)
377380 else false)
378381 then if ((rewardUpdateHeight > height))
379382 then {
380383 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
381384 reward
382385 }
383386 else if ((lastInterestHeight > rewardUpdateHeight))
384387 then {
385388 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
386389 reward
387390 }
388391 else {
389392 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
390393 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
391394 (reward + rewardAfterLastInterestBeforeReawardUpdate)
392395 }
393396 else if (if ((shareTokenLocked == 0))
394397 then (poolRewardUpdateHeight != 0)
395398 else false)
396399 then if (if ((rewardUpdateHeight > height))
397400 then (rewardUpdateHeight == poolRewardUpdateHeight)
398401 else false)
399402 then {
400403 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
401404 reward
402405 }
403406 else if (if ((height > rewardUpdateHeight))
404407 then (rewardUpdateHeight != poolRewardUpdateHeight)
405408 else false)
406409 then {
407410 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
408411 reward
409412 }
410413 else if (if (if ((height > rewardUpdateHeight))
411414 then (rewardUpdateHeight == poolRewardUpdateHeight)
412415 else false)
413416 then (lastInterestHeight > rewardUpdateHeight)
414417 else false)
415418 then {
416419 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
417420 reward
418421 }
419422 else {
420423 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
421424 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
422425 (reward + rewardAfterLastInterestBeforeReawardUpdate)
423426 }
424427 else 0
425428 }
426429
427430
428431 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
429432 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
430433 if ((pmtAssetId == poolShareAssetId))
431434 then true
432435 else false
433436 }
434437
435438
436439 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
437440
438441
439442 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
440443
441444
442445 @Callable(i)
443446 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
444447 then throw("SWOP already initialized")
445448 else {
446449 let initAmount = 100000000000000
447450 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
448451 let SWOPid = calculateAssetId(SWOPissue)
449452 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
450453 }
451454
452455
453456
454457 @Callable(i)
455458 func initPoolShareFarming (pool) = if ((i.caller != this))
456459 then throw("Only the DApp itself can call this function")
457460 else {
458- let $t01797018073 = rewardInfo(pool)
459- let currentReward = $t01797018073._1
460- let rewardUpdateHeight = $t01797018073._2
461- let previousRewardPerBlock = $t01797018073._3
462- let poolRewardUpdateHeight = $t01797018073._4
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
463466 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464467 }
465468
466469
467470
468471 @Callable(i)
469472 func updatePoolInterest (pool) = if ((i.caller != wallet))
470473 then throw("Only the Admin itself can call this function")
471474 else if (!(isActive))
472475 then throw("DApp is inactive at this moment")
473476 else {
474- let $t01848218618 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475- let userNewInterest = $t01848218618._1
476- let currentInterest = $t01848218618._2
477- let claimAmount = $t01848218618._3
478- let userShareTokensAmount = $t01848218618._4
479- let $t01862318726 = rewardInfo(pool)
480- let currentReward = $t01862318726._1
481- let rewardUpdateHeight = $t01862318726._2
482- let previousRewardPerBlock = $t01862318726._3
483- let poolRewardUpdateHeight = $t01862318726._4
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
484487 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485488 }
486489
487490
488491
489492 @Callable(i)
490493 func lockShareTokens (pool) = {
491494 let userAddrStr = toString(i.caller)
492- let $t01896019035 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493- let pmtAmount = $t01896019035._1
494- let pmtAssetId = $t01896019035._2
495- let $t01904019113 = getAssetInfo(pmtAssetId)
496- let pmtStrAssetId = $t01904019113._1
497- let pmtAssetName = $t01904019113._2
498- let pmtDecimals = $t01904019113._3
499- let $t01911819234 = claimCalc(pool, toString(i.caller), height)
500- let userNewInterest = $t01911819234._1
501- let currentInterest = $t01911819234._2
502- let claimAmount = $t01911819234._3
503- let userShareTokensAmount = $t01911819234._4
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
504507 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505508 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
506509 let totalShareAmount = getTotalShareTokenLocked(pool)
507510 let totalShareAmountNew = (totalShareAmount + pmtAmount)
508511 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
509512 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
510513 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)]
511514 if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
512515 then true
513516 else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
514517 then throw()
515518 else if ((0 >= pmtAmount))
516519 then throw("You can't lock token")
517520 else if (!(isActive))
518521 then throw("DApp is inactive at this moment")
519522 else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
520523 then throw("Incorrect pmtAssetId")
521524 else if (if (isFirstHarvest(Address(fromBase58String(pool))))
522525 then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
523526 else false)
524527 then {
525528 let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
526529 let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
527530 let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
528531 let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
529532 let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
530533 let userShareTokenLocked = userShareTokensAmount
531534 let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
532535 then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
533536 else valueOrElse(parseInt(amountOfVoting[1]), 0)
534537 let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
535538 then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
536539 else valueOrElse(parseInt(amountPoolStract[1]), 0)
537540 let protocolReward = calculateProtocolReward(pool)
538541 if ((userPoolActiveVote != 0))
539542 then {
540543 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
541544 let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
542545 if (if ((size(amountActiveVoteUserPoolStract) > 1))
543546 then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
544547 else false)
545548 then throw("You can't share token")
546549 else if ((pmtAmount > limitShareToken))
547550 then throw(("You can't share token more than " + toString(limitShareToken)))
548551 else if ((shareToken > 0))
549552 then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
550553 then throw("Balance of share-token is greater than totalAmount")
551554 else if ((totalShareAmount == 0))
552555 then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
553556 else if ((shareToken >= pmtAmount))
554557 then baseEntry
555558 else throw(("Your maximum share token is " + toString(shareToken)))
556559 else throw("You can't share token")
557560 }
558561 else throw("Your amount of token less than 0")
559562 }
560563 else baseEntry
561564 }
562565
563566
564567
565568 @Callable(i)
566569 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567570 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568- let $t02376923885 = claimCalc(pool, toString(i.caller), height)
569- let userNewInterest = $t02376923885._1
570- let currentInterest = $t02376923885._2
571- let claimAmount = $t02376923885._3
572- let userShareTokensAmount = $t02376923885._4
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
573576 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574577 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
575578 let totalShareAmount = getTotalShareTokenLocked(pool)
576579 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
577580 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
578581 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
579582 if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
580583 then true
581584 else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
582585 then throw()
583586 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
584587 then throw("Withdraw amount more then user locked amount")
585588 else if (!(isActive))
586589 then throw("DApp is inactive at this moment")
587590 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
588591 then throw("Withdraw amount more then user locked amount")
589592 else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
590593 then throw("Balance of share-token is greater than totalAmount")
591594 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)]
592595 }
593596
594597
595598
596599 @Callable(i)
597600 func egg0 (pool,users,migrationHeight) = if (if ((pool != "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
598601 then (pool != "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ")
599602 else false)
600603 then throw()
601604 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602605 then throw("Only admin can call this function")
603606 else {
604607 func updateUser (accum,u) = {
605608 let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
606609 if ((r == r))
607610 then accum
608611 else throw("Strict value is not equal to itself.")
609612 }
610613
611- let $list2635226383 = users
612- let $size2635226383 = size($list2635226383)
613- let $acc02635226383 = nil
614- if (($size2635226383 == 0))
615- then $acc02635226383
614+ let $list2642526455 = users
615+ let $size2642526455 = size($list2642526455)
616+ let $acc02642526455 = nil
617+ if (($size2642526455 == 0))
618+ then $acc02642526455
616619 else {
617- let $acc12635226383 = updateUser($acc02635226383, $list2635226383[0])
618- if (($size2635226383 == 1))
619- then $acc12635226383
620+ let $acc12642526455 = updateUser($acc02642526455, $list2642526455[0])
621+ if (($size2642526455 == 1))
622+ then $acc12642526455
620623 else {
621- let $acc22635226383 = updateUser($acc12635226383, $list2635226383[1])
622- if (($size2635226383 == 2))
623- then $acc22635226383
624+ let $acc22642526455 = updateUser($acc12642526455, $list2642526455[1])
625+ if (($size2642526455 == 2))
626+ then $acc22642526455
624627 else {
625- let $acc32635226383 = updateUser($acc22635226383, $list2635226383[2])
626- if (($size2635226383 == 3))
627- then $acc32635226383
628+ let $acc32642526455 = updateUser($acc22642526455, $list2642526455[2])
629+ if (($size2642526455 == 3))
630+ then $acc32642526455
628631 else {
629- let $acc42635226383 = updateUser($acc32635226383, $list2635226383[3])
630- if (($size2635226383 == 4))
631- then $acc42635226383
632+ let $acc42642526455 = updateUser($acc32642526455, $list2642526455[3])
633+ if (($size2642526455 == 4))
634+ then $acc42642526455
632635 else {
633- let $acc52635226383 = updateUser($acc42635226383, $list2635226383[4])
634- if (($size2635226383 == 5))
635- then $acc52635226383
636+ let $acc52642526455 = updateUser($acc42642526455, $list2642526455[4])
637+ if (($size2642526455 == 5))
638+ then $acc52642526455
636639 else {
637- let $acc62635226383 = updateUser($acc52635226383, $list2635226383[5])
638- if (($size2635226383 == 6))
639- then $acc62635226383
640+ let $acc62642526455 = updateUser($acc52642526455, $list2642526455[5])
641+ if (($size2642526455 == 6))
642+ then $acc62642526455
640643 else {
641- let $acc72635226383 = updateUser($acc62635226383, $list2635226383[6])
642- if (($size2635226383 == 7))
643- then $acc72635226383
644+ let $acc72642526455 = updateUser($acc62642526455, $list2642526455[6])
645+ if (($size2642526455 == 7))
646+ then $acc72642526455
644647 else {
645- let $acc82635226383 = updateUser($acc72635226383, $list2635226383[7])
646- if (($size2635226383 == 8))
647- then $acc82635226383
648+ let $acc82642526455 = updateUser($acc72642526455, $list2642526455[7])
649+ if (($size2642526455 == 8))
650+ then $acc82642526455
648651 else {
649- let $acc92635226383 = updateUser($acc82635226383, $list2635226383[8])
650- if (($size2635226383 == 9))
651- then $acc92635226383
652+ let $acc92642526455 = updateUser($acc82642526455, $list2642526455[8])
653+ if (($size2642526455 == 9))
654+ then $acc92642526455
652655 else {
653- let $acc102635226383 = updateUser($acc92635226383, $list2635226383[9])
654- if (($size2635226383 == 10))
655- then $acc102635226383
656- else {
657- let $acc112635226383 = updateUser($acc102635226383, $list2635226383[10])
658- if (($size2635226383 == 11))
659- then $acc112635226383
660- else {
661- let $acc122635226383 = updateUser($acc112635226383, $list2635226383[11])
662- if (($size2635226383 == 12))
663- then $acc122635226383
664- else {
665- let $acc132635226383 = updateUser($acc122635226383, $list2635226383[12])
666- throw("List size exceed 12")
667- }
668- }
669- }
656+ let $acc102642526455 = updateUser($acc92642526455, $list2642526455[9])
657+ throw("List size exceed 9")
670658 }
671659 }
672660 }
673661 }
674662 }
675663 }
676664 }
677665 }
678666 }
679667 }
680668 }
681669
682670
683671
684672 @Callable(i)
685673 func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
686674 then throw("Only contract itself can invoke this function")
687675 else {
688676 let shareTokenMultiplyer = 1000
689- let $t02660226714 = claimCalc(pool, u, migrationHeight)
690- let userNewInterest = $t02660226714._1
691- let currentInterest = $t02660226714._2
692- let claimAmount = $t02660226714._3
693- let userShareTokensAmount = $t02660226714._4
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
694682 let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
695683 let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
696684 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
697685 let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
698686 let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
699687 [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))]
700688 }
701689
702690
703691
704692 @Callable(i)
705693 func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
706694 then throw("Only admin can call this function")
707695 else {
708696 let shareTokenMultiplyer = 1000
709697 let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
710698 let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
711699 if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
712700 then throw("New total amount share tockens != old total amount")
713701 else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
714702 }
715703
716704
717705
718706 @Callable(i)
719707 func claim (pool) = {
720708 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
721709 let shareTokenLocked = getTotalShareTokenLocked(pool)
722- let $t02887328938 = getLastInterestInfo(pool)
723- let lastInterestHeight = $t02887328938._1
724- let lastInterest = $t02887328938._2
725- let $t02894329055 = rewardInfo(pool)
726- let currentRewardPerBlock = $t02894329055._1
727- let rewardUpdateHeight = $t02894329055._2
728- let previousRewardPerBlock = $t02894329055._3
729- let poolRewardUpdateHeight = $t02894329055._4
730- let $t02906029176 = claimCalc(pool, toString(i.caller), height)
731- let userNewInterest = $t02906029176._1
732- let currentInterest = $t02906029176._2
733- let claimAmount = $t02906029176._3
734- let userShareTokensAmount = $t02906029176._4
710+ let $t02895729022 = getLastInterestInfo(pool)
711+ let lastInterestHeight = $t02895729022._1
712+ let lastInterest = $t02895729022._2
713+ let $t02902729139 = rewardInfo(pool)
714+ let currentRewardPerBlock = $t02902729139._1
715+ let rewardUpdateHeight = $t02902729139._2
716+ let previousRewardPerBlock = $t02902729139._3
717+ let poolRewardUpdateHeight = $t02902729139._4
718+ let $t02914429260 = claimCalc(pool, toString(i.caller), height)
719+ let userNewInterest = $t02914429260._1
720+ let currentInterest = $t02914429260._2
721+ let claimAmount = $t02914429260._3
722+ let userShareTokensAmount = $t02914429260._4
735723 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
736724 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
737725 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
738726 if (if ((pool == "3PNVFWopwCD9CgGXkpYWEY94oQ5XCAEXBmQ"))
739727 then true
740728 else (pool == "3PEeJQRJT4v4XvSUBPmxhdWKz439nae7KtQ"))
741729 then throw()
742730 else if ((availableFund == 0))
743731 then throw("You have 0 available SWOP")
744732 else if (!(isActive))
745733 then throw("DApp is inactive at this moment")
746734 else if ((availableFund == 0))
747735 then throw("You have 0 available SWOP")
748736 else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
749737 then throw("Balance of share-token is greater than totalAmount")
750738 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)]
751739 }
752740
753741
754742
755743 @Callable(i)
756744 func shutdown () = if (!(isActive))
757745 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
758746 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
759747 then throw("Only admin can call this function")
760748 else suspend("Paused by admin")
761749
762750
763751
764752 @Callable(i)
765753 func activate () = if (isActive)
766754 then throw("DApp is already active")
767755 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
768756 then throw("Only admin can call this function")
769757 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
770758
771759
772760 @Verifier(tx)
773761 func verify () = match tx {
774762 case inv: InvokeScriptTransaction =>
775763 let callEgg1 = if ((inv.dApp == this))
776764 then (inv.function == "egg1")
777765 else false
778766 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
779767 then true
780768 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
781769 then true
782770 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
783771 then true
784772 else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
785773 if (callEgg1)
786774 then signedByAdmin
787775 else false
788776 case _ =>
789777 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
790778 then 1
791779 else 0
792780 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
793781 then 1
794782 else 0
795783 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
796784 then 1
797785 else 0
798786 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
799787 }
800788

github/deemru/w8io/6500d08 
154.81 ms