tx · J9ZNaeuBxmgfG8qwqjVGw5YDoEeb3FNQb1qTAHt9DW6c

3MsjAKkxKjxVU4gC1BpJ1jKmAZyRufUCErC:  -0.01400000 Waves

2021.04.27 18:15 [1501027] smart account 3MsjAKkxKjxVU4gC1BpJ1jKmAZyRufUCErC > SELF 0.00000000 Waves

{ "type": 13, "id": "J9ZNaeuBxmgfG8qwqjVGw5YDoEeb3FNQb1qTAHt9DW6c", "fee": 1400000, "feeAssetId": null, "timestamp": 1619536592258, "version": 2, "chainId": 84, "sender": "3MsjAKkxKjxVU4gC1BpJ1jKmAZyRufUCErC", "senderPublicKey": "FQ5JNhUjFS3Ty3nSykXrGWHDt4NvXJDCv4JQiJ3dXmKa", "proofs": [ "3qhVmvPggHygiQqJAvBEqXPqWVAS4SdZprRqEenHDGuXoLULzJpLjpAgPRtPaqoGmsUcTyZoxdTQAFLRF7jRQn2e" ], "script": "base64:AAIEAAAAAAAAACEIAhIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggBEgMKAQgAAABIAAAAAAxhZG1pblB1YktleTEBAAAAILoJ1zuJWaTRXaD/8bsz0KrhOWkPy+K9kdY77k9eqOATAAAAAAxhZG1pblB1YktleTIBAAAAIMKRRJmz0rC0DSKlkVi9iLyhN7sIy//djOaU71sWDn5AAAAAAAxhZG1pblB1YktleTMBAAAAII4eFy54sQc79EhOejMoYHYod/yZ5ZIwoyDCz6ir6Q5VAAAAABRrZXlTaGFyZVRva2Vuc0xvY2tlZAIAAAAaX3RvdGFsX3NoYXJlX3Rva2Vuc19sb2NrZWQAAAAAHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCAAAAHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAB1rZXlSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwIAAAAeX3ByZXZpb3VzX3Bvb2xfZnJhY3Rpb25fcmV3YXJkAAAAAB1rZXlUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIAAAAedG90YWxfcmV3YXJkX3Blcl9ibG9ja19jdXJyZW50AAAAAB5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMCAAAAH3RvdGFsX3Jld2FyZF9wZXJfYmxvY2tfcHJldmlvdXMAAAAAFWtleVJld2FyZFVwZGF0ZUhlaWdodAIAAAAUcmV3YXJkX3VwZGF0ZV9oZWlnaHQAAAAAD2tleUxhc3RJbnRlcmVzdAIAAAAOX2xhc3RfaW50ZXJlc3QAAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAIAAAAVX2xhc3RfaW50ZXJlc3RfaGVpZ2h0AAAAABhrZXlVc2VyU2hhcmVUb2tlbnNMb2NrZWQCAAAAFF9zaGFyZV90b2tlbnNfbG9ja2VkAAAAABNrZXlVc2VyTGFzdEludGVyZXN0AgAAAA5fbGFzdF9pbnRlcmVzdAAAAAAJa2V5U1dPUGlkAgAAAAdTV09QX2lkAAAAABhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQCAAAAFF9TV09QX2NsYWltZWRfYW1vdW50AAAAABxrZXlVc2VyU1dPUExhc3RDbGFpbWVkQW1vdW50AgAAABlfU1dPUF9sYXN0X2NsYWltZWRfYW1vdW50AAAAABBrZXlBdmFpbGFibGVTV09QAgAAAA9fYXZhaWxhYmxlX1NXT1AAAAAAFWtleUZhcm1pbmdTdGFydEhlaWdodAIAAAAUZmFybWluZ19zdGFydF9oZWlnaHQAAAAABmtleUFQWQIAAAADYXB5AAAAABZrUHJldmlvdXNUb3RhbFZvdGVTV09QAgAAABhwcmV2aW91c190b3RhbF92b3RlX1NXT1AAAAAAE2tleVN3b3BZZWFyRW1pc3Npb24CAAAAEnN3b3BfeWVhcl9lbWlzc2lvbgAAAAAPa2V5QmFsYW5jZWNwbW1BAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAAD2tleUJhbGFuY2VjcG1tQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAAtrZXlBc3NldElkQQIAAAAKQV9hc3NldF9pZAAAAAALa2V5QXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAAE2tleWZpcnN0SGFydmVzdENwbW0CAAAADWZpcnN0X2hhcnZlc3QAAAAAEWdvdmVybmFuY2VBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUcfFVgbQTJcWNlHB+frBs1+VvhcIsEzy/AAAAAAZ3YWxsZXQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTfPUuXiVhZ3hXg5FELVt09el+9tX+FIYkAAAAADXZvdGluZ0FkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVSynzmSWe4HFYy6ULwEhxUJJiMMr+HPVy8AAAAAD3N3b3BVc2RuQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVKLI0H+7JtHkz/1K8g9khI6OrOKOmyE7ywAAAAAQd2F2ZXNVc2RuQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVGJjJCVjcna7nE1lMx4f7HJZLxUmFD3eXgAAAAAcYWRtaW5JbmNyZWFzZUludGVyZXN0QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBVN89S5eJWFneFeDkUQtW3T16X721f4UhiQAAAAAOb25lV2Vla0luQmxvY2sAAAAAAAAAJ3oAAAAADnRvdGFsVm90ZVNoYXJlAAAAAAJUC+QAAQAAAAtzdHJBc3NldElkQQAAAAEAAAAEcG9vbAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEcG9vbAUAAAALa2V5QXNzZXRJZEEBAAAAC3N0ckFzc2V0SWRCAAAAAQAAAARwb29sCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAARwb29sBQAAAAtrZXlBc3NldElkQgEAAAAIYXNzZXRJZEEAAAABAAAABHBvb2wDCQAAAAAAAAIJAQAAAAtzdHJBc3NldElkQQAAAAEFAAAABHBvb2wCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEJAQAAAAtzdHJBc3NldElkQQAAAAEFAAAABHBvb2wBAAAACGFzc2V0SWRCAAAAAQAAAARwb29sAwkAAAAAAAACCQEAAAALc3RyQXNzZXRJZEIAAAABBQAAAARwb29sAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABCQEAAAALc3RyQXNzZXRJZEIAAAABBQAAAARwb29sAAAAAAtrQmFzZVBlcmlvZAIAAAALYmFzZV9wZXJpb2QAAAAADWtQZXJpb2RMZW5ndGgCAAAADXBlcmlvZF9sZW5ndGgAAAAADGtTdGFydEhlaWdodAIAAAAMc3RhcnRfaGVpZ2h0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAAWa0R1cmF0aW9uRnVsbFZvdGVQb3dlcgIAAAAYZHVyYXRpb25fZnVsbF92b3RlX3Bvd2VyAAAAAA1rTWluVm90ZVBvd2VyAgAAAA5taW5fdm90ZV9wb3dlcgAAAAAKYmFzZVBlcmlvZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAC2tCYXNlUGVyaW9kAgAAABFFbXB0eSBrQmFzZVBlcmlvZAAAAAALc3RhcnRIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA12b3RpbmdBZGRyZXNzBQAAAAxrU3RhcnRIZWlnaHQCAAAAEkVtcHR5IGtTdGFydEhlaWdodAAAAAAMcGVyaW9kTGVuZ3RoCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAANa1BlcmlvZExlbmd0aAIAAAATRW1wdHkga1BlcmlvZExlbmd0aAAAAAAVZHVyYXRpb25GdWxsVm90ZVBvd2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAAWa0R1cmF0aW9uRnVsbFZvdGVQb3dlcgIAAAAcRW1wdHkga0R1cmF0aW9uRnVsbFZvdGVQb3dlcgAAAAAMbWluVm90ZVBvd2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAANa01pblZvdGVQb3dlcgIAAAATRW1wdHkga01pblZvdGVQb3dlcgAAAAAKY3VyclBlcmlvZAkAAGQAAAACBQAAAApiYXNlUGVyaW9kCQAAaQAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAtzdGFydEhlaWdodAUAAAAMcGVyaW9kTGVuZ3RoAAAAAANBUFkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAABmtleUFQWQAAAAAQU3dvcFllYXJFbWlzc2lvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAATa2V5U3dvcFllYXJFbWlzc2lvbgEAAAAKYXNzZXROYW1lQQAAAAEAAAAEcG9vbAQAAAAHJG1hdGNoMAkBAAAACGFzc2V0SWRBAAAAAQUAAAAEcG9vbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAAmlkAAAABG5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwAgAAAAVXQVZFUwkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAKYXNzZXROYW1lQgAAAAEAAAAEcG9vbAQAAAAHJG1hdGNoMAkBAAAA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AAAAHWtleVRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50AgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAARZ292ZXJuYW5jZUFkZHJlc3MEAAAAG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAAB5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAB5rZXlUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMCAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwQAAAAZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzCQABLAAAAAIFAAAABHBvb2wFAAAAHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAHGtleVJld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAABFnb3Zlcm5hbmNlQWRkcmVzcwQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAFWtleVJld2FyZFVwZGF0ZUhlaWdodAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAAFWtleVJld2FyZFVwZGF0ZUhlaWdodAIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAAEWdvdmVybmFuY2VBZGRyZXNzCQABLAAAAAIFAAAABHBvb2wFAAAAHWtleVJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAARwb29sBQAAAB1rZXlSZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAEWdvdmVybmFuY2VBZGRyZXNzBAAAABFyZXdhcmRQb29sQ3VycmVudAkAAGsAAAADBQAAABp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAUAAAAZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAUAAAAOdG90YWxWb3RlU2hhcmUEAAAAEnJld2FyZFBvb2xQcmV2aW91cwkAAGsAAAADBQAAABt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMFAAAAGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzBQAAAA50b3RhbFZvdGVTaGFyZQMDCQAAZgAAAAIFAAAAEXJld2FyZFBvb2xDdXJyZW50BQAAABp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAYJAABmAAAAAgUAAAAScmV3YXJkUG9vbFByZXZpb3VzBQAAABt0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAACAAAAAQIAAABicmV3YXJkUG9vbEN1cnJlbnQgPiB0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudCBvciByZXdhcmRQb29sUHJldmlvdXMgPiB0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAAUVAAAAAwUAAAARcmV3YXJkUG9vbEN1cnJlbnQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAScmV3YXJkUG9vbFByZXZpb3VzAQAAABNnZXRMYXN0SW50ZXJlc3RJbmZvAAAAAQAAAARwb29sBAAAAAxsYXN0SW50ZXJlc3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAkAASwAAAACCQABLAAAAAICAAAAFE5vIGRhdGEgb24gdGhlIGtleTogBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QEAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAFFAAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAMbGFzdEludGVyZXN0AQAAABNnZXRVc2VySW50ZXJlc3RJbmZvAAAAAgAAAARwb29sAAAAC3VzZXJBZGRyZXNzBAAAABB1c2VyTGFzdEludGVyZXN0CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QEAAAACXVzZXJTaGFyZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAABhrZXlVc2VyU2hhcmVUb2tlbnNMb2NrZWQEAAAADGxhc3RJbnRlcmVzdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0CQABLAAAAAIJAAEsAAAAAgIAAAAUTm8gZGF0YSBvbiB0aGUga2V5OiAFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAQAAAAVdXNlckxhc3RJbnRlcmVzdFZhbHVlBAAAAAckbWF0Y2gwBQAAABB1c2VyTGFzdEludGVyZXN0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAAByRtYXRjaDAFAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAADGxhc3RJbnRlcmVzdAQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50BAAAAAckbWF0Y2gwBQAAAAl1c2VyU2hhcmUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJdXNlclNoYXJlBQAAAAckbWF0Y2gwBQAAAAl1c2VyU2hhcmUAAAAAAAAAAAAJAAUUAAAAAgUAAAAVdXNlckxhc3RJbnRlcmVzdFZhbHVlBQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQBAAAADGNhbGNJbnRlcmVzdAAAAAkAAAASbGFzdEludGVyZXN0SGVpZ2h0AAAAEnJld2FyZFVwZGF0ZUhlaWdodAAAAAxsYXN0SW50ZXJlc3QAAAAVY3VycmVudFJld2FyZFBlckJsb2NrAAAAEHNoYXJlVG9rZW5Mb2NrZWQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawAAAAxzaGFyZUFzc2V0SWQAAAAKc2NhbGVWYWx1ZQAAAAlwbXRBbW91bnQDCQAAAAAAAAIFAAAAEHNoYXJlVG9rZW5Mb2NrZWQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAAGaGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkAwkAAGYAAAACBQAAABJsYXN0SW50ZXJlc3RIZWlnaHQFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAQAAAAGcmV3YXJkCQAAaAAAAAIFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkBAAAACpyZXdhcmRBZnRlckxhc3RJbnRlcmVzdEJlZm9yZVJlYXdhcmRVcGRhdGUJAABoAAAAAgUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAAGUAAAACBQAAABJyZXdhcmRVcGRhdGVIZWlnaHQFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAQAAAATaW50ZXJlc3RBZnRlclVwZGF0ZQkAAGQAAAACBQAAAAxsYXN0SW50ZXJlc3QJAABrAAAAAwUAAAAqcmV3YXJkQWZ0ZXJMYXN0SW50ZXJlc3RCZWZvcmVSZWF3YXJkVXBkYXRlBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkBAAAAAZyZXdhcmQJAABoAAAAAgUAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CQAAZAAAAAIFAAAAE2ludGVyZXN0QWZ0ZXJVcGRhdGUJAABrAAAAAwUAAAAGcmV3YXJkBQAAAApzY2FsZVZhbHVlBQAAABBzaGFyZVRva2VuTG9ja2VkAQAAAAljbGFpbUNhbGMAAAADAAAABHBvb2wAAAAGY2FsbGVyAAAACXBtdEFtb3VudAQAAAAMc2hhcmVBc3NldElkCQEAAAAPZ2V0U2hhcmVBc3NldElkAAAAAQUAAAAEcG9vbAQAAAAKc2NhbGVWYWx1ZQkBAAAADmNhbGNTY2FsZVZhbHVlAAAAAgUAAAAEU1dPUAUAAAAMc2hhcmVBc3NldElkBAAAABBzaGFyZVRva2VuTG9ja2VkCQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAANJHQwMTAwNjUxMDEzMAkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAxMDA2NTEwMTMwAAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAxMDA2NTEwMTMwAAAAAl8yBAAAAA0kdDAxMDEzNTEwMjIzCQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDEwMTM1MTAyMjMAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDEwMTM1MTAyMjMAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAxMDEzNTEwMjIzAAAAAl8zBAAAAA0kdDAxMDIyODEwMzA3CQEAAAATZ2V0VXNlckludGVyZXN0SW5mbwAAAAIFAAAABHBvb2wFAAAABmNhbGxlcgQAAAAQdXNlckxhc3RJbnRlcmVzdAgFAAAADSR0MDEwMjI4MTAzMDcAAAACXzEEAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAgFAAAADSR0MDEwMjI4MTAzMDcAAAACXzIEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAADGNhbGNJbnRlcmVzdAAAAAkFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAxsYXN0SW50ZXJlc3QFAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawUAAAAQc2hhcmVUb2tlbkxvY2tlZAUAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawUAAAAMc2hhcmVBc3NldElkBQAAAApzY2FsZVZhbHVlBQAAAAlwbXRBbW91bnQEAAAAC2NsYWltQW1vdW50CQAAawAAAAMFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEHVzZXJMYXN0SW50ZXJlc3QFAAAACnNjYWxlVmFsdWUEAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0CQAFFgAAAAQFAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0BQAAAAtjbGFpbUFtb3VudAUAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50AQAAABdjYWxjdWxhdGVQcm90b2NvbFJld2FyZAAAAAEAAAAEcG9vbAQAAAANJHQwMTA3ODExMDg0NgkBAAAAE2dldExhc3RJbnRlcmVzdEluZm8AAAABBQAAAARwb29sBAAAABJsYXN0SW50ZXJlc3RIZWlnaHQIBQAAAA0kdDAxMDc4MTEwODQ2AAAAAl8xBAAAAAxsYXN0SW50ZXJlc3QIBQAAAA0kdDAxMDc4MTEwODQ2AAAAAl8yBAAAAA0kdDAxMDg1MjEwOTQwCQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAAFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFAAAADSR0MDEwODUyMTA5NDAAAAACXzEEAAAAEnJld2FyZFVwZGF0ZUhlaWdodAgFAAAADSR0MDEwODUyMTA5NDAAAAACXzIEAAAAFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQAAAA0kdDAxMDg1MjEwOTQwAAAAAl8zBAAAABBzaGFyZVRva2VuTG9ja2VkCQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAMJAAAAAAAAAgUAAAAQc2hhcmVUb2tlbkxvY2tlZAAAAAAAAAAAAAAAAAAAAAAAAAMJAABmAAAAAgUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BQAAAAZoZWlnaHQEAAAABnJld2FyZAkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BQAAAAZyZXdhcmQDCQAAZgAAAAIFAAAAEmxhc3RJbnRlcmVzdEhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BQAAAAZyZXdhcmQEAAAAKnJld2FyZEFmdGVyTGFzdEludGVyZXN0QmVmb3JlUmVhd2FyZFVwZGF0ZQkAAGgAAAACBQAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAAEnJld2FyZFVwZGF0ZUhlaWdodAUAAAASbGFzdEludGVyZXN0SGVpZ2h0BAAAAAZyZXdhcmQJAABoAAAAAgUAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCQAAZQAAAAIFAAAABmhlaWdodAUAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CQAAZAAAAAIFAAAABnJld2FyZAUAAAAqcmV3YXJkQWZ0ZXJMYXN0SW50ZXJlc3RCZWZvcmVSZWF3YXJkVXBkYXRlAQAAABZjaGVja1BtdEFzc2V0SWRDb3JyZWN0AAAAAgAAAARwb29sAAAACnBtdEFzc2V0SWQEAAAAEHBvb2xTaGFyZUFzc2V0SWQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgkBAAAABXZhbHVlAAAAAQkABCYAAAABBQAAAARwb29sAgAAAA5zaGFyZV9hc3NldF9pZAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAQcG9vbFNoYXJlQXNzZXRJZAYHAQAAABhnZXRVc2VyU1dPUENsYWltZWRBbW91bnQAAAACAAAABHBvb2wAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEFAAAABHVzZXIFAAAAGGtleVVzZXJTV09QQ2xhaW1lZEFtb3VudAAAAAAAAAAAAAAAAAYAAAABaQEAAAAEaW5pdAAAAAEAAAAHZWFybHlMUAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMCAAAACWtleVNXT1BpZAkAAAIAAAABAgAAABhTV09QIGFscmVhZHkgaW5pdGlhbGl6ZWQEAAAACmluaXRBbW91bnQAAABa8xB6QAAEAAAACVNXT1Bpc3N1ZQkABEIAAAAFAgAAAARTV09QAgAAABNTV09QIHByb3RvY29sIHRva2VuBQAAAAppbml0QW1vdW50AAAAAAAAAAAIBgQAAAAGU1dPUGlkCQAEOAAAAAEFAAAACVNXT1Bpc3N1ZQkABEwAAAACCQAEQgAAAAUCAAAABFNXT1ACAAAAE1NXT1AgcHJvdG9jb2wgdG9rZW4FAAAACmluaXRBbW91bnQAAAAAAAAAAAgGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtleVNXT1BpZAkAAlgAAAABBQAAAAZTV09QaWQFAAAAA25pbAAAAAFpAQAAABRpbml0UG9vbFNoYXJlRmFybWluZwAAAAEAAAAEcG9vbAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAACtPbmx5IHRoZSBEQXBwIGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAAAAA0kdDAxMjg3NTEyOTU1CQEAAAAKcmV3YXJkSW5mbwAAAAEFAAAABHBvb2wEAAAADWN1cnJlbnRSZXdhcmQIBQAAAA0kdDAxMjg3NTEyOTU1AAAAAl8xBAAAABJyZXdhcmRVcGRhdGVIZWlnaHQIBQAAAA0kdDAxMjg3NTEyOTU1AAAAAl8yBAAAABZwcmV2aW91c1Jld2FyZFBlckJsb2NrCAUAAAANJHQwMTI4NzUxMjk1NQAAAAJfMwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAABRrZXlTaGFyZVRva2Vuc0xvY2tlZAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQFAAAAA25pbAAAAAFpAQAAABJ1cGRhdGVQb29sSW50ZXJlc3QAAAABAAAABHBvb2wDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABndhbGxldAkAAAIAAAABAgAAACxPbmx5IHRoZSBBZG1pbiBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQAAAANJHQwMTMzMDQxMzQyNAkBAAAACWNsYWltQ2FsYwAAAAMFAAAABHBvb2wFAAAAHGFkbWluSW5jcmVhc2VJbnRlcmVzdEFkZHJlc3MAAAAAAAAAAAAEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDEzMzA0MTM0MjQAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDEzMzA0MTM0MjQAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMTMzMDQxMzQyNAAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMTMzMDQxMzQyNAAAAAJfNAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sBQAAAA9rZXlMYXN0SW50ZXJlc3QFAAAAD3VzZXJOZXdJbnRlcmVzdAUAAAADbmlsAAAAAWkBAAAAD2xvY2tTaGFyZVRva2VucwAAAAEAAAAEcG9vbAQAAAANJHQwMTM1NTcxMzYzMgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDEzNTU3MTM2MzIAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxMzU1NzEzNjMyAAAAAl8yBAAAAA0kdDAxMzYzNzEzNzQ1CQEAAAAJY2xhaW1DYWxjAAAAAwUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDEzNjM3MTM3NDUAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDEzNjM3MTM3NDUAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMTM2MzcxMzc0NQAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMTM2MzcxMzc0NQAAAAJfNAQAAAASdXNlclNoYXJlQW1vdW50TmV3CQAAZAAAAAIFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAUAAAAJcG10QW1vdW50BAAAABFhdmFpbGFibGVGdW5kc05ldwkAAGQAAAACCQEAAAARdXNlckF2YWlsYWJsZVNXT1AAAAACBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIFAAAAC2NsYWltQW1vdW50BAAAABB0b3RhbFNoYXJlQW1vdW50CQEAAAAYZ2V0VG90YWxTaGFyZVRva2VuTG9ja2VkAAAAAQUAAAAEcG9vbAQAAAATdG90YWxTaGFyZUFtb3VudE5ldwkAAGQAAAACBQAAABB0b3RhbFNoYXJlQW1vdW50BQAAAAlwbXRBbW91bnQEAAAAEXVzZXJDbGFpbWVkQW1vdW50CQEAAAAYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50AAAAAgUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQEAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QFAAAAD3VzZXJOZXdJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZAUAAAASdXNlclNoYXJlQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFGtleVNoYXJlVG9rZW5zTG9ja2VkBQAAABN0b3RhbFNoYXJlQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAYa2V5VXNlclNXT1BDbGFpbWVkQW1vdW50BQAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAHGtleVVzZXJTV09QTGFzdENsYWltZWRBbW91bnQFAAAAC2NsYWltQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAQa2V5QXZhaWxhYmxlU1dPUAUAAAARYXZhaWxhYmxlRnVuZHNOZXcFAAAAA25pbAMJAQAAAAEhAAAAAQkBAAAAFmNoZWNrUG10QXNzZXRJZENvcnJlY3QAAAACBQAAAARwb29sBQAAAApwbXRBc3NldElkCQAAAgAAAAECAAAAFEluY29ycmVjdCBwbXRBc3NldElkAwMJAQAAAA5pc0ZpcnN0SGFydmVzdAAAAAEJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAARwb29sCQAAZgAAAAIFAAAABmhlaWdodAkAAGgAAAACCQEAAAAVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AAAAAQkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAABHBvb2wFAAAADHBlcmlvZExlbmd0aAcEAAAADmFtb3VudE9mVm90aW5nCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAADXZvdGluZ0FkZHJlc3MJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQUAAAAEdGhpcwIAAAABXwUAAAAEcG9vbAIAAAAQX3VzZXJfcG9vbF9zdHJ1YwIAAAABXwQAAAAScHJldmlvc1RvdGFsVm90aW5nCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAFmtQcmV2aW91c1RvdGFsVm90ZVNXT1ACAAAAAV8EAAAAFWFzc2V0YmFsYW5jZXN3b3B1c2RuQQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPc3dvcFVzZG5BZGRyZXNzBQAAAA9rZXlCYWxhbmNlY3BtbUEAAAAAAAAAAAAEAAAAFWFzc2V0YmFsYW5jZXN3b3B1c2RuQgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAPc3dvcFVzZG5BZGRyZXNzBQAAAA9rZXlCYWxhbmNlY3BtbUIAAAAAAAAAAAAEAAAAFmFzc2V0YmFsYW5jZXdhdmVzdXNkbkEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEHdhdmVzVXNkbkFkZHJlc3MFAAAAD2tleUJhbGFuY2VjcG1tQQAAAAAAAAAAAAQAAAAWYXNzZXRiYWxhbmNld2F2ZXN1c2RuQgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQd2F2ZXNVc2RuQWRkcmVzcwUAAAAPa2V5QmFsYW5jZWNwbW1CAAAAAAAAAAAABAAAAAt0b3RhbFBlcmlvZAkAAZEAAAACBQAAABJwcmV2aW9zVG90YWxWb3RpbmcAAAAAAAAAAAEEAAAADHByZXZpb3NUb3RhbAkAAZEAAAACBQAAABJwcmV2aW9zVG90YWxWb3RpbmcAAAAAAAAAAAAEAAAAFHVzZXJTaGFyZVRva2VuTG9ja2VkBQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQEAAAADHVzZXJTd29wVm90ZQMJAAAAAAAAAgkAAaQAAAABBQAAAApjdXJyUGVyaW9kCQABkQAAAAIFAAAADmFtb3VudE9mVm90aW5nAAAAAAAAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEtgAAAAEJAAGRAAAAAgUAAAAOYW1vdW50T2ZWb3RpbmcAAAAAAAAAAAEAAAAAAAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAS2AAAAAQkAAZEAAAACBQAAAA5hbW91bnRPZlZvdGluZwAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIc3dvcFJhdGUJAABpAAAAAgkAAGkAAAACBQAAABVhc3NldGJhbGFuY2Vzd29wdXNkbkEAAAAAAAX14QAJAABpAAAAAgUAAAAVYXNzZXRiYWxhbmNlc3dvcHVzZG5CAAAAAAAAD0JABAAAAAt2b3RpbmdUb3RhbAMJAAAAAAAAAgUAAAAKY3VyclBlcmlvZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABLYAAAAB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ZXJlc3QIBQAAAA0kdDAxODI0MzE4MzQzAAAAAl8xBAAAAA9jdXJyZW50SW50ZXJlc3QIBQAAAA0kdDAxODI0MzE4MzQzAAAAAl8yBAAAAAtjbGFpbUFtb3VudAgFAAAADSR0MDE4MjQzMTgzNDMAAAACXzMEAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAgFAAAADSR0MDE4MjQzMTgzNDMAAAACXzQEAAAAEnVzZXJTaGFyZUFtb3VudE5ldwkAAGUAAAACBQAAABV1c2VyU2hhcmVUb2tlbnNBbW91bnQFAAAAGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEAAAAEWF2YWlsYWJsZUZ1bmRzTmV3CQAAZAAAAAIJAQAAABF1c2VyQXZhaWxhYmxlU1dPUAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgUAAAALY2xhaW1BbW91bnQEAAAAEHRvdGFsU2hhcmVBbW91bnQJAQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABBQAAAARwb29sBAAAABN0b3RhbFNoYXJlQW1vdW50TmV3CQAAZQAAAAIFAAAAEHRvdGFsU2hhcmVBbW91bnQFAAAAGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEAAAAEXVzZXJDbGFpbWVkQW1vdW50CQEAAAAYZ2V0VXNlclNXT1BDbGFpbWVkQW1vdW50AAAAAgUAAAAEcG9vbAgFAAAAAWkAAAAGY2FsbGVyBAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQDCQAAZgAAAAIFAAAAGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFAAAAFXVzZXJTaGFyZVRva2Vuc0Ftb3VudAkAAAIAAAABAgAAACxXaXRoZHJhdyBhbW91bnQgbW9yZSB0aGVuIHVzZXIgbG9ja2VkIGFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAE2tleVVzZXJMYXN0SW50ZXJlc3QFAAAAD3VzZXJOZXdJbnRlcmVzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAGGtleVVzZXJTaGFyZVRva2Vuc0xvY2tlZAUAAAASdXNlclNoYXJlQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAD2tleUxhc3RJbnRlcmVzdAUAAAAPY3VycmVudEludGVyZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFWtleUxhc3RJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wFAAAAFGtleVNoYXJlVG9rZW5zTG9ja2VkBQAAABN0b3RhbFNoYXJlQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAQa2V5QXZhaWxhYmxlU1dPUAUAAAARYXZhaWxhYmxlRnVuZHNOZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQFAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BQAAAA1zaGFyZVRva2Vuc0lkBQAAAANuaWwAAAABaQEAAAAFY2xhaW0AAAABAAAABHBvb2wEAAAAEHNoYXJlVG9rZW5Mb2NrZWQJAQAAABhnZXRUb3RhbFNoYXJlVG9rZW5Mb2NrZWQAAAABBQAAAARwb29sBAAAAA0kdDAxOTgzNjE5OTAxCQEAAAATZ2V0TGFzdEludGVyZXN0SW5mbwAAAAEFAAAABHBvb2wEAAAAEmxhc3RJbnRlcmVzdEhlaWdodAgFAAAADSR0MDE5ODM2MTk5MDEAAAACXzEEAAAADGxhc3RJbnRlcmVzdAgFAAAADSR0MDE5ODM2MTk5MDEAAAACXzIEAAAADSR0MDE5OTA2MTk5OTUJAQAAAApyZXdhcmRJbmZvAAAAAQUAAAAEcG9vbAQAAAAVY3VycmVudFJld2FyZFBlckJsb2NrCAUAAAANJHQwMTk5MDYxOTk5NQAAAAJfMQQAAAAScmV3YXJkVXBkYXRlSGVpZ2h0CAUAAAANJHQwMTk5MDYxOTk5NQAAAAJfMgQAAAAWcHJldmlvdXNSZXdhcmRQZXJCbG9jawgFAAAADSR0MDE5OTA2MTk5OTUAAAACXzMEAAAADSR0MDIwMDAwMjAxMDAJAQAAAAljbGFpbUNhbGMAAAADBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEEAAAAD3VzZXJOZXdJbnRlcmVzdAgFAAAADSR0MDIwMDAwMjAxMDAAAAACXzEEAAAAD2N1cnJlbnRJbnRlcmVzdAgFAAAADSR0MDIwMDAwMjAxMDAAAAACXzIEAAAAC2NsYWltQW1vdW50CAUAAAANJHQwMjAwMDAyMDEwMAAAAAJfMwQAAAAVdXNlclNoYXJlVG9rZW5zQW1vdW50CAUAAAANJHQwMjAwMDAyMDEwMAAAAAJfNAQAAAANYXZhaWxhYmxlRnVuZAkAAGQAAAACCQEAAAARdXNlckF2YWlsYWJsZVNXT1AAAAACBQAAAARwb29sCAUAAAABaQAAAAZjYWxsZXIFAAAAC2NsYWltQW1vdW50BAAAABF1c2VyQ2xhaW1lZEFtb3VudAkBAAAAGGdldFVzZXJTV09QQ2xhaW1lZEFtb3VudAAAAAIFAAAABHBvb2wIBQAAAAFpAAAABmNhbGxlcgQAAAAUdXNlckNsYWltZWRBbW91bnROZXcJAABkAAAAAgUAAAARdXNlckNsYWltZWRBbW91bnQFAAAAC2NsYWltQW1vdW50AwkAAAAAAAACBQAAAA1hdmFpbGFibGVGdW5kAAAAAAAAAAAACQAAAgAAAAECAAAAGVlvdSBoYXZlIDAgYXZhaWxhYmxlIFNXT1AJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABNrZXlVc2VyTGFzdEludGVyZXN0BQAAAA91c2VyTmV3SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAPa2V5TGFzdEludGVyZXN0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAEcG9vbAUAAAAVa2V5TGFzdEludGVyZXN0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABBrZXlBdmFpbGFibGVTV09QAAAAAAAAAAAACQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAEU1dPUAUAAAANYXZhaWxhYmxlRnVuZAYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABhrZXlVc2VyU1dPUENsYWltZWRBbW91bnQFAAAAFHVzZXJDbGFpbWVkQW1vdW50TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA1hdmFpbGFibGVGdW5kBQAAAARTV09QBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXnNd+lL", "height": 1501027, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ED8hmXwz8eoQs3n47WKvgyw1Zb6Uijt6VGPAfX3PMVSj Next: 3Muxo8JT5srpriJ1V38zbBEXjBym6x5WHoU8JGrZfxfX Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let adminPubKey1 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4+let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
55
6-let adminPubKey2 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6+let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
77
8-let adminPubKey3 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8+let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
99
1010 let keyShareTokensLocked = "_total_share_tokens_locked"
1111
3737
3838 let keyFarmingStartHeight = "farming_start_height"
3939
40+let keyAPY = "apy"
41+
42+let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
43+
44+let keySwopYearEmission = "swop_year_emission"
45+
46+let keyBalancecpmmA = "A_asset_balance"
47+
48+let keyBalancecpmmB = "B_asset_balance"
49+
50+let keyAssetIdA = "A_asset_id"
51+
52+let keyAssetIdB = "B_asset_id"
53+
54+let keyFirstHarvestHeight = "first_harvest_height"
55+
56+let keyfirstHarvestCpmm = "first_harvest"
57+
4058 let governanceAddress = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS')
4159
42-let walletGovernance = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
4361
44-let adminIncreaseInterestAddress = Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa')
62+let votingAddress = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
63+
64+let swopUsdnAddress = Address(base58'3N4kooq5242vPtJzBDrmukK6ptrjRRjEBWi')
65+
66+let wavesUsdnAddress = Address(base58'3MxtJmAsKsfof4X28MJPBtvRUyz1PbCnbhF')
67+
68+let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
4569
4670 let oneWeekInBlock = 10106
4771
4872 let totalVoteShare = 10000000000
4973
74+func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
75+
76+
77+func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
78+
79+
80+func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
81+ then unit
82+ else fromBase58String(strAssetIdA(pool))
83+
84+
85+func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
86+ then unit
87+ else fromBase58String(strAssetIdB(pool))
88+
89+
90+let kBasePeriod = "base_period"
91+
92+let kPeriodLength = "period_length"
93+
94+let kStartHeight = "start_height"
95+
96+let kFirstHarvestHeight = "first_harvest_height"
97+
98+let kDurationFullVotePower = "duration_full_vote_power"
99+
100+let kMinVotePower = "min_vote_power"
101+
102+let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
103+
104+let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
105+
106+let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
107+
108+let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
109+
110+let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
111+
112+let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
113+
114+let APY = getIntegerValue(this, keyAPY)
115+
116+let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
117+
118+func assetNameA (pool) = match assetIdA(pool) {
119+ case id: ByteVector =>
120+ value(assetInfo(id)).name
121+ case waves: Unit =>
122+ "WAVES"
123+ case _ =>
124+ throw("Match error")
125+}
126+
127+
128+func assetNameB (pool) = match assetIdB(pool) {
129+ case id: ByteVector =>
130+ value(assetInfo(id)).name
131+ case waves: Unit =>
132+ "WAVES"
133+ case _ =>
134+ throw("Match error")
135+}
136+
137+
50138 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
139+
140+func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
141+
142+
143+func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
144+
145+
146+func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
147+
148+
149+func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
150+
51151
52152 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
53153
133233 let shareAssetId = getShareAssetId(pool)
134234 let scaleValue = calcScaleValue(SWOP, shareAssetId)
135235 let shareTokenLocked = getTotalShareTokenLocked(pool)
136- let $t071097174 = getLastInterestInfo(pool)
137- let lastInterestHeight = $t071097174._1
138- let lastInterest = $t071097174._2
139- let $t071797267 = rewardInfo(pool)
140- let currentRewardPerBlock = $t071797267._1
141- let rewardUpdateHeight = $t071797267._2
142- let previousRewardPerBlock = $t071797267._3
143- let $t072727351 = getUserInterestInfo(pool, caller)
144- let userLastInterest = $t072727351._1
145- let userShareTokensAmount = $t072727351._2
236+ let $t01006510130 = getLastInterestInfo(pool)
237+ let lastInterestHeight = $t01006510130._1
238+ let lastInterest = $t01006510130._2
239+ let $t01013510223 = rewardInfo(pool)
240+ let currentRewardPerBlock = $t01013510223._1
241+ let rewardUpdateHeight = $t01013510223._2
242+ let previousRewardPerBlock = $t01013510223._3
243+ let $t01022810307 = getUserInterestInfo(pool, caller)
244+ let userLastInterest = $t01022810307._1
245+ let userShareTokensAmount = $t01022810307._2
146246 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
147247 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
148248 let userNewInterest = currentInterest
149249 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
250+ }
251+
252+
253+func calculateProtocolReward (pool) = {
254+ let $t01078110846 = getLastInterestInfo(pool)
255+ let lastInterestHeight = $t01078110846._1
256+ let lastInterest = $t01078110846._2
257+ let $t01085210940 = rewardInfo(pool)
258+ let currentRewardPerBlock = $t01085210940._1
259+ let rewardUpdateHeight = $t01085210940._2
260+ let previousRewardPerBlock = $t01085210940._3
261+ let shareTokenLocked = getTotalShareTokenLocked(pool)
262+ if ((shareTokenLocked == 0))
263+ then 0
264+ else if ((rewardUpdateHeight > height))
265+ then {
266+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
267+ reward
268+ }
269+ else if ((lastInterestHeight > rewardUpdateHeight))
270+ then {
271+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
272+ reward
273+ }
274+ else {
275+ let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
276+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
277+ (reward + rewardAfterLastInterestBeforeReawardUpdate)
278+ }
150279 }
151280
152281
177306 func initPoolShareFarming (pool) = if ((i.caller != this))
178307 then throw("Only the DApp itself can call this function")
179308 else {
180- let $t088818961 = rewardInfo(pool)
181- let currentReward = $t088818961._1
182- let rewardUpdateHeight = $t088818961._2
183- let previousRewardPerBlock = $t088818961._3
184-[IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0)]
309+ let $t01287512955 = rewardInfo(pool)
310+ let currentReward = $t01287512955._1
311+ let rewardUpdateHeight = $t01287512955._2
312+ let previousRewardPerBlock = $t01287512955._3
313+[IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
185314 }
186315
187316
188317
189318 @Callable(i)
190-func updatePoolInterest (pool) = if ((i.caller != walletGovernance))
319+func updatePoolInterest (pool) = if ((i.caller != wallet))
191320 then throw("Only the Admin itself can call this function")
192321 else {
193- let $t092539381 = claimCalc(pool, adminIncreaseInterestAddress, 0)
194- let userNewInterest = $t092539381._1
195- let currentInterest = $t092539381._2
196- let claimAmount = $t092539381._3
197- let userShareTokensAmount = $t092539381._4
322+ let $t01330413424 = claimCalc(pool, adminIncreaseInterestAddress, 0)
323+ let userNewInterest = $t01330413424._1
324+ let currentInterest = $t01330413424._2
325+ let claimAmount = $t01330413424._3
326+ let userShareTokensAmount = $t01330413424._4
198327 [IntegerEntry((pool + keyLastInterest), userNewInterest)]
199328 }
200329
202331
203332 @Callable(i)
204333 func lockShareTokens (pool) = {
205- let $t095159590 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
206- let pmtAmount = $t095159590._1
207- let pmtAssetId = $t095159590._2
334+ let $t01355713632 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01355713632._1
336+ let pmtAssetId = $t01355713632._2
337+ let $t01363713745 = claimCalc(pool, i.caller, pmtAmount)
338+ let userNewInterest = $t01363713745._1
339+ let currentInterest = $t01363713745._2
340+ let claimAmount = $t01363713745._3
341+ let userShareTokensAmount = $t01363713745._4
342+ let userShareAmountNew = (userShareTokensAmount + pmtAmount)
343+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
344+ let totalShareAmount = getTotalShareTokenLocked(pool)
345+ let totalShareAmountNew = (totalShareAmount + pmtAmount)
346+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
347+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
348+ 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)]
208349 if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
209350 then throw("Incorrect pmtAssetId")
210- else {
211- let $t096919799 = claimCalc(pool, i.caller, pmtAmount)
212- let userNewInterest = $t096919799._1
213- let currentInterest = $t096919799._2
214- let claimAmount = $t096919799._3
215- let userShareTokensAmount = $t096919799._4
216- let userShareAmountNew = (userShareTokensAmount + pmtAmount)
217- let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
218- let totalShareAmount = getTotalShareTokenLocked(pool)
219- let totalShareAmountNew = (totalShareAmount + pmtAmount)
220- let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
221- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
222-[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)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew)]
223- }
351+ else if (if (isFirstHarvest(Address(fromBase58String(pool))))
352+ then (height > (getHeightFirstHarvest(Address(fromBase58String(pool))) * periodLength))
353+ else false)
354+ then {
355+ let amountOfVoting = split(getStringValue(votingAddress, (((toString(this) + "_") + pool) + "_user_pool_struc")), "_")
356+ let previosTotalVoting = split(getStringValue(votingAddress, kPreviousTotalVoteSWOP), "_")
357+ let assetbalanceswopusdnA = valueOrElse(getIntegerValue(swopUsdnAddress, keyBalancecpmmA), 0)
358+ let assetbalanceswopusdnB = valueOrElse(getIntegerValue(swopUsdnAddress, keyBalancecpmmB), 0)
359+ let assetbalancewavesusdnA = valueOrElse(getIntegerValue(wavesUsdnAddress, keyBalancecpmmA), 0)
360+ let assetbalancewavesusdnB = valueOrElse(getIntegerValue(wavesUsdnAddress, keyBalancecpmmB), 0)
361+ let totalPeriod = previosTotalVoting[1]
362+ let previosTotal = previosTotalVoting[0]
363+ let userShareTokenLocked = userShareTokensAmount
364+ let userSwopVote = if ((toString(currPeriod) == amountOfVoting[2]))
365+ then valueOrElse(parseInt(amountOfVoting[1]), 0)
366+ else valueOrElse(parseInt(amountOfVoting[0]), 0)
367+ let swopRate = ((assetbalanceswopusdnA / 100000000) / (assetbalanceswopusdnB / 1000000))
368+ let votingTotal = if ((currPeriod == valueOrElse(parseInt(totalPeriod), -1)))
369+ then valueOrElse(parseInt(previosTotal), 0)
370+ else valueOrElse(parseInt(totalPeriod), 0)
371+ let harvestPower = ((SwopYearEmission / votingTotal) / APY)
372+ let protocolReward = calculateProtocolReward(pool)
373+ if ((parseInt(amountOfVoting[1]) != 0))
374+ then {
375+ let assetBalanceB = getBalanceB(Address(fromBase58String(pool)))
376+ let shareTokenRate = if ((assetNameB(Address(fromBase58String(pool))) == "USDN"))
377+ then ((2 * assetBalanceB) / totalShareAmount)
378+ else if ((assetNameA(Address(fromBase58String(pool))) == "SWOP"))
379+ then (((2 * assetBalanceB) * ((assetbalanceswopusdnA / 100000000) / (assetbalanceswopusdnB / 1000000))) / totalShareAmount)
380+ else if ((assetNameA(Address(fromBase58String(pool))) == "WAVES"))
381+ then (((2 * assetBalanceB) * ((assetbalancewavesusdnA / 100000000) / (assetbalancewavesusdnB / 1000000))) / totalShareAmount)
382+ else 0
383+ let shareToken = ((((userSwopVote * swopRate) * harvestPower) / shareTokenRate) - userShareTokenLocked)
384+ if ((shareToken > 0))
385+ then if ((totalShareAmountNew >= shareToken))
386+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
387+ else throw(("You maximum share token is " + toString(shareToken)))
388+ else throw("You can't share token")
389+ }
390+ else throw("Your amount of token less than 0")
391+ }
392+ else baseEntry
224393 }
225394
226395
228397 @Callable(i)
229398 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
230399 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
231- let $t01115611256 = claimCalc(pool, i.caller, 1)
232- let userNewInterest = $t01115611256._1
233- let currentInterest = $t01115611256._2
234- let claimAmount = $t01115611256._3
235- let userShareTokensAmount = $t01115611256._4
400+ let $t01824318343 = claimCalc(pool, i.caller, 1)
401+ let userNewInterest = $t01824318343._1
402+ let currentInterest = $t01824318343._2
403+ let claimAmount = $t01824318343._3
404+ let userShareTokensAmount = $t01824318343._4
405+ let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
406+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
407+ let totalShareAmount = getTotalShareTokenLocked(pool)
408+ let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
409+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
410+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
236411 if ((shareTokensWithdrawAmount > userShareTokensAmount))
237412 then throw("Withdraw amount more then user locked amount")
238- else {
239- let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
240- let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
241- let totalShareAmount = getTotalShareTokenLocked(pool)
242- let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
243- let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
244- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
245-[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)]
246- }
413+ 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)]
247414 }
248415
249416
251418 @Callable(i)
252419 func claim (pool) = {
253420 let shareTokenLocked = getTotalShareTokenLocked(pool)
254- let $t01274812813 = getLastInterestInfo(pool)
255- let lastInterestHeight = $t01274812813._1
256- let lastInterest = $t01274812813._2
257- let $t01281812907 = rewardInfo(pool)
258- let currentRewardPerBlock = $t01281812907._1
259- let rewardUpdateHeight = $t01281812907._2
260- let previousRewardPerBlock = $t01281812907._3
261- let $t01291213012 = claimCalc(pool, i.caller, 1)
262- let userNewInterest = $t01291213012._1
263- let currentInterest = $t01291213012._2
264- let claimAmount = $t01291213012._3
265- let userShareTokensAmount = $t01291213012._4
421+ let $t01983619901 = getLastInterestInfo(pool)
422+ let lastInterestHeight = $t01983619901._1
423+ let lastInterest = $t01983619901._2
424+ let $t01990619995 = rewardInfo(pool)
425+ let currentRewardPerBlock = $t01990619995._1
426+ let rewardUpdateHeight = $t01990619995._2
427+ let previousRewardPerBlock = $t01990619995._3
428+ let $t02000020100 = claimCalc(pool, i.caller, 1)
429+ let userNewInterest = $t02000020100._1
430+ let currentInterest = $t02000020100._2
431+ let claimAmount = $t02000020100._3
432+ let userShareTokensAmount = $t02000020100._4
266433 let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
267434 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
268435 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
269436 if ((availableFund == 0))
270437 then throw("You have 0 available SWOP")
271- 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)]
438+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
272439 }
273440
274441
275442 @Verifier(tx)
276-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
443+func verify () = match tx {
444+ case _ =>
445+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
446+}
277447
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let adminPubKey1 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4+let adminPubKey1 = base58'DXDY2itiEcYBtGkVLnkpHtDFyWQUkoLJz79uJ7ECbMrA'
55
6-let adminPubKey2 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6+let adminPubKey2 = base58'E6Wa1SGoktYcjHjsKrvjMiqJY3SWmGKcD8Q5L8kxSPS7'
77
8-let adminPubKey3 = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8+let adminPubKey3 = base58'AZmWJtuy4GeVrMmJH4hfFBRApe1StvhJSk4jcbT6bArQ'
99
1010 let keyShareTokensLocked = "_total_share_tokens_locked"
1111
1212 let keyRewardPoolFractionCurrent = "_current_pool_fraction_reward"
1313
1414 let keyRewardPoolFractionPrevious = "_previous_pool_fraction_reward"
1515
1616 let keyTotalRewardPerBlockCurrent = "total_reward_per_block_current"
1717
1818 let keyTotalRewardPerBlockPrevious = "total_reward_per_block_previous"
1919
2020 let keyRewardUpdateHeight = "reward_update_height"
2121
2222 let keyLastInterest = "_last_interest"
2323
2424 let keyLastInterestHeight = "_last_interest_height"
2525
2626 let keyUserShareTokensLocked = "_share_tokens_locked"
2727
2828 let keyUserLastInterest = "_last_interest"
2929
3030 let keySWOPid = "SWOP_id"
3131
3232 let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount"
3333
3434 let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount"
3535
3636 let keyAvailableSWOP = "_available_SWOP"
3737
3838 let keyFarmingStartHeight = "farming_start_height"
3939
40+let keyAPY = "apy"
41+
42+let kPreviousTotalVoteSWOP = "previous_total_vote_SWOP"
43+
44+let keySwopYearEmission = "swop_year_emission"
45+
46+let keyBalancecpmmA = "A_asset_balance"
47+
48+let keyBalancecpmmB = "B_asset_balance"
49+
50+let keyAssetIdA = "A_asset_id"
51+
52+let keyAssetIdB = "B_asset_id"
53+
54+let keyFirstHarvestHeight = "first_harvest_height"
55+
56+let keyfirstHarvestCpmm = "first_harvest"
57+
4058 let governanceAddress = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS')
4159
42-let walletGovernance = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let wallet = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
4361
44-let adminIncreaseInterestAddress = Address(base58'3N8ZpuFLVKwxbpVFe1Pcs14hLCrujizpQsa')
62+let votingAddress = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
63+
64+let swopUsdnAddress = Address(base58'3N4kooq5242vPtJzBDrmukK6ptrjRRjEBWi')
65+
66+let wavesUsdnAddress = Address(base58'3MxtJmAsKsfof4X28MJPBtvRUyz1PbCnbhF')
67+
68+let adminIncreaseInterestAddress = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
4569
4670 let oneWeekInBlock = 10106
4771
4872 let totalVoteShare = 10000000000
4973
74+func strAssetIdA (pool) = getStringValue(pool, keyAssetIdA)
75+
76+
77+func strAssetIdB (pool) = getStringValue(pool, keyAssetIdB)
78+
79+
80+func assetIdA (pool) = if ((strAssetIdA(pool) == "WAVES"))
81+ then unit
82+ else fromBase58String(strAssetIdA(pool))
83+
84+
85+func assetIdB (pool) = if ((strAssetIdB(pool) == "WAVES"))
86+ then unit
87+ else fromBase58String(strAssetIdB(pool))
88+
89+
90+let kBasePeriod = "base_period"
91+
92+let kPeriodLength = "period_length"
93+
94+let kStartHeight = "start_height"
95+
96+let kFirstHarvestHeight = "first_harvest_height"
97+
98+let kDurationFullVotePower = "duration_full_vote_power"
99+
100+let kMinVotePower = "min_vote_power"
101+
102+let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
103+
104+let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
105+
106+let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
107+
108+let durationFullVotePower = valueOrErrorMessage(getInteger(votingAddress, kDurationFullVotePower), "Empty kDurationFullVotePower")
109+
110+let minVotePower = valueOrErrorMessage(getInteger(votingAddress, kMinVotePower), "Empty kMinVotePower")
111+
112+let currPeriod = (basePeriod + ((height - startHeight) / periodLength))
113+
114+let APY = getIntegerValue(this, keyAPY)
115+
116+let SwopYearEmission = getIntegerValue(this, keySwopYearEmission)
117+
118+func assetNameA (pool) = match assetIdA(pool) {
119+ case id: ByteVector =>
120+ value(assetInfo(id)).name
121+ case waves: Unit =>
122+ "WAVES"
123+ case _ =>
124+ throw("Match error")
125+}
126+
127+
128+func assetNameB (pool) = match assetIdB(pool) {
129+ case id: ByteVector =>
130+ value(assetInfo(id)).name
131+ case waves: Unit =>
132+ "WAVES"
133+ case _ =>
134+ throw("Match error")
135+}
136+
137+
50138 let SWOP = fromBase58String(getStringValue(this, keySWOPid))
139+
140+func isFirstHarvest (pool) = valueOrElse(getBoolean(pool, keyfirstHarvestCpmm), false)
141+
142+
143+func getHeightFirstHarvest (pool) = valueOrElse(getInteger(pool, keyFirstHarvestHeight), 0)
144+
145+
146+func getBalanceA (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmA), ("No data on the key: " + keyBalancecpmmA))
147+
148+
149+func getBalanceB (pool) = valueOrErrorMessage(getInteger(pool, keyBalancecpmmB), ("No data on the key: " + keyBalancecpmmB))
150+
51151
52152 func getTotalShareTokenLocked (pool) = valueOrErrorMessage(getInteger(this, (pool + keyShareTokensLocked)), (("No data on the key: " + pool) + keyShareTokensLocked))
53153
54154
55155 func getShareAssetId (pool) = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
56156
57157
58158 func calcScaleValue (assetId1,assetId2) = {
59159 let assetId1Decimals = value(assetInfo(assetId1)).decimals
60160 let assetId2Decimals = value(assetInfo(assetId2)).decimals
61161 let scaleDigits = ((assetId2Decimals - assetId1Decimals) + 8)
62162 pow(10, 0, scaleDigits, 0, 0, HALFDOWN)
63163 }
64164
65165
66166 func userAvailableSWOP (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyAvailableSWOP)), 0)
67167
68168
69169 func rewardInfo (pool) = {
70170 let totalRewardPerBlockCurrent = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockCurrent), ((("No data on the key: " + keyTotalRewardPerBlockCurrent) + " at address ") + toString(governanceAddress)))
71171 let totalRewardPerBlockPrevious = valueOrErrorMessage(getInteger(governanceAddress, keyTotalRewardPerBlockPrevious), ((("No data on the key: " + keyTotalRewardPerBlockPrevious) + " at address ") + toString(governanceAddress)))
72172 let rewardPoolFractionCurrent = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionCurrent)), (((("No data on the key: " + pool) + keyRewardPoolFractionCurrent) + " at address ") + toString(governanceAddress)))
73173 let rewardUpdateHeight = valueOrErrorMessage(getInteger(governanceAddress, keyRewardUpdateHeight), ((("No data on the key: " + keyRewardUpdateHeight) + " at address ") + toString(governanceAddress)))
74174 let rewardPoolFractionPrevious = valueOrErrorMessage(getInteger(governanceAddress, (pool + keyRewardPoolFractionPrevious)), (((("No data on the key: " + pool) + keyRewardPoolFractionPrevious) + " at address ") + toString(governanceAddress)))
75175 let rewardPoolCurrent = fraction(totalRewardPerBlockCurrent, rewardPoolFractionCurrent, totalVoteShare)
76176 let rewardPoolPrevious = fraction(totalRewardPerBlockPrevious, rewardPoolFractionPrevious, totalVoteShare)
77177 if (if ((rewardPoolCurrent > totalRewardPerBlockCurrent))
78178 then true
79179 else (rewardPoolPrevious > totalRewardPerBlockPrevious))
80180 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
81181 else $Tuple3(rewardPoolCurrent, rewardUpdateHeight, rewardPoolPrevious)
82182 }
83183
84184
85185 func getLastInterestInfo (pool) = {
86186 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
87187 let lastInterestHeight = valueOrElse(getInteger(this, (pool + keyLastInterestHeight)), height)
88188 $Tuple2(lastInterestHeight, lastInterest)
89189 }
90190
91191
92192 func getUserInterestInfo (pool,userAddress) = {
93193 let userLastInterest = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserLastInterest))
94194 let userShare = getInteger(this, (((pool + "_") + toString(userAddress)) + keyUserShareTokensLocked))
95195 let lastInterest = valueOrErrorMessage(getInteger(this, (pool + keyLastInterest)), (("No data on the key: " + pool) + keyLastInterest))
96196 let userLastInterestValue = match userLastInterest {
97197 case userLastInterest: Int =>
98198 userLastInterest
99199 case _ =>
100200 lastInterest
101201 }
102202 let userShareTokensAmount = match userShare {
103203 case userShare: Int =>
104204 userShare
105205 case _ =>
106206 0
107207 }
108208 $Tuple2(userLastInterestValue, userShareTokensAmount)
109209 }
110210
111211
112212 func calcInterest (lastInterestHeight,rewardUpdateHeight,lastInterest,currentRewardPerBlock,shareTokenLocked,previousRewardPerBlock,shareAssetId,scaleValue,pmtAmount) = if ((shareTokenLocked == 0))
113213 then 0
114214 else if ((rewardUpdateHeight > height))
115215 then {
116216 let reward = (previousRewardPerBlock * (height - lastInterestHeight))
117217 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
118218 }
119219 else if ((lastInterestHeight > rewardUpdateHeight))
120220 then {
121221 let reward = (currentRewardPerBlock * (height - lastInterestHeight))
122222 (lastInterest + fraction(reward, scaleValue, shareTokenLocked))
123223 }
124224 else {
125225 let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
126226 let interestAfterUpdate = (lastInterest + fraction(rewardAfterLastInterestBeforeReawardUpdate, scaleValue, shareTokenLocked))
127227 let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
128228 (interestAfterUpdate + fraction(reward, scaleValue, shareTokenLocked))
129229 }
130230
131231
132232 func claimCalc (pool,caller,pmtAmount) = {
133233 let shareAssetId = getShareAssetId(pool)
134234 let scaleValue = calcScaleValue(SWOP, shareAssetId)
135235 let shareTokenLocked = getTotalShareTokenLocked(pool)
136- let $t071097174 = getLastInterestInfo(pool)
137- let lastInterestHeight = $t071097174._1
138- let lastInterest = $t071097174._2
139- let $t071797267 = rewardInfo(pool)
140- let currentRewardPerBlock = $t071797267._1
141- let rewardUpdateHeight = $t071797267._2
142- let previousRewardPerBlock = $t071797267._3
143- let $t072727351 = getUserInterestInfo(pool, caller)
144- let userLastInterest = $t072727351._1
145- let userShareTokensAmount = $t072727351._2
236+ let $t01006510130 = getLastInterestInfo(pool)
237+ let lastInterestHeight = $t01006510130._1
238+ let lastInterest = $t01006510130._2
239+ let $t01013510223 = rewardInfo(pool)
240+ let currentRewardPerBlock = $t01013510223._1
241+ let rewardUpdateHeight = $t01013510223._2
242+ let previousRewardPerBlock = $t01013510223._3
243+ let $t01022810307 = getUserInterestInfo(pool, caller)
244+ let userLastInterest = $t01022810307._1
245+ let userShareTokensAmount = $t01022810307._2
146246 let currentInterest = calcInterest(lastInterestHeight, rewardUpdateHeight, lastInterest, currentRewardPerBlock, shareTokenLocked, previousRewardPerBlock, shareAssetId, scaleValue, pmtAmount)
147247 let claimAmount = fraction(userShareTokensAmount, (currentInterest - userLastInterest), scaleValue)
148248 let userNewInterest = currentInterest
149249 $Tuple4(userNewInterest, currentInterest, claimAmount, userShareTokensAmount)
250+ }
251+
252+
253+func calculateProtocolReward (pool) = {
254+ let $t01078110846 = getLastInterestInfo(pool)
255+ let lastInterestHeight = $t01078110846._1
256+ let lastInterest = $t01078110846._2
257+ let $t01085210940 = rewardInfo(pool)
258+ let currentRewardPerBlock = $t01085210940._1
259+ let rewardUpdateHeight = $t01085210940._2
260+ let previousRewardPerBlock = $t01085210940._3
261+ let shareTokenLocked = getTotalShareTokenLocked(pool)
262+ if ((shareTokenLocked == 0))
263+ then 0
264+ else if ((rewardUpdateHeight > height))
265+ then {
266+ let reward = (previousRewardPerBlock * (height - lastInterestHeight))
267+ reward
268+ }
269+ else if ((lastInterestHeight > rewardUpdateHeight))
270+ then {
271+ let reward = (currentRewardPerBlock * (height - lastInterestHeight))
272+ reward
273+ }
274+ else {
275+ let rewardAfterLastInterestBeforeReawardUpdate = (previousRewardPerBlock * (rewardUpdateHeight - lastInterestHeight))
276+ let reward = (currentRewardPerBlock * (height - rewardUpdateHeight))
277+ (reward + rewardAfterLastInterestBeforeReawardUpdate)
278+ }
150279 }
151280
152281
153282 func checkPmtAssetIdCorrect (pool,pmtAssetId) = {
154283 let poolShareAssetId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
155284 if ((pmtAssetId == poolShareAssetId))
156285 then true
157286 else false
158287 }
159288
160289
161290 func getUserSWOPClaimedAmount (pool,user) = valueOrElse(getInteger(this, (((pool + "_") + toString(user)) + keyUserSWOPClaimedAmount)), 0)
162291
163292
164293 @Callable(i)
165294 func init (earlyLP) = if (isDefined(getString(this, "keySWOPid")))
166295 then throw("SWOP already initialized")
167296 else {
168297 let initAmount = 100000000000000
169298 let SWOPissue = Issue("SWOP", "SWOP protocol token", initAmount, 8, true)
170299 let SWOPid = calculateAssetId(SWOPissue)
171300 [Issue("SWOP", "SWOP protocol token", initAmount, 8, true), StringEntry(keySWOPid, toBase58String(SWOPid))]
172301 }
173302
174303
175304
176305 @Callable(i)
177306 func initPoolShareFarming (pool) = if ((i.caller != this))
178307 then throw("Only the DApp itself can call this function")
179308 else {
180- let $t088818961 = rewardInfo(pool)
181- let currentReward = $t088818961._1
182- let rewardUpdateHeight = $t088818961._2
183- let previousRewardPerBlock = $t088818961._3
184-[IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0)]
309+ let $t01287512955 = rewardInfo(pool)
310+ let currentReward = $t01287512955._1
311+ let rewardUpdateHeight = $t01287512955._2
312+ let previousRewardPerBlock = $t01287512955._3
313+[IntegerEntry((pool + keyShareTokensLocked), 0), IntegerEntry((pool + keyLastInterest), 0), IntegerEntry((pool + keyLastInterestHeight), height)]
185314 }
186315
187316
188317
189318 @Callable(i)
190-func updatePoolInterest (pool) = if ((i.caller != walletGovernance))
319+func updatePoolInterest (pool) = if ((i.caller != wallet))
191320 then throw("Only the Admin itself can call this function")
192321 else {
193- let $t092539381 = claimCalc(pool, adminIncreaseInterestAddress, 0)
194- let userNewInterest = $t092539381._1
195- let currentInterest = $t092539381._2
196- let claimAmount = $t092539381._3
197- let userShareTokensAmount = $t092539381._4
322+ let $t01330413424 = claimCalc(pool, adminIncreaseInterestAddress, 0)
323+ let userNewInterest = $t01330413424._1
324+ let currentInterest = $t01330413424._2
325+ let claimAmount = $t01330413424._3
326+ let userShareTokensAmount = $t01330413424._4
198327 [IntegerEntry((pool + keyLastInterest), userNewInterest)]
199328 }
200329
201330
202331
203332 @Callable(i)
204333 func lockShareTokens (pool) = {
205- let $t095159590 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
206- let pmtAmount = $t095159590._1
207- let pmtAssetId = $t095159590._2
334+ let $t01355713632 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01355713632._1
336+ let pmtAssetId = $t01355713632._2
337+ let $t01363713745 = claimCalc(pool, i.caller, pmtAmount)
338+ let userNewInterest = $t01363713745._1
339+ let currentInterest = $t01363713745._2
340+ let claimAmount = $t01363713745._3
341+ let userShareTokensAmount = $t01363713745._4
342+ let userShareAmountNew = (userShareTokensAmount + pmtAmount)
343+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
344+ let totalShareAmount = getTotalShareTokenLocked(pool)
345+ let totalShareAmountNew = (totalShareAmount + pmtAmount)
346+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
347+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
348+ 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)]
208349 if (!(checkPmtAssetIdCorrect(pool, pmtAssetId)))
209350 then throw("Incorrect pmtAssetId")
210- else {
211- let $t096919799 = claimCalc(pool, i.caller, pmtAmount)
212- let userNewInterest = $t096919799._1
213- let currentInterest = $t096919799._2
214- let claimAmount = $t096919799._3
215- let userShareTokensAmount = $t096919799._4
216- let userShareAmountNew = (userShareTokensAmount + pmtAmount)
217- let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
218- let totalShareAmount = getTotalShareTokenLocked(pool)
219- let totalShareAmountNew = (totalShareAmount + pmtAmount)
220- let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
221- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
222-[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)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), availableFundsNew)]
223- }
351+ else if (if (isFirstHarvest(Address(fromBase58String(pool))))
352+ then (height > (getHeightFirstHarvest(Address(fromBase58String(pool))) * periodLength))
353+ else false)
354+ then {
355+ let amountOfVoting = split(getStringValue(votingAddress, (((toString(this) + "_") + pool) + "_user_pool_struc")), "_")
356+ let previosTotalVoting = split(getStringValue(votingAddress, kPreviousTotalVoteSWOP), "_")
357+ let assetbalanceswopusdnA = valueOrElse(getIntegerValue(swopUsdnAddress, keyBalancecpmmA), 0)
358+ let assetbalanceswopusdnB = valueOrElse(getIntegerValue(swopUsdnAddress, keyBalancecpmmB), 0)
359+ let assetbalancewavesusdnA = valueOrElse(getIntegerValue(wavesUsdnAddress, keyBalancecpmmA), 0)
360+ let assetbalancewavesusdnB = valueOrElse(getIntegerValue(wavesUsdnAddress, keyBalancecpmmB), 0)
361+ let totalPeriod = previosTotalVoting[1]
362+ let previosTotal = previosTotalVoting[0]
363+ let userShareTokenLocked = userShareTokensAmount
364+ let userSwopVote = if ((toString(currPeriod) == amountOfVoting[2]))
365+ then valueOrElse(parseInt(amountOfVoting[1]), 0)
366+ else valueOrElse(parseInt(amountOfVoting[0]), 0)
367+ let swopRate = ((assetbalanceswopusdnA / 100000000) / (assetbalanceswopusdnB / 1000000))
368+ let votingTotal = if ((currPeriod == valueOrElse(parseInt(totalPeriod), -1)))
369+ then valueOrElse(parseInt(previosTotal), 0)
370+ else valueOrElse(parseInt(totalPeriod), 0)
371+ let harvestPower = ((SwopYearEmission / votingTotal) / APY)
372+ let protocolReward = calculateProtocolReward(pool)
373+ if ((parseInt(amountOfVoting[1]) != 0))
374+ then {
375+ let assetBalanceB = getBalanceB(Address(fromBase58String(pool)))
376+ let shareTokenRate = if ((assetNameB(Address(fromBase58String(pool))) == "USDN"))
377+ then ((2 * assetBalanceB) / totalShareAmount)
378+ else if ((assetNameA(Address(fromBase58String(pool))) == "SWOP"))
379+ then (((2 * assetBalanceB) * ((assetbalanceswopusdnA / 100000000) / (assetbalanceswopusdnB / 1000000))) / totalShareAmount)
380+ else if ((assetNameA(Address(fromBase58String(pool))) == "WAVES"))
381+ then (((2 * assetBalanceB) * ((assetbalancewavesusdnA / 100000000) / (assetbalancewavesusdnB / 1000000))) / totalShareAmount)
382+ else 0
383+ let shareToken = ((((userSwopVote * swopRate) * harvestPower) / shareTokenRate) - userShareTokenLocked)
384+ if ((shareToken > 0))
385+ then if ((totalShareAmountNew >= shareToken))
386+ then (baseEntry ++ [ScriptTransfer(wallet, protocolReward, SWOP)])
387+ else throw(("You maximum share token is " + toString(shareToken)))
388+ else throw("You can't share token")
389+ }
390+ else throw("Your amount of token less than 0")
391+ }
392+ else baseEntry
224393 }
225394
226395
227396
228397 @Callable(i)
229398 func withdrawShareTokens (pool,shareTokensWithdrawAmount) = {
230399 let shareTokensId = fromBase58String(getStringValue(value(addressFromString(pool)), "share_asset_id"))
231- let $t01115611256 = claimCalc(pool, i.caller, 1)
232- let userNewInterest = $t01115611256._1
233- let currentInterest = $t01115611256._2
234- let claimAmount = $t01115611256._3
235- let userShareTokensAmount = $t01115611256._4
400+ let $t01824318343 = claimCalc(pool, i.caller, 1)
401+ let userNewInterest = $t01824318343._1
402+ let currentInterest = $t01824318343._2
403+ let claimAmount = $t01824318343._3
404+ let userShareTokensAmount = $t01824318343._4
405+ let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
406+ let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
407+ let totalShareAmount = getTotalShareTokenLocked(pool)
408+ let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
409+ let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
410+ let userClaimedAmountNew = (userClaimedAmount + claimAmount)
236411 if ((shareTokensWithdrawAmount > userShareTokensAmount))
237412 then throw("Withdraw amount more then user locked amount")
238- else {
239- let userShareAmountNew = (userShareTokensAmount - shareTokensWithdrawAmount)
240- let availableFundsNew = (userAvailableSWOP(pool, i.caller) + claimAmount)
241- let totalShareAmount = getTotalShareTokenLocked(pool)
242- let totalShareAmountNew = (totalShareAmount - shareTokensWithdrawAmount)
243- let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
244- let userClaimedAmountNew = (userClaimedAmount + claimAmount)
245-[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)]
246- }
413+ 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)]
247414 }
248415
249416
250417
251418 @Callable(i)
252419 func claim (pool) = {
253420 let shareTokenLocked = getTotalShareTokenLocked(pool)
254- let $t01274812813 = getLastInterestInfo(pool)
255- let lastInterestHeight = $t01274812813._1
256- let lastInterest = $t01274812813._2
257- let $t01281812907 = rewardInfo(pool)
258- let currentRewardPerBlock = $t01281812907._1
259- let rewardUpdateHeight = $t01281812907._2
260- let previousRewardPerBlock = $t01281812907._3
261- let $t01291213012 = claimCalc(pool, i.caller, 1)
262- let userNewInterest = $t01291213012._1
263- let currentInterest = $t01291213012._2
264- let claimAmount = $t01291213012._3
265- let userShareTokensAmount = $t01291213012._4
421+ let $t01983619901 = getLastInterestInfo(pool)
422+ let lastInterestHeight = $t01983619901._1
423+ let lastInterest = $t01983619901._2
424+ let $t01990619995 = rewardInfo(pool)
425+ let currentRewardPerBlock = $t01990619995._1
426+ let rewardUpdateHeight = $t01990619995._2
427+ let previousRewardPerBlock = $t01990619995._3
428+ let $t02000020100 = claimCalc(pool, i.caller, 1)
429+ let userNewInterest = $t02000020100._1
430+ let currentInterest = $t02000020100._2
431+ let claimAmount = $t02000020100._3
432+ let userShareTokensAmount = $t02000020100._4
266433 let availableFund = (userAvailableSWOP(pool, i.caller) + claimAmount)
267434 let userClaimedAmount = getUserSWOPClaimedAmount(pool, i.caller)
268435 let userClaimedAmountNew = (userClaimedAmount + claimAmount)
269436 if ((availableFund == 0))
270437 then throw("You have 0 available SWOP")
271- 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)]
438+ else [IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserLastInterest), userNewInterest), IntegerEntry((pool + keyLastInterest), currentInterest), IntegerEntry((pool + keyLastInterestHeight), height), IntegerEntry((((pool + "_") + toString(i.caller)) + keyAvailableSWOP), 0), Reissue(SWOP, availableFund, true), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((((pool + "_") + toString(i.caller)) + keyUserSWOPLastClaimedAmount), claimAmount), ScriptTransfer(i.caller, availableFund, SWOP)]
272439 }
273440
274441
275442 @Verifier(tx)
276-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
443+func verify () = match tx {
444+ case _ =>
445+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
446+}
277447

github/deemru/w8io/3ef1775 
100.07 ms