tx · BnPQP9ridg9HH8p8BfqaBVUwGn8GQtxKP2AUugyiH7bB

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.09.15 12:15 [1703953] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "BnPQP9ridg9HH8p8BfqaBVUwGn8GQtxKP2AUugyiH7bB", "fee": 1400000, "feeAssetId": null, "timestamp": 1631697345669, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "4cckFeKZKoXLRsFxk8HLoakjxR9K62b1vpDfqtNkwfuX1hY8vvXSTe4dtpYEknTTCRjAWcSjkFwZxjGEHDzwFvbo", "VsVTdAxmy4cBaMiFviVZHkzC9z9HUk9ruw5RgX3ztEqjEK9skTF8FT4GPmx7gxSip2iGoFAW1SkNXFzVqwkt4FB" ], "script": "base64:AAIFAAAAAAAAE+AIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgUKAwgYARIFCgMICAESBAoCCAESAwoBCBIAEgAaEgoCYTESDGFkbWluUHViS2V5MRoSCgJhMhIMYWRtaW5QdWJLZXkyGhIKAmEzEgxhZG1pblB1YktleTMaEAoCYTQSCmFkbVN0YWtpbmcaGgoCYTUSFGtleVNoYXJlVG9rZW5zTG9ja2VkGhEKAmE2EgtrU2hhcmVMaW1pdBoPCgJhNxIJa2V5QWN0aXZlGg4KAmE4EghrZXlDYXVzZRoiCgJhORIca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBojCgJiMRIda2V5UmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaGwoCYjISFWtleUhlaWdodFBvb2xGcmFjdGlvbhojCgJiMxIda2V5VG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaJAoCYjQSHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxobCgJiNRIVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0GhUKAmI2Eg9rZXlMYXN0SW50ZXJlc3QaGwoCYjcSFWtleUxhc3RJbnRlcmVzdEhlaWdodBoeCgJiOBIYa2V5VXNlclNoYXJlVG9rZW5zTG9ja2VkGhkKAmI5EhNrZXlVc2VyTGFzdEludGVyZXN0Gg8KAmMxEglrZXlTV09QaWQaHgoCYzISGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudBoiCgJjMxIca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudBoWCgJjNBIQa2V5QXZhaWxhYmxlU1dPUBobCgJjNRIVa2V5RmFybWluZ1N0YXJ0SGVpZ2h0GgwKAmM2EgZrZXlBUFkaHAoCYzcSFmtQcmV2aW91c1RvdGFsVm90ZVNXT1AaGQoCYzgSE2tleVN3b3BZZWFyRW1pc3Npb24aFQoCYzkSD2tleUJhbGFuY2VjcG1tQRoVCgJkMRIPa2V5QmFsYW5jZWNwbW1CGicKAmQyEiFrSGFydmVzdFBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaKwoCZDMSJWtIYXJ2ZXN0VXNlclBvb2xBY3RpdmVWb3RlU3RydWNWb3RpbmcaHwoCZDQSGWtleUxpbWl0U2hhcmVGaXJzdEhhcnZlc3QaEQoCZDUSC2tleUFzc2V0SWRBGhEKAmQ2EgtrZXlBc3NldElkQhobCgJkNxIVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0GhkKAmQ4EhNrZXlmaXJzdEhhcnZlc3RDcG1tGhQKAmQ5Eg5rZXlUZW1wUHJldlN1bRoTCgJlMRINa2V5VGVtcEN1clN1bRoXCgJlMhIRZ292ZXJuYW5jZUFkZHJlc3MaDAoCZTMSBndhbGxldBoTCgJlNBINdm90aW5nQWRkcmVzcxoiCgJlNRIcYWRtaW5JbmNyZWFzZUludGVyZXN0QWRkcmVzcxoUCgJlNhIOb25lV2Vla0luQmxvY2saFAoCZTcSDnRvdGFsVm90ZVNoYXJlGhEKAmU4EgtzY2FsZVZhbHVlMRoRCgJlORILc2NhbGVWYWx1ZTMaEQoCZjESC3NjYWxlVmFsdWU1GhEKAmYyEgtzY2FsZVZhbHVlNhoRCgJmMxILc2NhbGVWYWx1ZTgaEgoCZjQSDHNjYWxlVmFsdWUxMRoRCgJmNRILc3RyQXNzZXRJZEEaCgoCZjYSBHBvb2waEQoCZjcSC3N0ckFzc2V0SWRCGg4KAmY4Eghhc3NldElkQRoOCgJmORIIYXNzZXRJZEIaEQoCZzESC2tCYXNlUGVyaW9kGhMKAmcyEg1rUGVyaW9kTGVuZ3RoGhIKAmczEgxrU3RhcnRIZWlnaHQaGQoCZzQSE2tGaXJzdEhhcnZlc3RIZWlnaHQaHAoCZzUSFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEwoCZzYSDWtNaW5Wb3RlUG93ZXIaEAoCZzcSCmJhc2VQZXJpb2QaEQoCZzgSC3N0YXJ0SGVpZ2h0GhIKAmc5EgxwZXJpb2RMZW5ndGgaGwoCaDESFWR1cmF0aW9uRnVsbFZvdGVQb3dlchoSCgJoMhIMbWluVm90ZVBvd2VyGg4KAmgzEghpc0FjdGl2ZRoQCgJoNBIKY3VyclBlcmlvZBoTCgJoNRINZ2V0TGltaXRUb2tlbhoJCgJoNhIDQVBZGhYKAmg3EhBTd29wWWVhckVtaXNzaW9uGhAKAmg4Egphc3NldE5hbWVBGg0KAmg5EgckbWF0Y2gwGggKAmkxEgJpZBoLCgJpMhIFd2F2ZXMaEAoCaTMSCmFzc2V0TmFtZUIaCgoCaTQSBFNXT1AaFAoCaTUSDmlzRmlyc3RIYXJ2ZXN0GhsKAmk2EhVnZXRIZWlnaHRGaXJzdEhhcnZlc3QaEQoCaTcSC2dldEJhbGFuY2VBGhEKAmk4EgtnZXRCYWxhbmNlQhoYCgJpORISZ2V0U2hhcmVMaW1pdFRva2VuGh4KAmoxEhhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQaFQoCajISD2dldFNoYXJlQXNzZXRJZBoUCgJqMxIOYWNjb3VudEJhbGFuY2UaDQoCajQSB2Fzc2V0SWQaEgoCajUSDGdldEFzc2V0SW5mbxoOCgJqNhIIc3RyaW5nSWQaCgoCajcSBGluZm8aFAoCajgSDmNhbGNTY2FsZVZhbHVlGg4KAmo5Eghhc3NldElkMRoOCgJrMRIIYXNzZXRJZDIaFgoCazISEGFzc2V0SWQxRGVjaW1hbHMaFgoCazMSEGFzc2V0SWQyRGVjaW1hbHMaEQoCazQSC3NjYWxlRGlnaXRzGhcKAms1EhF1c2VyQXZhaWxhYmxlU1dPUBoKCgJrNhIEdXNlchoQCgJrNxIKcmV3YXJkSW5mbxogCgJrOBIadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQaIQoCazkSG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cxofCgJsMRIZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudBoYCgJsMhIScmV3YXJkVXBkYXRlSGVpZ2h0GhwKAmwzEhZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0GiAKAmw0EhpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cxoXCgJsNRIRcmV3YXJkUG9vbEN1cnJlbnQaGAoCbDYSEnJld2FyZFBvb2xQcmV2aW91cxoZCgJsNxITZ2V0TGFzdEludGVyZXN0SW5mbxoSCgJsOBIMbGFzdEludGVyZXN0GhgKAmw5EhJsYXN0SW50ZXJlc3RIZWlnaHQaGQoCbTESE2dldFVzZXJJbnRlcmVzdEluZm8aEQoCbTISC3VzZXJBZGRyU3RyGhYKAm0zEhB1c2VyTGFzdEludGVyZXN0Gg8KAm00Egl1c2VyU2hhcmUaGwoCbTUSFXVzZXJMYXN0SW50ZXJlc3RWYWx1ZRobCgJtNhIVdXNlclNoYXJlVG9rZW5zQW1vdW50GhIKAm03EgxjYWxjSW50ZXJlc3QaGwoCbTgSFWN1cnJlbnRSZXdhcmRQZXJCbG9jaxoWCgJtORIQc2hhcmVUb2tlbkxvY2tlZBocCgJuMRIWcHJldmlvdXNSZXdhcmRQZXJCbG9jaxoQCgJuMhIKc2NhbGVWYWx1ZRoHCgJuMxIBaBoMCgJuNBIGcmV3YXJkGjAKAm41EipyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUaGQoCbjYSE2ludGVyZXN0QWZ0ZXJVcGRhdGUaDwoCbjcSCWNsYWltQ2FsYxoSCgJuOBIMc2hhcmVBc3NldElkGhMKAm45Eg0kdDAxMzA5NjEzMTYxGhMKAm8xEg0kdDAxMzE2NjEzMjc4GhMKAm8yEg0kdDAxMzI4MzEzMzY3GhUKAm8zEg9jdXJyZW50SW50ZXJlc3QaEQoCbzQSC2NsYWltQW1vdW50GhUKAm81Eg91c2VyTmV3SW50ZXJlc3QaGwoCbzYSFWNsYWltQ2FsY0Zvck1pZ3JhdGlvbhoTCgJvNxINJHQwMTQwOTAxNDE1NRoTCgJvOBINJHQwMTQxNjAxNDI3MhoTCgJvORINJHQwMTQyNzcxNDM2MRodCgJwMRIXY2FsY3VsYXRlUHJvdG9jb2xSZXdhcmQaEwoCcDISDSR0MDE0ODY1MTQ5MzAaEwoCcDMSDSR0MDE0OTM1MTUwNDYaHAoCcDQSFmNoZWNrUG10QXNzZXRJZENvcnJlY3QaEAoCcDUSCnBtdEFzc2V0SWQaFgoCcDYSEHBvb2xTaGFyZUFzc2V0SWQaHgoCcDcSGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudBoNCgJwOBIHc3VzcGVuZBoLCgJwORIFY2F1c2UaBwoCcTESAWkaDQoCcTISB2Vhcmx5TFAaEAoCcTMSCmluaXRBbW91bnQaDwoCcTQSCVNXT1Bpc3N1ZRoMCgJxNRIGU1dPUGlkGhMKAnE2Eg0kdDAxODAxNjE4MTE5GhMKAnE3Eg1jdXJyZW50UmV3YXJkGhMKAnE4Eg0kdDAxODUyODE4NjY0GhMKAnE5Eg0kdDAxODY2OTE4NzcyGhMKAnIxEg0kdDAxOTAwNjE5MDgxGg8KAnIyEglwbXRBbW91bnQaEwoCcjMSDSR0MDE5MDg2MTkxNTkaEwoCcjQSDXBtdFN0ckFzc2V0SWQaEgoCcjUSDHBtdEFzc2V0TmFtZRoRCgJyNhILcG10RGVjaW1hbHMaEwoCcjcSDSR0MDE5MTY0MTkyODAaGAoCcjgSEnVzZXJTaGFyZUFtb3VudE5ldxoXCgJyORIRYXZhaWxhYmxlRnVuZHNOZXcaFgoCczESEHRvdGFsU2hhcmVBbW91bnQaGQoCczISE3RvdGFsU2hhcmVBbW91bnROZXcaFwoCczMSEXVzZXJDbGFpbWVkQW1vdW50GhoKAnM0EhR1c2VyQ2xhaW1lZEFtb3VudE5ldxoPCgJzNRIJYmFzZUVudHJ5GhMKAnM2Eg1oYXJ2ZXN0UGVyaW9kGhQKAnM3Eg5hbW91bnRPZlZvdGluZxoWCgJzOBIQYW1vdW50UG9vbFN0cmFjdBokCgJzORIeYW1vdW50QWN0aXZlVm90ZVVzZXJQb29sU3RyYWN0GiAKAnQxEhphbW91bnRQb29sQWN0aXZlVm90ZVN0cmFjdBoaCgJ0MhIUdXNlclNoYXJlVG9rZW5Mb2NrZWQaGAoCdDMSEnVzZXJQb29sQWN0aXZlVm90ZRoUCgJ0NBIOcG9vbEFjdGl2ZVZvdGUaFAoCdDUSDnByb3RvY29sUmV3YXJkGhUKAnQ2Eg9saW1pdFNoYXJlVG9rZW4aEAoCdDcSCnNoYXJlVG9rZW4aHwoCdDgSGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQaEwoCdDkSDXNoYXJlVG9rZW5zSWQaEwoCdTESDSR0MDIzODE1MjM5MzEaCwoCdTISBXVzZXJzGhUKAnUzEg9taWdyYXRpb25IZWlnaHQaEAoCdTQSCnVwZGF0ZVVzZXIaCwoCdTUSBWFjY3VtGgcKAnU2EgF1GgcKAnU3EgFyGhUKAnU4Eg8kbGlzdDI2Mzk3MjY0MjgaFQoCdTkSDyRzaXplMjYzOTcyNjQyOBoVCgJ2MRIPJGFjYzAyNjM5NzI2NDI4GhUKAnYyEg8kYWNjMTI2Mzk3MjY0MjgaFQoCdjMSDyRhY2MyMjYzOTcyNjQyOBoVCgJ2NBIPJGFjYzMyNjM5NzI2NDI4GhUKAnY1Eg8kYWNjNDI2Mzk3MjY0MjgaFQoCdjYSDyRhY2M1MjYzOTcyNjQyOBoVCgJ2NxIPJGFjYzYyNjM5NzI2NDI4GhUKAnY4Eg8kYWNjNzI2Mzk3MjY0MjgaFQoCdjkSDyRhY2M4MjYzOTcyNjQyOBoVCgJ3MRIPJGFjYzkyNjM5NzI2NDI4GhYKAncyEhAkYWNjMTAyNjM5NzI2NDI4GhYKAnczEhAkYWNjMTEyNjM5NzI2NDI4GhYKAnc0EhAkYWNjMTIyNjM5NzI2NDI4GhYKAnc1EhAkYWNjMTMyNjM5NzI2NDI4GhoKAnc2EhRzaGFyZVRva2VuTXVsdGlwbHllchoTCgJ3NxINJHQwMjY2MzkyNjc1MRoeCgJ3OBIYdXNlclNoYXJlVG9rZW5zQW1vdW50TmV3GiQKAnc5Eh50b3RhbEFtb3VudE5ld1NoYXJlVG9rZW5Mb2NrZWQaKAoCeDESInRvdGFsQW1vdW50U2hhcmVUb2tlbnNMb2NrZWRCZWZvcmUaJQoCeDISH3RvdGFsQW1vdW50U2hhcmVUb2tlbnNMb2NrZWROZXcaEwoCeDMSDSR0MDI4ODE1Mjg4ODAaEwoCeDQSDSR0MDI4ODg1Mjg5OTcaEwoCeDUSDSR0MDI5MDAyMjkxMTgaEwoCeDYSDWF2YWlsYWJsZUZ1bmQaCAoCeDcSAnR4GgwKAng4EgZ2ZXJpZnkaCQoCeDkSA2ludhoOCgJ5MRIIY2FsbEVnZzEaEwoCeTISDXNpZ25lZEJ5QWRtaW4aGAoCeTMSEmFkbWluUHViS2V5MVNpZ25lZBoYCgJ5NBISYWRtaW5QdWJLZXkyU2lnbmVkGhgKAnk1EhJhZG1pblB1YktleTNTaWduZWQAAABdAAAAAAJhMQEAAAAg4qeMQDuGzRfmtEuH2+Whg6yuKqHsNy5eZQUT8rXs7wQAAAAAAmEyAQAAACDqOKy5AbWIPHKjnig9gdQaImURE43fjoONfP1X8ZsRWQAAAAACYTMBAAAAIKc0loKwo8nHXTJiAX87RSdPM+q/NsQBzxC3dHCqJ8xuAAAAAAJhNAEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAAAmE1AgAAABpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAAAAAACYTYCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmE3AgAAAAZhY3RpdmUAAAAAAmE4AgAAAA5zaHV0ZG93bl9jYXVzZQAAAAACYTkCAAAAHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJiMQIAAAAeX3ByZXZpb3VzX3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJiMgIAAAAaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmIzAgAAAB50b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX2N1cnJlbnQAAAAAAmI0AgAAAB90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzAAAAAAJiNQIAAAAUcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmI2AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYjcCAAAAFV9sYXN0X2ludGVyZXN0X2hlaWdodAAAAAACYjgCAAAAFF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJiOQIAAAAOX2xhc3RfaW50ZXJlc3QAAAAAAmMxAgAAAAdTV09QX2lkAAAAAAJjMgIAAAAUX1NXT1BfY2xhaW1lZF9hbW91bnQAAAAAAmMzAgAAABlfU1dPUF9sYXN0X2NsYWltZWRfYW1vdW50AAAAAAJjNAIAAAAPX2F2YWlsYWJsZV9TV09QAAAAAAJjNQIAAAAUZmFybWluZ19zdGFydF9oZWlnaHQAAAAAAmM2AgAAAANhcHkAAAAAAmM3AgAAABhwcmV2aW91c190b3RhbF92b3RlX1NXT1AAAAAAAmM4AgAAABJzd29wX3llYXJfZW1pc3Npb24AAAAAAmM5AgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAAmQxAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAAmQyAgAAAB5faGFydmVzdF9wb29sX2FjdGl2ZVZvdGVfc3RydWMAAAAAAmQzAgAAACNfaGFydmVzdF91c2VyX3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACZDQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmQ1AgAAAApBX2Fzc2V0X2lkAAAAAAJkNgIAAAAKQl9hc3NldF9pZAAAAAACZDcCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAJkOAIAAAANZmlyc3RfaGFydmVzdAAAAAACZDkCAAAAE3N1bV9yZXdhcmRfcHJldmlvdXMA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", "height": 1703953, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G6JKKDtnrXWZggHs1qNV2tDtSqLCijYZuh9Cc1XsvHNU Next: Fte7wojy8nEuiZ6HfL4AenCu4ErHt6wVBmV7X7Szsy9Z Diff:
OldNewDifferences
594594
595595
596596 @Callable(i)
597-func egg0 (pool,users,migrationHeight) = if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598- then true
599- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
597+func egg0 (pool,users,migrationHeight) = if (if ((pool != "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598+ then (pool != "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8")
599+ else false)
600600 then throw()
601601 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602602 then throw("Only admin can call this function")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let adminPubKey1 = base58'GFmKZ2naZFRoCvNbwKAQVGmLb1uBeWGDgFabdGBuZiuy'
55
66 let adminPubKey2 = base58'GmJXRyhRA79g8yUGgKBAVdnFfQFDMjQG98b1MmLDh5kk'
77
88 let adminPubKey3 = base58'CFhbV6h41hVjbGHudGtS3fYUv7QAKRxFQzKNtx4B5PqP'
99
1010 let admStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
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'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
7979
8080 let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
8181
8282 let votingAddress = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
8383
8484 let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
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 $t01309613161 = getLastInterestInfo(pool)
326326 let lastInterestHeight = $t01309613161._1
327327 let lastInterest = $t01309613161._2
328328 let $t01316613278 = rewardInfo(pool)
329329 let currentRewardPerBlock = $t01316613278._1
330330 let rewardUpdateHeight = $t01316613278._2
331331 let previousRewardPerBlock = $t01316613278._3
332332 let poolRewardUpdateHeight = $t01316613278._4
333333 let $t01328313367 = getUserInterestInfo(pool, userAddrStr)
334334 let userLastInterest = $t01328313367._1
335335 let userShareTokensAmount = $t01328313367._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) = {
344344 let shareAssetId = getShareAssetId(pool)
345345 let scaleValue = calcScaleValue(SWOP, shareAssetId)
346346 let shareTokenLocked = getTotalShareTokenLocked(pool)
347347 let $t01409014155 = getLastInterestInfo(pool)
348348 let lastInterestHeight = $t01409014155._1
349349 let lastInterest = $t01409014155._2
350350 let $t01416014272 = rewardInfo(pool)
351351 let currentRewardPerBlock = $t01416014272._1
352352 let rewardUpdateHeight = $t01416014272._2
353353 let previousRewardPerBlock = $t01416014272._3
354354 let poolRewardUpdateHeight = $t01416014272._4
355355 let $t01427714361 = getUserInterestInfo(pool, userAddrStr)
356356 let userLastInterest = $t01427714361._1
357357 let userShareTokensAmount = $t01427714361._2
358358 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
359359 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
360360 let userNewInterest = currentInterest
361361 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
362362 }
363363
364364
365365 func calculateProtocolReward (pool) = {
366366 let $t01486514930 = getLastInterestInfo(pool)
367367 let lastInterestHeight = $t01486514930._1
368368 let lastInterest = $t01486514930._2
369369 let $t01493515046 = rewardInfo(pool)
370370 let currentRewardPerBlock = $t01493515046._1
371371 let rewardUpdateHeight = $t01493515046._2
372372 let previousRewardPerBlock = $t01493515046._3
373373 let poolRewardUpdateHeight = $t01493515046._4
374374 let shareTokenLocked = getTotalShareTokenLocked(pool)
375375 if (if ((shareTokenLocked == 0))
376376 then (poolRewardUpdateHeight == 0)
377377 else false)
378378 then if ((rewardUpdateHeight > height))
379379 then {
380380 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
381381 reward
382382 }
383383 else if ((lastInterestHeight > rewardUpdateHeight))
384384 then {
385385 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
386386 reward
387387 }
388388 else {
389389 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
390390 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
391391 (reward + rewardAfterLastInterestBeforeReawardUpdate)
392392 }
393393 else if (if ((shareTokenLocked == 0))
394394 then (poolRewardUpdateHeight != 0)
395395 else false)
396396 then if (if ((rewardUpdateHeight > height))
397397 then (rewardUpdateHeight == poolRewardUpdateHeight)
398398 else false)
399399 then {
400400 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
401401 reward
402402 }
403403 else if (if ((height > rewardUpdateHeight))
404404 then (rewardUpdateHeight != poolRewardUpdateHeight)
405405 else false)
406406 then {
407407 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
408408 reward
409409 }
410410 else if (if (if ((height > rewardUpdateHeight))
411411 then (rewardUpdateHeight == poolRewardUpdateHeight)
412412 else false)
413413 then (lastInterestHeight > rewardUpdateHeight)
414414 else false)
415415 then {
416416 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
417417 reward
418418 }
419419 else {
420420 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
421421 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
422422 (reward + rewardAfterLastInterestBeforeReawardUpdate)
423423 }
424424 else 0
425425 }
426426
427427
428428 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
429429 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
430430 if ((pmtAssetId == poolShareAssetId))
431431 then true
432432 else false
433433 }
434434
435435
436436 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
437437
438438
439439 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
440440
441441
442442 @Callable(i)
443443 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
444444 then throw("SWOP already initialized")
445445 else {
446446 let initAmount = 100000000000000
447447 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
448448 let SWOPid = calculateAssetId(SWOPissue)
449449 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
450450 }
451451
452452
453453
454454 @Callable(i)
455455 func initPoolShareFarming (pool) = if ((i.caller != this))
456456 then throw("Only the DApp itself can call this function")
457457 else {
458458 let $t01801618119 = rewardInfo(pool)
459459 let currentReward = $t01801618119._1
460460 let rewardUpdateHeight = $t01801618119._2
461461 let previousRewardPerBlock = $t01801618119._3
462462 let poolRewardUpdateHeight = $t01801618119._4
463463 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
464464 }
465465
466466
467467
468468 @Callable(i)
469469 func updatePoolInterest (pool) = if ((i.caller != wallet))
470470 then throw("Only the Admin itself can call this function")
471471 else if (!(isActive))
472472 then throw("DApp is inactive at this moment")
473473 else {
474474 let $t01852818664 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
475475 let userNewInterest = $t01852818664._1
476476 let currentInterest = $t01852818664._2
477477 let claimAmount = $t01852818664._3
478478 let userShareTokensAmount = $t01852818664._4
479479 let $t01866918772 = rewardInfo(pool)
480480 let currentReward = $t01866918772._1
481481 let rewardUpdateHeight = $t01866918772._2
482482 let previousRewardPerBlock = $t01866918772._3
483483 let poolRewardUpdateHeight = $t01866918772._4
484484 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
485485 }
486486
487487
488488
489489 @Callable(i)
490490 func lockShareTokens (pool) = {
491491 let userAddrStr = toString(i.caller)
492492 let $t01900619081 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
493493 let pmtAmount = $t01900619081._1
494494 let pmtAssetId = $t01900619081._2
495495 let $t01908619159 = getAssetInfo(pmtAssetId)
496496 let pmtStrAssetId = $t01908619159._1
497497 let pmtAssetName = $t01908619159._2
498498 let pmtDecimals = $t01908619159._3
499499 let $t01916419280 = claimCalc(pool, toString(i.caller), height)
500500 let userNewInterest = $t01916419280._1
501501 let currentInterest = $t01916419280._2
502502 let claimAmount = $t01916419280._3
503503 let userShareTokensAmount = $t01916419280._4
504504 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
505505 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
506506 let totalShareAmount = getTotalShareTokenLocked(pool)
507507 let totalShareAmountNew = (totalShareAmount + pmtAmount)
508508 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
509509 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
510510 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)]
511511 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
512512 then true
513513 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
514514 then throw()
515515 else if ((0 >= pmtAmount))
516516 then throw("You can't lock token")
517517 else if (!(isActive))
518518 then throw("DApp is inactive at this moment")
519519 else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
520520 then throw("Incorrect pmtAssetId")
521521 else if (if (isFirstHarvest(Address(fromBase58String(pool))))
522522 then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
523523 else false)
524524 then {
525525 let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
526526 let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
527527 let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
528528 let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
529529 let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
530530 let userShareTokenLocked = userShareTokensAmount
531531 let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
532532 then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
533533 else valueOrElse(parseInt(amountOfVoting[1]), 0)
534534 let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
535535 then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
536536 else valueOrElse(parseInt(amountPoolStract[1]), 0)
537537 let protocolReward = calculateProtocolReward(pool)
538538 if ((userPoolActiveVote != 0))
539539 then {
540540 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
541541 let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
542542 if (if ((size(amountActiveVoteUserPoolStract) > 1))
543543 then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
544544 else false)
545545 then throw("You can't share token")
546546 else if ((pmtAmount > limitShareToken))
547547 then throw(("You can't share token more than " + toString(limitShareToken)))
548548 else if ((shareToken > 0))
549549 then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
550550 then throw("Balance of share-token is greater than totalAmount")
551551 else if ((totalShareAmount == 0))
552552 then (baseEntry ++ [Reissue(SWOP, protocolReward, true), ScriptTransfer(wallet, protocolReward, SWOP)])
553553 else if ((shareToken >= pmtAmount))
554554 then baseEntry
555555 else throw(("Your maximum share token is " + toString(shareToken)))
556556 else throw("You can't share token")
557557 }
558558 else throw("Your amount of token less than 0")
559559 }
560560 else baseEntry
561561 }
562562
563563
564564
565565 @Callable(i)
566566 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
567567 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
568568 let $t02381523931 = claimCalc(pool, toString(i.caller), height)
569569 let userNewInterest = $t02381523931._1
570570 let currentInterest = $t02381523931._2
571571 let claimAmount = $t02381523931._3
572572 let userShareTokensAmount = $t02381523931._4
573573 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
574574 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
575575 let totalShareAmount = getTotalShareTokenLocked(pool)
576576 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
577577 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
578578 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
579579 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
580580 then true
581581 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
582582 then throw()
583583 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
584584 then throw("Withdraw amount more then user locked amount")
585585 else if (!(isActive))
586586 then throw("DApp is inactive at this moment")
587587 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
588588 then throw("Withdraw amount more then user locked amount")
589589 else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
590590 then throw("Balance of share-token is greater than totalAmount")
591591 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)]
592592 }
593593
594594
595595
596596 @Callable(i)
597-func egg0 (pool,users,migrationHeight) = if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598- then true
599- else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
597+func egg0 (pool,users,migrationHeight) = if (if ((pool != "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
598+ then (pool != "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8")
599+ else false)
600600 then throw()
601601 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
602602 then throw("Only admin can call this function")
603603 else {
604604 func updateUser (accum,u) = {
605605 let r = invoke(this, "egg1", [pool, u, migrationHeight], nil)
606606 if ((r == r))
607607 then accum
608608 else throw("Strict value is not equal to itself.")
609609 }
610610
611611 let $list2639726428 = users
612612 let $size2639726428 = size($list2639726428)
613613 let $acc02639726428 = nil
614614 if (($size2639726428 == 0))
615615 then $acc02639726428
616616 else {
617617 let $acc12639726428 = updateUser($acc02639726428, $list2639726428[0])
618618 if (($size2639726428 == 1))
619619 then $acc12639726428
620620 else {
621621 let $acc22639726428 = updateUser($acc12639726428, $list2639726428[1])
622622 if (($size2639726428 == 2))
623623 then $acc22639726428
624624 else {
625625 let $acc32639726428 = updateUser($acc22639726428, $list2639726428[2])
626626 if (($size2639726428 == 3))
627627 then $acc32639726428
628628 else {
629629 let $acc42639726428 = updateUser($acc32639726428, $list2639726428[3])
630630 if (($size2639726428 == 4))
631631 then $acc42639726428
632632 else {
633633 let $acc52639726428 = updateUser($acc42639726428, $list2639726428[4])
634634 if (($size2639726428 == 5))
635635 then $acc52639726428
636636 else {
637637 let $acc62639726428 = updateUser($acc52639726428, $list2639726428[5])
638638 if (($size2639726428 == 6))
639639 then $acc62639726428
640640 else {
641641 let $acc72639726428 = updateUser($acc62639726428, $list2639726428[6])
642642 if (($size2639726428 == 7))
643643 then $acc72639726428
644644 else {
645645 let $acc82639726428 = updateUser($acc72639726428, $list2639726428[7])
646646 if (($size2639726428 == 8))
647647 then $acc82639726428
648648 else {
649649 let $acc92639726428 = updateUser($acc82639726428, $list2639726428[8])
650650 if (($size2639726428 == 9))
651651 then $acc92639726428
652652 else {
653653 let $acc102639726428 = updateUser($acc92639726428, $list2639726428[9])
654654 if (($size2639726428 == 10))
655655 then $acc102639726428
656656 else {
657657 let $acc112639726428 = updateUser($acc102639726428, $list2639726428[10])
658658 if (($size2639726428 == 11))
659659 then $acc112639726428
660660 else {
661661 let $acc122639726428 = updateUser($acc112639726428, $list2639726428[11])
662662 if (($size2639726428 == 12))
663663 then $acc122639726428
664664 else {
665665 let $acc132639726428 = updateUser($acc122639726428, $list2639726428[12])
666666 throw("List size exceed 12")
667667 }
668668 }
669669 }
670670 }
671671 }
672672 }
673673 }
674674 }
675675 }
676676 }
677677 }
678678 }
679679 }
680680 }
681681
682682
683683
684684 @Callable(i)
685685 func egg1 (pool,u,migrationHeight) = if ((i.caller != this))
686686 then throw("Only contract itself can invoke this function")
687687 else {
688688 let shareTokenMultiplyer = 1000
689689 let $t02663926751 = claimCalc(pool, u, migrationHeight)
690690 let userNewInterest = $t02663926751._1
691691 let currentInterest = $t02663926751._2
692692 let claimAmount = $t02663926751._3
693693 let userShareTokensAmount = $t02663926751._4
694694 let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
695695 let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
696696 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
697697 let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
698698 let totalAmountNewShareTokenLocked = valueOrElse(getInteger(this, ((pool + "_") + "tansl")), 0)
699699 [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))]
700700 }
701701
702702
703703
704704 @Callable(i)
705705 func updateTotalShareTokensLocked (pool,migrationHeight) = if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, admStaking], i.callerPublicKey)))
706706 then throw("Only admin can call this function")
707707 else {
708708 let shareTokenMultiplyer = 1000
709709 let totalAmountShareTokensLockedBefore = (getIntegerValue(this, (pool + keyShareTokensLocked)) * 1000)
710710 let totalAmountShareTokensLockedNew = getIntegerValue(this, ((pool + "_") + "tansl"))
711711 if ((totalAmountShareTokensLockedBefore != totalAmountShareTokensLockedNew))
712712 then throw("New total amount share tockens != old total amount")
713713 else [IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), migrationHeight), IntegerEntry((pool + keyShareTokensLocked), totalAmountShareTokensLockedNew), DeleteEntry(((pool + "_") + "tansl"))]
714714 }
715715
716716
717717
718718 @Callable(i)
719719 func claim (pool) = {
720720 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
721721 let shareTokenLocked = getTotalShareTokenLocked(pool)
722722 let $t02881528880 = getLastInterestInfo(pool)
723723 let lastInterestHeight = $t02881528880._1
724724 let lastInterest = $t02881528880._2
725725 let $t02888528997 = rewardInfo(pool)
726726 let currentRewardPerBlock = $t02888528997._1
727727 let rewardUpdateHeight = $t02888528997._2
728728 let previousRewardPerBlock = $t02888528997._3
729729 let poolRewardUpdateHeight = $t02888528997._4
730730 let $t02900229118 = claimCalc(pool, toString(i.caller), height)
731731 let userNewInterest = $t02900229118._1
732732 let currentInterest = $t02900229118._2
733733 let claimAmount = $t02900229118._3
734734 let userShareTokensAmount = $t02900229118._4
735735 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
736736 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
737737 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
738738 if (if ((pool == "3Mx6wBFzPJG2hUWNLy2mei8ZHbtmRZ6JJTG"))
739739 then true
740740 else (pool == "3Mrwe8BMFXLVdGcBhdf3T9YNUnrUEMHkDA8"))
741741 then throw()
742742 else if ((availableFund == 0))
743743 then throw("You have 0 available SWOP")
744744 else if (!(isActive))
745745 then throw("DApp is inactive at this moment")
746746 else if ((availableFund == 0))
747747 then throw("You have 0 available SWOP")
748748 else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
749749 then throw("Balance of share-token is greater than totalAmount")
750750 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)]
751751 }
752752
753753
754754
755755 @Callable(i)
756756 func shutdown () = if (!(isActive))
757757 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
758758 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
759759 then throw("Only admin can call this function")
760760 else suspend("Paused by admin")
761761
762762
763763
764764 @Callable(i)
765765 func activate () = if (isActive)
766766 then throw("DApp is already active")
767767 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
768768 then throw("Only admin can call this function")
769769 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
770770
771771
772772 @Verifier(tx)
773773 func verify () = match tx {
774774 case inv: InvokeScriptTransaction =>
775775 let callEgg1 = if ((inv.dApp == this))
776776 then (inv.function == "egg1")
777777 else false
778778 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
779779 then true
780780 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
781781 then true
782782 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
783783 then true
784784 else sigVerify(tx.bodyBytes, tx.proofs[0], admStaking)
785785 if (callEgg1)
786786 then signedByAdmin
787787 else false
788788 case _ =>
789789 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
790790 then 1
791791 else 0
792792 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
793793 then 1
794794 else 0
795795 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
796796 then 1
797797 else 0
798798 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
799799 }
800800

github/deemru/w8io/169f3d6 
81.91 ms