tx · HLNGxu9TLaerUEpJcQtmogbk9NNM9ti9MR3q4pH2aa2A

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.02800000 Waves

2022.06.14 19:34 [2096298] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "HLNGxu9TLaerUEpJcQtmogbk9NNM9ti9MR3q4pH2aa2A", "fee": 2800000, "feeAssetId": null, "timestamp": 1655224507770, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "pfBCom4PU6mMRApZT3zbzkp3JYziivjbpGuEGCzomyPLVBDPzyW6GXr6BkJH4528aUeYSGjbyMjeDB5cuV3NXDx" ], "script": "base64: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ABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAABNhc3NldHNTdG9yZUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlFbWlzc2lvbkNvbnRyYWN0AAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABJrZXlGYWN0b3J5Q29udHJhY3QAAAAAEHVzZXJQb29sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlVc2VyUG9vbENvbnRyYWN0AAAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQQAAAACcGQJAAACAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDADCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsGBQAAAAJwZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBgUAAAACcGQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAABWFzSW50AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAZ2YWxJbnQFAAAAByRtYXRjaDAFAAAABnZhbEludAkAAAIAAAABAgAAABtmYWlsZWQgdG8gY2FzdCBpbnRvIEludGVnZXIAAAAIAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAACwAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0AAAATZW1pc3Npb25Db250cmFjdFBybQAAABJmYWN0b3J5Q29udHJhY3RQcm0AAAATdXNlclBvb2xDb250cmFjdFBybQAAABl2b3RpbmdFbWlzc2lvbkNvbnRyYWN0UHJtAAAADGZlZUFtb3VudFBybQAAAAx3eEFzc2V0SWRQcm0AAAARdm90aW5nRHVyYXRpb25Qcm0AAAAOdXNkbkFzc2V0SWRQcm0AAAARZmluYWxpemVSZXdhcmRQcm0EAAAABmNoZWNrcwkABEwAAAACCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtBgkAAAIAAAABAgAAACRJbnZhbGlkIGFzc2V0X3N0b3JlIGNvbnRyYWN0IGFkZHJlc3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAIUludmFsaWQgYm9vc3RpbmcgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATdXNlclBvb2xDb250cmFjdFBybQYJAAACAAAAAQIAAAAjSW52YWxpZCB1c2VyX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAIUludmFsaWQgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAASZmFjdG9yeUNvbnRyYWN0UHJtBgkAAAIAAAABAgAAACBJbnZhbGlkIGZhY3RvcnkgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkAAGcAAAACBQAAAAxmZWVBbW91bnRQcm0AAAAAAAAAAAAGCQAAAgAAAAECAAAAEkludmFsaWQgZmVlIGFtb3VudAkABEwAAAACAwkAAGYAAAACBQAAABF2b3RpbmdEdXJhdGlvblBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAAXSW52YWxpZCB2b3RpbmcgZHVyYXRpb24JAARMAAAAAgMJAABmAAAAAgUAAAARZmluYWxpemVSZXdhcmRQcm0AAAAAAAAAAAAGCQAAAgAAAAECAAAAF0ludmFsaWQgZmluYWxpemUgcmV3YXJkCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADHd4QXNzZXRJZFBybQYJAAACAAAAAQIAAAATSW52YWxpZCBXWCBhc3NldCBJRAkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA51c2RuQXNzZXRJZFBybQYJAAACAAAAAQIAAAAVSW52YWxpZCBVU0ROIGFzc2V0IElEBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAUAAAAWYXNzZXRzU3RvcmVDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlCb29zdGluZ0NvbnRyYWN0BQAAABNib29zdGluZ0NvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAE2tleUVtaXNzaW9uQ29udHJhY3QFAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAASa2V5RmFjdG9yeUNvbnRyYWN0BQAAABJmYWN0b3J5Q29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATa2V5VXNlclBvb2xDb250cmFjdAUAAAATdXNlclBvb2xDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0BQAAABl2b3RpbmdFbWlzc2lvbkNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrZXlGZWVBbW91bnQFAAAADGZlZUFtb3VudFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa2V5RXBvY2hMZW5ndGgFAAAAEXZvdGluZ0R1cmF0aW9uUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrZXlGaW5hbGl6ZVJld2FyZAUA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bnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBAAAAApidXJuRmVlSW52CQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGJ1cm4FAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAACmJ1cm5GZWVJbnYFAAAACmJ1cm5GZWVJbnYEAAAAD25ld1N1Z2dlc3RJbmRleAQAAAAHJG1hdGNoMAkABB8AAAABCQEAAAAPa2V5U3VnZ2VzdEluZGV4AAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAkAAGQAAAACBQAAAANpbnQAAAAAAAAAAAEAAAAAAAAAAAAJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAD25ld1N1Z2dlc3RJbmRleAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgIAAAABMAIAAAABMAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVN1Z2dlc3RJbmRleAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAPbmV3U3VnZ2VzdEluZGV4BQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABHZvdGUAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAAB2luRmF2b3IEAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAQAAAASdm90aW5nRmluaXNoSGVpZ2h0CQAAZAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQUAAAAOa2V5RXBvY2hMZW5ndGgEAAAABmNoZWNrcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQGCQAAAgAAAAECAAAAInRoZSB0b2tlbiBpc24ndCBvbiB0aGUgdm90aW5nIGxpc3QJAARMAAAAAgMJAABmAAAAAgUAAAASdm90aW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQGCQAAAgAAAAECAAAAEHRvbyBsYXRlIHRvIHZvdGUFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWd3eEFtb3VudAkAA/wAAAAEBQAAABBib29zdGluZ0NvbnRyYWN0AgAAACBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkABEwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACBQAAABJ2b3RpbmdGaW5pc2hIZWlnaHQFAAAAA25pbAUAAAADbmlsBAAAAAdub3RaZXJvAwkAAGYAAAACCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQAAAAAAAAAAAAGCQAAAgAAAAECAAAAEnlvdSBkb24ndCBoYXZlIGd3eAMJAAAAAAAAAgUAAAAHbm90WmVybwUAAAAHbm90WmVybwQAAAAEdm90ZQQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBAAAAAR2b3RlCQAEtQAAAAIFAAAAAXMFAAAACXNlcGFyYXRvcgQAAAAJdm90ZVZhbHVlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAEEAAAACHZvdGVUeXBlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAIEAAAAEWlzVm90ZVR5cGVTaW1pbGFyAwMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAA3llcwkAAAAAAAACBQAAAAdpbkZhdm9yBgcGAwkAAAAAAAACBQAAAAh2b3RlVHlwZQIAAAACbm8JAAAAAAAAAgUAAAAHaW5GYXZvcgcHBAAAABJpc1ZvdGVWYWx1ZVNpbWlsYXIDBQAAABFpc1ZvdGVUeXBlU2ltaWxhcgkAAAAAAAACCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAJdm90ZVZhbHVlBwQAAAAQaXNOZXdWb3RlU2ltaWxhcgMDBQAAABFpc1ZvdGVUeXBlU2ltaWxhcgUAAAASaXNWb3RlVmFsdWVTaW1pbGFyBwkAAAIAAAABAgAAABF5b3UgYWxyZWFkeSB2b3RlZAkAA/wAAAAEBQAAAAR0aGlzAgAAAApjYW5jZWxWb3RlCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAUAAAAQaXNOZXdWb3RlU2ltaWxhcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAUAAAABdQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgMJAAAAAAAAAgUAAAAEdm90ZQUAAAAEdm90ZQQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwUAAAAHaW5GYXZvcgQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAARMAAAAAgUAAAANbmVnYXRpdmVWb3RlcwUAAAADbmlsBAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQAETAAAAAIFAAAADXBvc2l0aXZlVm90ZXMJAARMAAAAAgkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzBQAAAANuaWwEAAAAB3ZvdGVLZXkJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAl2b3RlVmFsdWUJAQAAAAxrZXlWb3RlVmFsdWUAAAACCQABpAAAAAEJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAUAAAAHaW5GYXZvcgkABRQAAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAACnRvdGFsVm90ZXMAAAACCQABkQAAAAIFAAAAG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwAAAAAAAAAAAAkAAZEAAAACBQAAABtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAHdm90ZUtleQUAAAAJdm90ZVZhbHVlBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY2FuY2VsVm90ZQAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAAC3VzZXJBZGRyZXNzAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAYJAAACAAAAAQIAAAAXbm8gdm90ZSBmb3IgYXNzZXRzIHBhaXIFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABHZvdGUJAAS1AAAAAgkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAAJc2VwYXJhdG9yBAAAAAl2b3RlVmFsdWUJAAGRAAAAAgUAAAAEdm90ZQAAAAAAAAAAAQQAAAAIdm90ZVR5cGUJAAGRAAAAAgUAAAAEdm90ZQAAAAAAAAAAAgQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAHYWN0aW9ucwMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAA3llcwQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGUAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAJdm90ZVZhbHVlCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAKdG90YWxWb3RlcwAAAAIJAAGkAAAAAQUAAAAQbmV3UG9zaXRpdmVWb3RlcwUAAAANbmVnYXRpdmVWb3RlcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAADbmlsBQAAAAR1bml0BAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZQAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAAl2b3RlVmFsdWUJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgUAAAANcG9zaXRpdmVWb3RlcwkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgFAAAAC3VzZXJBZGRyZXNzBQAAAANuaWwFAAAABHVuaXQFAAAAB2FjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABnNldEZlZQAAAAEAAAAGbmV3RmVlBAAAAAZjaGVja3MJAARMAAAAAgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAZuZXdGZWUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIZmluYWxpemUAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkBAAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQEAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAA5rZXlTdGFydEhlaWdodAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEFAAAADmtleUVwb2NoTGVuZ3RoBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkAAAIAAAABAgAAAA5ubyBhc3NldHMgcGFpcgkABEwAAAACAwkAAGcAAAACBQAAAAZoZWlnaHQFAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAYJAAACAAAAAQIAAAAiaW5zdWZmaWNpZW50IGhlaWdodCBmb3IgY29tcGxldGlvbgUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAEEAAAADW5lZ2F0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAIEAAAAB2FjdGlvbnMDCQAAZgAAAAIFAAAADXBvc2l0aXZlVm90ZXMFAAAADW5lZ2F0aXZlVm90ZXMEAAAAA3JlcwkAA/wAAAAEBQAAAA9mYWN0b3J5Q29udHJhY3QCAAAAFnNldFd4RW1pc3Npb25Qb29sTGFiZWwJAARMAAAAAgUAAAANYW1vdW50QXNzZXRJZAkABEwAAAACBQAAAAxwcmljZUFzc2V0SWQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAANyZXMFAAAAA3JlcwkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAFFAAAAAIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAA25pbAUAAAAEdW5pdAUAAAAHYWN0aW9ucwkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXlleeBJ", "chainId": 84, "height": 2096298, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AWDnkZCp8uKMFFqTrCi2aaBWcdHFrCrbozUJjkekZen8 Next: 8gaRocQYr2GYogxYRLUVwJdYCQy12wjjgWee8HoUifki Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = "__"
55
6-let b = 100000000
6+let b = makeString(["%s", "fee"], a)
77
8-let c = 18
8+let c = makeString(["%s", "usdnAssetId"], a)
99
10-let d = toBigInt(1000000000000000000)
10+let d = makeString(["%s", "epochLength"], a)
1111
12-let e = "__"
12+let e = makeString(["%s", "finalizeReward"], a)
1313
14-let f = b
14+let f = makeString(["%s", "wxAssetId"], a)
1515
16-let g = toBigInt(0)
16+let g = makeString(["%s", "assetsStoreContract"], a)
1717
18-let h = toBigInt(1)
18+let h = makeString(["%s", "userPoolContract"], a)
1919
20-func i (j) = {
21- let k = j
22- if ($isInstanceOf(k, "List[Any]"))
23- then {
24- let l = k
25- l
26- }
27- else throw("fail to cast into List[Any]")
20+let i = makeString(["%s", "emissionContract"], a)
21+
22+let j = makeString(["%s", "boostingContract"], a)
23+
24+let k = makeString(["%s", "factoryContract"], a)
25+
26+let l = makeString(["%s", "votingEmissionContract"], a)
27+
28+func m (n) = valueOrErrorMessage(getString(this, n), (n + " is not defined"))
29+
30+
31+func o (p,q) = makeString(["%s%s%s", "inList", p, q], a)
32+
33+
34+func r (p,q) = makeString(["%s%s%s", "suggestIndex", p, q], a)
35+
36+
37+func s (p,q,t) = makeString(["%s%s%s%d", "startHeight", p, q, toString(t)], a)
38+
39+
40+func u (p,q,t) = makeString(["%s%s%s%d", "votingResult", p, q, toString(t)], a)
41+
42+
43+func v (w,x) = makeString(["%d%d", w, x], a)
44+
45+
46+func y (p,q,t,z) = makeString(["%s%s%s%d%s", "vote", p, q, toString(t), z], a)
47+
48+
49+func A (B,C) = {
50+ let n = if (C)
51+ then makeString(["%d%s", B, "yes"], a)
52+ else makeString(["%d%s", B, "no"], a)
53+ n
2854 }
2955
3056
31-func m (j) = {
32- let k = j
33- if ($isInstanceOf(k, "Int"))
34- then {
35- let n = k
36- n
37- }
38- else throw("fail to cast into Int")
39- }
57+func D () = "%s__managerPublicKey"
4058
4159
42-func o (j) = {
43- let k = j
44- if ($isInstanceOf(k, "String"))
45- then {
46- let p = k
47- p
48- }
49- else throw("fail to cast into Int")
50- }
60+func E () = "%s__pendingManagerPublicKey"
5161
5262
53-func q (j) = {
54- let k = j
55- if ($isInstanceOf(k, "ByteVector"))
63+let F = addressFromStringValue(m(g))
64+
65+let G = addressFromStringValue(m(j))
66+
67+let H = addressFromStringValue(m(i))
68+
69+let I = addressFromStringValue(m(k))
70+
71+let J = addressFromStringValue(m(h))
72+
73+let K = addressFromStringValue(m(l))
74+
75+func L () = {
76+ let M = getString(D())
77+ if ($isInstanceOf(M, "String"))
5678 then {
57- let r = k
58- r
79+ let N = M
80+ fromBase58String(N)
5981 }
60- else throw("fail to cast into Int")
61- }
62-
63-
64-func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
65-
66-
67-func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
68-
69-
70-func w (t,u) = valueOrElse(getInteger(t, u), 0)
71-
72-
73-func x (t,u,y) = valueOrElse(getInteger(t, u), y)
74-
75-
76-func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
77-
78-
79-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
80-
81-
82-func D (j,E) = toInt(fraction(j, toBigInt(E), d))
83-
84-
85-func F () = "%s%s__config__factoryAddress"
86-
87-
88-let G = 1
89-
90-let H = 2
91-
92-let I = 3
93-
94-let J = 4
95-
96-let K = 5
97-
98-let L = 6
99-
100-let M = 7
101-
102-func N () = "%s__factoryConfig"
103-
104-
105-func O () = "%s__managerPublicKey"
106-
107-
108-func P () = "%s__pendingManagerPublicKey"
109-
110-
111-func Q () = "%s__stablePoolAddonAddr"
112-
113-
114-func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
115-
116-
117-func T () = "%s__lpTokensList"
118-
119-
120-func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
121-
122-
123-func V (W) = makeString(["%s%s", "poolWeight", W], e)
124-
125-
126-func X (Y) = split(valueOrElse(getString(Y, T()), ""), e)
127-
128-
129-func Z (Y) = split(v(Y, N()), e)
130-
131-
132-func aa (ab) = addressFromStringValue(ab[H])
133-
134-
135-func ac (ab) = addressFromStringValue(ab[K])
136-
137-
138-func ad (ab) = addressFromStringValue(ab[G])
139-
140-
141-func ae () = "%s%s__ratePerBlock__current"
142-
143-
144-func af () = "%s%s__ratePerBlockMax__current"
145-
146-
147-func ag () = "%s%s__emission__startBlock"
148-
149-
150-func ah () = "%s%s__emission__duration"
151-
152-
153-func ai () = "%s%s__emission__endBlock"
154-
155-
156-func aj (ak,al) = makeString(["%s%s%s__staked", ak, al], e)
157-
158-
159-func am (al) = ("%s%s%s__staked__total__" + al)
160-
161-
162-func an (al,ak) = makeString(["%s%s%s__claimed", ak, al], e)
163-
164-
165-func ao (al,ak) = makeString(["%s%s%s__claimedMinReward", ak, al], e)
166-
167-
168-func ap (al,ak) = makeString(["%s%s%s__claimedBoostReward", ak, al], e)
169-
170-
171-func aq (al) = makeString(["%s%s%s__claimed", "total", al], e)
172-
173-
174-func ar (u) = valueOrElse(getInteger(this, u), 0)
175-
176-
177-func as (at) = makeString(["%s%s%s", at, "total", "bal"], e)
178-
179-
180-func au (at,av) = makeString(["%s%s%s", at, av, "bal"], e)
181-
182-
183-func aw (at) = makeString(["%s%s%s", at, "total", "balINT"], e)
184-
185-
186-func ax (at,av) = makeString(["%s%s%s", at, av, "balINT"], e)
187-
188-
189-func ay (at) = makeString(["%s%s%s", at, "total", "lastUpd"], e)
190-
191-
192-func az (at,av) = makeString(["%s%s%s", at, av, "lastUpd"], e)
193-
194-
195-func aA (at) = makeString(["%s%s%s%s", at, "common", "lpInt"], e)
196-
197-
198-func aB (at) = makeString(["%s%s%s%s", at, "common", "lpIntH"], e)
199-
200-
201-func aC (at,av) = makeString(["%s%s%s%s", at, av, "lpInt"], e)
202-
203-
204-func aD (at,av) = makeString(["%s%s%s%s", at, av, "lpIntH"], e)
205-
206-
207-func aE (at) = makeString(["%s", at, "wxPerLp"], e)
208-
209-
210-func aF (at) = makeString(["%s", at, "wxPerLpX18"], e)
211-
212-
213-func aG (at,av) = makeString(["%s%s%s%s", at, av, "uIntL"], e)
214-
215-
216-func aH (aI,av,aJ) = makeString(["%s%s%s%s__history", aI, av, aJ], e)
217-
218-
219-func aK (av,at,aI,aL) = makeString(["%s%s%s%d%d%d", av, at, aI, toString(height), toString(lastBlock.timestamp), toString(aL)], e)
220-
221-
222-func aM (aI,av,at,aL,aN) = StringEntry(aH(aI, av, toBase58String(aN)), aK(av, at, aI, aL))
223-
224-
225-let aO = s(this, F())
226-
227-let aP = addressFromStringValue(aO)
228-
229-let ab = Z(aP)
230-
231-let aQ = ac(ab)
232-
233-let aR = aa(ab)
234-
235-func aS (aT,aU,aV,aW) = if (if ((aU == g))
236- then (aT > g)
237- else false)
238- then g
239- else if ((aT == g))
240- then aV
241- else if (if ((aU > g))
242- then (aT > g)
243- else false)
244- then value(parseBigInt(s(this, aW)))
245- else throw("calcWxPerLpIntegralUserLast: unexpected state")
246-
247-
248-func aX (al,aY,aZ) = {
249- let ba = am(al)
250- let bb = toBigInt(ar(ba))
251- let bc = if ((bb == g))
252- then h
253- else bb
254- let bd = getIntegerValue(aP, V(aY))
255- let be = z(aQ, ag())
256- let bf = 1000
257- let bg = (z(aQ, ae()) * bf)
258- let bh = fraction(bg, bd, (f * 3))
259- let bi = aA(al)
260- let bj = aB(al)
261- let bk = aE(al)
262- let bl = x(this, bj, be)
263- let bm = w(this, bi)
264- let bn = 0
265- let bo = max([(height - bl), 0])
266- let bp = if ((bn != 0))
267- then toBigInt(bn)
268- else fraction(toBigInt(bh), toBigInt(b), bc)
269- let bq = (bb + toBigInt(aZ))
270- let br = if ((bq == g))
271- then h
272- else bq
273- let aV = (toBigInt(bm) + (bp * toBigInt(bo)))
274- let bs = (toBigInt(bh) / br)
275- let bt = height
276- let bu = makeString(["wxPerLpIntegralNew=", toString(aV), "dh=", toString(bo), "wxPerLpX3=", toString(bp), "stakedTotal=", toString(bb), "poolWxEmissionPerBlockX3=", toString(bh), "wxEmissionPerBlockX3=", toString(bg), "poolWeight=", toString(bd)], "::")
277- $Tuple3(aV, [StringEntry(bi, toString(aV)), IntegerEntry(bj, bt), StringEntry(bk, toString(bs))], bu)
278- }
279-
280-
281-func bv (al,ak,aY,aZ) = {
282- let bw = aX(al, aY, aZ)
283- let aV = bw._1
284- let bx = bw._2
285- let by = bw._3
286- let bf = 1000
287- let bz = aj(ak, al)
288- let aT = ar(bz)
289- let bA = aC(al, ak)
290- let bB = aD(al, ak)
291- let aW = aG(al, ak)
292- let bC = w(this, bA)
293- let aU = w(this, bB)
294- let bD = aS(toBigInt(aT), toBigInt(aU), aV, aW)
295- let bE = (b * bf)
296- let bF = (toBigInt(bC) + fraction((aV - bD), toBigInt(aT), toBigInt(bE)))
297- let bG = aV
298- let bH = height
299- let bu = makeString(["wxToClaimUserNew=", toString(bF), "wxPerLpIntegralUserLast=", toString(bD), "stakedByUser=", toString(aT), "poolDEBUG=", by, "height=", toString(height)], "::")
300- $Tuple3(bF, (bx ++ [StringEntry(bA, toString(bF)), IntegerEntry(bB, bH), StringEntry(aW, toString(bG))]), bu)
301- }
302-
303-
304-func bI () = {
305- let k = getString(O())
306- if ($isInstanceOf(k, "String"))
307- then {
308- let bJ = k
309- fromBase58String(bJ)
310- }
311- else if ($isInstanceOf(k, "Unit"))
82+ else if ($isInstanceOf(M, "Unit"))
31283 then unit
31384 else throw("Match error")
31485 }
31586
31687
317-func bK () = {
318- let k = getString(P())
319- if ($isInstanceOf(k, "String"))
88+func O () = {
89+ let M = getString(E())
90+ if ($isInstanceOf(M, "String"))
32091 then {
321- let bJ = k
322- fromBase58String(bJ)
92+ let N = M
93+ fromBase58String(N)
32394 }
324- else if ($isInstanceOf(k, "Unit"))
95+ else if ($isInstanceOf(M, "Unit"))
32596 then unit
32697 else throw("Match error")
32798 }
32899
329100
330-func bL (bM) = {
331- let bN = throw("Permission denied")
332- let k = bI()
333- if ($isInstanceOf(k, "ByteVector"))
101+func P (Q) = {
102+ let R = throw("permission denied")
103+ let M = L()
104+ if ($isInstanceOf(M, "ByteVector"))
334105 then {
335- let bO = k
336- if ((bM.callerPublicKey == bO))
106+ let S = M
107+ if ((Q.callerPublicKey == S))
337108 then true
338- else bN
109+ else R
339110 }
340- else if ($isInstanceOf(k, "Unit"))
341- then if ((bM.caller == this))
111+ else if ($isInstanceOf(M, "Unit"))
112+ then if ((Q.caller == this))
342113 then true
343- else bN
114+ else R
344115 else throw("Match error")
345116 }
346117
347118
348-@Callable(bM)
349-func constructor (bP) = {
350- let bQ = bL(bM)
351- if ((bQ == bQ))
352- then [StringEntry(F(), bP)]
119+func T (U) = {
120+ let M = U
121+ if ($isInstanceOf(M, "Int"))
122+ then {
123+ let V = M
124+ V
125+ }
126+ else throw("failed to cast into Integer")
127+ }
128+
129+
130+@Callable(Q)
131+func constructor (W,X,Y,Z,aa,ab,ac,ad,ae,af,ag) = {
132+ let ah = [P(Q), if (isDefined(addressFromString(W)))
133+ then true
134+ else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(X)))
135+ then true
136+ else throw("Invalid boosting contract address"), if (isDefined(addressFromString(aa)))
137+ then true
138+ else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(Y)))
139+ then true
140+ else throw("Invalid emission contract address"), if (isDefined(addressFromString(Z)))
141+ then true
142+ else throw("Invalid factory contract address"), if ((ac >= 0))
143+ then true
144+ else throw("Invalid fee amount"), if ((ae > 0))
145+ then true
146+ else throw("Invalid voting duration"), if ((ag > 0))
147+ then true
148+ else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(ad))))
149+ then true
150+ else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(af))))
151+ then true
152+ else throw("Invalid USDN asset ID")]
153+ if ((ah == ah))
154+ then $Tuple2([StringEntry(g, W), StringEntry(j, X), StringEntry(i, Y), StringEntry(k, Z), StringEntry(h, aa), StringEntry(l, ab), IntegerEntry(b, ac), IntegerEntry(d, ae), IntegerEntry(e, ag), StringEntry(f, ad), StringEntry(c, af)], unit)
353155 else throw("Strict value is not equal to itself.")
354156 }
355157
356158
357159
358-@Callable(bM)
359-func setManager (bR) = {
360- let bQ = bL(bM)
361- if ((bQ == bQ))
160+@Callable(Q)
161+func suggest (p,q) = {
162+ let ai = value(Q.payments[0])
163+ let aj = valueOrErrorMessage(assetInfo(fromBase58String(p)), "invalid amountAssetId ID")
164+ let ah = [if ((aj.issuer == Q.caller))
165+ then true
166+ else throw("asset can only be suggested by its issuer"), if ((aj.scripted == false))
167+ then true
168+ else throw("asset is smart"), if ((toBase58String(value(ai.assetId)) == value(getString(f))))
169+ then true
170+ else throw("invalid fee asset"), if ((ai.amount == value(getInteger(b))))
171+ then true
172+ else throw("invalid fee amount"), if ((q == value(getString(c))))
173+ then true
174+ else throw("priceAssetId is not USDN"), if ((getInteger(o(p, q)) == unit))
175+ then true
176+ else throw("already in voting list")]
177+ if ((ah == ah))
362178 then {
363- let bS = fromBase58String(bR)
364- if ((bS == bS))
365- then [StringEntry(P(), bR)]
179+ let ak = {
180+ let M = invoke(J, "statusREADONLY", [p, q], nil)
181+ if ($isInstanceOf(M, "String"))
182+ then {
183+ let N = M
184+ if ((N == "active"))
185+ then true
186+ else throw("user pool is not active")
187+ }
188+ else throw("user pool is not active")
189+ }
190+ if ((ak == ak))
191+ then {
192+ let al = {
193+ let M = invoke(F, "isVerifiedREADONLY", [p], nil)
194+ if ($isInstanceOf(M, "Boolean"))
195+ then {
196+ let am = M
197+ if (am)
198+ then true
199+ else throw("asset is not verified")
200+ }
201+ else throw("asset is not verified")
202+ }
203+ if ((al == al))
204+ then {
205+ let an = invoke(H, "burn", nil, [AttachedPayment(ai.assetId, ai.amount)])
206+ if ((an == an))
207+ then {
208+ let ao = {
209+ let M = getInteger(r(p, q))
210+ if ($isInstanceOf(M, "Int"))
211+ then {
212+ let ap = M
213+ (ap + 1)
214+ }
215+ else 0
216+ }
217+ $Tuple2([IntegerEntry(o(p, q), ao), IntegerEntry(s(p, q, ao), height), StringEntry(u(p, q, ao), v("0", "0")), IntegerEntry(r(p, q), ao)], unit)
218+ }
219+ else throw("Strict value is not equal to itself.")
220+ }
221+ else throw("Strict value is not equal to itself.")
222+ }
366223 else throw("Strict value is not equal to itself.")
367224 }
368225 else throw("Strict value is not equal to itself.")
370227
371228
372229
373-@Callable(bM)
374-func confirmManager () = {
375- let bT = bK()
376- let bU = if (isDefined(bT))
230+@Callable(Q)
231+func vote (p,q,aq) = {
232+ let t = value(getInteger(o(p, q)))
233+ let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
234+ let ah = [if (isDefined(getInteger(o(p, q))))
377235 then true
378- else throw("No pending manager")
379- if ((bU == bU))
236+ else throw("the token isn't on the voting list"), if ((ar > height))
237+ then true
238+ else throw("too late to vote")]
239+ if ((ah == ah))
380240 then {
381- let bV = if ((bM.callerPublicKey == value(bT)))
241+ let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242+ let as = if ((T(B) > 0))
382243 then true
383- else throw("You are not pending manager")
384- if ((bV == bV))
385- then [StringEntry(O(), toBase58String(value(bT))), DeleteEntry(P())]
244+ else throw("you don't have gwx")
245+ if ((as == as))
246+ then {
247+ let C = {
248+ let M = getString(y(p, q, t, toString(Q.caller)))
249+ if ($isInstanceOf(M, "String"))
250+ then {
251+ let N = M
252+ let C = split(N, a)
253+ let at = C[1]
254+ let au = C[2]
255+ let av = if (if ((au == "yes"))
256+ then (aq == true)
257+ else false)
258+ then true
259+ else if ((au == "no"))
260+ then (aq == false)
261+ else false
262+ let aw = if (av)
263+ then (T(B) == parseIntValue(at))
264+ else false
265+ let ax = if (if (av)
266+ then aw
267+ else false)
268+ then throw("you already voted")
269+ else invoke(this, "cancelVote", [p, q], nil)
270+ ax
271+ }
272+ else if ($isInstanceOf(M, "Unit"))
273+ then {
274+ let ay = M
275+ ay
276+ }
277+ else throw("Match error")
278+ }
279+ if ((C == C))
280+ then {
281+ let az = split(value(getString(u(p, q, t))), a)
282+ let aA = az[1]
283+ let aB = az[2]
284+ let aC = if (aq)
285+ then {
286+ let aD = (parseIntValue(aA) + T(B))
287+[toString(aD), aB]
288+ }
289+ else {
290+ let aE = (parseIntValue(aB) + T(B))
291+[aA, toString(aE)]
292+ }
293+ let aF = y(p, q, t, toString(Q.caller))
294+ let at = A(toString(T(B)), aq)
295+ $Tuple2([StringEntry(u(p, q, t), v(aC[0], aC[1])), StringEntry(aF, at)], unit)
296+ }
297+ else throw("Strict value is not equal to itself.")
298+ }
386299 else throw("Strict value is not equal to itself.")
387300 }
388301 else throw("Strict value is not equal to itself.")
390303
391304
392305
393-@Callable(bM)
394-func stake () = if ((size(bM.payments) != 1))
395- then throw("invalid payment - exact one payment must be attached")
396- else {
397- let bW = bM.payments[0]
398- let at = value(bW.assetId)
399- let al = toBase58String(at)
400- let aL = bW.amount
401- let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
402- let bX = toString(bM.caller)
403- let ak = if ((bX == aY))
404- then toString(bM.originCaller)
405- else bX
406- let bz = aj(ak, al)
407- let ba = am(al)
408- let aT = ar(bz)
409- let bb = ar(ba)
410- let bY = bv(al, ak, aY, aL)
411- let bF = bY._1
412- let bZ = bY._2
413- let bu = bY._3
414- ([IntegerEntry(bz, (aT + aL)), IntegerEntry(ba, (bb + aL)), aM("stake", ak, al, aL, bM.transactionId)] ++ bZ)
415- }
416-
417-
418-
419-@Callable(bM)
420-func unstake (al,aL) = {
421- let at = fromBase58String(al)
422- let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
423- let ca = valueOrElse(getString(this, Q()), aY)
424- let bX = toString(bM.caller)
425- let ak = if (if ((bX == aY))
306+@Callable(Q)
307+func cancelVote (p,q) = {
308+ let aG = if ((Q.caller == this))
309+ then toString(Q.originCaller)
310+ else toString(Q.caller)
311+ let t = value(getInteger(o(p, q)))
312+ let ah = [if (isDefined(getString(u(p, q, t))))
426313 then true
427- else (bX == ca))
428- then toString(bM.originCaller)
429- else bX
430- let bz = aj(ak, al)
431- let ba = am(al)
432- let aT = ar(bz)
433- let bb = ar(ba)
434- let cb = bv(al, ak, aY, -(aL))
435- let bF = cb._1
436- let bZ = cb._2
437- let bu = cb._3
438- if ((aL > aT))
439- then throw("passed amount is less then available")
440- else ([IntegerEntry(bz, (aT - aL)), IntegerEntry(ba, (bb - aL)), ScriptTransfer(bM.caller, aL, at), aM("unstake", ak, al, aL, bM.transactionId)] ++ bZ)
314+ else throw("no vote for assets pair")]
315+ if ((ah == ah))
316+ then {
317+ let C = split(value(getString(y(p, q, t, aG))), a)
318+ let at = C[1]
319+ let au = C[2]
320+ let az = split(value(getString(u(p, q, t))), a)
321+ let aA = az[1]
322+ let aB = az[2]
323+ let aH = if ((au == "yes"))
324+ then {
325+ let aD = (parseIntValue(aA) - parseIntValue(at))
326+ $Tuple2([StringEntry(u(p, q, t), v(toString(aD), aB)), DeleteEntry(y(p, q, t, aG))], unit)
327+ }
328+ else {
329+ let aE = (parseIntValue(aB) - parseIntValue(at))
330+ $Tuple2([StringEntry(u(p, q, t), v(aA, toString(aE))), DeleteEntry(y(p, q, t, aG))], unit)
331+ }
332+ aH
333+ }
334+ else throw("Strict value is not equal to itself.")
441335 }
442336
443337
444338
445-@Callable(bM)
446-func claimWx (al) = {
447- let av = bM.caller
448- let ak = toString(bM.caller)
449- let aY = v(aP, U(al))
450- let cc = an(al, ak)
451- let cd = aq(al)
452- let ce = ao(al, ak)
453- let cf = ap(al, ak)
454- let cg = toBigInt(w(this, cc))
455- let ch = toBigInt(w(this, ce))
456- let ci = toBigInt(w(this, cf))
457- let cj = toBigInt(w(this, cd))
458- let ck = bv(al, ak, aY, 0)
459- let bF = ck._1
460- let bZ = ck._2
461- let bu = ck._3
462- let cl = (bF - cg)
463- if ((g >= cl))
464- then throw("nothing to claim")
465- else {
466- let cm = m(i(invoke(aR, "claimWxBoost", [al, ak], nil))[0])
467- let cn = cl
468- let co = min([(cn * toBigInt(2)), toBigInt(cm)])
469- let cp = q(i(invoke(aQ, "emit", [cn], nil))[0])
470- let cq = i(invoke(aQ, "emit", [co], nil))
471- if ((cq == cq))
472- then {
473- let cr = (cg + cl)
474- let cs = (ch + cn)
475- let ct = (ch + cn)
476- let cu = (ch + cn)
477-[StringEntry(cc, toString(cr)), StringEntry(ce, toString(cs)), StringEntry(cf, toString(ct)), StringEntry(cd, toString(cu)), ScriptTransfer(av, toInt(cn), cp), ScriptTransfer(av, toInt(co), cp), aM("claim", ak, al, toInt(cl), bM.transactionId)]
478- }
479- else throw("Strict value is not equal to itself.")
480- }
339+@Callable(Q)
340+func setFee (aI) = {
341+ let ah = [P(Q)]
342+ if ((ah == ah))
343+ then [IntegerEntry(b, aI)]
344+ else throw("Strict value is not equal to itself.")
481345 }
482346
483347
484348
485-@Callable(bM)
486-func claimWxREADONLY (al,ak) = {
487- let bz = aj(ak, al)
488- let ba = am(al)
489- let cc = an(al, ak)
490- let aT = ar(bz)
491- let bb = ar(ba)
492- let cg = w(this, cc)
493- let aY = v(aP, U(al))
494- let bd = getIntegerValue(aP, V(aY))
495- let cv = z(aQ, ae())
496- let be = z(aQ, ag())
497- let cw = if ((be > height))
498- then 0
499- else (height - be)
500- let cx = fraction((cv * cw), bd, f)
501- let cy = fraction(cx, aT, bb)
502- let cz = bv(al, ak, aY, 0)
503- let bF = cz._1
504- let bZ = cz._2
505- let bu = cz._3
506- let cl = (bF - toBigInt(cg))
507- let cA = i(invoke(aR, "claimWxBoostREADONLY", [al, ak], nil))
508- let cm = m(cA[0])
509- let cB = o(cA[1])
510- let cn = cl
511- let co = min([(cn * toBigInt(2)), toBigInt(cm)])
512- let cC = (cn + co)
513- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", al, ak, toString(cC), toString(cg), toString(cn), toString(co), ((((bu + "::") + toString(cy)) + "::BOOSTDEBUG::") + cB)], e))
349+@Callable(Q)
350+func finalize (p,q) = {
351+ let t = value(getInteger(o(p, q)))
352+ let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
353+ let ah = [if (isDefined(getInteger(o(p, q))))
354+ then true
355+ else throw("no assets pair"), if ((height >= ar))
356+ then true
357+ else throw("insufficient height for completion")]
358+ if ((ah == ah))
359+ then {
360+ let az = split(value(getString(u(p, q, t))), a)
361+ let aA = parseIntValue(az[1])
362+ let aB = parseIntValue(az[2])
363+ let aH = if ((aA > aB))
364+ then {
365+ let aJ = invoke(I, "setWxEmissionPoolLabel", [p, q], nil)
366+ if ((aJ == aJ))
367+ then $Tuple2([DeleteEntry(o(p, q))], unit)
368+ else throw("Strict value is not equal to itself.")
369+ }
370+ else $Tuple2([DeleteEntry(o(p, q))], unit)
371+ aH
372+ }
373+ else throw("Strict value is not equal to itself.")
514374 }
515375
516376
517377
518-@Callable(bM)
519-func onModifyWeight (al,aY) = if ((bM.caller != aP))
520- then throw("permissions denied")
521- else {
522- let cD = aX(al, aY, 0)
523- let aV = cD._1
524- let bx = cD._2
525- let by = cD._3
526- bx
527- }
378+@Callable(Q)
379+func setManager (aK) = {
380+ let aL = P(Q)
381+ if ((aL == aL))
382+ then {
383+ let aM = fromBase58String(aK)
384+ if ((aM == aM))
385+ then [StringEntry(E(), aK)]
386+ else throw("Strict value is not equal to itself.")
387+ }
388+ else throw("Strict value is not equal to itself.")
389+ }
528390
529391
530-@Verifier(cE)
531-func cF () = {
532- let cG = {
533- let k = bI()
534- if ($isInstanceOf(k, "ByteVector"))
392+
393+@Callable(Q)
394+func confirmManager () = {
395+ let aN = O()
396+ let aO = if (isDefined(aN))
397+ then true
398+ else throw("no pending manager")
399+ if ((aO == aO))
400+ then {
401+ let aP = if ((Q.callerPublicKey == value(aN)))
402+ then true
403+ else throw("you are not pending manager")
404+ if ((aP == aP))
405+ then [StringEntry(D(), toBase58String(value(aN))), DeleteEntry(E())]
406+ else throw("Strict value is not equal to itself.")
407+ }
408+ else throw("Strict value is not equal to itself.")
409+ }
410+
411+
412+@Verifier(aQ)
413+func aR () = {
414+ let aS = {
415+ let M = L()
416+ if ($isInstanceOf(M, "ByteVector"))
535417 then {
536- let bO = k
537- bO
418+ let S = M
419+ S
538420 }
539- else if ($isInstanceOf(k, "Unit"))
540- then cE.senderPublicKey
421+ else if ($isInstanceOf(M, "Unit"))
422+ then aQ.senderPublicKey
541423 else throw("Match error")
542424 }
543- sigVerify(cE.bodyBytes, cE.proofs[0], cG)
425+ sigVerify(aQ.bodyBytes, aQ.proofs[0], aS)
544426 }
545427
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = "__"
55
6-let b = 100000000
6+let b = makeString(["%s", "fee"], a)
77
8-let c = 18
8+let c = makeString(["%s", "usdnAssetId"], a)
99
10-let d = toBigInt(1000000000000000000)
10+let d = makeString(["%s", "epochLength"], a)
1111
12-let e = "__"
12+let e = makeString(["%s", "finalizeReward"], a)
1313
14-let f = b
14+let f = makeString(["%s", "wxAssetId"], a)
1515
16-let g = toBigInt(0)
16+let g = makeString(["%s", "assetsStoreContract"], a)
1717
18-let h = toBigInt(1)
18+let h = makeString(["%s", "userPoolContract"], a)
1919
20-func i (j) = {
21- let k = j
22- if ($isInstanceOf(k, "List[Any]"))
23- then {
24- let l = k
25- l
26- }
27- else throw("fail to cast into List[Any]")
20+let i = makeString(["%s", "emissionContract"], a)
21+
22+let j = makeString(["%s", "boostingContract"], a)
23+
24+let k = makeString(["%s", "factoryContract"], a)
25+
26+let l = makeString(["%s", "votingEmissionContract"], a)
27+
28+func m (n) = valueOrErrorMessage(getString(this, n), (n + " is not defined"))
29+
30+
31+func o (p,q) = makeString(["%s%s%s", "inList", p, q], a)
32+
33+
34+func r (p,q) = makeString(["%s%s%s", "suggestIndex", p, q], a)
35+
36+
37+func s (p,q,t) = makeString(["%s%s%s%d", "startHeight", p, q, toString(t)], a)
38+
39+
40+func u (p,q,t) = makeString(["%s%s%s%d", "votingResult", p, q, toString(t)], a)
41+
42+
43+func v (w,x) = makeString(["%d%d", w, x], a)
44+
45+
46+func y (p,q,t,z) = makeString(["%s%s%s%d%s", "vote", p, q, toString(t), z], a)
47+
48+
49+func A (B,C) = {
50+ let n = if (C)
51+ then makeString(["%d%s", B, "yes"], a)
52+ else makeString(["%d%s", B, "no"], a)
53+ n
2854 }
2955
3056
31-func m (j) = {
32- let k = j
33- if ($isInstanceOf(k, "Int"))
34- then {
35- let n = k
36- n
37- }
38- else throw("fail to cast into Int")
39- }
57+func D () = "%s__managerPublicKey"
4058
4159
42-func o (j) = {
43- let k = j
44- if ($isInstanceOf(k, "String"))
45- then {
46- let p = k
47- p
48- }
49- else throw("fail to cast into Int")
50- }
60+func E () = "%s__pendingManagerPublicKey"
5161
5262
53-func q (j) = {
54- let k = j
55- if ($isInstanceOf(k, "ByteVector"))
63+let F = addressFromStringValue(m(g))
64+
65+let G = addressFromStringValue(m(j))
66+
67+let H = addressFromStringValue(m(i))
68+
69+let I = addressFromStringValue(m(k))
70+
71+let J = addressFromStringValue(m(h))
72+
73+let K = addressFromStringValue(m(l))
74+
75+func L () = {
76+ let M = getString(D())
77+ if ($isInstanceOf(M, "String"))
5678 then {
57- let r = k
58- r
79+ let N = M
80+ fromBase58String(N)
5981 }
60- else throw("fail to cast into Int")
61- }
62-
63-
64-func s (t,u) = valueOrErrorMessage(getString(t, u), (("mandatory this." + u) + " is not defined"))
65-
66-
67-func v (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
68-
69-
70-func w (t,u) = valueOrElse(getInteger(t, u), 0)
71-
72-
73-func x (t,u,y) = valueOrElse(getInteger(t, u), y)
74-
75-
76-func z (t,u) = valueOrErrorMessage(getInteger(t, u), (("mandatory this." + u) + " is not defined"))
77-
78-
79-func A (B,C) = fraction(toBigInt(B), d, toBigInt(C))
80-
81-
82-func D (j,E) = toInt(fraction(j, toBigInt(E), d))
83-
84-
85-func F () = "%s%s__config__factoryAddress"
86-
87-
88-let G = 1
89-
90-let H = 2
91-
92-let I = 3
93-
94-let J = 4
95-
96-let K = 5
97-
98-let L = 6
99-
100-let M = 7
101-
102-func N () = "%s__factoryConfig"
103-
104-
105-func O () = "%s__managerPublicKey"
106-
107-
108-func P () = "%s__pendingManagerPublicKey"
109-
110-
111-func Q () = "%s__stablePoolAddonAddr"
112-
113-
114-func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
115-
116-
117-func T () = "%s__lpTokensList"
118-
119-
120-func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
121-
122-
123-func V (W) = makeString(["%s%s", "poolWeight", W], e)
124-
125-
126-func X (Y) = split(valueOrElse(getString(Y, T()), ""), e)
127-
128-
129-func Z (Y) = split(v(Y, N()), e)
130-
131-
132-func aa (ab) = addressFromStringValue(ab[H])
133-
134-
135-func ac (ab) = addressFromStringValue(ab[K])
136-
137-
138-func ad (ab) = addressFromStringValue(ab[G])
139-
140-
141-func ae () = "%s%s__ratePerBlock__current"
142-
143-
144-func af () = "%s%s__ratePerBlockMax__current"
145-
146-
147-func ag () = "%s%s__emission__startBlock"
148-
149-
150-func ah () = "%s%s__emission__duration"
151-
152-
153-func ai () = "%s%s__emission__endBlock"
154-
155-
156-func aj (ak,al) = makeString(["%s%s%s__staked", ak, al], e)
157-
158-
159-func am (al) = ("%s%s%s__staked__total__" + al)
160-
161-
162-func an (al,ak) = makeString(["%s%s%s__claimed", ak, al], e)
163-
164-
165-func ao (al,ak) = makeString(["%s%s%s__claimedMinReward", ak, al], e)
166-
167-
168-func ap (al,ak) = makeString(["%s%s%s__claimedBoostReward", ak, al], e)
169-
170-
171-func aq (al) = makeString(["%s%s%s__claimed", "total", al], e)
172-
173-
174-func ar (u) = valueOrElse(getInteger(this, u), 0)
175-
176-
177-func as (at) = makeString(["%s%s%s", at, "total", "bal"], e)
178-
179-
180-func au (at,av) = makeString(["%s%s%s", at, av, "bal"], e)
181-
182-
183-func aw (at) = makeString(["%s%s%s", at, "total", "balINT"], e)
184-
185-
186-func ax (at,av) = makeString(["%s%s%s", at, av, "balINT"], e)
187-
188-
189-func ay (at) = makeString(["%s%s%s", at, "total", "lastUpd"], e)
190-
191-
192-func az (at,av) = makeString(["%s%s%s", at, av, "lastUpd"], e)
193-
194-
195-func aA (at) = makeString(["%s%s%s%s", at, "common", "lpInt"], e)
196-
197-
198-func aB (at) = makeString(["%s%s%s%s", at, "common", "lpIntH"], e)
199-
200-
201-func aC (at,av) = makeString(["%s%s%s%s", at, av, "lpInt"], e)
202-
203-
204-func aD (at,av) = makeString(["%s%s%s%s", at, av, "lpIntH"], e)
205-
206-
207-func aE (at) = makeString(["%s", at, "wxPerLp"], e)
208-
209-
210-func aF (at) = makeString(["%s", at, "wxPerLpX18"], e)
211-
212-
213-func aG (at,av) = makeString(["%s%s%s%s", at, av, "uIntL"], e)
214-
215-
216-func aH (aI,av,aJ) = makeString(["%s%s%s%s__history", aI, av, aJ], e)
217-
218-
219-func aK (av,at,aI,aL) = makeString(["%s%s%s%d%d%d", av, at, aI, toString(height), toString(lastBlock.timestamp), toString(aL)], e)
220-
221-
222-func aM (aI,av,at,aL,aN) = StringEntry(aH(aI, av, toBase58String(aN)), aK(av, at, aI, aL))
223-
224-
225-let aO = s(this, F())
226-
227-let aP = addressFromStringValue(aO)
228-
229-let ab = Z(aP)
230-
231-let aQ = ac(ab)
232-
233-let aR = aa(ab)
234-
235-func aS (aT,aU,aV,aW) = if (if ((aU == g))
236- then (aT > g)
237- else false)
238- then g
239- else if ((aT == g))
240- then aV
241- else if (if ((aU > g))
242- then (aT > g)
243- else false)
244- then value(parseBigInt(s(this, aW)))
245- else throw("calcWxPerLpIntegralUserLast: unexpected state")
246-
247-
248-func aX (al,aY,aZ) = {
249- let ba = am(al)
250- let bb = toBigInt(ar(ba))
251- let bc = if ((bb == g))
252- then h
253- else bb
254- let bd = getIntegerValue(aP, V(aY))
255- let be = z(aQ, ag())
256- let bf = 1000
257- let bg = (z(aQ, ae()) * bf)
258- let bh = fraction(bg, bd, (f * 3))
259- let bi = aA(al)
260- let bj = aB(al)
261- let bk = aE(al)
262- let bl = x(this, bj, be)
263- let bm = w(this, bi)
264- let bn = 0
265- let bo = max([(height - bl), 0])
266- let bp = if ((bn != 0))
267- then toBigInt(bn)
268- else fraction(toBigInt(bh), toBigInt(b), bc)
269- let bq = (bb + toBigInt(aZ))
270- let br = if ((bq == g))
271- then h
272- else bq
273- let aV = (toBigInt(bm) + (bp * toBigInt(bo)))
274- let bs = (toBigInt(bh) / br)
275- let bt = height
276- let bu = makeString(["wxPerLpIntegralNew=", toString(aV), "dh=", toString(bo), "wxPerLpX3=", toString(bp), "stakedTotal=", toString(bb), "poolWxEmissionPerBlockX3=", toString(bh), "wxEmissionPerBlockX3=", toString(bg), "poolWeight=", toString(bd)], "::")
277- $Tuple3(aV, [StringEntry(bi, toString(aV)), IntegerEntry(bj, bt), StringEntry(bk, toString(bs))], bu)
278- }
279-
280-
281-func bv (al,ak,aY,aZ) = {
282- let bw = aX(al, aY, aZ)
283- let aV = bw._1
284- let bx = bw._2
285- let by = bw._3
286- let bf = 1000
287- let bz = aj(ak, al)
288- let aT = ar(bz)
289- let bA = aC(al, ak)
290- let bB = aD(al, ak)
291- let aW = aG(al, ak)
292- let bC = w(this, bA)
293- let aU = w(this, bB)
294- let bD = aS(toBigInt(aT), toBigInt(aU), aV, aW)
295- let bE = (b * bf)
296- let bF = (toBigInt(bC) + fraction((aV - bD), toBigInt(aT), toBigInt(bE)))
297- let bG = aV
298- let bH = height
299- let bu = makeString(["wxToClaimUserNew=", toString(bF), "wxPerLpIntegralUserLast=", toString(bD), "stakedByUser=", toString(aT), "poolDEBUG=", by, "height=", toString(height)], "::")
300- $Tuple3(bF, (bx ++ [StringEntry(bA, toString(bF)), IntegerEntry(bB, bH), StringEntry(aW, toString(bG))]), bu)
301- }
302-
303-
304-func bI () = {
305- let k = getString(O())
306- if ($isInstanceOf(k, "String"))
307- then {
308- let bJ = k
309- fromBase58String(bJ)
310- }
311- else if ($isInstanceOf(k, "Unit"))
82+ else if ($isInstanceOf(M, "Unit"))
31283 then unit
31384 else throw("Match error")
31485 }
31586
31687
317-func bK () = {
318- let k = getString(P())
319- if ($isInstanceOf(k, "String"))
88+func O () = {
89+ let M = getString(E())
90+ if ($isInstanceOf(M, "String"))
32091 then {
321- let bJ = k
322- fromBase58String(bJ)
92+ let N = M
93+ fromBase58String(N)
32394 }
324- else if ($isInstanceOf(k, "Unit"))
95+ else if ($isInstanceOf(M, "Unit"))
32596 then unit
32697 else throw("Match error")
32798 }
32899
329100
330-func bL (bM) = {
331- let bN = throw("Permission denied")
332- let k = bI()
333- if ($isInstanceOf(k, "ByteVector"))
101+func P (Q) = {
102+ let R = throw("permission denied")
103+ let M = L()
104+ if ($isInstanceOf(M, "ByteVector"))
334105 then {
335- let bO = k
336- if ((bM.callerPublicKey == bO))
106+ let S = M
107+ if ((Q.callerPublicKey == S))
337108 then true
338- else bN
109+ else R
339110 }
340- else if ($isInstanceOf(k, "Unit"))
341- then if ((bM.caller == this))
111+ else if ($isInstanceOf(M, "Unit"))
112+ then if ((Q.caller == this))
342113 then true
343- else bN
114+ else R
344115 else throw("Match error")
345116 }
346117
347118
348-@Callable(bM)
349-func constructor (bP) = {
350- let bQ = bL(bM)
351- if ((bQ == bQ))
352- then [StringEntry(F(), bP)]
119+func T (U) = {
120+ let M = U
121+ if ($isInstanceOf(M, "Int"))
122+ then {
123+ let V = M
124+ V
125+ }
126+ else throw("failed to cast into Integer")
127+ }
128+
129+
130+@Callable(Q)
131+func constructor (W,X,Y,Z,aa,ab,ac,ad,ae,af,ag) = {
132+ let ah = [P(Q), if (isDefined(addressFromString(W)))
133+ then true
134+ else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(X)))
135+ then true
136+ else throw("Invalid boosting contract address"), if (isDefined(addressFromString(aa)))
137+ then true
138+ else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(Y)))
139+ then true
140+ else throw("Invalid emission contract address"), if (isDefined(addressFromString(Z)))
141+ then true
142+ else throw("Invalid factory contract address"), if ((ac >= 0))
143+ then true
144+ else throw("Invalid fee amount"), if ((ae > 0))
145+ then true
146+ else throw("Invalid voting duration"), if ((ag > 0))
147+ then true
148+ else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(ad))))
149+ then true
150+ else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(af))))
151+ then true
152+ else throw("Invalid USDN asset ID")]
153+ if ((ah == ah))
154+ then $Tuple2([StringEntry(g, W), StringEntry(j, X), StringEntry(i, Y), StringEntry(k, Z), StringEntry(h, aa), StringEntry(l, ab), IntegerEntry(b, ac), IntegerEntry(d, ae), IntegerEntry(e, ag), StringEntry(f, ad), StringEntry(c, af)], unit)
353155 else throw("Strict value is not equal to itself.")
354156 }
355157
356158
357159
358-@Callable(bM)
359-func setManager (bR) = {
360- let bQ = bL(bM)
361- if ((bQ == bQ))
160+@Callable(Q)
161+func suggest (p,q) = {
162+ let ai = value(Q.payments[0])
163+ let aj = valueOrErrorMessage(assetInfo(fromBase58String(p)), "invalid amountAssetId ID")
164+ let ah = [if ((aj.issuer == Q.caller))
165+ then true
166+ else throw("asset can only be suggested by its issuer"), if ((aj.scripted == false))
167+ then true
168+ else throw("asset is smart"), if ((toBase58String(value(ai.assetId)) == value(getString(f))))
169+ then true
170+ else throw("invalid fee asset"), if ((ai.amount == value(getInteger(b))))
171+ then true
172+ else throw("invalid fee amount"), if ((q == value(getString(c))))
173+ then true
174+ else throw("priceAssetId is not USDN"), if ((getInteger(o(p, q)) == unit))
175+ then true
176+ else throw("already in voting list")]
177+ if ((ah == ah))
362178 then {
363- let bS = fromBase58String(bR)
364- if ((bS == bS))
365- then [StringEntry(P(), bR)]
179+ let ak = {
180+ let M = invoke(J, "statusREADONLY", [p, q], nil)
181+ if ($isInstanceOf(M, "String"))
182+ then {
183+ let N = M
184+ if ((N == "active"))
185+ then true
186+ else throw("user pool is not active")
187+ }
188+ else throw("user pool is not active")
189+ }
190+ if ((ak == ak))
191+ then {
192+ let al = {
193+ let M = invoke(F, "isVerifiedREADONLY", [p], nil)
194+ if ($isInstanceOf(M, "Boolean"))
195+ then {
196+ let am = M
197+ if (am)
198+ then true
199+ else throw("asset is not verified")
200+ }
201+ else throw("asset is not verified")
202+ }
203+ if ((al == al))
204+ then {
205+ let an = invoke(H, "burn", nil, [AttachedPayment(ai.assetId, ai.amount)])
206+ if ((an == an))
207+ then {
208+ let ao = {
209+ let M = getInteger(r(p, q))
210+ if ($isInstanceOf(M, "Int"))
211+ then {
212+ let ap = M
213+ (ap + 1)
214+ }
215+ else 0
216+ }
217+ $Tuple2([IntegerEntry(o(p, q), ao), IntegerEntry(s(p, q, ao), height), StringEntry(u(p, q, ao), v("0", "0")), IntegerEntry(r(p, q), ao)], unit)
218+ }
219+ else throw("Strict value is not equal to itself.")
220+ }
221+ else throw("Strict value is not equal to itself.")
222+ }
366223 else throw("Strict value is not equal to itself.")
367224 }
368225 else throw("Strict value is not equal to itself.")
369226 }
370227
371228
372229
373-@Callable(bM)
374-func confirmManager () = {
375- let bT = bK()
376- let bU = if (isDefined(bT))
230+@Callable(Q)
231+func vote (p,q,aq) = {
232+ let t = value(getInteger(o(p, q)))
233+ let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
234+ let ah = [if (isDefined(getInteger(o(p, q))))
377235 then true
378- else throw("No pending manager")
379- if ((bU == bU))
236+ else throw("the token isn't on the voting list"), if ((ar > height))
237+ then true
238+ else throw("too late to vote")]
239+ if ((ah == ah))
380240 then {
381- let bV = if ((bM.callerPublicKey == value(bT)))
241+ let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242+ let as = if ((T(B) > 0))
382243 then true
383- else throw("You are not pending manager")
384- if ((bV == bV))
385- then [StringEntry(O(), toBase58String(value(bT))), DeleteEntry(P())]
244+ else throw("you don't have gwx")
245+ if ((as == as))
246+ then {
247+ let C = {
248+ let M = getString(y(p, q, t, toString(Q.caller)))
249+ if ($isInstanceOf(M, "String"))
250+ then {
251+ let N = M
252+ let C = split(N, a)
253+ let at = C[1]
254+ let au = C[2]
255+ let av = if (if ((au == "yes"))
256+ then (aq == true)
257+ else false)
258+ then true
259+ else if ((au == "no"))
260+ then (aq == false)
261+ else false
262+ let aw = if (av)
263+ then (T(B) == parseIntValue(at))
264+ else false
265+ let ax = if (if (av)
266+ then aw
267+ else false)
268+ then throw("you already voted")
269+ else invoke(this, "cancelVote", [p, q], nil)
270+ ax
271+ }
272+ else if ($isInstanceOf(M, "Unit"))
273+ then {
274+ let ay = M
275+ ay
276+ }
277+ else throw("Match error")
278+ }
279+ if ((C == C))
280+ then {
281+ let az = split(value(getString(u(p, q, t))), a)
282+ let aA = az[1]
283+ let aB = az[2]
284+ let aC = if (aq)
285+ then {
286+ let aD = (parseIntValue(aA) + T(B))
287+[toString(aD), aB]
288+ }
289+ else {
290+ let aE = (parseIntValue(aB) + T(B))
291+[aA, toString(aE)]
292+ }
293+ let aF = y(p, q, t, toString(Q.caller))
294+ let at = A(toString(T(B)), aq)
295+ $Tuple2([StringEntry(u(p, q, t), v(aC[0], aC[1])), StringEntry(aF, at)], unit)
296+ }
297+ else throw("Strict value is not equal to itself.")
298+ }
386299 else throw("Strict value is not equal to itself.")
387300 }
388301 else throw("Strict value is not equal to itself.")
389302 }
390303
391304
392305
393-@Callable(bM)
394-func stake () = if ((size(bM.payments) != 1))
395- then throw("invalid payment - exact one payment must be attached")
396- else {
397- let bW = bM.payments[0]
398- let at = value(bW.assetId)
399- let al = toBase58String(at)
400- let aL = bW.amount
401- let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
402- let bX = toString(bM.caller)
403- let ak = if ((bX == aY))
404- then toString(bM.originCaller)
405- else bX
406- let bz = aj(ak, al)
407- let ba = am(al)
408- let aT = ar(bz)
409- let bb = ar(ba)
410- let bY = bv(al, ak, aY, aL)
411- let bF = bY._1
412- let bZ = bY._2
413- let bu = bY._3
414- ([IntegerEntry(bz, (aT + aL)), IntegerEntry(ba, (bb + aL)), aM("stake", ak, al, aL, bM.transactionId)] ++ bZ)
415- }
416-
417-
418-
419-@Callable(bM)
420-func unstake (al,aL) = {
421- let at = fromBase58String(al)
422- let aY = valueOrErrorMessage(getString(aP, R(al)), ("unsupported lp asset " + al))
423- let ca = valueOrElse(getString(this, Q()), aY)
424- let bX = toString(bM.caller)
425- let ak = if (if ((bX == aY))
306+@Callable(Q)
307+func cancelVote (p,q) = {
308+ let aG = if ((Q.caller == this))
309+ then toString(Q.originCaller)
310+ else toString(Q.caller)
311+ let t = value(getInteger(o(p, q)))
312+ let ah = [if (isDefined(getString(u(p, q, t))))
426313 then true
427- else (bX == ca))
428- then toString(bM.originCaller)
429- else bX
430- let bz = aj(ak, al)
431- let ba = am(al)
432- let aT = ar(bz)
433- let bb = ar(ba)
434- let cb = bv(al, ak, aY, -(aL))
435- let bF = cb._1
436- let bZ = cb._2
437- let bu = cb._3
438- if ((aL > aT))
439- then throw("passed amount is less then available")
440- else ([IntegerEntry(bz, (aT - aL)), IntegerEntry(ba, (bb - aL)), ScriptTransfer(bM.caller, aL, at), aM("unstake", ak, al, aL, bM.transactionId)] ++ bZ)
314+ else throw("no vote for assets pair")]
315+ if ((ah == ah))
316+ then {
317+ let C = split(value(getString(y(p, q, t, aG))), a)
318+ let at = C[1]
319+ let au = C[2]
320+ let az = split(value(getString(u(p, q, t))), a)
321+ let aA = az[1]
322+ let aB = az[2]
323+ let aH = if ((au == "yes"))
324+ then {
325+ let aD = (parseIntValue(aA) - parseIntValue(at))
326+ $Tuple2([StringEntry(u(p, q, t), v(toString(aD), aB)), DeleteEntry(y(p, q, t, aG))], unit)
327+ }
328+ else {
329+ let aE = (parseIntValue(aB) - parseIntValue(at))
330+ $Tuple2([StringEntry(u(p, q, t), v(aA, toString(aE))), DeleteEntry(y(p, q, t, aG))], unit)
331+ }
332+ aH
333+ }
334+ else throw("Strict value is not equal to itself.")
441335 }
442336
443337
444338
445-@Callable(bM)
446-func claimWx (al) = {
447- let av = bM.caller
448- let ak = toString(bM.caller)
449- let aY = v(aP, U(al))
450- let cc = an(al, ak)
451- let cd = aq(al)
452- let ce = ao(al, ak)
453- let cf = ap(al, ak)
454- let cg = toBigInt(w(this, cc))
455- let ch = toBigInt(w(this, ce))
456- let ci = toBigInt(w(this, cf))
457- let cj = toBigInt(w(this, cd))
458- let ck = bv(al, ak, aY, 0)
459- let bF = ck._1
460- let bZ = ck._2
461- let bu = ck._3
462- let cl = (bF - cg)
463- if ((g >= cl))
464- then throw("nothing to claim")
465- else {
466- let cm = m(i(invoke(aR, "claimWxBoost", [al, ak], nil))[0])
467- let cn = cl
468- let co = min([(cn * toBigInt(2)), toBigInt(cm)])
469- let cp = q(i(invoke(aQ, "emit", [cn], nil))[0])
470- let cq = i(invoke(aQ, "emit", [co], nil))
471- if ((cq == cq))
472- then {
473- let cr = (cg + cl)
474- let cs = (ch + cn)
475- let ct = (ch + cn)
476- let cu = (ch + cn)
477-[StringEntry(cc, toString(cr)), StringEntry(ce, toString(cs)), StringEntry(cf, toString(ct)), StringEntry(cd, toString(cu)), ScriptTransfer(av, toInt(cn), cp), ScriptTransfer(av, toInt(co), cp), aM("claim", ak, al, toInt(cl), bM.transactionId)]
478- }
479- else throw("Strict value is not equal to itself.")
480- }
339+@Callable(Q)
340+func setFee (aI) = {
341+ let ah = [P(Q)]
342+ if ((ah == ah))
343+ then [IntegerEntry(b, aI)]
344+ else throw("Strict value is not equal to itself.")
481345 }
482346
483347
484348
485-@Callable(bM)
486-func claimWxREADONLY (al,ak) = {
487- let bz = aj(ak, al)
488- let ba = am(al)
489- let cc = an(al, ak)
490- let aT = ar(bz)
491- let bb = ar(ba)
492- let cg = w(this, cc)
493- let aY = v(aP, U(al))
494- let bd = getIntegerValue(aP, V(aY))
495- let cv = z(aQ, ae())
496- let be = z(aQ, ag())
497- let cw = if ((be > height))
498- then 0
499- else (height - be)
500- let cx = fraction((cv * cw), bd, f)
501- let cy = fraction(cx, aT, bb)
502- let cz = bv(al, ak, aY, 0)
503- let bF = cz._1
504- let bZ = cz._2
505- let bu = cz._3
506- let cl = (bF - toBigInt(cg))
507- let cA = i(invoke(aR, "claimWxBoostREADONLY", [al, ak], nil))
508- let cm = m(cA[0])
509- let cB = o(cA[1])
510- let cn = cl
511- let co = min([(cn * toBigInt(2)), toBigInt(cm)])
512- let cC = (cn + co)
513- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", al, ak, toString(cC), toString(cg), toString(cn), toString(co), ((((bu + "::") + toString(cy)) + "::BOOSTDEBUG::") + cB)], e))
349+@Callable(Q)
350+func finalize (p,q) = {
351+ let t = value(getInteger(o(p, q)))
352+ let ar = (value(getInteger(s(p, q, t))) + value(getInteger(d)))
353+ let ah = [if (isDefined(getInteger(o(p, q))))
354+ then true
355+ else throw("no assets pair"), if ((height >= ar))
356+ then true
357+ else throw("insufficient height for completion")]
358+ if ((ah == ah))
359+ then {
360+ let az = split(value(getString(u(p, q, t))), a)
361+ let aA = parseIntValue(az[1])
362+ let aB = parseIntValue(az[2])
363+ let aH = if ((aA > aB))
364+ then {
365+ let aJ = invoke(I, "setWxEmissionPoolLabel", [p, q], nil)
366+ if ((aJ == aJ))
367+ then $Tuple2([DeleteEntry(o(p, q))], unit)
368+ else throw("Strict value is not equal to itself.")
369+ }
370+ else $Tuple2([DeleteEntry(o(p, q))], unit)
371+ aH
372+ }
373+ else throw("Strict value is not equal to itself.")
514374 }
515375
516376
517377
518-@Callable(bM)
519-func onModifyWeight (al,aY) = if ((bM.caller != aP))
520- then throw("permissions denied")
521- else {
522- let cD = aX(al, aY, 0)
523- let aV = cD._1
524- let bx = cD._2
525- let by = cD._3
526- bx
527- }
378+@Callable(Q)
379+func setManager (aK) = {
380+ let aL = P(Q)
381+ if ((aL == aL))
382+ then {
383+ let aM = fromBase58String(aK)
384+ if ((aM == aM))
385+ then [StringEntry(E(), aK)]
386+ else throw("Strict value is not equal to itself.")
387+ }
388+ else throw("Strict value is not equal to itself.")
389+ }
528390
529391
530-@Verifier(cE)
531-func cF () = {
532- let cG = {
533- let k = bI()
534- if ($isInstanceOf(k, "ByteVector"))
392+
393+@Callable(Q)
394+func confirmManager () = {
395+ let aN = O()
396+ let aO = if (isDefined(aN))
397+ then true
398+ else throw("no pending manager")
399+ if ((aO == aO))
400+ then {
401+ let aP = if ((Q.callerPublicKey == value(aN)))
402+ then true
403+ else throw("you are not pending manager")
404+ if ((aP == aP))
405+ then [StringEntry(D(), toBase58String(value(aN))), DeleteEntry(E())]
406+ else throw("Strict value is not equal to itself.")
407+ }
408+ else throw("Strict value is not equal to itself.")
409+ }
410+
411+
412+@Verifier(aQ)
413+func aR () = {
414+ let aS = {
415+ let M = L()
416+ if ($isInstanceOf(M, "ByteVector"))
535417 then {
536- let bO = k
537- bO
418+ let S = M
419+ S
538420 }
539- else if ($isInstanceOf(k, "Unit"))
540- then cE.senderPublicKey
421+ else if ($isInstanceOf(M, "Unit"))
422+ then aQ.senderPublicKey
541423 else throw("Match error")
542424 }
543- sigVerify(cE.bodyBytes, cE.proofs[0], cG)
425+ sigVerify(aQ.bodyBytes, aQ.proofs[0], aS)
544426 }
545427

github/deemru/w8io/03bedc9 
85.88 ms