tx · C8tDX5oeS4w1uzPjSvbqFcp4PYwqqkrvmgMmvuo7fnHD

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.09.08 17:23 [1694189] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "C8tDX5oeS4w1uzPjSvbqFcp4PYwqqkrvmgMmvuo7fnHD", "fee": 1400000, "feeAssetId": null, "timestamp": 1631111064923, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "5JdPEFaKbRpmJz8mPuF5aWJmGYqKeFwkfFECRDiGjFrdNho3fp3kphwVEQZh4eXUefRRGEP8aBLivFYitABp1654", "52j4pgSAf8zz5ZZCFiS3MpiYGwMxmXCZjGf8jYjRCw9tQMrahQJfKLRmUny68SsxnJXoii1kMSZ35umTqest2X5C" ], "script": "base64:AAIFAAAAAAAAE7UIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgQKAggYEgQKAggIEgMKAQgSABIAGhoKAmExEhRrZXlTaGFyZVRva2Vuc0xvY2tlZBoRCgJhMhILa1NoYXJlTGltaXQaDwoCYTMSCWtleUFjdGl2ZRoOCgJhNBIIa2V5Q2F1c2UaIgoCYTUSHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaIwoCYTYSHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzGhsKAmE3EhVrZXlIZWlnaHRQb29sRnJhY3Rpb24aIwoCYTgSHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiQKAmE5Eh5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaGwoCYjESFWtleVJld2FyZFVwZGF0ZUhlaWdodBoVCgJiMhIPa2V5TGFzdEludGVyZXN0GhsKAmIzEhVrZXlMYXN0SW50ZXJlc3RIZWlnaHQaHgoCYjQSGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZBoZCgJiNRITa2V5VXNlckxhc3RJbnRlcmVzdBoPCgJiNhIJa2V5U1dPUGlkGh4KAmI3EhhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQaIgoCYjgSHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQaFgoCYjkSEGtleUF2YWlsYWJsZVNXT1AaGwoCYzESFWtleUZhcm1pbmdTdGFydEhlaWdodBoMCgJjMhIGa2V5QVBZGhwKAmMzEhZrUHJldmlvdXNUb3RhbFZvdGVTV09QGhkKAmM0EhNrZXlTd29wWWVhckVtaXNzaW9uGhUKAmM1Eg9rZXlCYWxhbmNlY3BtbUEaFQoCYzYSD2tleUJhbGFuY2VjcG1tQhonCgJjNxIha0hhcnZlc3RQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGisKAmM4EiVrSGFydmVzdFVzZXJQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nGh8KAmM5EhlrZXlMaW1pdFNoYXJlRmlyc3RIYXJ2ZXN0GhEKAmQxEgtrZXlBc3NldElkQRoRCgJkMhILa2V5QXNzZXRJZEIaGwoCZDMSFWtleUZpcnN0SGFydmVzdEhlaWdodBoZCgJkNBITa2V5Zmlyc3RIYXJ2ZXN0Q3BtbRoUCgJkNRIOa2V5VGVtcFByZXZTdW0aEwoCZDYSDWtleVRlbXBDdXJTdW0aFwoCZDcSEWdvdmVybmFuY2VBZGRyZXNzGgwKAmQ4EgZ3YWxsZXQaEwoCZDkSDXZvdGluZ0FkZHJlc3MaIgoCZTESHGFkbWluSW5jcmVhc2VJbnRlcmVzdEFkZHJlc3MaFAoCZTISDm9uZVdlZWtJbkJsb2NrGhQKAmUzEg50b3RhbFZvdGVTaGFyZRoRCgJlNBILc2NhbGVWYWx1ZTEaEQoCZTUSC3NjYWxlVmFsdWUzGhEKAmU2EgtzY2FsZVZhbHVlNRoRCgJlNxILc2NhbGVWYWx1ZTYaEQoCZTgSC3NjYWxlVmFsdWU4GhIKAmU5EgxzY2FsZVZhbHVlMTEaFQoCZjESD2tleUFkbWluUHViS2V5MRoVCgJmMhIPa2V5QWRtaW5QdWJLZXkyGhUKAmYzEg9rZXlBZG1pblB1YktleTMaDAoCZjQSBm9yYWNsZRoRCgJmNRILZ2V0QWRtaW5QdWIaEQoCZjYSC2tleUFkbWluUHViGg0KAmY3EgckbWF0Y2gwGgwKAmY4EgZzdHJpbmcaDQoCZjkSB25vdGhpbmcaEgoCZzESDGFkbWluUHViS2V5MRoSCgJnMhIMYWRtaW5QdWJLZXkyGhIKAmczEgxhZG1pblB1YktleTMaEQoCZzQSC3N0ckFzc2V0SWRBGgoKAmc1EgRwb29sGhEKAmc2EgtzdHJBc3NldElkQhoOCgJnNxIIYXNzZXRJZEEaDgoCZzgSCGFzc2V0SWRCGhEKAmc5EgtrQmFzZVBlcmlvZBoTCgJoMRINa1BlcmlvZExlbmd0aBoSCgJoMhIMa1N0YXJ0SGVpZ2h0GhkKAmgzEhNrRmlyc3RIYXJ2ZXN0SGVpZ2h0GhwKAmg0EhZrRHVyYXRpb25GdWxsVm90ZVBvd2VyGhMKAmg1Eg1rTWluVm90ZVBvd2VyGhAKAmg2EgpiYXNlUGVyaW9kGhEKAmg3EgtzdGFydEhlaWdodBoSCgJoOBIMcGVyaW9kTGVuZ3RoGhsKAmg5EhVkdXJhdGlvbkZ1bGxWb3RlUG93ZXIaEgoCaTESDG1pblZvdGVQb3dlchoOCgJpMhIIaXNBY3RpdmUaEAoCaTMSCmN1cnJQZXJpb2QaEwoCaTQSDWdldExpbWl0VG9rZW4aCQoCaTUSA0FQWRoWCgJpNhIQU3dvcFllYXJFbWlzc2lvbhoQCgJpNxIKYXNzZXROYW1lQRoICgJpOBICaWQaCwoCaTkSBXdhdmVzGhAKAmoxEgphc3NldE5hbWVCGgoKAmoyEgRTV09QGhQKAmozEg5pc0ZpcnN0SGFydmVzdBobCgJqNBIVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0GhEKAmo1EgtnZXRCYWxhbmNlQRoRCgJqNhILZ2V0QmFsYW5jZUIaGAoCajcSEmdldFNoYXJlTGltaXRUb2tlbhoeCgJqOBIYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkGhUKAmo5Eg9nZXRTaGFyZUFzc2V0SWQaFAoCazESDmFjY291bnRCYWxhbmNlGg0KAmsyEgdhc3NldElkGhIKAmszEgxnZXRBc3NldEluZm8aDgoCazQSCHN0cmluZ0lkGgoKAms1EgRpbmZvGhQKAms2Eg5jYWxjU2NhbGVWYWx1ZRoOCgJrNxIIYXNzZXRJZDEaDgoCazgSCGFzc2V0SWQyGhYKAms5EhBhc3NldElkMURlY2ltYWxzGhYKAmwxEhBhc3NldElkMkRlY2ltYWxzGhEKAmwyEgtzY2FsZURpZ2l0cxoXCgJsMxIRdXNlckF2YWlsYWJsZVNXT1AaCgoCbDQSBHVzZXIaEAoCbDUSCnJld2FyZEluZm8aIAoCbDYSGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50GiEKAmw3Eht0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMaHwoCbDgSGXJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQaGAoCbDkSEnJld2FyZFVwZGF0ZUhlaWdodBocCgJtMRIWcG9vbFJld2FyZFVwZGF0ZUhlaWdodBogCgJtMhIacmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMaFwoCbTMSEXJld2FyZFBvb2xDdXJyZW50GhgKAm00EhJyZXdhcmRQb29sUHJldmlvdXMaGQoCbTUSE2dldExhc3RJbnRlcmVzdEluZm8aEgoCbTYSDGxhc3RJbnRlcmVzdBoYCgJtNxISbGFzdEludGVyZXN0SGVpZ2h0GhkKAm04EhNnZXRVc2VySW50ZXJlc3RJbmZvGhEKAm05Egt1c2VyQWRkclN0choWCgJuMRIQdXNlckxhc3RJbnRlcmVzdBoPCgJuMhIJdXNlclNoYXJlGhsKAm4zEhV1c2VyTGFzdEludGVyZXN0VmFsdWUaGwoCbjQSFXVzZXJTaGFyZVRva2Vuc0Ftb3VudBoSCgJuNRIMY2FsY0ludGVyZXN0GhsKAm42EhVjdXJyZW50UmV3YXJkUGVyQmxvY2saFgoCbjcSEHNoYXJlVG9rZW5Mb2NrZWQaHAoCbjgSFnByZXZpb3VzUmV3YXJkUGVyQmxvY2saEAoCbjkSCnNjYWxlVmFsdWUaBwoCbzESAWgaDAoCbzISBnJld2FyZBowCgJvMxIqcmV3YXJkQWZ0ZXJMYXN0SW50ZXJlc3RCZWZvcmVSZWF3YXJkVXBkYXRlGhkKAm80EhNpbnRlcmVzdEFmdGVyVXBkYXRlGg8KAm81EgljbGFpbUNhbGMaEgoCbzYSDHNoYXJlQXNzZXRJZBoTCgJvNxINJHQwMTMzNDQxMzQwORoTCgJvOBINJHQwMTM0MTQxMzUyNhoTCgJvORINJHQwMTM1MzExMzYxNRoVCgJwMRIPY3VycmVudEludGVyZXN0GhEKAnAyEgtjbGFpbUFtb3VudBoVCgJwMxIPdXNlck5ld0ludGVyZXN0GhsKAnA0EhVjbGFpbUNhbGNGb3JNaWdyYXRpb24aEwoCcDUSDSR0MDE0MzM4MTQ0MDMaEwoCcDYSDSR0MDE0NDA4MTQ1MjAaEwoCcDcSDSR0MDE0NTI1MTQ2MDkaHQoCcDgSF2NhbGN1bGF0ZVByb3RvY29sUmV3YXJkGhMKAnA5Eg0kdDAxNTExMzE1MTc4GhMKAnExEg0kdDAxNTE4MzE1Mjk0GhwKAnEyEhZjaGVja1BtdEFzc2V0SWRDb3JyZWN0GhAKAnEzEgpwbXRBc3NldElkGhYKAnE0EhBwb29sU2hhcmVBc3NldElkGh4KAnE1EhhnZXRVc2VyU1dPUENsYWltZWRBbW91bnQaDQoCcTYSB3N1c3BlbmQaCwoCcTcSBWNhdXNlGgcKAnE4EgFpGg0KAnE5EgdlYXJseUxQGhAKAnIxEgppbml0QW1vdW50Gg8KAnIyEglTV09QaXNzdWUaDAoCcjMSBlNXT1BpZBoTCgJyNBINJHQwMTgyNjQxODM2NxoTCgJyNRINY3VycmVudFJld2FyZBoTCgJyNhINJHQwMTg3NzYxODkxMhoTCgJyNxINJHQwMTg5MTcxOTAyMBoTCgJyOBINJHQwMTkyNTQxOTMyORoPCgJyORIJcG10QW1vdW50GhMKAnMxEg0kdDAxOTMzNDE5NDA3GhMKAnMyEg1wbXRTdHJBc3NldElkGhIKAnMzEgxwbXRBc3NldE5hbWUaEQoCczQSC3BtdERlY2ltYWxzGhMKAnM1Eg0kdDAxOTQxMjE5NTI4GhgKAnM2EhJ1c2VyU2hhcmVBbW91bnROZXcaFwoCczcSEWF2YWlsYWJsZUZ1bmRzTmV3GhYKAnM4EhB0b3RhbFNoYXJlQW1vdW50GhkKAnM5EhN0b3RhbFNoYXJlQW1vdW50TmV3GhcKAnQxEhF1c2VyQ2xhaW1lZEFtb3VudBoaCgJ0MhIUdXNlckNsYWltZWRBbW91bnROZXcaDwoCdDMSCWJhc2VFbnRyeRoTCgJ0NBINaGFydmVzdFBlcmlvZBoUCgJ0NRIOYW1vdW50T2ZWb3RpbmcaFgoCdDYSEGFtb3VudFBvb2xTdHJhY3QaJAoCdDcSHmFtb3VudEFjdGl2ZVZvdGVVc2VyUG9vbFN0cmFjdBogCgJ0OBIaYW1vdW50UG9vbEFjdGl2ZVZvdGVTdHJhY3QaGgoCdDkSFHVzZXJTaGFyZVRva2VuTG9ja2VkGhgKAnUxEhJ1c2VyUG9vbEFjdGl2ZVZvdGUaFAoCdTISDnBvb2xBY3RpdmVWb3RlGhQKAnUzEg5wcm90b2NvbFJld2FyZBoVCgJ1NBIPbGltaXRTaGFyZVRva2VuGhAKAnU1EgpzaGFyZVRva2VuGh8KAnU2EhlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50GhMKAnU3Eg1zaGFyZVRva2Vuc0lkGhMKAnU4Eg0kdDAyMzk0NDI0MDYwGgsKAnU5EgV1c2VycxoQCgJ2MRIKdXBkYXRlVXNlchoLCgJ2MhIFYWNjdW0aBwoCdjMSAXUaBwoCdjQSAXIaFQoCdjUSDyRsaXN0MjYxMTkyNjE1MBoVCgJ2NhIPJHNpemUyNjExOTI2MTUwGhUKAnY3Eg8kYWNjMDI2MTE5MjYxNTAaFQoCdjgSDyRhY2MxMjYxMTkyNjE1MBoVCgJ2ORIPJGFjYzIyNjExOTI2MTUwGhUKAncxEg8kYWNjMzI2MTE5MjYxNTAaFQoCdzISDyRhY2M0MjYxMTkyNjE1MBoVCgJ3MxIPJGFjYzUyNjExOTI2MTUwGhUKAnc0Eg8kYWNjNjI2MTE5MjYxNTAaFQoCdzUSDyRhY2M3MjYxMTkyNjE1MBoVCgJ3NhIPJGFjYzgyNjExOTI2MTUwGhUKAnc3Eg8kYWNjOTI2MTE5MjYxNTAaFgoCdzgSECRhY2MxMDI2MTE5MjYxNTAaFgoCdzkSECRhY2MxMTI2MTE5MjYxNTAaFgoCeDESECRhY2MxMjI2MTE5MjYxNTAaFgoCeDISECRhY2MxMzI2MTE5MjYxNTAaFQoCeDMSD21pZ3JhdGlvbkhlaWdodBoaCgJ4NBIUc2hhcmVUb2tlbk11bHRpcGx5ZXIaEwoCeDUSDSR0MDI2MzIzMjY0MzUaHgoCeDYSGHVzZXJTaGFyZVRva2Vuc0Ftb3VudE5ldxoTCgJ4NxINJHQwMjc0MjAyNzQ4NRoTCgJ4OBINJHQwMjc0OTAyNzYwMhoTCgJ4ORINJHQwMjc2MDcyNzcyMxoTCgJ5MRINYXZhaWxhYmxlRnVuZBoICgJ5MhICdHgaDAoCeTMSBnZlcmlmeRoYCgJ5NBISYWRtaW5QdWJLZXkxU2lnbmVkGhgKAnk1EhJhZG1pblB1YktleTJTaWduZWQaGAoCeTYSEmFkbWluUHViS2V5M1NpZ25lZAAAAGEAAAAAAmExAgAAABpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAAAAAACYTICAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmEzAgAAAAZhY3RpdmUAAAAAAmE0AgAAAA5zaHV0ZG93bl9jYXVzZQAAAAACYTUCAAAAHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJhNgIAAAAeX3ByZXZpb3VzX3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAAJhNwIAAAAaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmE4AgAAAB50b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX2N1cnJlbnQAAAAAAmE5AgAAAB90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzAAAAAAJiMQIAAAAUcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAAmIyAgAAAA5fbGFzdF9pbnRlcmVzdAAAAAACYjMCAAAAFV9sYXN0X2ludGVyZXN0X2hlaWdodAAAAAACYjQCAAAAFF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAJiNQIAAAAOX2xhc3RfaW50ZXJlc3QAAAAAAmI2AgAAAAdTV09QX2lkAAAAAAJiNwIAAAAUX1NXT1BfY2xhaW1lZF9hbW91bnQAAAAAAmI4AgAAABlfU1dPUF9sYXN0X2NsYWltZWRfYW1vdW50AAAAAAJiOQIAAAAPX2F2YWlsYWJsZV9TV09QAAAAAAJjMQIAAAAUZmFybWluZ19zdGFydF9oZWlnaHQAAAAAAmMyAgAAAANhcHkAAAAAAmMzAgAAABhwcmV2aW91c190b3RhbF92b3RlX1NXT1AAAAAAAmM0AgAAABJzd29wX3llYXJfZW1pc3Npb24AAAAAAmM1AgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAAmM2AgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAAmM3AgAAAB5faGFydmVzdF9wb29sX2FjdGl2ZVZvdGVfc3RydWMAAAAAAmM4AgAAACNfaGFydmVzdF91c2VyX3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAACYzkCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAAmQxAgAAAApBX2Fzc2V0X2lkAAAAAAJkMgIAAAAKQl9hc3NldF9pZAAAAAACZDMCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAJkNAIAAAANZmlyc3RfaGFydmVzdAAAAAACZDUCAAAAE3N1bV9yZXdhcmRfcHJldmlvdXMAAAAAAmQ2AgAAABJzdW1fcmV3YXJkX2N1cnJlbnQAAAAAAmQ3CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUqvpp3oH0E1KFyj8uOohRsxnqmBxZ8g0tAAAAAAJkOAkBAAAAB0FkZHJlc3MAAAABAQAAABoBVN89S5eJWFneFeDkUQtW3T16X721f4UhiQAAAAACZDkJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVQaNn7fV6KdJ2lc/r/3JtTn+6HDaD4gyn8AAAAAAmUxCQEAAAAHQWRkcmVzcwAAAAEB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AAEDCQAAAAAAAAIFAAAAAnY2AAAAAAAAAAACBQAAAAJ2OQQAAAACdzEJAQAAAAJ2MQAAAAIFAAAAAnY5CQABkQAAAAIFAAAAAnY1AAAAAAAAAAACAwkAAAAAAAACBQAAAAJ2NgAAAAAAAAAAAwUAAAACdzEEAAAAAncyCQEAAAACdjEAAAACBQAAAAJ3MQkAAZEAAAACBQAAAAJ2NQAAAAAAAAAAAwMJAAAAAAAAAgUAAAACdjYAAAAAAAAAAAQFAAAAAncyBAAAAAJ3MwkBAAAAAnYxAAAAAgUAAAACdzIJAAGRAAAAAgUAAAACdjUAAAAAAAAAAAQDCQAAAAAAAAIFAAAAAnY2AAAAAAAAAAAFBQAAAAJ3MwQAAAACdzQJAQAAAAJ2MQAAAAIFAAAAAnczCQABkQAAAAIFAAAAAnY1AAAAAAAAAAAFAwkAAAAAAAACBQAAAAJ2NgAAAAAAAAAABgUAAAACdzQEAAAAAnc1CQEAAAACdjEAAAACBQAAAAJ3NAkAAZEAAAACBQAAAAJ2NQAAAAAAAAAABgMJAAAAAAAAAgUAAAACdjYAAAAAAAAAAAcFAAAAAnc1BAAAAAJ3NgkBAAAAAnYxAAAAAgUAAAACdzUJAAGRAAAAAgUAAAACdjUAAAAAAAAAAAcDCQAAAAAAAAIFAAAAAnY2AAAAAAAAAAAIBQAAAAJ3NgQAAAACdzcJAQAAAAJ2MQAAAAIFAAAAAnc2CQABkQAAAAIFAAAAAnY1AAAAAAAAAAAIAwkAAAAAAAACBQAAAAJ2NgAAAAAAAAAACQUAAAACdzcEAAAAAnc4CQEAAAACdjEAAAACBQAAAAJ3NwkAAZEAAAACBQAAAAJ2NQAAAAAAAAAACQMJAAAAAAAAAgUAAAACdjYAAAAAAAAAAAoFAAAAAnc4BAAAAAJ3OQkBAAAAAnYxAAAAAgUAAAACdzgJAAGRAAAAAgUAAAACdjUAAAAAAAAAAAoDCQAAAAAAAAIFAAAAAnY2AAAAAAAAAAALBQAAAAJ3OQQAAAACeDEJAQAAAAJ2MQAAAAIFAAAAAnc5CQABkQAAAAIFAAAAAnY1AAAAAAAAAAALAwkAAAAAAAACBQAAAAJ2NgAAAAAAAAAADAUAAAACeDEEAAAAAngyCQEAAAACdjEAAAACBQAAAAJ4MQkAAZEAAAACBQAAAAJ2NQAAAAAA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", "height": 1694189, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Gma856u81KGUGMFxqyCDd5BUm29bTUJSnkC28DcYFkk4 Next: 7oevs9tJzSVF8f3yh7xbMQVwWcWtHhDeRmXg54hghRC5 Diff:
OldNewDifferences
683683
684684 @Callable(i)
685685 func egg1 (pool,u) = {
686- let migrationHeight = 1694125
686+ let migrationHeight = 1694115
687687 let shareTokenMultiplyer = 1000
688688 let $t02632326435 = claimCalc(pool, u, migrationHeight)
689689 let userNewInterest = $t02632326435._1
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyShareTokensLocked = "_total_share_tokens_locked"
55
66 let kShareLimit = "share_limit_on_first_harvest"
77
88 let keyActive = "active"
99
1010 let keyCause = "shutdown_cause"
1111
1212 let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
1313
1414 let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
1515
1616 let keyHeightPoolFraction = "_pool_reward_update_height"
1717
1818 let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
1919
2020 let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
2121
2222 let keyRewardUpdateHeight = "reward_update_height"
2323
2424 let keyLastInterest = "_last_interest"
2525
2626 let keyLastInterestHeight = "_last_interest_height"
2727
2828 let keyUserShareTokensLocked = "_share_tokens_locked"
2929
3030 let keyUserLastInterest = "_last_interest"
3131
3232 let keySWOPid = "SWOP_id"
3333
3434 let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
3535
3636 let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
3737
3838 let keyAvailableSWOP = "_available_SWOP"
3939
4040 let keyFarmingStartHeight = "farming_start_height"
4141
4242 let keyAPY = "apy"
4343
4444 let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
4545
4646 let keySwopYearEmission = "swop_year_emission"
4747
4848 let keyBalancecpmmA = "A_asset_balance"
4949
5050 let keyBalancecpmmB = "B_asset_balance"
5151
5252 let kHarvestPoolActiveVoteStrucVoting = "_harvest_pool_activeVote_struc"
5353
5454 let kHarvestUserPoolActiveVoteStrucVoting = "_harvest_user_pool_activeVote_struc"
5555
5656 let keyLimitShareFirstHarvest = "share_limit_on_first_harvest"
5757
5858 let keyAssetIdA = "A_asset_id"
5959
6060 let keyAssetIdB = "B_asset_id"
6161
6262 let keyFirstHarvestHeight = "first_harvest_height"
6363
6464 let keyfirstHarvestCpmm = "first_harvest"
6565
6666 let keyTempPrevSum = "sum_reward_previous"
6767
6868 let keyTempCurSum = "sum_reward_current"
6969
7070 let governanceAddress = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
7171
7272 let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7373
7474 let votingAddress = Address(base58'3MrJgdL1GniipErHy44YF9idzLaUL2iX5DQ')
7575
7676 let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
7777
7878 let oneWeekInBlock = 10106
7979
8080 let totalVoteShare = 10000000000
8181
8282 let scaleValue1 = 10
8383
8484 let scaleValue3 = 1000
8585
8686 let scaleValue5 = 100000
8787
8888 let scaleValue6 = 1000000
8989
9090 let scaleValue8 = 100000000
9191
9292 let scaleValue11 = 100000000000
9393
9494 let keyAdminPubKey1 = "admin_pub_1"
9595
9696 let keyAdminPubKey2 = "admin_pub_2"
9797
9898 let keyAdminPubKey3 = "admin_pub_3"
9999
100100 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
101101
102102 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
103103 case string: String =>
104104 fromBase58String(string)
105105 case nothing =>
106106 throw("Admin public key is empty")
107107 }
108108
109109
110110 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
111111
112112 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
113113
114114 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
115115
116116 func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
117117
118118
119119 func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
120120
121121
122122 func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
123123 then unit
124124 else fromBase58String(strAssetIdA(pool))
125125
126126
127127 func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
128128 then unit
129129 else fromBase58String(strAssetIdB(pool))
130130
131131
132132 let kBasePeriod = "base_period"
133133
134134 let kPeriodLength = "period_length"
135135
136136 let kStartHeight = "start_height"
137137
138138 let kFirstHarvestHeight = "first_harvest_height"
139139
140140 let kDurationFullVotePower = "duration_full_vote_power"
141141
142142 let kMinVotePower = "min_vote_power"
143143
144144 let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
145145
146146 let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
147147
148148 let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
149149
150150 let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
151151
152152 let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
153153
154154 let isActive = getBooleanValue(this, keyActive)
155155
156156 let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
157157
158158 func getLimitToken (pool) = valueOrElse(getIntegerValue(pool, keyLimitShareFirstHarvest), 0)
159159
160160
161161 let APY = getIntegerValue(this, keyAPY)
162162
163163 let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
164164
165165 func assetNameA (pool) = match assetIdA(pool) {
166166 case id: ByteVector =>
167167 value(assetInfo(id)).name
168168 case waves: Unit =>
169169 "WAVES"
170170 case _ =>
171171 throw("Match error")
172172 }
173173
174174
175175 func assetNameB (pool) = match assetIdB(pool) {
176176 case id: ByteVector =>
177177 value(assetInfo(id)).name
178178 case waves: Unit =>
179179 "WAVES"
180180 case _ =>
181181 throw("Match error")
182182 }
183183
184184
185185 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
186186
187187 func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
188188
189189
190190 func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
191191
192192
193193 func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
194194
195195
196196 func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
197197
198198
199199 func getShareLimitToken (pool) = valueOrErrorMessage(getInteger(pool, kShareLimit), ("No data on the key: " + kShareLimit))
200200
201201
202202 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
203203
204204
205205 func getShareAssetId (pool) = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
206206
207207
208208 func accountBalance (assetId) = match assetId {
209209 case id: ByteVector =>
210210 assetBalance(this, id)
211211 case waves: Unit =>
212212 wavesBalance(this).available
213213 case _ =>
214214 throw("Match error")
215215 }
216216
217217
218218 func getAssetInfo (assetId) = match assetId {
219219 case id: ByteVector =>
220220 let stringId = toBase58String(id)
221221 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
222222 $Tuple3(stringId, info.name, info.decimals)
223223 case waves: Unit =>
224224 $Tuple3("WAVES", "WAVES", 8)
225225 case _ =>
226226 throw("Match error")
227227 }
228228
229229
230230 func calcScaleValue (assetId1,assetId2) = {
231231 let assetId1Decimals = value(assetInfo(assetId1)).decimals
232232 let assetId2Decimals = value(assetInfo(assetId2)).decimals
233233 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
234234 pow(10, 0, scaleDigits, 0, 0, FLOOR)
235235 }
236236
237237
238238 func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyAvailableSWOP)), 0)
239239
240240
241241 func rewardInfo (pool) = {
242242 let totalRewardPerBlockCurrent = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockCurrent), ((("No data on the key: " + keyTotalRewardPerBlockCurrent) + " at address ") + toString(governanceAddress)))
243243 let totalRewardPerBlockPrevious = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockPrevious), ((("No data on the key: " + keyTotalRewardPerBlockPrevious) + " at address ") + toString(governanceAddress)))
244244 let rewardPoolFractionCurrent = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionCurrent)), (((("No data on the key: " + pool) + keyRewardPoolFractionCurrent) + " at address ") + toString(governanceAddress)))
245245 let rewardUpdateHeight = valueOrErrorMessage(getInteger(governanceAddress, keyRewardUpdateHeight), ((("No data on the key: " + keyRewardUpdateHeight) + " at address ") + toString(governanceAddress)))
246246 let poolRewardUpdateHeight = valueOrElse(getInteger(governanceAddress, (pool + keyHeightPoolFraction)), 0)
247247 let rewardPoolFractionPrevious = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionPrevious)), (((("No data on the key: " + pool) + keyRewardPoolFractionPrevious) + " at address ") + toString(governanceAddress)))
248248 let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
249249 let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
250250 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
251251 then true
252252 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
253253 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
254254 else $Tuple4(rewardPoolCurrent, rewardUpdateHeight, rewardPoolPrevious, poolRewardUpdateHeight)
255255 }
256256
257257
258258 func getLastInterestInfo (pool) = {
259259 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
260260 let lastInterestHeight = valueOrElse(getInteger(this, (pool + keyLastInterestHeight)), height)
261261 $Tuple2(lastInterestHeight, lastInterest)
262262 }
263263
264264
265265 func getUserInterestInfo (pool,userAddrStr) = {
266266 let userLastInterest = getInteger(this, (((pool + "_") + userAddrStr) + keyUserLastInterest))
267267 let userShare = getInteger(this, (((pool + "_") + userAddrStr) + keyUserShareTokensLocked))
268268 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
269269 let userLastInterestValue = match userLastInterest {
270270 case userLastInterest: Int =>
271271 userLastInterest
272272 case _ =>
273273 lastInterest
274274 }
275275 let userShareTokensAmount = match userShare {
276276 case userShare: Int =>
277277 userShare
278278 case _ =>
279279 0
280280 }
281281 $Tuple2(userLastInterestValue, userShareTokensAmount)
282282 }
283283
284284
285285 func calcInterest (lastInterestHeight,rewardUpdateHeight,poolRewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,scaleValue,h) = if ((shareTokenLocked == 0))
286286 then 0
287287 else if ((poolRewardUpdateHeight != 0))
288288 then if (if ((rewardUpdateHeight > h))
289289 then (rewardUpdateHeight == poolRewardUpdateHeight)
290290 else false)
291291 then {
292292 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
293293 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
294294 }
295295 else if (if ((h > rewardUpdateHeight))
296296 then (rewardUpdateHeight != poolRewardUpdateHeight)
297297 else false)
298298 then {
299299 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
300300 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
301301 }
302302 else if (if (if ((h > rewardUpdateHeight))
303303 then (rewardUpdateHeight == poolRewardUpdateHeight)
304304 else false)
305305 then (lastInterestHeight > rewardUpdateHeight)
306306 else false)
307307 then {
308308 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
309309 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
310310 }
311311 else {
312312 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
313313 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
314314 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
315315 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
316316 }
317317 else if ((rewardUpdateHeight > h))
318318 then {
319319 let reward = (previousRewardPerBlock * (h - lastInterestHeight))
320320 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
321321 }
322322 else if ((lastInterestHeight > rewardUpdateHeight))
323323 then {
324324 let reward = (currentRewardPerBlock * (h - lastInterestHeight))
325325 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
326326 }
327327 else {
328328 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
329329 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
330330 let reward = (currentRewardPerBlock * (h - rewardUpdateHeight))
331331 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
332332 }
333333
334334
335335 func claimCalc (pool,userAddrStr,h) = {
336336 let shareAssetId = getShareAssetId(pool)
337337 let scaleValue = calcScaleValue(SWOP, shareAssetId)
338338 let shareTokenLocked = getTotalShareTokenLocked(pool)
339339 let $t01334413409 = getLastInterestInfo(pool)
340340 let lastInterestHeight = $t01334413409._1
341341 let lastInterest = $t01334413409._2
342342 let $t01341413526 = rewardInfo(pool)
343343 let currentRewardPerBlock = $t01341413526._1
344344 let rewardUpdateHeight = $t01341413526._2
345345 let previousRewardPerBlock = $t01341413526._3
346346 let poolRewardUpdateHeight = $t01341413526._4
347347 let $t01353113615 = getUserInterestInfo(pool, userAddrStr)
348348 let userLastInterest = $t01353113615._1
349349 let userShareTokensAmount = $t01353113615._2
350350 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
351351 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
352352 let userNewInterest = currentInterest
353353 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
354354 }
355355
356356
357357 func claimCalcForMigration (pool,userAddrStr,h) = {
358358 let shareAssetId = getShareAssetId(pool)
359359 let scaleValue = calcScaleValue(SWOP, shareAssetId)
360360 let shareTokenLocked = getTotalShareTokenLocked(pool)
361361 let $t01433814403 = getLastInterestInfo(pool)
362362 let lastInterestHeight = $t01433814403._1
363363 let lastInterest = $t01433814403._2
364364 let $t01440814520 = rewardInfo(pool)
365365 let currentRewardPerBlock = $t01440814520._1
366366 let rewardUpdateHeight = $t01440814520._2
367367 let previousRewardPerBlock = $t01440814520._3
368368 let poolRewardUpdateHeight = $t01440814520._4
369369 let $t01452514609 = getUserInterestInfo(pool, userAddrStr)
370370 let userLastInterest = $t01452514609._1
371371 let userShareTokensAmount = $t01452514609._2
372372 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, scaleValue, h)
373373 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
374374 let userNewInterest = currentInterest
375375 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
376376 }
377377
378378
379379 func calculateProtocolReward (pool) = {
380380 let $t01511315178 = getLastInterestInfo(pool)
381381 let lastInterestHeight = $t01511315178._1
382382 let lastInterest = $t01511315178._2
383383 let $t01518315294 = rewardInfo(pool)
384384 let currentRewardPerBlock = $t01518315294._1
385385 let rewardUpdateHeight = $t01518315294._2
386386 let previousRewardPerBlock = $t01518315294._3
387387 let poolRewardUpdateHeight = $t01518315294._4
388388 let shareTokenLocked = getTotalShareTokenLocked(pool)
389389 if (if ((shareTokenLocked == 0))
390390 then (poolRewardUpdateHeight == 0)
391391 else false)
392392 then if ((rewardUpdateHeight > height))
393393 then {
394394 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
395395 reward
396396 }
397397 else if ((lastInterestHeight > rewardUpdateHeight))
398398 then {
399399 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
400400 reward
401401 }
402402 else {
403403 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
404404 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
405405 (reward + rewardAfterLastInterestBeforeReawardUpdate)
406406 }
407407 else if (if ((shareTokenLocked == 0))
408408 then (poolRewardUpdateHeight != 0)
409409 else false)
410410 then if (if ((rewardUpdateHeight > height))
411411 then (rewardUpdateHeight == poolRewardUpdateHeight)
412412 else false)
413413 then {
414414 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
415415 reward
416416 }
417417 else if (if ((height > rewardUpdateHeight))
418418 then (rewardUpdateHeight != poolRewardUpdateHeight)
419419 else false)
420420 then {
421421 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
422422 reward
423423 }
424424 else if (if (if ((height > rewardUpdateHeight))
425425 then (rewardUpdateHeight == poolRewardUpdateHeight)
426426 else false)
427427 then (lastInterestHeight > rewardUpdateHeight)
428428 else false)
429429 then {
430430 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
431431 reward
432432 }
433433 else {
434434 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
435435 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
436436 (reward + rewardAfterLastInterestBeforeReawardUpdate)
437437 }
438438 else 0
439439 }
440440
441441
442442 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
443443 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
444444 if ((pmtAssetId == poolShareAssetId))
445445 then true
446446 else false
447447 }
448448
449449
450450 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + user) + keyUserSWOPClaimedAmount)), 0)
451451
452452
453453 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
454454
455455
456456 @Callable(i)
457457 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
458458 then throw("SWOP already initialized")
459459 else {
460460 let initAmount = 100000000000000
461461 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
462462 let SWOPid = calculateAssetId(SWOPissue)
463463 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
464464 }
465465
466466
467467
468468 @Callable(i)
469469 func initPoolShareFarming (pool) = if ((i.caller != this))
470470 then throw("Only the DApp itself can call this function")
471471 else {
472472 let $t01826418367 = rewardInfo(pool)
473473 let currentReward = $t01826418367._1
474474 let rewardUpdateHeight = $t01826418367._2
475475 let previousRewardPerBlock = $t01826418367._3
476476 let poolRewardUpdateHeight = $t01826418367._4
477477 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
478478 }
479479
480480
481481
482482 @Callable(i)
483483 func updatePoolInterest (pool) = if ((i.caller != wallet))
484484 then throw("Only the Admin itself can call this function")
485485 else if (!(isActive))
486486 then throw("DApp is inactive at this moment")
487487 else {
488488 let $t01877618912 = claimCalc(pool, toString(adminIncreaseInterestAddress), height)
489489 let userNewInterest = $t01877618912._1
490490 let currentInterest = $t01877618912._2
491491 let claimAmount = $t01877618912._3
492492 let userShareTokensAmount = $t01877618912._4
493493 let $t01891719020 = rewardInfo(pool)
494494 let currentReward = $t01891719020._1
495495 let rewardUpdateHeight = $t01891719020._2
496496 let previousRewardPerBlock = $t01891719020._3
497497 let poolRewardUpdateHeight = $t01891719020._4
498498 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
499499 }
500500
501501
502502
503503 @Callable(i)
504504 func lockShareTokens (pool) = {
505505 let userAddrStr = toString(i.caller)
506506 let $t01925419329 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
507507 let pmtAmount = $t01925419329._1
508508 let pmtAssetId = $t01925419329._2
509509 let $t01933419407 = getAssetInfo(pmtAssetId)
510510 let pmtStrAssetId = $t01933419407._1
511511 let pmtAssetName = $t01933419407._2
512512 let pmtDecimals = $t01933419407._3
513513 let $t01941219528 = claimCalc(pool, toString(i.caller), height)
514514 let userNewInterest = $t01941219528._1
515515 let currentInterest = $t01941219528._2
516516 let claimAmount = $t01941219528._3
517517 let userShareTokensAmount = $t01941219528._4
518518 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
519519 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
520520 let totalShareAmount = getTotalShareTokenLocked(pool)
521521 let totalShareAmountNew = (totalShareAmount + pmtAmount)
522522 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
523523 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
524524 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)]
525525 if ((0 >= pmtAmount))
526526 then throw("You can't lock token")
527527 else if (!(isActive))
528528 then throw("DApp is inactive at this moment")
529529 else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
530530 then throw("Incorrect pmtAssetId")
531531 else if (if (isFirstHarvest(Address(fromBase58String(pool))))
532532 then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
533533 else false)
534534 then {
535535 let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
536536 let amountOfVoting = split(getStringValue(votingAddress, (((userAddrStr + "_") + pool) + "_user_pool_struc")), "_")
537537 let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
538538 let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((userAddrStr + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
539539 let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
540540 let userShareTokenLocked = userShareTokensAmount
541541 let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
542542 then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
543543 else valueOrElse(parseInt(amountOfVoting[1]), 0)
544544 let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
545545 then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
546546 else valueOrElse(parseInt(amountPoolStract[1]), 0)
547547 let protocolReward = calculateProtocolReward(pool)
548548 if ((userPoolActiveVote != 0))
549549 then {
550550 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
551551 let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
552552 if (if ((size(amountActiveVoteUserPoolStract) > 1))
553553 then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
554554 else false)
555555 then throw("You can't share token")
556556 else if ((pmtAmount > limitShareToken))
557557 then throw(("You can't share token more than " + toString(limitShareToken)))
558558 else if ((shareToken > 0))
559559 then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
560560 then throw("Balance of share-token is greater than totalAmount")
561561 else if ((totalShareAmount == 0))
562562 then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
563563 else if ((shareToken >= pmtAmount))
564564 then baseEntry
565565 else throw(("Your maximum share token is " + toString(shareToken)))
566566 else throw("You can't share token")
567567 }
568568 else throw("Your amount of token less than 0")
569569 }
570570 else baseEntry
571571 }
572572
573573
574574
575575 @Callable(i)
576576 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
577577 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
578578 let $t02394424060 = claimCalc(pool, toString(i.caller), height)
579579 let userNewInterest = $t02394424060._1
580580 let currentInterest = $t02394424060._2
581581 let claimAmount = $t02394424060._3
582582 let userShareTokensAmount = $t02394424060._4
583583 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
584584 let availableFundsNew = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
585585 let totalShareAmount = getTotalShareTokenLocked(pool)
586586 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
587587 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
588588 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
589589 if ((shareTokensWithdrawAmount > userShareTokensAmount))
590590 then throw("Withdraw amount more then user locked amount")
591591 else if (!(isActive))
592592 then throw("DApp is inactive at this moment")
593593 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
594594 then throw("Withdraw amount more then user locked amount")
595595 else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
596596 then throw("Balance of share-token is greater than totalAmount")
597597 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)]
598598 }
599599
600600
601601
602602 @Callable(i)
603603 func egg0 (pool,users) = {
604604 func updateUser (accum,u) = {
605605 let r = invoke(this, "egg1", [pool, u], nil)
606606 if ((r == r))
607607 then (accum :+ BooleanEntry((u + "_migration"), true))
608608 else throw("Strict value is not equal to itself.")
609609 }
610610
611611 let $list2611926150 = users
612612 let $size2611926150 = size($list2611926150)
613613 let $acc02611926150 = nil
614614 if (($size2611926150 == 0))
615615 then $acc02611926150
616616 else {
617617 let $acc12611926150 = updateUser($acc02611926150, $list2611926150[0])
618618 if (($size2611926150 == 1))
619619 then $acc12611926150
620620 else {
621621 let $acc22611926150 = updateUser($acc12611926150, $list2611926150[1])
622622 if (($size2611926150 == 2))
623623 then $acc22611926150
624624 else {
625625 let $acc32611926150 = updateUser($acc22611926150, $list2611926150[2])
626626 if (($size2611926150 == 3))
627627 then $acc32611926150
628628 else {
629629 let $acc42611926150 = updateUser($acc32611926150, $list2611926150[3])
630630 if (($size2611926150 == 4))
631631 then $acc42611926150
632632 else {
633633 let $acc52611926150 = updateUser($acc42611926150, $list2611926150[4])
634634 if (($size2611926150 == 5))
635635 then $acc52611926150
636636 else {
637637 let $acc62611926150 = updateUser($acc52611926150, $list2611926150[5])
638638 if (($size2611926150 == 6))
639639 then $acc62611926150
640640 else {
641641 let $acc72611926150 = updateUser($acc62611926150, $list2611926150[6])
642642 if (($size2611926150 == 7))
643643 then $acc72611926150
644644 else {
645645 let $acc82611926150 = updateUser($acc72611926150, $list2611926150[7])
646646 if (($size2611926150 == 8))
647647 then $acc82611926150
648648 else {
649649 let $acc92611926150 = updateUser($acc82611926150, $list2611926150[8])
650650 if (($size2611926150 == 9))
651651 then $acc92611926150
652652 else {
653653 let $acc102611926150 = updateUser($acc92611926150, $list2611926150[9])
654654 if (($size2611926150 == 10))
655655 then $acc102611926150
656656 else {
657657 let $acc112611926150 = updateUser($acc102611926150, $list2611926150[10])
658658 if (($size2611926150 == 11))
659659 then $acc112611926150
660660 else {
661661 let $acc122611926150 = updateUser($acc112611926150, $list2611926150[11])
662662 if (($size2611926150 == 12))
663663 then $acc122611926150
664664 else {
665665 let $acc132611926150 = updateUser($acc122611926150, $list2611926150[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) = {
686- let migrationHeight = 1694125
686+ let migrationHeight = 1694115
687687 let shareTokenMultiplyer = 1000
688688 let $t02632326435 = claimCalc(pool, u, migrationHeight)
689689 let userNewInterest = $t02632326435._1
690690 let currentInterest = $t02632326435._2
691691 let claimAmount = $t02632326435._3
692692 let userShareTokensAmount = $t02632326435._4
693693 let availableFundsNew = (userAvailableSWOP(pool, u) + claimAmount)
694694 let userClaimedAmount = getUserSWOPClaimedAmount(pool, u)
695695 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
696696 let userShareTokensAmountNew = (userShareTokensAmount * shareTokenMultiplyer)
697697 [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)]
698698 }
699699
700700
701701
702702 @Callable(i)
703703 func claim (pool) = {
704704 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
705705 let shareTokenLocked = getTotalShareTokenLocked(pool)
706706 let $t02742027485 = getLastInterestInfo(pool)
707707 let lastInterestHeight = $t02742027485._1
708708 let lastInterest = $t02742027485._2
709709 let $t02749027602 = rewardInfo(pool)
710710 let currentRewardPerBlock = $t02749027602._1
711711 let rewardUpdateHeight = $t02749027602._2
712712 let previousRewardPerBlock = $t02749027602._3
713713 let poolRewardUpdateHeight = $t02749027602._4
714714 let $t02760727723 = claimCalc(pool, toString(i.caller), height)
715715 let userNewInterest = $t02760727723._1
716716 let currentInterest = $t02760727723._2
717717 let claimAmount = $t02760727723._3
718718 let userShareTokensAmount = $t02760727723._4
719719 let availableFund = (userAvailableSWOP(pool, toString(i.caller)) + claimAmount)
720720 let userClaimedAmount = getUserSWOPClaimedAmount(pool, toString(i.caller))
721721 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
722722 if ((availableFund == 0))
723723 then throw("You have 0 available SWOP")
724724 else if (!(isActive))
725725 then throw("DApp is inactive at this moment")
726726 else if ((availableFund == 0))
727727 then throw("You have 0 available SWOP")
728728 else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
729729 then throw("Balance of share-token is greater than totalAmount")
730730 else if ((availableFund > 100))
731731 then throw(("you are trying to get more SWOP than you can:" + toString(shareTokenLocked)))
732732 else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
733733 }
734734
735735
736736
737737 @Callable(i)
738738 func shutdown () = if (!(isActive))
739739 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
740740 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
741741 then throw("Only admin can call this function")
742742 else suspend("Paused by admin")
743743
744744
745745
746746 @Callable(i)
747747 func activate () = if (isActive)
748748 then throw("DApp is already active")
749749 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
750750 then throw("Only admin can call this function")
751751 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
752752
753753
754754 @Verifier(tx)
755755 func verify () = match tx {
756756 case _ =>
757757 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
758758 then 1
759759 else 0
760760 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
761761 then 1
762762 else 0
763763 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
764764 then 1
765765 else 0
766766 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
767767 }
768768

github/deemru/w8io/873ac7e 
81.28 ms