tx · 8wmqH1UJSV4EodKxx5xbskkDPgT6qWHeiuQYuJ1tBF2x

3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT:  -0.01400000 Waves

2021.07.21 16:44 [1623455] smart account 3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT > SELF 0.00000000 Waves

{ "type": 13, "id": "8wmqH1UJSV4EodKxx5xbskkDPgT6qWHeiuQYuJ1tBF2x", "fee": 1400000, "feeAssetId": null, "timestamp": 1626875061776, "version": 2, "chainId": 84, "sender": "3MsxHxruYWoddB4HRiPBYAWtMXMtCF1V9XT", "senderPublicKey": "3ijdmxaYrpDFsKVbQH2kvB7i6JzHj9bep9bGWiQPra2D", "proofs": [ "46kCvNgZib5Ji4831J4ABGitma4WNga4pV2AdjNVmFShZuesKkjX8gubzYU6XAnRV9crtyBGidEEFsNiuWKr63T8", "4a2DL7oviwRGhnE5WwJhbfB55RYuHC1fiAMMZnxtGc9d1HDxqeyQvGSD6N9Ue5MuxUpn77SzR78xB8VzRWovz2Ch" ], "script": "base64:AAIFAAAAAAAAACUIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgMKAQgSABIAAAAAYAAAAAAUa2V5U2hhcmVUb2tlbnNMb2NrZWQCAAAAGl90b3RhbF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAAAtrU2hhcmVMaW1pdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAIAAAAdX2N1cnJlbnRfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzAgAAAB5fcHJldmlvdXNfcG9vbF9mcmFjdGlvbl9yZXdhcmQAAAAAFWtleUhlaWdodFBvb2xGcmFjdGlvbgIAAAAaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50AgAAAB50b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX2N1cnJlbnQAAAAAHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwIAAAAfdG90YWxfcmV3YXJkX3Blcl9ibG9ja19wcmV2aW91cwAAAAAVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0AgAAABRyZXdhcmRfdXBkYXRlX2hlaWdodAAAAAAPa2V5TGFzdEludGVyZXN0AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0AgAAABVfbGFzdF9pbnRlcmVzdF9oZWlnaHQAAAAAGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZAIAAAAUX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QCAAAADl9sYXN0X2ludGVyZXN0AAAAAAlrZXlTV09QaWQCAAAAB1NXT1BfaWQAAAAAGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudAIAAAAUX1NXT1BfY2xhaW1lZF9hbW91bnQAAAAAHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQCAAAAGV9TV09QX2xhc3RfY2xhaW1lZF9hbW91bnQAAAAAEGtleUF2YWlsYWJsZVNXT1ACAAAAD19hdmFpbGFibGVfU1dPUAAAAAAVa2V5RmFybWluZ1N0YXJ0SGVpZ2h0AgAAABRmYXJtaW5nX3N0YXJ0X2hlaWdodAAAAAAGa2V5QVBZAgAAAANhcHkAAAAAFmtQcmV2aW91c1RvdGFsVm90ZVNXT1ACAAAAGHByZXZpb3VzX3RvdGFsX3ZvdGVfU1dPUAAAAAATa2V5U3dvcFllYXJFbWlzc2lvbgIAAAASc3dvcF95ZWFyX2VtaXNzaW9uAAAAAA9rZXlCYWxhbmNlY3BtbUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZWNwbW1CAgAAAA9CX2Fzc2V0X2JhbGFuY2UAAAAAIWtIYXJ2ZXN0UG9vbEFjdGl2ZVZvdGVTdHJ1Y1ZvdGluZwIAAAAeX2hhcnZlc3RfcG9vbF9hY3RpdmVWb3RlX3N0cnVjAAAAACVrSGFydmVzdFVzZXJQb29sQWN0aXZlVm90ZVN0cnVjVm90aW5nAgAAACNfaGFydmVzdF91c2VyX3Bvb2xfYWN0aXZlVm90ZV9zdHJ1YwAAAAAZa2V5TGltaXRTaGFyZUZpcnN0SGFydmVzdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa2V5QXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAAC2tleUFzc2V0SWRCAgAAAApCX2Fzc2V0X2lkAAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAABNrZXlmaXJzdEhhcnZlc3RDcG1tAgAAAA1maXJzdF9oYXJ2ZXN0AAAAAA5rZXlUZW1wUHJldlN1bQIAAAATc3VtX3Jld2FyZF9wcmV2aW91cwAAAAANa2V5VGVtcEN1clN1bQIAAAASc3VtX3Jld2FyZF9jdXJyZW50AAAAABFnb3Zlcm5hbmNlQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVKr6ad6B9BNShco/LjqIUbMZ6pgcWfINLQAAAAAGd2FsbGV0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU3z1Ll4lYWd4V4ORRC1bdPXpfvbV/hSGJAAAAAA12b3RpbmdBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUGjZ+31einSdpXP6/9ybU5/uhw2g+IMp/AAAAABxhZG1pbkluY3JlYXNlSW50ZXJlc3RBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU3z1Ll4lYWd4V4ORRC1bdPXpfvbV/hSGJAAAAAA5vbmVXZWVrSW5CbG9jawAAAAAAAAAnegAAAAAOdG90YWxWb3RlU2hhcmUAAAAAAlQL5AAAAAAAC3NjYWxlVmFsdWUxAAAAAAAAAAAKAAAAAAtzY2FsZVZhbHVlMwAAAAAAAAAD6AAAAAALc2NhbGVWYWx1ZTUAAAAAAAABhqAAAAAAC3NjYWxlVmFsdWU2AAAAAAAAD0JAAAAAAAtzY2FsZVZhbHVlOAAAAAAABfXhAAAAAAAMc2NhbGVWYWx1ZTExAAAAABdIdugAAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgBAAAAC2dldEFkbWluUHViAAAAAQAAAAtrZXlBZG1pblB1YgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUFAAAAC2tleUFkbWluUHViAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAZzdHJpbmcEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAJAAACAAAAAQIAAAAZQWRtaW4gcHVibGljIGtleSBpcyBlbXB0eQAAAAAMYWRtaW5QdWJLZXkxCQEAAAALZ2V0QWRtaW5QdWIAAAABBQAAAA9rZXlBZG1pblB1YktleTEAAAAADGFkbWluUHViS2V5MgkBAAAAC2dldEFkbWluUHViAAAAAQUAAAAPa2V5QWRtaW5QdWJLZXkyAAAAAAxhZG1pblB1YktleTMJAQAAAAtnZXRBZG1pblB1YgAAAAEFAAAAD2tleUFkbWluUHViS2V5MwEAAAALc3RyQXNzZXRJZEEAAAABAAAABHBvb2wJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHBvb2wFAAAAC2tleUFzc2V0SWRBAQAAAAtzdHJBc3NldElkQgAAAAEAAAAEcG9vbAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEcG9vbAUAAAALa2V5QXNzZXRJZEIBAAAACGFzc2V0SWRBAAAAAQAAAARwb29sAwkAAAAAAAACCQEAAAALc3RyQXNzZXRJZEEAAAABBQAAAARwb29sAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABCQEAAAALc3RyQXNzZXRJZEEAAAABBQAAAARwb29sAQAAAAhhc3NldElkQgAAAAEAAAAEcG9vbAMJAAAAAAAAAgkBAAAAC3N0ckFzc2V0SWRCAAAAAQUAAAAEcG9vbAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQkBAAAAC3N0ckFzc2V0SWRCAAAAAQUAAAAEcG9vbAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAATa0ZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXICAAAAGGR1cmF0aW9uX2Z1bGxfdm90ZV9wb3dlcgAAAAANa01pblZvdGVQb3dlcgIAAAAObWluX3ZvdGVfcG93ZXIAAAAACmJhc2VQZXJpb2QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA12b3RpbmdBZGRyZXNzBQAAAAtrQmFzZVBlcmlvZAIAAAARRW1wdHkga0Jhc2VQZXJpb2QAAAAAC3N0YXJ0SGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAAMa1N0YXJ0SGVpZ2h0AgAAABJFbXB0eSBrU3RhcnRIZWlnaHQAAAAADHBlcmlvZExlbmd0aAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAADWtQZXJpb2RMZW5ndGgCAAAAE0VtcHR5IGtQZXJpb2RMZW5ndGgAAAAAFWR1cmF0aW9uRnVsbFZvdGVQb3dlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAFmtEdXJhdGlvbkZ1bGxWb3RlUG93ZXICAAAAHEVtcHR5IGtEdXJhdGlvbkZ1bGxWb3RlUG93ZXIAAAAADG1pblZvdGVQb3dlcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAADWtNaW5Wb3RlUG93ZXICAAAAE0VtcHR5IGtNaW5Wb3RlUG93ZXIAAAAACGlzQWN0aXZlCQEAAAARQGV4dHJOYXRpdmUoMTA1MSkAAAACBQAAAAR0aGlzBQAAAAlrZXlBY3RpdmUAAAAACmN1cnJQZXJpb2QJAABkAAAAAgUAAAAKYmFzZVBlcmlvZAkAAGkAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAALc3RhcnRIZWlnaHQFAAAADHBlcmlvZExlbmd0aAEAAAANZ2V0TGltaXRUb2tlbgAAAAEAAAAEcG9vbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEcG9vbAUAAAAZa2V5TGltaXRTaGFyZUZpcnN0SGFydmVzdAAAAAAAAAAAAAAAAAADQVBZCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAAZrZXlBUFkAAAAAEFN3b3BZZWFyRW1pc3Npb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAE2tleVN3b3BZZWFyRW1pc3Npb24BAAAACmFzc2V0TmFtZUEAAAABAAAABHBvb2wEAAAAByRtYXRjaDAJAQAAAAhhc3NldElkQQAAAAEFAAAABHBvb2wDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAJpZAAAAARuYW1lAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAIAAAAFV0FWRVMJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAACmFzc2V0TmFtZUIAAAABAAAABHBvb2wEAAAAByRtYXRjaDAJAQAAAAhhc3NldElkQgAAAAEFAAAABHBvb2wDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAJpZAAAAARuYW1lAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAIAAAAFV0FWRVMJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IAAAAABFNXT1AJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAJa2V5U1dPUGlkAQAAAA5pc0ZpcnN0SGFydmVzdAAAAAEAAAAEcG9vbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAARwb29sBQAAABNrZXlmaXJzdEhhcnZlc3RDcG1tBwEAAAAVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AAAAAQAAAARwb29sCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHBvb2wFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAAAAAAAAAAAAAEAAAALZ2V0QmFsYW5jZUEAAAABAAAABHBvb2wJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAARwb29sBQAAAA9rZXlCYWxhbmNlY3BtbUEJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAAD2tleUJhbGFuY2VjcG1tQQEAAAALZ2V0QmFsYW5jZUIAAAABAAAABHBvb2wJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAARwb29sBQAAAA9rZXlCYWxhbmNlY3BtbUIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAAD2tleUJhbGFuY2VjcG1tQgEAAAASZ2V0U2hhcmVMaW1pdFRva2VuAAAAAQAAAARwb29sCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEcG9vbAUAAAALa1NoYXJlTGltaXQJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAAC2tTaGFyZUxpbWl0AQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABAAAABHBvb2wJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABHBvb2wFAAAAFGtleVNoYXJlVG9rZW5zTG9ja2VkCQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAFGtleVNoYXJlVG9rZW5zTG9ja2VkAQAAAA9nZXRTaGFyZUFzc2V0SWQAAAABAAAABHBvb2wJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAABXZhbHVlAAAAAQkABCYAAAABBQAAAARwb29sAgAAAA5zaGFyZV9hc3NldF9pZAEAAAAOYWNjb3VudEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAABHRoaXMFAAAAAmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAADGdldEFzc2V0SW5mbwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAEAAAACHN0cmluZ0lkCQACWAAAAAEFAAAAAmlkBAAAAARpbmZvCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQUAAAACaWQJAAEsAAAAAgkAASwAAAACAgAAAAZBc3NldCAFAAAACHN0cmluZ0lkAgAAAA4gZG9lc24ndCBleGlzdAkABRUAAAADBQAAAAhzdHJpbmdJZAgFAAAABGluZm8AAAAEbmFtZQgFAAAABGluZm8AAAAIZGVjaW1hbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwCQAFFQAAAAMCAAAABVdBVkVTAgAAAAVXQVZFUwAAAAAAAAAACAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAOY2FsY1NjYWxlVmFsdWUAAAACAAAACGFzc2V0SWQxAAAACGFzc2V0SWQyBAAAABBhc3NldElkMURlY2ltYWxzCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAhhc3NldElkMQAAAAhkZWNpbWFscwQAAAAQYXNzZXRJZDJEZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAIYXNzZXRJZDIAAAAIZGVjaW1hbHMEAAAAC3NjYWxlRGlnaXRzCQAAZAAAAAIJAABlAAAAAgUAAAAQYXNzZXRJZDJEZWNpbWFscwUAAAAQYXNzZXRJZDFEZWNpbWFscwAAAAAAAAAACAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAAtzY2FsZURpZ2l0cwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgEAAAARdXNlckF2YWlsYWJsZVNXT1AAAAACAAAABHBvb2wAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEFAAAABHVzZXIFAAAAEGtleUF2YWlsYWJsZVNXT1AAAAAAAAAAAAABAAAACnJld2FyZEluZm8AAAABAAAABHBvb2wEAAAAGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAda2V5VG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQCAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwQAAAAbdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAAHmtleVRvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MJAAEsAAAAAgUAAAAEcG9vbAUAAAAca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAEcG9vbAUAAAAca2V5UmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwUAAAAVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABRObyBkYXRhIG9uIHRoZSBrZXk6IAUAAAAVa2V5UmV3YXJkVXBkYXRlSGVpZ2h0AgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5SGVpZ2h0UG9vbEZyYWN0aW9uAAAAAAAAAAAABAAAABpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzCQABLAAAAAIFAAAABHBvb2wFAAAAHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAARwb29sBQAAAB1rZXlSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABFyZXdhcmRQb29sQ3VycmVudAkAAGsAAAADBQAAABp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAUAAAAZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUAAAAOdG90YWxWb3RlU2hhcmUEAAAAEnJld2FyZFBvb2xQcmV2aW91cwkAAGsAAAADBQAAABt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMFAAAAGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzBQAAAA50b3RhbFZvdGVTaGFyZQMDCQAAZgAAAAIFAAAAEXJld2FyZFBvb2xDdXJyZW50BQAAABp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAYJAABmAAAAAgUAAAAScmV3YXJkUG9vbFByZXZpb3VzBQAAABt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAACAAAAAQIAAABicmV3YXJkUG9vbEN1cnJlbnQgPiB0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudCBvciByZXdhcmRQb29sUHJldmlvdXMgPiB0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAUWAAAABAUAAAARcmV3YXJkUG9vbEN1cnJlbnQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAScmV3YXJkUG9vbFByZXZpb3VzBQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0AQAAABNnZXRMYXN0SW50ZXJlc3RJbmZvAAAAAQAAAARwb29sBAAAAAxsYXN0SW50ZXJlc3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QEAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAFFAAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAMbGFzdEludGVyZXN0AQAAABNnZXRVc2VySW50ZXJlc3RJbmZvAAAAAgAAAARwb29sAAAAC3VzZXJBZGRyZXNzBAAAABB1c2VyTGFzdEludGVyZXN0CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QEAAAACXVzZXJTaGFyZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAABhrZXlVc2VyU2hhcmVUb2tlbnNMb2NrZWQEAAAADGxhc3RJbnRlcmVzdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0CQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAQAAAAVdXNlckxhc3RJbnRlcmVzdFZhbHVlBAAAAAckbWF0Y2gwBQAAABB1c2VyTGFzdEludGVyZXN0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAAByRtYXRjaDAFAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAADGxhc3RJbnRlcmVzdAQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50BAAAAAckbWF0Y2gwBQAAAAl1c2VyU2hhcmUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJdXNlclNoYXJlBQAAAAckbWF0Y2gwBQAAAAl1c2VyU2hhcmUAAAAAAAAAAAAJAAUUAAAAAgUAAAAVdXNlckxhc3RJbnRlcmVzdFZhbHVlBQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQBAAAADGNhbGNJbnRlcmVzdAAAAAoAAAASbGFzdEludGVyZXN0SGVpZ2h0AAAAEnJld2FyZFVwZGF0ZUhlaWdodAAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0AAAADGxhc3RJbnRlcmVzdAAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sAAAAQc2hhcmVUb2tlbkxvY2tlZAAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrAAAADHNoYXJlQXNzZXRJZAAAAApzY2FsZVZhbHVlAAAACXBtdEFtb3VudAMJAAAAAAAAAgUAAAAQc2hhcmVUb2tlbkxvY2tlZAAAAAAAAAAAAAAAAAAAAAAAAAMJAQAAAAIhPQAAAAIFAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQAAAAAAAAAAAADAwkAAGYAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAABmhlaWdodAkAAAAAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBAAAAAZyZXdhcmQJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAQAAAAIhPQAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcEAAAABnJld2FyZAkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0CQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQDAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAAAAAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwkAAGYAAAACBQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAcEAAAABnJld2FyZAkAAGgAAAACBQAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQJAABkAAAAAgUAAAAMbGFzdEludGVyZXN0CQAAawAAAAMFAAAABnJld2FyZAUAAAAKc2NhbGVWYWx1ZQUAAAAQc2hhcmVUb2tlbkxvY2tlZAQAAAAqcmV3YXJkQWZ0ZXJMYXN0SW50ZXJlc3RCZWZvcmVSZWF3YXJkVXBkYXRlCQAAaAAAAAIFAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQEAAAAE2ludGVyZXN0QWZ0ZXJVcGRhdGUJAABkAAAAAgUAAAAMbGFzdEludGVyZXN0CQAAawAAAAMFAAAAKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZQUAAAAKc2NhbGVWYWx1ZQUAAAAQc2hhcmVUb2tlbkxvY2tlZAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAkAAGQAAAACBQAAABNpbnRlcmVzdEFmdGVyVXBkYXRlCQAAawAAAAMFAAAABnJld2FyZAUAAAAKc2NhbGVWYWx1ZQUAAAAQc2hhcmVUb2tlbkxvY2tlZAMJAABmAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAZoZWlnaHQEAAAABnJld2FyZAkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0CQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQDCQAAZgAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0CQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQEAAAAKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZQkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BAAAABNpbnRlcmVzdEFmdGVyVXBkYXRlCQAAZAAAAAIFAAAADGxhc3RJbnRlcmVzdAkAAGsAAAADBQAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQEAAAABnJld2FyZAkAAGgAAAACBQAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAABkAAAAAgUAAAATaW50ZXJlc3RBZnRlclVwZGF0ZQkAAGsAAAADBQAAAAZyZXdhcmQFAAAACnNjYWxlVmFsdWUFAAAAEHNoYXJlVG9rZW5Mb2NrZWQBAAAACWNsYWltQ2FsYwAAAAMAAAAEcG9vbAAAAAZjYWxsZXIAAAAJcG10QW1vdW50BAAAAAxzaGFyZUFzc2V0SWQJAQAAAA9nZXRTaGFyZUFzc2V0SWQAAAABBQAAAARwb29sBAAAAApzY2FsZVZhbHVlCQEAAAAOY2FsY1NjYWxlVmFsdWUAAAACBQAAAARTV09QBQAAAAxzaGFyZUFzc2V0SWQEAAAAEHNoYXJlVG9rZW5Mb2NrZWQJAQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABBQAAAARwb29sBAAAAA0kdDAxMzQ0NTEzNTEwCQEAAAATZ2V0TGFzdEludGVyZXN0SW5mbwAAAAEFAAAABHBvb2wEAAAAEmxhc3RJbnRlcmVzdEhlaWdodAgFAAAADSR0MDEzNDQ1MTM1MTAAAAACXzEEAAAADGxhc3RJbnRlcmVzdAgFAAAADSR0MDEzNDQ1MTM1MTAAAAACXzIEAAAADSR0MDEzNTE1MTM2MjcJAQAAAApyZXdhcmRJbmZvAAAAAQUAAAAEcG9vbAQAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCAUAAAANJHQwMTM1MTUxMzYyNwAAAAJfMQQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTM1MTUxMzYyNwAAAAJfMgQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFAAAADSR0MDEzNTE1MTM2MjcAAAACXzMEAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxMzUxNTEzNjI3AAAAAl80BAAAAA0kdDAxMzYzMjEzNzExCQEAAAATZ2V0VXNlckludGVyZXN0SW5mbwAAAAIFAAAABHBvb2wFAAAABmNhbGxlcgQAAAAQdXNlckxhc3RJbnRlcmVzdAgFAAAADSR0MDEzNjMyMTM3MTEAAAACXzEEAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAgFAAAADSR0MDEzNjMyMTM3MTEAAAACXzIEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADGNhbGNJbnRlcmVzdAAAAAoFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAxsYXN0SW50ZXJlc3QFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawUAAAAQc2hhcmVUb2tlbkxvY2tlZAUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawUAAAAMc2hhcmVBc3NldElkBQAAAApzY2FsZVZhbHVlBQAAAAlwbXRBbW91bnQEAAAAC2NsYWltQW1vdW50CQAAawAAAAMFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAACnNjYWxlVmFsdWUEAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0CQAFFgAAAAQFAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0BQAAAAtjbGFpbUFtb3VudAUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50AQAAABdjYWxjdWxhdGVQcm90b2NvbFJld2FyZAAAAAEAAAAEcG9vbAQAAAANJHQwMTQyMzExNDI5NgkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAxNDIzMTE0Mjk2AAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAxNDIzMTE0Mjk2AAAAAl8yBAAAAA0kdDAxNDMwMTE0NDEyCQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDE0MzAxMTQ0MTIAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDE0MzAxMTQ0MTIAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAxNDMwMTE0NDEyAAAAAl8zBAAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTQzMDExNDQxMgAAAAJfNAQAAAAQc2hhcmVUb2tlbkxvY2tlZAkBAAAAGGdldFRvdGFsU2hhcmVUb2tlbkxvY2tlZAAAAAEFAAAABHBvb2wDAwkAAAAAAAACBQAAABBzaGFyZVRva2VuTG9ja2VkAAAAAAAAAAAACQAAAAAAAAIFAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQAAAAAAAAAAAAHAwkAAGYAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAABmhlaWdodAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAABnJld2FyZAMJAABmAAAAAgUAAAASbGFzdEludGVyZXN0SGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQEAAAABnJld2FyZAkAAGgAAAACBQAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAABnJld2FyZAQAAAAqcmV3YXJkQWZ0ZXJMYXN0SW50ZXJlc3RCZWZvcmVSZWF3YXJkVXBkYXRlCQAAaAAAAAIFAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQEAAAABnJld2FyZAkAAGgAAAACBQAAABVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJyZXdhcmRVcGRhdGVIZWlnaHQJAABkAAAAAgUAAAAGcmV3YXJkBQAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUDAwkAAAAAAAACBQAAABBzaGFyZVRva2VuTG9ja2VkAAAAAAAAAAAACQEAAAACIT0AAAACBQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0AAAAAAAAAAAABwMDCQAAZgAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAGaGVpZ2h0CQAAAAAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcEAAAABnJld2FyZAkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BQAAAAZyZXdhcmQDAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAkBAAAAAiE9AAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0BwQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAABnJld2FyZAMDAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAkAAAAAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHCQAAZgAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BwQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAGcmV3YXJkBAAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRS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bGxldAkAAAIAAAABAgAAACxPbmx5IHRoZSBBZG1pbiBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAQAAAANJHQwMTc5MDYxODAyNgkBAAAACWNsYWltQ2FsYwAAAAMFAAAABHBvb2wFAAAAHGFkbWluSW5jcmVhc2VJbnRlcmVzdEFkZHJlc3MAAAAAAAAAAAAEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDE3OTA2MTgwMjYAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDE3OTA2MTgwMjYAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMTc5MDYxODAyNgAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMTc5MDYxODAyNgAAAAJfNAQAAAANJHQwMTgwMzExODEzNAkBAAAACnJld2FyZEluZm8AAAABBQAAAARwb29sBAAAAA1jdXJyZW50UmV3YXJkCAUAAAANJHQwMTgwMzExODEzNAAAAAJfMQQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTgwMzExODEzNAAAAAJfMgQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFAAAADSR0MDE4MDMxMTgxMzQAAAACXzMEAAAAFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxODAzMTE4MTM0AAAAAl80CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAUAAAAPdXNlck5ld0ludGVyZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0BQAAAANuaWwAAAABaQEAAAAPbG9ja1NoYXJlVG9rZW5zAAAAAQAAAARwb29sBAAAAA0kdDAxODMyNjE4NDAxCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTgzMjYxODQwMQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE4MzI2MTg0MDEAAAACXzIEAAAADSR0MDE4NDA2MTg0NzkJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAApwbXRBc3NldElkBAAAAA1wbXRTdHJBc3NldElkCAUAAAANJHQwMTg0MDYxODQ3OQAAAAJfMQQAAAAMcG10QXNzZXROYW1lCAUAAAANJHQwMTg0MDYxODQ3OQAAAAJfMgQAAAALcG10RGVjaW1hbHMIBQAAAA0kdDAxODQwNjE4NDc5AAAAAl8zBAAAAA0kdDAxODQ4NDE4NTkyCQEAAAAJY2xhaW1DYWxjAAAAAwUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDE4NDg0MTg1OTIAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDE4NDg0MTg1OTIAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMTg0ODQxODU5MgAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMTg0ODQxODU5MgAAAAJfNAQAAAASdXNlclNoYXJlQW1vdW50TmV3CQAAZAAAAAIFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAUAAAAJcG10QW1vdW50BAAAABFhdmFpbGFibGVGdW5kc05ldwkAAGQAAAACCQEAAAARdXNlckF2YWlsYWJsZVNXT1AAAAACBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIFAAAAC2NsYWltQW1vdW50BAAAABB0b3RhbFNoYXJlQW1vdW50CQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAATdG90YWxTaGFyZUFtb3VudE5ldwkAAGQAAAACBQAAABB0b3RhbFNoYXJlQW1vdW50BQAAAAlwbXRBbW91bnQE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AAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAApwbXRBc3NldElkBQAAAAlwbXRBbW91bnQAAAAAAAAAAGQFAAAAE3RvdGFsU2hhcmVBbW91bnROZXcJAAACAAAAAQIAAAAyQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBncmVhdGVyIHRoYW4gdG90YWxBbW91bnQDCQAAAAAAAAIFAAAAEHRvdGFsU2hhcmVBbW91bnQAAAAAAAAAAAAJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABndhbGxldAUAAAAOcHJvdG9jb2xSZXdhcmQFAAAABFNXT1AFAAAAA25pbAMJAABnAAAAAgUAAAAKc2hhcmVUb2tlbgUAAAAJcG10QW1vdW50BQAAAAliYXNlRW50cnkJAAACAAAAAQkAASwAAAACAgAAABxZb3VyIG1heGltdW0gc2hhcmUgdG9rZW4gaXMgCQABpAAAAAEFAAAACnNoYXJlVG9rZW4JAAACAAAAAQIAAAAVWW91IGNhbid0IHNoYXJlIHRva2VuCQAAAgAAAAECAAAAIFlvdXIgYW1vdW50IG9mIHRva2VuIGxlc3MgdGhhbiAwBQAAAAliYXNlRW50cnkAAAABaQEAAAATd2l0aGRyYXdTaGFyZVRva2VucwAAAAIAAAAEcG9vbAAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BAAAAA1zaGFyZVRva2Vuc0lkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQUAAAAEcG9vbAIAAAAOc2hhcmVfYXNzZXRfaWQEAAAADSR0MDIzMDM4MjMxMzgJAQAAAAljbGFpbUNhbGMAAAADBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDIzMDM4MjMxMzgAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDIzMDM4MjMxMzgAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMjMwMzgyMzEzOAAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMjMwMzgyMzEzOAAAAAJfNAQAAAASdXNlclNoYXJlQW1vdW50TmV3CQAAZQAAAAIFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAUAAAAZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQAAAARYXZhaWxhYmxlRnVuZHNOZXcJAABkAAAAAgkBAAAAEXVzZXJBdmFpbGFibGVTV09QAAAAAgUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBQAAAAtjbGFpbUFtb3VudAQAAAAQdG90YWxTaGFyZUFtb3VudAkBAAAAGGdldFRvdGFsU2hhcmVUb2tlbkxvY2tlZAAAAAEFAAAABHBvb2wEAAAAE3RvdGFsU2hhcmVBbW91bnROZXcJAABlAAAAAgUAAAAQdG90YWxTaGFyZUFtb3VudAUAAAAZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAQAAAARdXNlckNsYWltZWRBbW91bnQJAQAAABhnZXRVc2VyU1dPUENsYWltZWRBbW91bnQAAAACBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIEAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAAZAAAAAIFAAAAEXVzZXJDbGFpbWVkQW1vdW50BQAAAAtjbGFpbUFtb3VudAMJAABmAAAAAgUAAAAZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CQAAAgAAAAECAAAALFdpdGhkcmF3IGFtb3VudCBtb3JlIHRoZW4gdXNlciBsb2NrZWQgYW1vdW50AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkAAGYAAAACBQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQJAAACAAAAAQIAAAAsV2l0aGRyYXcgYW1vdW50IG1vcmUgdGhlbiB1c2VyIGxvY2tlZCBhbW91bnQDCQAAZgAAAAIJAABrAAAAAwAAAAAAAAAAYwkAAGUAAAACCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAA1zaGFyZVRva2Vuc0lkBQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AAAAAAAAAABkBQAAABN0b3RhbFNoYXJlQW1vdW50TmV3CQAAAgAAAAECAAAAMkJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgZ3JlYXRlciB0aGFuIHRvdGFsQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAATa2V5VXNlckxhc3RJbnRlcmVzdAUAAAAPdXNlck5ld0ludGVyZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAYa2V5VXNlclNoYXJlVG9rZW5zTG9ja2VkBQAAABJ1c2VyU2hhcmVBbW91bnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAUa2V5U2hhcmVUb2tlbnNMb2NrZWQFAAAAE3RvdGFsU2hhcmVBbW91bnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABBrZXlBdmFpbGFibGVTV09QBQAAABFhdmFpbGFibGVGdW5kc05ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudAUAAAAUdXNlckNsYWltZWRBbW91bnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABxrZXlVc2VyU1dPUExhc3RDbGFpbWVkQW1vdW50BQAAAAtjbGFpbUFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFAAAADXNoYXJlVG9rZW5zSWQFAAAAA25pbAAAAAFpAQAAAAVjbGFpbQAAAAEAAAAEcG9vbAQAAAANc2hhcmVUb2tlbnNJZAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAAFdmFsdWUAAAABCQAEJgAAAAEFAAAABHBvb2wCAAAADnNoYXJlX2Fzc2V0X2lkBAAAABBzaGFyZVRva2VuTG9ja2VkCQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAANJHQwMjUxNDQyNTIwOQkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAyNTE0NDI1MjA5AAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAyNTE0NDI1MjA5AAAAAl8yBAAAAA0kdDAyNTIxNDI1MzI2CQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDI1MjE0MjUzMjYAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDI1MjE0MjUzMjYAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAyNTIxNDI1MzI2AAAAAl8zBAAAABZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMjUyMTQyNTMyNgAAAAJfNAQAAAANJHQwMjUzMzEyNTQzMQkBAAAACWNsYWltQ2FsYwAAAAMFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAQQAAAAPdXNlck5ld0ludGVyZXN0CAUAAAANJHQwMjUzMzEyNTQzMQAAAAJfMQQAAAAPY3VycmVudEludGVyZXN0CAUAAAANJHQwMjUzMzEyNTQzMQAAAAJfMgQAAAALY2xhaW1BbW91bnQIBQAAAA0kdDAyNTMzMTI1NDMxAAAAAl8zBAAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQIBQAAAA0kdDAyNTMzMTI1NDMxAAAAAl80BAAAAA1hdmFpbGFibGVGdW5kCQAAZAAAAAIJAQAAABF1c2VyQXZhaWxhYmxlU1dPUAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgUAAAALY2xhaW1BbW91bnQEAAAAEXVzZXJDbGFpbWVkQW1vdW50CQEAAAAYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50AAAAAgUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQDCQAAAAAAAAIFAAAADWF2YWlsYWJsZUZ1bmQAAAAAAAAAAAAJAAACAAAAAQIAAAAZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAAAAAAAAAgUAAAANYXZhaWxhYmxlRnVuZAAAAAAAAAAAAAkAAAIAAAABAgAAABlZb3UgaGF2ZSAwIGF2YWlsYWJsZSBTV09QAwkAAGYAAAACCQAAawAAAAMAAAAAAAAAAGMJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAADXNoYXJlVG9rZW5zSWQAAAAAAAAAAGQFAAAAEHNoYXJlVG9rZW5Mb2NrZWQJAAACAAAAAQIAAAAyQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBncmVhdGVyIHRoYW4gdG90YWxBbW91bnQJAARMAAAA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", "height": 1623455, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ALue9RXHBcKFxQaZfDPF5ESuwqeHFmvNeoA2tVuNKVc7 Next: BKtT1DzXJ1BrdYU9DqcBwkRwHCrCR3kVDoN3FN9R3e9Y Diff:
OldNewDifferences
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)))
248- let rewardPoolCurrent = toInt(fraction(toBigInt(totalRewardPerBlockCurrent), toBigInt(rewardPoolFractionCurrent), toBigInt(totalVoteShare)))
249- let rewardPoolPrevious = toInt(fraction(toBigInt(totalRewardPerBlockPrevious), toBigInt(rewardPoolFractionPrevious), toBigInt(totalVoteShare)))
248+ let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
249+ let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
250250 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
251251 then true
252252 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
290290 else false)
291291 then {
292292 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
293- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
293+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
294294 }
295295 else if (if ((height > rewardUpdateHeight))
296296 then (rewardUpdateHeight != poolRewardUpdateHeight)
297297 else false)
298298 then {
299299 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
300- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
300+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
301301 }
302302 else if (if (if ((height > rewardUpdateHeight))
303303 then (rewardUpdateHeight == poolRewardUpdateHeight)
306306 else false)
307307 then {
308308 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
309- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
309+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
310310 }
311311 else {
312312 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
313- let interestAfterUpdate = (lastInterest + toInt(fraction(toBigInt(rewardAfterLastInterestBeforeReawardUpdate), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
313+ let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
314314 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
315- (interestAfterUpdate + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
315+ (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
316316 }
317317 else if ((rewardUpdateHeight > height))
318318 then {
319319 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
320- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
320+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
321321 }
322322 else if ((lastInterestHeight > rewardUpdateHeight))
323323 then {
324324 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
325- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
325+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
326326 }
327327 else {
328328 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
329- let interestAfterUpdate = (lastInterest + toInt(fraction(toBigInt(rewardAfterLastInterestBeforeReawardUpdate), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
329+ let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
330330 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
331- (interestAfterUpdate + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
331+ (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
332332 }
333333
334334
336336 let shareAssetId = getShareAssetId(pool)
337337 let scaleValue = calcScaleValue(SWOP, shareAssetId)
338338 let shareTokenLocked = getTotalShareTokenLocked(pool)
339- let $t01389313958 = getLastInterestInfo(pool)
340- let lastInterestHeight = $t01389313958._1
341- let lastInterest = $t01389313958._2
342- let $t01396314075 = rewardInfo(pool)
343- let currentRewardPerBlock = $t01396314075._1
344- let rewardUpdateHeight = $t01396314075._2
345- let previousRewardPerBlock = $t01396314075._3
346- let poolRewardUpdateHeight = $t01396314075._4
347- let $t01408014159 = getUserInterestInfo(pool, caller)
348- let userLastInterest = $t01408014159._1
349- let userShareTokensAmount = $t01408014159._2
339+ let $t01344513510 = getLastInterestInfo(pool)
340+ let lastInterestHeight = $t01344513510._1
341+ let lastInterest = $t01344513510._2
342+ let $t01351513627 = rewardInfo(pool)
343+ let currentRewardPerBlock = $t01351513627._1
344+ let rewardUpdateHeight = $t01351513627._2
345+ let previousRewardPerBlock = $t01351513627._3
346+ let poolRewardUpdateHeight = $t01351513627._4
347+ let $t01363213711 = getUserInterestInfo(pool, caller)
348+ let userLastInterest = $t01363213711._1
349+ let userShareTokensAmount = $t01363213711._2
350350 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
351- let claimAmount = toInt(fraction(toBigInt(userShareTokensAmount), toBigInt((currentInterest - userLastInterest)), toBigInt(scaleValue)))
351+ let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
352352 let userNewInterest = currentInterest
353353 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
354354 }
355355
356356
357357 func calculateProtocolReward (pool) = {
358- let $t01472014785 = getLastInterestInfo(pool)
359- let lastInterestHeight = $t01472014785._1
360- let lastInterest = $t01472014785._2
361- let $t01479014901 = rewardInfo(pool)
362- let currentRewardPerBlock = $t01479014901._1
363- let rewardUpdateHeight = $t01479014901._2
364- let previousRewardPerBlock = $t01479014901._3
365- let poolRewardUpdateHeight = $t01479014901._4
358+ let $t01423114296 = getLastInterestInfo(pool)
359+ let lastInterestHeight = $t01423114296._1
360+ let lastInterest = $t01423114296._2
361+ let $t01430114412 = rewardInfo(pool)
362+ let currentRewardPerBlock = $t01430114412._1
363+ let rewardUpdateHeight = $t01430114412._2
364+ let previousRewardPerBlock = $t01430114412._3
365+ let poolRewardUpdateHeight = $t01430114412._4
366366 let shareTokenLocked = getTotalShareTokenLocked(pool)
367367 if (if ((shareTokenLocked == 0))
368368 then (poolRewardUpdateHeight == 0)
447447 func initPoolShareFarming (pool) = if ((i.caller != this))
448448 then throw("Only the DApp itself can call this function")
449449 else {
450- let $t01788317986 = rewardInfo(pool)
451- let currentReward = $t01788317986._1
452- let rewardUpdateHeight = $t01788317986._2
453- let previousRewardPerBlock = $t01788317986._3
454- let poolRewardUpdateHeight = $t01788317986._4
450+ let $t01739417497 = rewardInfo(pool)
451+ let currentReward = $t01739417497._1
452+ let rewardUpdateHeight = $t01739417497._2
453+ let previousRewardPerBlock = $t01739417497._3
454+ let poolRewardUpdateHeight = $t01739417497._4
455455 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
456456 }
457457
463463 else if (!(isActive))
464464 then throw("DApp is inactive at this moment")
465465 else {
466- let $t01839518515 = claimCalc(pool, adminIncreaseInterestAddress, 0)
467- let userNewInterest = $t01839518515._1
468- let currentInterest = $t01839518515._2
469- let claimAmount = $t01839518515._3
470- let userShareTokensAmount = $t01839518515._4
471- let $t01852018623 = rewardInfo(pool)
472- let currentReward = $t01852018623._1
473- let rewardUpdateHeight = $t01852018623._2
474- let previousRewardPerBlock = $t01852018623._3
475- let poolRewardUpdateHeight = $t01852018623._4
466+ let $t01790618026 = claimCalc(pool, adminIncreaseInterestAddress, 0)
467+ let userNewInterest = $t01790618026._1
468+ let currentInterest = $t01790618026._2
469+ let claimAmount = $t01790618026._3
470+ let userShareTokensAmount = $t01790618026._4
471+ let $t01803118134 = rewardInfo(pool)
472+ let currentReward = $t01803118134._1
473+ let rewardUpdateHeight = $t01803118134._2
474+ let previousRewardPerBlock = $t01803118134._3
475+ let poolRewardUpdateHeight = $t01803118134._4
476476 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
477477 }
478478
480480
481481 @Callable(i)
482482 func lockShareTokens (pool) = {
483- let $t01881518890 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
484- let pmtAmount = $t01881518890._1
485- let pmtAssetId = $t01881518890._2
486- let $t01889518968 = getAssetInfo(pmtAssetId)
487- let pmtStrAssetId = $t01889518968._1
488- let pmtAssetName = $t01889518968._2
489- let pmtDecimals = $t01889518968._3
490- let $t01897319081 = claimCalc(pool, i.caller, pmtAmount)
491- let userNewInterest = $t01897319081._1
492- let currentInterest = $t01897319081._2
493- let claimAmount = $t01897319081._3
494- let userShareTokensAmount = $t01897319081._4
483+ let $t01832618401 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
484+ let pmtAmount = $t01832618401._1
485+ let pmtAssetId = $t01832618401._2
486+ let $t01840618479 = getAssetInfo(pmtAssetId)
487+ let pmtStrAssetId = $t01840618479._1
488+ let pmtAssetName = $t01840618479._2
489+ let pmtDecimals = $t01840618479._3
490+ let $t01848418592 = claimCalc(pool, i.caller, pmtAmount)
491+ let userNewInterest = $t01848418592._1
492+ let currentInterest = $t01848418592._2
493+ let claimAmount = $t01848418592._3
494+ let userShareTokensAmount = $t01848418592._4
495495 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
496496 let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
497497 let totalShareAmount = getTotalShareTokenLocked(pool)
525525 if ((userPoolActiveVote != 0))
526526 then {
527527 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
528- let shareToken = (toInt(fraction(toBigInt(limitShareToken), toBigInt(userPoolActiveVote), toBigInt(poolActiveVote))) - userShareTokenLocked)
529- if ((shareToken > 0))
530- then if ((totalShareAmount == 0))
531- then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
532- else if ((shareToken >= pmtAmount))
533- then baseEntry
534- else throw(("Your maximum share token is " + toString(shareToken)))
535- else throw("You can't share token")
528+ let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
529+ if (if ((size(amountActiveVoteUserPoolStract) > 1))
530+ then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
531+ else false)
532+ then throw("You can't share token")
533+ else if ((pmtAmount > limitShareToken))
534+ then throw(("You can't share token more than " + toString(limitShareToken)))
535+ else if ((shareToken > 0))
536+ then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
537+ then throw("Balance of share-token is greater than totalAmount")
538+ else if ((totalShareAmount == 0))
539+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
540+ else if ((shareToken >= pmtAmount))
541+ then baseEntry
542+ else throw(("Your maximum share token is " + toString(shareToken)))
543+ else throw("You can't share token")
536544 }
537545 else throw("Your amount of token less than 0")
538546 }
544552 @Callable(i)
545553 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
546554 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
547- let $t02366023760 = claimCalc(pool, i.caller, 1)
548- let userNewInterest = $t02366023760._1
549- let currentInterest = $t02366023760._2
550- let claimAmount = $t02366023760._3
551- let userShareTokensAmount = $t02366023760._4
555+ let $t02303823138 = claimCalc(pool, i.caller, 1)
556+ let userNewInterest = $t02303823138._1
557+ let currentInterest = $t02303823138._2
558+ let claimAmount = $t02303823138._3
559+ let userShareTokensAmount = $t02303823138._4
552560 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
553561 let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
554562 let totalShareAmount = getTotalShareTokenLocked(pool)
561569 then throw("DApp is inactive at this moment")
562570 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
563571 then throw("Withdraw amount more then user locked amount")
564- else if ((toInt(fraction(toBigInt(99), toBigInt((accountBalance(shareTokensId) - shareTokensWithdrawAmount)), toBigInt(100))) > totalShareAmountNew))
572+ else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
565573 then throw("Balance of share-token is greater than totalAmount")
566574 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)]
567575 }
572580 func claim (pool) = {
573581 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
574582 let shareTokenLocked = getTotalShareTokenLocked(pool)
575- let $t02580725872 = getLastInterestInfo(pool)
576- let lastInterestHeight = $t02580725872._1
577- let lastInterest = $t02580725872._2
578- let $t02587725989 = rewardInfo(pool)
579- let currentRewardPerBlock = $t02587725989._1
580- let rewardUpdateHeight = $t02587725989._2
581- let previousRewardPerBlock = $t02587725989._3
582- let poolRewardUpdateHeight = $t02587725989._4
583- let $t02599426094 = claimCalc(pool, i.caller, 1)
584- let userNewInterest = $t02599426094._1
585- let currentInterest = $t02599426094._2
586- let claimAmount = $t02599426094._3
587- let userShareTokensAmount = $t02599426094._4
583+ let $t02514425209 = getLastInterestInfo(pool)
584+ let lastInterestHeight = $t02514425209._1
585+ let lastInterest = $t02514425209._2
586+ let $t02521425326 = rewardInfo(pool)
587+ let currentRewardPerBlock = $t02521425326._1
588+ let rewardUpdateHeight = $t02521425326._2
589+ let previousRewardPerBlock = $t02521425326._3
590+ let poolRewardUpdateHeight = $t02521425326._4
591+ let $t02533125431 = claimCalc(pool, i.caller, 1)
592+ let userNewInterest = $t02533125431._1
593+ let currentInterest = $t02533125431._2
594+ let claimAmount = $t02533125431._3
595+ let userShareTokensAmount = $t02533125431._4
588596 let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
589597 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
590598 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
594602 then throw("DApp is inactive at this moment")
595603 else if ((availableFund == 0))
596604 then throw("You have 0 available SWOP")
597- else if ((toInt(fraction(toBigInt(99), toBigInt(accountBalance(shareTokensId)), toBigInt(100))) > shareTokenLocked))
605+ else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
598606 then throw("Balance of share-token is greater than totalAmount")
599607 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)]
600608 }
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, DOWN)
235235 }
236236
237237
238238 func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(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)))
248- let rewardPoolCurrent = toInt(fraction(toBigInt(totalRewardPerBlockCurrent), toBigInt(rewardPoolFractionCurrent), toBigInt(totalVoteShare)))
249- let rewardPoolPrevious = toInt(fraction(toBigInt(totalRewardPerBlockPrevious), toBigInt(rewardPoolFractionPrevious), toBigInt(totalVoteShare)))
248+ let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
249+ 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,userAddress) = {
266266 let userLastInterest = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserLastInterest))
267267 let userShare = getInteger(this, (((pool + "_") + toString(userAddress)) + 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,shareAssetId,scaleValue,pmtAmount) = if ((shareTokenLocked == 0))
286286 then 0
287287 else if ((poolRewardUpdateHeight != 0))
288288 then if (if ((rewardUpdateHeight > height))
289289 then (rewardUpdateHeight == poolRewardUpdateHeight)
290290 else false)
291291 then {
292292 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
293- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
293+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
294294 }
295295 else if (if ((height > rewardUpdateHeight))
296296 then (rewardUpdateHeight != poolRewardUpdateHeight)
297297 else false)
298298 then {
299299 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
300- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
300+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
301301 }
302302 else if (if (if ((height > rewardUpdateHeight))
303303 then (rewardUpdateHeight == poolRewardUpdateHeight)
304304 else false)
305305 then (lastInterestHeight > rewardUpdateHeight)
306306 else false)
307307 then {
308308 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
309- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
309+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
310310 }
311311 else {
312312 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
313- let interestAfterUpdate = (lastInterest + toInt(fraction(toBigInt(rewardAfterLastInterestBeforeReawardUpdate), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
313+ let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
314314 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
315- (interestAfterUpdate + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
315+ (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
316316 }
317317 else if ((rewardUpdateHeight > height))
318318 then {
319319 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
320- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
320+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
321321 }
322322 else if ((lastInterestHeight > rewardUpdateHeight))
323323 then {
324324 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
325- (lastInterest + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
325+ (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
326326 }
327327 else {
328328 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
329- let interestAfterUpdate = (lastInterest + toInt(fraction(toBigInt(rewardAfterLastInterestBeforeReawardUpdate), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
329+ let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
330330 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
331- (interestAfterUpdate + toInt(fraction(toBigInt(reward), toBigInt(scaleValue), toBigInt(shareTokenLocked))))
331+ (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
332332 }
333333
334334
335335 func claimCalc (pool,caller,pmtAmount) = {
336336 let shareAssetId = getShareAssetId(pool)
337337 let scaleValue = calcScaleValue(SWOP, shareAssetId)
338338 let shareTokenLocked = getTotalShareTokenLocked(pool)
339- let $t01389313958 = getLastInterestInfo(pool)
340- let lastInterestHeight = $t01389313958._1
341- let lastInterest = $t01389313958._2
342- let $t01396314075 = rewardInfo(pool)
343- let currentRewardPerBlock = $t01396314075._1
344- let rewardUpdateHeight = $t01396314075._2
345- let previousRewardPerBlock = $t01396314075._3
346- let poolRewardUpdateHeight = $t01396314075._4
347- let $t01408014159 = getUserInterestInfo(pool, caller)
348- let userLastInterest = $t01408014159._1
349- let userShareTokensAmount = $t01408014159._2
339+ let $t01344513510 = getLastInterestInfo(pool)
340+ let lastInterestHeight = $t01344513510._1
341+ let lastInterest = $t01344513510._2
342+ let $t01351513627 = rewardInfo(pool)
343+ let currentRewardPerBlock = $t01351513627._1
344+ let rewardUpdateHeight = $t01351513627._2
345+ let previousRewardPerBlock = $t01351513627._3
346+ let poolRewardUpdateHeight = $t01351513627._4
347+ let $t01363213711 = getUserInterestInfo(pool, caller)
348+ let userLastInterest = $t01363213711._1
349+ let userShareTokensAmount = $t01363213711._2
350350 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, poolRewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
351- let claimAmount = toInt(fraction(toBigInt(userShareTokensAmount), toBigInt((currentInterest - userLastInterest)), toBigInt(scaleValue)))
351+ let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
352352 let userNewInterest = currentInterest
353353 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
354354 }
355355
356356
357357 func calculateProtocolReward (pool) = {
358- let $t01472014785 = getLastInterestInfo(pool)
359- let lastInterestHeight = $t01472014785._1
360- let lastInterest = $t01472014785._2
361- let $t01479014901 = rewardInfo(pool)
362- let currentRewardPerBlock = $t01479014901._1
363- let rewardUpdateHeight = $t01479014901._2
364- let previousRewardPerBlock = $t01479014901._3
365- let poolRewardUpdateHeight = $t01479014901._4
358+ let $t01423114296 = getLastInterestInfo(pool)
359+ let lastInterestHeight = $t01423114296._1
360+ let lastInterest = $t01423114296._2
361+ let $t01430114412 = rewardInfo(pool)
362+ let currentRewardPerBlock = $t01430114412._1
363+ let rewardUpdateHeight = $t01430114412._2
364+ let previousRewardPerBlock = $t01430114412._3
365+ let poolRewardUpdateHeight = $t01430114412._4
366366 let shareTokenLocked = getTotalShareTokenLocked(pool)
367367 if (if ((shareTokenLocked == 0))
368368 then (poolRewardUpdateHeight == 0)
369369 else false)
370370 then if ((rewardUpdateHeight > height))
371371 then {
372372 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
373373 reward
374374 }
375375 else if ((lastInterestHeight > rewardUpdateHeight))
376376 then {
377377 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
378378 reward
379379 }
380380 else {
381381 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
382382 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
383383 (reward + rewardAfterLastInterestBeforeReawardUpdate)
384384 }
385385 else if (if ((shareTokenLocked == 0))
386386 then (poolRewardUpdateHeight != 0)
387387 else false)
388388 then if (if ((rewardUpdateHeight > height))
389389 then (rewardUpdateHeight == poolRewardUpdateHeight)
390390 else false)
391391 then {
392392 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
393393 reward
394394 }
395395 else if (if ((height > rewardUpdateHeight))
396396 then (rewardUpdateHeight != poolRewardUpdateHeight)
397397 else false)
398398 then {
399399 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
400400 reward
401401 }
402402 else if (if (if ((height > rewardUpdateHeight))
403403 then (rewardUpdateHeight == poolRewardUpdateHeight)
404404 else false)
405405 then (lastInterestHeight > rewardUpdateHeight)
406406 else false)
407407 then {
408408 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
409409 reward
410410 }
411411 else {
412412 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
413413 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
414414 (reward + rewardAfterLastInterestBeforeReawardUpdate)
415415 }
416416 else 0
417417 }
418418
419419
420420 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
421421 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
422422 if ((pmtAssetId == poolShareAssetId))
423423 then true
424424 else false
425425 }
426426
427427
428428 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
429429
430430
431431 func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)]
432432
433433
434434 @Callable(i)
435435 func init (earlyLP) = if (isDefined(getString(this, keySWOPid)))
436436 then throw("SWOP already initialized")
437437 else {
438438 let initAmount = 100000000000000
439439 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
440440 let SWOPid = calculateAssetId(SWOPissue)
441441 [BooleanEntry(keyActive, true), Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
442442 }
443443
444444
445445
446446 @Callable(i)
447447 func initPoolShareFarming (pool) = if ((i.caller != this))
448448 then throw("Only the DApp itself can call this function")
449449 else {
450- let $t01788317986 = rewardInfo(pool)
451- let currentReward = $t01788317986._1
452- let rewardUpdateHeight = $t01788317986._2
453- let previousRewardPerBlock = $t01788317986._3
454- let poolRewardUpdateHeight = $t01788317986._4
450+ let $t01739417497 = rewardInfo(pool)
451+ let currentReward = $t01739417497._1
452+ let rewardUpdateHeight = $t01739417497._2
453+ let previousRewardPerBlock = $t01739417497._3
454+ let poolRewardUpdateHeight = $t01739417497._4
455455 [IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
456456 }
457457
458458
459459
460460 @Callable(i)
461461 func updatePoolInterest (pool) = if ((i.caller != wallet))
462462 then throw("Only the Admin itself can call this function")
463463 else if (!(isActive))
464464 then throw("DApp is inactive at this moment")
465465 else {
466- let $t01839518515 = claimCalc(pool, adminIncreaseInterestAddress, 0)
467- let userNewInterest = $t01839518515._1
468- let currentInterest = $t01839518515._2
469- let claimAmount = $t01839518515._3
470- let userShareTokensAmount = $t01839518515._4
471- let $t01852018623 = rewardInfo(pool)
472- let currentReward = $t01852018623._1
473- let rewardUpdateHeight = $t01852018623._2
474- let previousRewardPerBlock = $t01852018623._3
475- let poolRewardUpdateHeight = $t01852018623._4
466+ let $t01790618026 = claimCalc(pool, adminIncreaseInterestAddress, 0)
467+ let userNewInterest = $t01790618026._1
468+ let currentInterest = $t01790618026._2
469+ let claimAmount = $t01790618026._3
470+ let userShareTokensAmount = $t01790618026._4
471+ let $t01803118134 = rewardInfo(pool)
472+ let currentReward = $t01803118134._1
473+ let rewardUpdateHeight = $t01803118134._2
474+ let previousRewardPerBlock = $t01803118134._3
475+ let poolRewardUpdateHeight = $t01803118134._4
476476 [IntegerEntry((pool + keyLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterestHeight), height)]
477477 }
478478
479479
480480
481481 @Callable(i)
482482 func lockShareTokens (pool) = {
483- let $t01881518890 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
484- let pmtAmount = $t01881518890._1
485- let pmtAssetId = $t01881518890._2
486- let $t01889518968 = getAssetInfo(pmtAssetId)
487- let pmtStrAssetId = $t01889518968._1
488- let pmtAssetName = $t01889518968._2
489- let pmtDecimals = $t01889518968._3
490- let $t01897319081 = claimCalc(pool, i.caller, pmtAmount)
491- let userNewInterest = $t01897319081._1
492- let currentInterest = $t01897319081._2
493- let claimAmount = $t01897319081._3
494- let userShareTokensAmount = $t01897319081._4
483+ let $t01832618401 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
484+ let pmtAmount = $t01832618401._1
485+ let pmtAssetId = $t01832618401._2
486+ let $t01840618479 = getAssetInfo(pmtAssetId)
487+ let pmtStrAssetId = $t01840618479._1
488+ let pmtAssetName = $t01840618479._2
489+ let pmtDecimals = $t01840618479._3
490+ let $t01848418592 = claimCalc(pool, i.caller, pmtAmount)
491+ let userNewInterest = $t01848418592._1
492+ let currentInterest = $t01848418592._2
493+ let claimAmount = $t01848418592._3
494+ let userShareTokensAmount = $t01848418592._4
495495 let userShareAmountNew = (userShareTokensAmount + pmtAmount)
496496 let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
497497 let totalShareAmount = getTotalShareTokenLocked(pool)
498498 let totalShareAmountNew = (totalShareAmount + pmtAmount)
499499 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
500500 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
501501 let baseEntry = [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserShareTokensLocked), userShareAmountNew), IntegerEntry((pool + keyShareTokensLocked), totalShareAmountNew), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew)]
502502 if ((0 >= pmtAmount))
503503 then throw("You can't lock token")
504504 else if (!(isActive))
505505 then throw("DApp is inactive at this moment")
506506 else if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
507507 then throw("Incorrect pmtAssetId")
508508 else if (if (isFirstHarvest(Address(fromBase58String(pool))))
509509 then (getHeightFirstHarvest(Address(fromBase58String(pool))) > height)
510510 else false)
511511 then {
512512 let harvestPeriod = ((((getHeightFirstHarvest(Address(fromBase58String(pool))) - startHeight) + 1) / periodLength) - 1)
513513 let amountOfVoting = split(getStringValue(votingAddress, (((toString(i.caller) + "_") + pool) + "_user_pool_struc")), "_")
514514 let amountPoolStract = split(getStringValue(votingAddress, (pool + "_pool_struc")), "_")
515515 let amountActiveVoteUserPoolStract = split(valueOrElse(getString(votingAddress, (((toString(i.caller) + "_") + pool) + kHarvestUserPoolActiveVoteStrucVoting)), ""), "_")
516516 let amountPoolActiveVoteStract = split(valueOrElse(getString(votingAddress, (pool + kHarvestPoolActiveVoteStrucVoting)), ""), "_")
517517 let userShareTokenLocked = userShareTokensAmount
518518 let userPoolActiveVote = if ((toString(currPeriod) == amountOfVoting[2]))
519519 then valueOrElse(parseInt(amountActiveVoteUserPoolStract[0]), 0)
520520 else valueOrElse(parseInt(amountOfVoting[1]), 0)
521521 let poolActiveVote = if ((toString(currPeriod) == amountPoolStract[2]))
522522 then valueOrElse(parseInt(amountPoolActiveVoteStract[0]), 0)
523523 else valueOrElse(parseInt(amountPoolStract[1]), 0)
524524 let protocolReward = calculateProtocolReward(pool)
525525 if ((userPoolActiveVote != 0))
526526 then {
527527 let limitShareToken = getShareLimitToken(addressFromStringValue(pool))
528- let shareToken = (toInt(fraction(toBigInt(limitShareToken), toBigInt(userPoolActiveVote), toBigInt(poolActiveVote))) - userShareTokenLocked)
529- if ((shareToken > 0))
530- then if ((totalShareAmount == 0))
531- then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
532- else if ((shareToken >= pmtAmount))
533- then baseEntry
534- else throw(("Your maximum share token is " + toString(shareToken)))
535- else throw("You can't share token")
528+ let shareToken = (fraction(limitShareToken, userPoolActiveVote, poolActiveVote) - userShareTokenLocked)
529+ if (if ((size(amountActiveVoteUserPoolStract) > 1))
530+ then (valueOrElse(parseInt(amountActiveVoteUserPoolStract[1]), 0) >= harvestPeriod)
531+ else false)
532+ then throw("You can't share token")
533+ else if ((pmtAmount > limitShareToken))
534+ then throw(("You can't share token more than " + toString(limitShareToken)))
535+ else if ((shareToken > 0))
536+ then if ((fraction(99, (accountBalance(pmtAssetId) + pmtAmount), 100) > totalShareAmountNew))
537+ then throw("Balance of share-token is greater than totalAmount")
538+ else if ((totalShareAmount == 0))
539+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
540+ else if ((shareToken >= pmtAmount))
541+ then baseEntry
542+ else throw(("Your maximum share token is " + toString(shareToken)))
543+ else throw("You can't share token")
536544 }
537545 else throw("Your amount of token less than 0")
538546 }
539547 else baseEntry
540548 }
541549
542550
543551
544552 @Callable(i)
545553 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
546554 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
547- let $t02366023760 = claimCalc(pool, i.caller, 1)
548- let userNewInterest = $t02366023760._1
549- let currentInterest = $t02366023760._2
550- let claimAmount = $t02366023760._3
551- let userShareTokensAmount = $t02366023760._4
555+ let $t02303823138 = claimCalc(pool, i.caller, 1)
556+ let userNewInterest = $t02303823138._1
557+ let currentInterest = $t02303823138._2
558+ let claimAmount = $t02303823138._3
559+ let userShareTokensAmount = $t02303823138._4
552560 let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
553561 let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
554562 let totalShareAmount = getTotalShareTokenLocked(pool)
555563 let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
556564 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
557565 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
558566 if ((shareTokensWithdrawAmount > userShareTokensAmount))
559567 then throw("Withdraw amount more then user locked amount")
560568 else if (!(isActive))
561569 then throw("DApp is inactive at this moment")
562570 else if ((shareTokensWithdrawAmount > userShareTokensAmount))
563571 then throw("Withdraw amount more then user locked amount")
564- else if ((toInt(fraction(toBigInt(99), toBigInt((accountBalance(shareTokensId) - shareTokensWithdrawAmount)), toBigInt(100))) > totalShareAmountNew))
572+ else if ((fraction(99, (accountBalance(shareTokensId) - shareTokensWithdrawAmount), 100) > totalShareAmountNew))
565573 then throw("Balance of share-token is greater than totalAmount")
566574 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)]
567575 }
568576
569577
570578
571579 @Callable(i)
572580 func claim (pool) = {
573581 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
574582 let shareTokenLocked = getTotalShareTokenLocked(pool)
575- let $t02580725872 = getLastInterestInfo(pool)
576- let lastInterestHeight = $t02580725872._1
577- let lastInterest = $t02580725872._2
578- let $t02587725989 = rewardInfo(pool)
579- let currentRewardPerBlock = $t02587725989._1
580- let rewardUpdateHeight = $t02587725989._2
581- let previousRewardPerBlock = $t02587725989._3
582- let poolRewardUpdateHeight = $t02587725989._4
583- let $t02599426094 = claimCalc(pool, i.caller, 1)
584- let userNewInterest = $t02599426094._1
585- let currentInterest = $t02599426094._2
586- let claimAmount = $t02599426094._3
587- let userShareTokensAmount = $t02599426094._4
583+ let $t02514425209 = getLastInterestInfo(pool)
584+ let lastInterestHeight = $t02514425209._1
585+ let lastInterest = $t02514425209._2
586+ let $t02521425326 = rewardInfo(pool)
587+ let currentRewardPerBlock = $t02521425326._1
588+ let rewardUpdateHeight = $t02521425326._2
589+ let previousRewardPerBlock = $t02521425326._3
590+ let poolRewardUpdateHeight = $t02521425326._4
591+ let $t02533125431 = claimCalc(pool, i.caller, 1)
592+ let userNewInterest = $t02533125431._1
593+ let currentInterest = $t02533125431._2
594+ let claimAmount = $t02533125431._3
595+ let userShareTokensAmount = $t02533125431._4
588596 let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
589597 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
590598 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
591599 if ((availableFund == 0))
592600 then throw("You have 0 available SWOP")
593601 else if (!(isActive))
594602 then throw("DApp is inactive at this moment")
595603 else if ((availableFund == 0))
596604 then throw("You have 0 available SWOP")
597- else if ((toInt(fraction(toBigInt(99), toBigInt(accountBalance(shareTokensId)), toBigInt(100))) > shareTokenLocked))
605+ else if ((fraction(99, accountBalance(shareTokensId), 100) > shareTokenLocked))
598606 then throw("Balance of share-token is greater than totalAmount")
599607 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)]
600608 }
601609
602610
603611
604612 @Callable(i)
605613 func shutdown () = if (!(isActive))
606614 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified")))
607615 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
608616 then throw("Only admin can call this function")
609617 else suspend("Paused by admin")
610618
611619
612620
613621 @Callable(i)
614622 func activate () = if (isActive)
615623 then throw("DApp is already active")
616624 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
617625 then throw("Only admin can call this function")
618626 else [BooleanEntry(keyActive, true), DeleteEntry(keyCause)]
619627
620628
621629 @Verifier(tx)
622630 func verify () = match tx {
623631 case _ =>
624632 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
625633 then 1
626634 else 0
627635 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
628636 then 1
629637 else 0
630638 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
631639 then 1
632640 else 0
633641 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
634642 }
635643

github/deemru/w8io/873ac7e 
93.90 ms