tx · F8jNsWLLbbCUGXtMw42LYeMRXdNRHQQ3TzSpqLrEcFzT

3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz:  -0.03500000 Waves

2022.06.14 18:42 [2096241] smart account 3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz > SELF 0.00000000 Waves

{ "type": 13, "id": "F8jNsWLLbbCUGXtMw42LYeMRXdNRHQQ3TzSpqLrEcFzT", "fee": 3500000, "feeAssetId": null, "timestamp": 1655221377456, "version": 1, "sender": "3Mx3zmXrMcLFCafMuPtXAzR4ZPVeZYb6qLz", "senderPublicKey": "D28XoueZWsMfm8Y5pa6C5ZFuYoWgre2Wm8tzJANJgMnq", "proofs": [ "4aLKEHLZAiQxheCkDNTLDdVbZdGhj1TL7wXW7BXdbZZpsVk9s41JzCGVeTWuAcDkknoHFBDPMki8VJoVMSFEZ6xK" ], "script": "base64:AAIFAAAAAAAAADYIAhINCgsICAgICAgBCAEIARIECgIICBIFCgMICAQSBAoCCAgSAwoBARIECgIICBIDCgEIEgAAAAAgAAAAAAlzZXBhcmF0b3ICAAAAAl9fAAAAAAxrZXlGZWVBbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAANmZWUFAAAAA25pbAUAAAAJc2VwYXJhdG9yAAAAAA5rZXlVc2RuQXNzZXRJZAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAC3VzZG5Bc3NldElkBQAAAANuaWwFAAAACXNlcGFyYXRvcgAAAAAOa2V5RXBvY2hMZW5ndGgJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAtlcG9jaExlbmd0aAUAAAADbmlsBQAAAAlzZXBhcmF0b3IAAAAAEWtleUZpbmFsaXplUmV3YXJkCQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAAOZmluYWxpemVSZXdhcmQFAAAAA25pbAUAAAAJc2VwYXJhdG9yAAAAAAxrZXlXeEFzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAAAl3eEFzc2V0SWQFAAAAA25pbAUAAAAJc2VwYXJhdG9yAAAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAATYXNzZXRzU3RvcmVDb250cmFjdAUAAAADbmlsBQAAAAlzZXBhcmF0b3IAAAAAE2tleVVzZXJQb29sQ29udHJhY3QJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAABB1c2VyUG9vbENvbnRyYWN0BQAAAANuaWwFAAAACXNlcGFyYXRvcgAAAAATa2V5RW1pc3Npb25Db250cmFjdAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAEGVtaXNzaW9uQ29udHJhY3QFAAAAA25pbAUAAAAJc2VwYXJhdG9yAAAAABNrZXlCb29zdGluZ0NvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAAQYm9vc3RpbmdDb250cmFjdAUAAAADbmlsBQAAAAlzZXBhcmF0b3IAAAAAEmtleUZhY3RvcnlDb250cmFjdAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAD2ZhY3RvcnlDb250cmFjdAUAAAADbmlsBQAAAAlzZXBhcmF0b3IAAAAAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAABmluTGlzdAkABEwAAAACBQAAAA1hbW91bnRBc3NldElkCQAETAAAAAIFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAAAlzZXBhcmF0b3IBAAAAD2tleVN1Z2dlc3RJbmRleAAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgIAAAAMc3VnZ2VzdEluZGV4CQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAAOa2V5U3RhcnRIZWlnaHQAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAADHN1Z2dlc3RJbmRleAkABLkAAAACCQAETAAAAAICAAAACCVzJXMlcyVkCQAETAAAAAICAAAAC3N0YXJ0SGVpZ2h0CQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkCQAETAAAAAIJAAGkAAAAAQUAAAAMc3VnZ2VzdEluZGV4BQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAAAAAxzdWdnZXN0SW5kZXgJAAS5AAAAAgkABEwAAAACAgAAAAglcyVzJXMlZAkABEwAAAACAgAAAAx2b3RpbmdSZXN1bHQJAARMAAAAAgUAAAANYW1vdW50QXNzZXRJZAkABEwAAAACBQAAAAxwcmljZUFzc2V0SWQJAARMAAAAAgkAAaQAAAABBQAAAAxzdWdnZXN0SW5kZXgFAAAAA25pbAUAAAAJc2VwYXJhdG9yAQAAAAp0b3RhbFZvdGVzAAAAAgAAAAh0b3RhbFllcwAAAAd0b3RhbE5vCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACBQAAAAh0b3RhbFllcwkABEwAAAACBQAAAAd0b3RhbE5vBQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAAHa2V5Vm90ZQAAAAQAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQAAAAMc3VnZ2VzdEluZGV4AAAADHZvdGVyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAACiVzJXMlcyVkJXMJAARMAAAAAgIAAAAEdm90ZQkABEwAAAACBQAAAA1hbW91bnRBc3NldElkCQAETAAAAAIFAAAADHByaWNlQXNzZXRJZAkABEwAAAACCQABpAAAAAEFAAAADHN1Z2dlc3RJbmRleAkABEwAAAACBQAAAAx2b3RlckFkZHJlc3MFAAAAA25pbAUAAAAJc2VwYXJhdG9yAQAAAAxrZXlWb3RlVmFsdWUAAAACAAAACWd3eEFtb3VudAAAAAR2b3RlBAAAAANrZXkDBQAAAAR2b3RlCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlcwkABEwAAAACBQAAAAlnd3hBbW91bnQJAARMAAAAAgIAAAADeWVzBQAAAANuaWwFAAAACXNlcGFyYXRvcgkABLkAAAACCQAETAAAAAICAAAABCVkJXMJAARMAAAAAgUAAAAJZ3d4QW1vdW50CQAETAAAAAICAAAAAm5vBQAAAANuaWwFAAAACXNlcGFyYXRvcgUAAAADa2V5AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAABNhc3NldHNTdG9yZUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlFbWlzc2lvbkNvbnRyYWN0AAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABJrZXlGYWN0b3J5Q29udHJhY3QAAAAAEHVzZXJQb29sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlVc2VyUG9vbENvbnRyYWN0AAAAABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQQAAAACcGQJAAACAAAAAQIAAAARcGVybWlzc2lvbiBkZW5pZWQEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDADCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsGBQAAAAJwZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBgUAAAACcGQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAABWFzSW50AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAZ2YWxJbnQFAAAAByRtYXRjaDAFAAAABnZhbEludAkAAAIAAAABAgAAABtmYWlsZWQgdG8gY2FzdCBpbnRvIEludGVnZXIAAAAIAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAACwAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0AAAATZW1pc3Npb25Db250cmFjdFBybQAAABJmYWN0b3J5Q29udHJhY3RQcm0AAAATdXNlclBvb2xDb250cmFjdFBybQAAABl2b3RpbmdFbWlzc2lvbkNvbnRyYWN0UHJtAAAADGZlZUFtb3VudFBybQAAAAx3eEFzc2V0SWRQcm0AAAARdm90aW5nRHVyYXRpb25Qcm0AAAAOdXNkbkFzc2V0SWRQcm0AAAARZmluYWxpemVSZXdhcmRQcm0EAAAABmNoZWNrcwkABEwAAAACCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtBgkAAAIAAAABAgAAACRJbnZhbGlkIGFzc2V0X3N0b3JlIGNvbnRyYWN0IGFkZHJlc3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAIUludmFsaWQgYm9vc3RpbmcgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATdXNlclBvb2xDb250cmFjdFBybQYJAAACAAAAAQIAAAAjSW52YWxpZCB1c2VyX3Bvb2xzIGNvbnRyYWN0IGFkZHJlc3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAIUludmFsaWQgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAASZmFjdG9yeUNvbnRyYWN0UHJtBgkAAAIAAAABAgAAACBJbnZhbGlkIGZhY3RvcnkgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkAAGcAAAACBQAAAAxmZWVBbW91bnRQcm0AAAAAAAAAAAAGCQAAAgAAAAECAAAAEkludmFsaWQgZmVlIGFtb3VudAkABEwAAAACAwkAAGYAAAACBQAAABF2b3RpbmdEdXJhdGlvblBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAAXSW52YWxpZCB2b3RpbmcgZHVyYXRpb24JAARMAAAAAgMJAABmAAAAAgUAAAARZmluYWxpemVSZXdhcmRQcm0AAAAAAAAAAAAGCQAAAgAAAAECAAAAF0ludmFsaWQgZmluYWxpemUgcmV3YXJkCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADHd4QXNzZXRJZFBybQYJAAACAAAAAQIAAAATSW52YWxpZCBXWCBhc3NldCBJRAkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA51c2RuQXNzZXRJZFBybQYJAAACAAAAAQIAAAAVSW52YWxpZCBVU0ROIGFzc2V0IElEBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAUAAAAWYXNzZXRzU3RvcmVDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlCb29zdGluZ0NvbnRyYWN0BQAAABNib29zdGluZ0NvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAE2tleUVtaXNzaW9uQ29udHJhY3QFAAAAE2VtaXNzaW9uQ29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAASa2V5RmFjdG9yeUNvbnRyYWN0BQAAABJmYWN0b3J5Q29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATa2V5VXNlclBvb2xDb250cmFjdAUAAAATdXNlclBvb2xDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABlrZXlWb3RpbmdFbWlzc2lvbkNvbnRyYWN0BQAAABl2b3RpbmdFbWlzc2lvbkNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrZXlGZWVBbW91bnQFAAAADGZlZUFtb3VudFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa2V5RXBvY2hMZW5ndGgFAAAAEXZvdGluZ0R1cmF0aW9uUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrZXlGaW5hbGl6ZVJld2FyZAUA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bnN1cmVBbW91bnRBc3NldFZlcmlmaWVkBAAAAApidXJuRmVlSW52CQAD/AAAAAQFAAAAEGVtaXNzaW9uQ29udHJhY3QCAAAABGJ1cm4FAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAACmJ1cm5GZWVJbnYFAAAACmJ1cm5GZWVJbnYEAAAAD25ld1N1Z2dlc3RJbmRleAQAAAAHJG1hdGNoMAkABB8AAAABCQEAAAAPa2V5U3VnZ2VzdEluZGV4AAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAkAAGQAAAACBQAAAANpbnQAAAAAAAAAAAEAAAAAAAAAAAAJAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAD25ld1N1Z2dlc3RJbmRleAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA9uZXdTdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgIAAAABMAIAAAABMAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVN1Z2dlc3RJbmRleAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAPbmV3U3VnZ2VzdEluZGV4BQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABHZvdGUAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAAB2luRmF2b3IEAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAQAAAASdm90aW5nRmluaXNoSGVpZ2h0CQAAZAAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAADmtleVN0YXJ0SGVpZ2h0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQUAAAAOa2V5RXBvY2hMZW5ndGgEAAAABmNoZWNrcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQGCQAAAgAAAAECAAAAInRoZSB0b2tlbiBpc24ndCBvbiB0aGUgdm90aW5nIGxpc3QJAARMAAAAAgMJAABmAAAAAgUAAAASdm90aW5nRmluaXNoSGVpZ2h0BQAAAAZoZWlnaHQGCQAAAgAAAAECAAAAEHRvbyBsYXRlIHRvIHZvdGUFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWd3eEFtb3VudAkAA/wAAAAEBQAAABBib29zdGluZ0NvbnRyYWN0AgAAACBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkABEwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACBQAAABJ2b3RpbmdGaW5pc2hIZWlnaHQFAAAAA25pbAUAAAADbmlsBAAAAAdub3RaZXJvAwkAAGYAAAACCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQAAAAAAAAAAAAGCQAAAgAAAAECAAAAEnlvdSBkb24ndCBoYXZlIGd3eAMJAAAAAAAAAgUAAAAHbm90WmVybwUAAAAHbm90WmVybwQAAAAEdm90ZQQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBAAAAAR2b3RlCQAEtQAAAAIFAAAAAXMFAAAACXNlcGFyYXRvcgQAAAAJdm90ZVZhbHVlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAEEAAAACHZvdGVUeXBlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAIEAAAAEWlzVm90ZVR5cGVTaW1pbGFyAwMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAA3llcwkAAAAAAAACBQAAAAdpbkZhdm9yBgcGAwkAAAAAAAACBQAAAAh2b3RlVHlwZQIAAAACbm8JAAAAAAAAAgUAAAAHaW5GYXZvcgcHBAAAABJpc1ZvdGVWYWx1ZVNpbWlsYXIDBQAAABFpc1ZvdGVUeXBlU2ltaWxhcgkAAAAAAAACCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAJdm90ZVZhbHVlBwQAAAAQaXNOZXdWb3RlU2ltaWxhcgMDBQAAABFpc1ZvdGVUeXBlU2ltaWxhcgUAAAASaXNWb3RlVmFsdWVTaW1pbGFyBwkAAAIAAAABAgAAABF5b3UgYWxyZWFkeSB2b3RlZAkAA/wAAAAEBQAAAAR0aGlzAgAAAApjYW5jZWxWb3RlCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAUAAAAQaXNOZXdWb3RlU2ltaWxhcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAUAAAABdQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgMJAAAAAAAAAgUAAAAEdm90ZQUAAAAEdm90ZQQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwUAAAAHaW5GYXZvcgQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAARMAAAAAgUAAAANbmVnYXRpdmVWb3RlcwUAAAADbmlsBAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQAETAAAAAIFAAAADXBvc2l0aXZlVm90ZXMJAARMAAAAAgkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzBQAAAANuaWwEAAAAB3ZvdGVLZXkJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAl2b3RlVmFsdWUJAQAAAAxrZXlWb3RlVmFsdWUAAAACCQABpAAAAAEJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAUAAAAHaW5GYXZvcgkABRQAAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAACnRvdGFsVm90ZXMAAAACCQABkQAAAAIFAAAAG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwAAAAAAAAAAAAkAAZEAAAACBQAAABtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAHdm90ZUtleQUAAAAJdm90ZVZhbHVlBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKY2FuY2VsVm90ZQAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAAC3VzZXJBZGRyZXNzAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAYJAAACAAAAAQIAAAAXbm8gdm90ZSBmb3IgYXNzZXRzIHBhaXIFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABHZvdGUJAAS1AAAAAgkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAAJc2VwYXJhdG9yBAAAAAl2b3RlVmFsdWUJAAGRAAAAAgUAAAAEdm90ZQAAAAAAAAAAAQQAAAAIdm90ZVR5cGUJAAGRAAAAAgUAAAAEdm90ZQAAAAAAAAAAAgQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAgQAAAAHYWN0aW9ucwMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAA3llcwQAAAAQbmV3UG9zaXRpdmVWb3RlcwkAAGUAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADXBvc2l0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAJdm90ZVZhbHVlCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAKdG90YWxWb3RlcwAAAAIJAAGkAAAAAQUAAAAQbmV3UG9zaXRpdmVWb3RlcwUAAAANbmVnYXRpdmVWb3RlcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAADbmlsBQAAAAR1bml0BAAAABBuZXdOZWdhdGl2ZVZvdGVzCQAAZQAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAANbmVnYXRpdmVWb3RlcwkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAAl2b3RlVmFsdWUJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgUAAAANcG9zaXRpdmVWb3RlcwkAAaQAAAABBQAAABBuZXdOZWdhdGl2ZVZvdGVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAdrZXlWb3RlAAAABAUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgFAAAAC3VzZXJBZGRyZXNzBQAAAANuaWwFAAAABHVuaXQFAAAAB2FjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABnNldEZlZQAAAAEAAAAGbmV3RmVlBAAAAAZjaGVja3MJAARMAAAAAgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAZuZXdGZWUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIZmluYWxpemUAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkBAAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQEAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAA5rZXlTdGFydEhlaWdodAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEFAAAADmtleUVwb2NoTGVuZ3RoBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkAAAIAAAABAgAAAA5ubyBhc3NldHMgcGFpcgkABEwAAAACAwkAAGcAAAACBQAAAAZoZWlnaHQFAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAYJAAACAAAAAQIAAAAiaW5zdWZmaWNpZW50IGhlaWdodCBmb3IgY29tcGxldGlvbgUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAMdm90aW5nUmVzdWx0CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAlzZXBhcmF0b3IEAAAADXBvc2l0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAEEAAAADW5lZ2F0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAIEAAAAB2FjdGlvbnMDCQAAZgAAAAIFAAAADXBvc2l0aXZlVm90ZXMFAAAADW5lZ2F0aXZlVm90ZXMEAAAAA3JlcwkAA/wAAAAEBQAAAA9mYWN0b3J5Q29udHJhY3QCAAAAFnNldFd4RW1pc3Npb25Qb29sTGFiZWwJAARMAAAAAgUAAAANYW1vdW50QXNzZXRJZAkABEwAAAACBQAAAAxwcmljZUFzc2V0SWQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAANyZXMFAAAAA3JlcwkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAFFAAAAAIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAA25pbAUAAAAEdW5pdAUAAAAHYWN0aW9ucwkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbeW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXlleeBJ", "chainId": 84, "height": 2096241, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9bsvgXwp9sR1bgcdGUsrfHrkPDN2bXBhCTz2sLUNemkM Next: FBDbamP4ZyrJRxzxEfCFhTeqBpPrkHkHD317bw7y6WD8 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 (t,u) = value(parseBigInt(valueOrElse(getString(t, u), "0")))
80-
81-
82-func B (t,u,y) = {
83- let k = getString(t, u)
84- if ($isInstanceOf(k, "String"))
85- then {
86- let C = k
87- value(parseBigInt(C))
88- }
89- else if ($isInstanceOf(k, "Unit"))
90- then y
91- else throw("Match error")
92- }
93-
94-
95-func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
96-
97-
98-func G (j,H) = toInt(fraction(j, toBigInt(H), d))
99-
100-
101-func I () = "%s%s__config__factoryAddress"
102-
103-
104-let J = 1
105-
106-let K = 2
107-
108-let L = 3
109-
110-let M = 4
111-
112-let N = 5
113-
114-let O = 6
115-
116-let P = 7
117-
118-func Q () = "%s__factoryConfig"
119-
120-
121-func R () = "%s__managerPublicKey"
122-
123-
124-func S () = "%s__pendingManagerPublicKey"
125-
126-
127-func T () = "%s__stablePoolAddonAddr"
128-
129-
130-func U (V) = makeString(["%s%s%s", V, "mappings__lpAsset2PoolContract"], e)
131-
132-
133-func W () = "%s__lpTokensList"
134-
135-
136-func X (V) = makeString(["%s%s%s", V, "mappings__lpAsset2PoolContract"], e)
137-
138-
139-func Y (Z) = makeString(["%s%s", "poolWeight", Z], e)
140-
141-
142-func aa (ab) = split(valueOrElse(getString(ab, W()), ""), e)
143-
144-
145-func ac (ab) = split(v(ab, Q()), e)
146-
147-
148-func ad (ae) = addressFromStringValue(ae[K])
149-
150-
151-func af (ae) = addressFromStringValue(ae[N])
152-
153-
154-func ag (ae) = addressFromStringValue(ae[J])
155-
156-
157-func ah () = "%s%s__ratePerBlock__current"
158-
159-
160-func ai () = "%s%s__ratePerBlockMax__current"
161-
162-
163-func aj () = "%s%s__emission__startBlock"
164-
165-
166-func ak () = "%s%s__emission__duration"
167-
168-
169-func al () = "%s%s__emission__endBlock"
170-
171-
172-func am (an,ao) = makeString(["%s%s%s__staked", an, ao], e)
173-
174-
175-func ap (ao) = ("%s%s%s__staked__total__" + ao)
176-
177-
178-func aq (ao,an) = makeString(["%s%s%s__claimed", an, ao], e)
179-
180-
181-func ar (ao,an) = makeString(["%s%s%s__claimedMinReward", an, ao], e)
182-
183-
184-func as (ao,an) = makeString(["%s%s%s__claimedBoostReward", an, ao], e)
185-
186-
187-func at (ao) = makeString(["%s%s%s__claimed", "total", ao], e)
188-
189-
190-func au (u) = valueOrElse(getInteger(this, u), 0)
191-
192-
193-func av (aw) = makeString(["%s%s%s", aw, "total", "bal"], e)
194-
195-
196-func ax (aw,ay) = makeString(["%s%s%s", aw, ay, "bal"], e)
197-
198-
199-func az (aw) = makeString(["%s%s%s", aw, "total", "balINT"], e)
200-
201-
202-func aA (aw,ay) = makeString(["%s%s%s", aw, ay, "balINT"], e)
203-
204-
205-func aB (aw) = makeString(["%s%s%s", aw, "total", "lastUpd"], e)
206-
207-
208-func aC (aw,ay) = makeString(["%s%s%s", aw, ay, "lastUpd"], e)
209-
210-
211-func aD (aw) = makeString(["%s%s%s%s", aw, "common", "lpInt"], e)
212-
213-
214-func aE (aw) = makeString(["%s%s%s%s", aw, "common", "lpIntH"], e)
215-
216-
217-func aF (aw,ay) = makeString(["%s%s%s%s", aw, ay, "lpInt"], e)
218-
219-
220-func aG (aw,ay) = makeString(["%s%s%s%s", aw, ay, "lpIntH"], e)
221-
222-
223-func aH (aw) = makeString(["%s", aw, "wxPerLp"], e)
224-
225-
226-func aI (aw) = makeString(["%s", aw, "wxPerLpX18"], e)
227-
228-
229-func aJ (aw,ay) = makeString(["%s%s%s%s", aw, ay, "uIntL"], e)
230-
231-
232-func aK (aL,ay,aM) = makeString(["%s%s%s%s__history", aL, ay, aM], e)
233-
234-
235-func aN (ay,aw,aL,aO) = makeString(["%s%s%s%d%d%d", ay, aw, aL, toString(height), toString(lastBlock.timestamp), toString(aO)], e)
236-
237-
238-func aP (aL,ay,aw,aO,aQ) = StringEntry(aK(aL, ay, toBase58String(aQ)), aN(ay, aw, aL, aO))
239-
240-
241-let aR = s(this, I())
242-
243-let aS = addressFromStringValue(aR)
244-
245-let ae = ac(aS)
246-
247-let aT = af(ae)
248-
249-let aU = ad(ae)
250-
251-func aV (aW,aX,aY,aZ) = if (if ((aX == g))
252- then (aW > g)
253- else false)
254- then g
255- else if ((aW == g))
256- then aY
257- else if (if ((aX > g))
258- then (aW > g)
259- else false)
260- then value(parseBigInt(s(this, aZ)))
261- else throw("calcWxPerLpIntegralUserLast: unexpected state")
262-
263-
264-func ba (ao,bb,bc) = {
265- let bd = ap(ao)
266- let be = toBigInt(au(bd))
267- let bf = if ((be == g))
268- then h
269- else be
270- let bg = getIntegerValue(aS, Y(bb))
271- let bh = z(aT, aj())
272- let bi = 1000
273- let bj = (z(aT, ah()) * bi)
274- let bk = fraction(bj, bg, (f * 3))
275- let bl = aD(ao)
276- let bm = aE(ao)
277- let bn = aH(ao)
278- let bo = x(this, bm, bh)
279- let bp = A(this, bl)
280- let bq = 0
281- let br = max([(height - bo), 0])
282- let bs = if ((bq != 0))
283- then toBigInt(bq)
284- else fraction(toBigInt(bk), toBigInt(b), bf)
285- let bt = (be + toBigInt(bc))
286- let bu = if ((bt == g))
287- then h
288- else bt
289- let aY = (bp + (bs * toBigInt(br)))
290- let bv = (toBigInt(bk) / bu)
291- let bw = height
292- let bx = makeString(["wxPerLpIntegralNew=", toString(aY), "dh=", toString(br), "wxPerLpX3=", toString(bs), "stakedTotal=", toString(be), "poolWxEmissionPerBlockX3=", toString(bk), "wxEmissionPerBlockX3=", toString(bj), "poolWeight=", toString(bg)], "::")
293- $Tuple3(aY, [StringEntry(bl, toString(aY)), IntegerEntry(bm, bw), StringEntry(bn, toString(bv))], bx)
294- }
295-
296-
297-func by (ao,an,bb,bc) = {
298- let bz = ba(ao, bb, bc)
299- let aY = bz._1
300- let bA = bz._2
301- let bB = bz._3
302- let bi = 1000
303- let bC = am(an, ao)
304- let aW = au(bC)
305- let bD = aF(ao, an)
306- let bE = aG(ao, an)
307- let aZ = aJ(ao, an)
308- let bF = A(this, bD)
309- let aX = w(this, bE)
310- let bG = aV(toBigInt(aW), toBigInt(aX), aY, aZ)
311- let bH = (b * bi)
312- let bI = (bF + fraction((aY - bG), toBigInt(aW), toBigInt(bH)))
313- let bJ = aY
314- let bK = height
315- let bx = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(aX), "this.getStringOrFail(wxPerLpIntegralUserLastKEY).parseBigInt().value()=", toString(value(parseBigInt(s(this, aZ)))), "wxPerLpIntegralNew=", toString(aY), "wxToClaimUserNew=", toString(bI), "wxPerLpIntegralUserLast=", toString(bG), "stakedByUser=", toString(aW), "poolDEBUG=", bB, "height=", toString(height)], "::")
316- $Tuple3(bI, (bA ++ [StringEntry(bD, toString(bI)), IntegerEntry(bE, bK), StringEntry(aZ, toString(bJ))]), bx)
317- }
318-
319-
320-func bL () = {
321- let k = getString(R())
322- if ($isInstanceOf(k, "String"))
323- then {
324- let C = k
325- fromBase58String(C)
326- }
327- else if ($isInstanceOf(k, "Unit"))
82+ else if ($isInstanceOf(M, "Unit"))
32883 then unit
32984 else throw("Match error")
33085 }
33186
33287
333-func bM () = {
334- let k = getString(S())
335- if ($isInstanceOf(k, "String"))
88+func O () = {
89+ let M = getString(E())
90+ if ($isInstanceOf(M, "String"))
33691 then {
337- let C = k
338- fromBase58String(C)
92+ let N = M
93+ fromBase58String(N)
33994 }
340- else if ($isInstanceOf(k, "Unit"))
95+ else if ($isInstanceOf(M, "Unit"))
34196 then unit
34297 else throw("Match error")
34398 }
34499
345100
346-func bN (bO) = {
347- let bP = throw("Permission denied")
348- let k = bL()
349- if ($isInstanceOf(k, "ByteVector"))
101+func P (Q) = {
102+ let R = throw("permission denied")
103+ let M = L()
104+ if ($isInstanceOf(M, "ByteVector"))
350105 then {
351- let bQ = k
352- if ((bO.callerPublicKey == bQ))
106+ let S = M
107+ if ((Q.callerPublicKey == S))
353108 then true
354- else bP
109+ else R
355110 }
356- else if ($isInstanceOf(k, "Unit"))
357- then if ((bO.caller == this))
111+ else if ($isInstanceOf(M, "Unit"))
112+ then if ((Q.caller == this))
358113 then true
359- else bP
114+ else R
360115 else throw("Match error")
361116 }
362117
363118
364-@Callable(bO)
365-func constructor (bR) = {
366- let bS = bN(bO)
367- if ((bS == bS))
368- then [StringEntry(I(), bR)]
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)
369155 else throw("Strict value is not equal to itself.")
370156 }
371157
372158
373159
374-@Callable(bO)
375-func setManager (bT) = {
376- let bS = bN(bO)
377- if ((bS == bS))
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))
378178 then {
379- let bU = fromBase58String(bT)
380- if ((bU == bU))
381- then [StringEntry(S(), bT)]
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+ }
382223 else throw("Strict value is not equal to itself.")
383224 }
384225 else throw("Strict value is not equal to itself.")
386227
387228
388229
389-@Callable(bO)
390-func confirmManager () = {
391- let bV = bM()
392- let bW = if (isDefined(bV))
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))))
393235 then true
394- else throw("No pending manager")
395- if ((bW == bW))
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))
396240 then {
397- let bX = if ((bO.callerPublicKey == value(bV)))
241+ let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242+ let as = if ((T(B) > 0))
398243 then true
399- else throw("You are not pending manager")
400- if ((bX == bX))
401- then [StringEntry(R(), toBase58String(value(bV))), DeleteEntry(S())]
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+ }
402299 else throw("Strict value is not equal to itself.")
403300 }
404301 else throw("Strict value is not equal to itself.")
406303
407304
408305
409-@Callable(bO)
410-func stake () = if ((size(bO.payments) != 1))
411- then throw("invalid payment - exact one payment must be attached")
412- else {
413- let bY = bO.payments[0]
414- let aw = value(bY.assetId)
415- let ao = toBase58String(aw)
416- let aO = bY.amount
417- let bb = valueOrErrorMessage(getString(aS, U(ao)), ("unsupported lp asset " + ao))
418- let bZ = toString(bO.caller)
419- let an = if ((bZ == bb))
420- then toString(bO.originCaller)
421- else bZ
422- let bC = am(an, ao)
423- let bd = ap(ao)
424- let aW = au(bC)
425- let be = au(bd)
426- let ca = by(ao, an, bb, aO)
427- let bI = ca._1
428- let cb = ca._2
429- let bx = ca._3
430- ([IntegerEntry(bC, (aW + aO)), IntegerEntry(bd, (be + aO)), aP("stake", an, ao, aO, bO.transactionId)] ++ cb)
431- }
432-
433-
434-
435-@Callable(bO)
436-func unstake (ao,aO) = {
437- let aw = fromBase58String(ao)
438- let bb = valueOrErrorMessage(getString(aS, U(ao)), ("unsupported lp asset " + ao))
439- let cc = valueOrElse(getString(this, T()), bb)
440- let bZ = toString(bO.caller)
441- let an = if (if ((bZ == bb))
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))))
442313 then true
443- else (bZ == cc))
444- then toString(bO.originCaller)
445- else bZ
446- let bC = am(an, ao)
447- let bd = ap(ao)
448- let aW = au(bC)
449- let be = au(bd)
450- let cd = by(ao, an, bb, -(aO))
451- let bI = cd._1
452- let cb = cd._2
453- let bx = cd._3
454- if ((aO > aW))
455- then throw("passed amount is less then available")
456- else ([IntegerEntry(bC, (aW - aO)), IntegerEntry(bd, (be - aO)), ScriptTransfer(bO.caller, aO, aw), aP("unstake", an, ao, aO, bO.transactionId)] ++ cb)
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.")
457335 }
458336
459337
460338
461-@Callable(bO)
462-func claimWx (ao) = {
463- let ay = bO.caller
464- let an = toString(bO.caller)
465- let bb = v(aS, X(ao))
466- let ce = aq(ao, an)
467- let cf = at(ao)
468- let cg = ar(ao, an)
469- let ch = as(ao, an)
470- let ci = toBigInt(w(this, ce))
471- let cj = toBigInt(w(this, cg))
472- let ck = toBigInt(w(this, ch))
473- let cl = toBigInt(w(this, cf))
474- let cm = by(ao, an, bb, 0)
475- let bI = cm._1
476- let cb = cm._2
477- let bx = cm._3
478- let cn = (bI - ci)
479- if ((g >= cn))
480- then throw("nothing to claim")
481- else {
482- let co = m(i(invoke(aU, "claimWxBoost", [ao, an], nil))[0])
483- let cp = cn
484- let cq = min([(cp * toBigInt(2)), toBigInt(co)])
485- let cr = q(i(invoke(aT, "emit", [toInt(cp)], nil))[0])
486- let cs = i(invoke(aT, "emit", [toInt(cq)], nil))
487- if ((cs == cs))
488- then {
489- let ct = (ci + cn)
490- let cu = (cj + cp)
491- let cv = (cj + cp)
492- let cw = (cj + cp)
493-[StringEntry(ce, toString(ct)), StringEntry(cg, toString(cu)), StringEntry(ch, toString(cv)), StringEntry(cf, toString(cw)), ScriptTransfer(ay, toInt(cp), cr), ScriptTransfer(ay, toInt(cq), cr), aP("claim", an, ao, toInt(cn), bO.transactionId)]
494- }
495- else throw("Strict value is not equal to itself.")
496- }
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.")
497345 }
498346
499347
500348
501-@Callable(bO)
502-func claimWxREADONLY (ao,an) = {
503- let bC = am(an, ao)
504- let bd = ap(ao)
505- let ce = aq(ao, an)
506- let aW = au(bC)
507- let be = au(bd)
508- let ci = w(this, ce)
509- let bb = v(aS, X(ao))
510- let bg = getIntegerValue(aS, Y(bb))
511- let cx = z(aT, ah())
512- let bh = z(aT, aj())
513- let cy = if ((bh > height))
514- then 0
515- else (height - bh)
516- let cz = fraction((cx * cy), bg, f)
517- let cA = fraction(cz, aW, be)
518- let cB = by(ao, an, bb, 0)
519- let bI = cB._1
520- let cb = cB._2
521- let bx = cB._3
522- let cn = (bI - toBigInt(ci))
523- let cC = i(invoke(aU, "claimWxBoostREADONLY", [ao, an], nil))
524- let co = m(cC[0])
525- let cD = o(cC[1])
526- let cp = cn
527- let cq = min([(cp * toBigInt(2)), toBigInt(co)])
528- let cE = (cp + cq)
529- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ao, an, toString(cE), toString(ci), toString(cp), toString(cq), ((((bx + "::") + toString(cA)) + "::BOOSTDEBUG::") + cD)], 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.")
530374 }
531375
532376
533377
534-@Callable(bO)
535-func onModifyWeight (ao,bb) = if ((bO.caller != aS))
536- then throw("permissions denied")
537- else {
538- let cF = ba(ao, bb, 0)
539- let aY = cF._1
540- let bA = cF._2
541- let bB = cF._3
542- bA
543- }
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+ }
544390
545391
546-@Verifier(cG)
547-func cH () = {
548- let cI = {
549- let k = bL()
550- 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"))
551417 then {
552- let bQ = k
553- bQ
418+ let S = M
419+ S
554420 }
555- else if ($isInstanceOf(k, "Unit"))
556- then cG.senderPublicKey
421+ else if ($isInstanceOf(M, "Unit"))
422+ then aQ.senderPublicKey
557423 else throw("Match error")
558424 }
559- sigVerify(cG.bodyBytes, cG.proofs[0], cI)
425+ sigVerify(aQ.bodyBytes, aQ.proofs[0], aS)
560426 }
561427
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 (t,u) = value(parseBigInt(valueOrElse(getString(t, u), "0")))
80-
81-
82-func B (t,u,y) = {
83- let k = getString(t, u)
84- if ($isInstanceOf(k, "String"))
85- then {
86- let C = k
87- value(parseBigInt(C))
88- }
89- else if ($isInstanceOf(k, "Unit"))
90- then y
91- else throw("Match error")
92- }
93-
94-
95-func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
96-
97-
98-func G (j,H) = toInt(fraction(j, toBigInt(H), d))
99-
100-
101-func I () = "%s%s__config__factoryAddress"
102-
103-
104-let J = 1
105-
106-let K = 2
107-
108-let L = 3
109-
110-let M = 4
111-
112-let N = 5
113-
114-let O = 6
115-
116-let P = 7
117-
118-func Q () = "%s__factoryConfig"
119-
120-
121-func R () = "%s__managerPublicKey"
122-
123-
124-func S () = "%s__pendingManagerPublicKey"
125-
126-
127-func T () = "%s__stablePoolAddonAddr"
128-
129-
130-func U (V) = makeString(["%s%s%s", V, "mappings__lpAsset2PoolContract"], e)
131-
132-
133-func W () = "%s__lpTokensList"
134-
135-
136-func X (V) = makeString(["%s%s%s", V, "mappings__lpAsset2PoolContract"], e)
137-
138-
139-func Y (Z) = makeString(["%s%s", "poolWeight", Z], e)
140-
141-
142-func aa (ab) = split(valueOrElse(getString(ab, W()), ""), e)
143-
144-
145-func ac (ab) = split(v(ab, Q()), e)
146-
147-
148-func ad (ae) = addressFromStringValue(ae[K])
149-
150-
151-func af (ae) = addressFromStringValue(ae[N])
152-
153-
154-func ag (ae) = addressFromStringValue(ae[J])
155-
156-
157-func ah () = "%s%s__ratePerBlock__current"
158-
159-
160-func ai () = "%s%s__ratePerBlockMax__current"
161-
162-
163-func aj () = "%s%s__emission__startBlock"
164-
165-
166-func ak () = "%s%s__emission__duration"
167-
168-
169-func al () = "%s%s__emission__endBlock"
170-
171-
172-func am (an,ao) = makeString(["%s%s%s__staked", an, ao], e)
173-
174-
175-func ap (ao) = ("%s%s%s__staked__total__" + ao)
176-
177-
178-func aq (ao,an) = makeString(["%s%s%s__claimed", an, ao], e)
179-
180-
181-func ar (ao,an) = makeString(["%s%s%s__claimedMinReward", an, ao], e)
182-
183-
184-func as (ao,an) = makeString(["%s%s%s__claimedBoostReward", an, ao], e)
185-
186-
187-func at (ao) = makeString(["%s%s%s__claimed", "total", ao], e)
188-
189-
190-func au (u) = valueOrElse(getInteger(this, u), 0)
191-
192-
193-func av (aw) = makeString(["%s%s%s", aw, "total", "bal"], e)
194-
195-
196-func ax (aw,ay) = makeString(["%s%s%s", aw, ay, "bal"], e)
197-
198-
199-func az (aw) = makeString(["%s%s%s", aw, "total", "balINT"], e)
200-
201-
202-func aA (aw,ay) = makeString(["%s%s%s", aw, ay, "balINT"], e)
203-
204-
205-func aB (aw) = makeString(["%s%s%s", aw, "total", "lastUpd"], e)
206-
207-
208-func aC (aw,ay) = makeString(["%s%s%s", aw, ay, "lastUpd"], e)
209-
210-
211-func aD (aw) = makeString(["%s%s%s%s", aw, "common", "lpInt"], e)
212-
213-
214-func aE (aw) = makeString(["%s%s%s%s", aw, "common", "lpIntH"], e)
215-
216-
217-func aF (aw,ay) = makeString(["%s%s%s%s", aw, ay, "lpInt"], e)
218-
219-
220-func aG (aw,ay) = makeString(["%s%s%s%s", aw, ay, "lpIntH"], e)
221-
222-
223-func aH (aw) = makeString(["%s", aw, "wxPerLp"], e)
224-
225-
226-func aI (aw) = makeString(["%s", aw, "wxPerLpX18"], e)
227-
228-
229-func aJ (aw,ay) = makeString(["%s%s%s%s", aw, ay, "uIntL"], e)
230-
231-
232-func aK (aL,ay,aM) = makeString(["%s%s%s%s__history", aL, ay, aM], e)
233-
234-
235-func aN (ay,aw,aL,aO) = makeString(["%s%s%s%d%d%d", ay, aw, aL, toString(height), toString(lastBlock.timestamp), toString(aO)], e)
236-
237-
238-func aP (aL,ay,aw,aO,aQ) = StringEntry(aK(aL, ay, toBase58String(aQ)), aN(ay, aw, aL, aO))
239-
240-
241-let aR = s(this, I())
242-
243-let aS = addressFromStringValue(aR)
244-
245-let ae = ac(aS)
246-
247-let aT = af(ae)
248-
249-let aU = ad(ae)
250-
251-func aV (aW,aX,aY,aZ) = if (if ((aX == g))
252- then (aW > g)
253- else false)
254- then g
255- else if ((aW == g))
256- then aY
257- else if (if ((aX > g))
258- then (aW > g)
259- else false)
260- then value(parseBigInt(s(this, aZ)))
261- else throw("calcWxPerLpIntegralUserLast: unexpected state")
262-
263-
264-func ba (ao,bb,bc) = {
265- let bd = ap(ao)
266- let be = toBigInt(au(bd))
267- let bf = if ((be == g))
268- then h
269- else be
270- let bg = getIntegerValue(aS, Y(bb))
271- let bh = z(aT, aj())
272- let bi = 1000
273- let bj = (z(aT, ah()) * bi)
274- let bk = fraction(bj, bg, (f * 3))
275- let bl = aD(ao)
276- let bm = aE(ao)
277- let bn = aH(ao)
278- let bo = x(this, bm, bh)
279- let bp = A(this, bl)
280- let bq = 0
281- let br = max([(height - bo), 0])
282- let bs = if ((bq != 0))
283- then toBigInt(bq)
284- else fraction(toBigInt(bk), toBigInt(b), bf)
285- let bt = (be + toBigInt(bc))
286- let bu = if ((bt == g))
287- then h
288- else bt
289- let aY = (bp + (bs * toBigInt(br)))
290- let bv = (toBigInt(bk) / bu)
291- let bw = height
292- let bx = makeString(["wxPerLpIntegralNew=", toString(aY), "dh=", toString(br), "wxPerLpX3=", toString(bs), "stakedTotal=", toString(be), "poolWxEmissionPerBlockX3=", toString(bk), "wxEmissionPerBlockX3=", toString(bj), "poolWeight=", toString(bg)], "::")
293- $Tuple3(aY, [StringEntry(bl, toString(aY)), IntegerEntry(bm, bw), StringEntry(bn, toString(bv))], bx)
294- }
295-
296-
297-func by (ao,an,bb,bc) = {
298- let bz = ba(ao, bb, bc)
299- let aY = bz._1
300- let bA = bz._2
301- let bB = bz._3
302- let bi = 1000
303- let bC = am(an, ao)
304- let aW = au(bC)
305- let bD = aF(ao, an)
306- let bE = aG(ao, an)
307- let aZ = aJ(ao, an)
308- let bF = A(this, bD)
309- let aX = w(this, bE)
310- let bG = aV(toBigInt(aW), toBigInt(aX), aY, aZ)
311- let bH = (b * bi)
312- let bI = (bF + fraction((aY - bG), toBigInt(aW), toBigInt(bH)))
313- let bJ = aY
314- let bK = height
315- let bx = makeString(["wxPerLpIntegralUserLastUpdHeightOrZero=", toString(aX), "this.getStringOrFail(wxPerLpIntegralUserLastKEY).parseBigInt().value()=", toString(value(parseBigInt(s(this, aZ)))), "wxPerLpIntegralNew=", toString(aY), "wxToClaimUserNew=", toString(bI), "wxPerLpIntegralUserLast=", toString(bG), "stakedByUser=", toString(aW), "poolDEBUG=", bB, "height=", toString(height)], "::")
316- $Tuple3(bI, (bA ++ [StringEntry(bD, toString(bI)), IntegerEntry(bE, bK), StringEntry(aZ, toString(bJ))]), bx)
317- }
318-
319-
320-func bL () = {
321- let k = getString(R())
322- if ($isInstanceOf(k, "String"))
323- then {
324- let C = k
325- fromBase58String(C)
326- }
327- else if ($isInstanceOf(k, "Unit"))
82+ else if ($isInstanceOf(M, "Unit"))
32883 then unit
32984 else throw("Match error")
33085 }
33186
33287
333-func bM () = {
334- let k = getString(S())
335- if ($isInstanceOf(k, "String"))
88+func O () = {
89+ let M = getString(E())
90+ if ($isInstanceOf(M, "String"))
33691 then {
337- let C = k
338- fromBase58String(C)
92+ let N = M
93+ fromBase58String(N)
33994 }
340- else if ($isInstanceOf(k, "Unit"))
95+ else if ($isInstanceOf(M, "Unit"))
34196 then unit
34297 else throw("Match error")
34398 }
34499
345100
346-func bN (bO) = {
347- let bP = throw("Permission denied")
348- let k = bL()
349- if ($isInstanceOf(k, "ByteVector"))
101+func P (Q) = {
102+ let R = throw("permission denied")
103+ let M = L()
104+ if ($isInstanceOf(M, "ByteVector"))
350105 then {
351- let bQ = k
352- if ((bO.callerPublicKey == bQ))
106+ let S = M
107+ if ((Q.callerPublicKey == S))
353108 then true
354- else bP
109+ else R
355110 }
356- else if ($isInstanceOf(k, "Unit"))
357- then if ((bO.caller == this))
111+ else if ($isInstanceOf(M, "Unit"))
112+ then if ((Q.caller == this))
358113 then true
359- else bP
114+ else R
360115 else throw("Match error")
361116 }
362117
363118
364-@Callable(bO)
365-func constructor (bR) = {
366- let bS = bN(bO)
367- if ((bS == bS))
368- then [StringEntry(I(), bR)]
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)
369155 else throw("Strict value is not equal to itself.")
370156 }
371157
372158
373159
374-@Callable(bO)
375-func setManager (bT) = {
376- let bS = bN(bO)
377- if ((bS == bS))
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))
378178 then {
379- let bU = fromBase58String(bT)
380- if ((bU == bU))
381- then [StringEntry(S(), bT)]
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+ }
382223 else throw("Strict value is not equal to itself.")
383224 }
384225 else throw("Strict value is not equal to itself.")
385226 }
386227
387228
388229
389-@Callable(bO)
390-func confirmManager () = {
391- let bV = bM()
392- let bW = if (isDefined(bV))
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))))
393235 then true
394- else throw("No pending manager")
395- if ((bW == bW))
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))
396240 then {
397- let bX = if ((bO.callerPublicKey == value(bV)))
241+ let B = invoke(G, "getUserGwxAmountAtHeightREADONLY", [toString(Q.caller), ar], nil)
242+ let as = if ((T(B) > 0))
398243 then true
399- else throw("You are not pending manager")
400- if ((bX == bX))
401- then [StringEntry(R(), toBase58String(value(bV))), DeleteEntry(S())]
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+ }
402299 else throw("Strict value is not equal to itself.")
403300 }
404301 else throw("Strict value is not equal to itself.")
405302 }
406303
407304
408305
409-@Callable(bO)
410-func stake () = if ((size(bO.payments) != 1))
411- then throw("invalid payment - exact one payment must be attached")
412- else {
413- let bY = bO.payments[0]
414- let aw = value(bY.assetId)
415- let ao = toBase58String(aw)
416- let aO = bY.amount
417- let bb = valueOrErrorMessage(getString(aS, U(ao)), ("unsupported lp asset " + ao))
418- let bZ = toString(bO.caller)
419- let an = if ((bZ == bb))
420- then toString(bO.originCaller)
421- else bZ
422- let bC = am(an, ao)
423- let bd = ap(ao)
424- let aW = au(bC)
425- let be = au(bd)
426- let ca = by(ao, an, bb, aO)
427- let bI = ca._1
428- let cb = ca._2
429- let bx = ca._3
430- ([IntegerEntry(bC, (aW + aO)), IntegerEntry(bd, (be + aO)), aP("stake", an, ao, aO, bO.transactionId)] ++ cb)
431- }
432-
433-
434-
435-@Callable(bO)
436-func unstake (ao,aO) = {
437- let aw = fromBase58String(ao)
438- let bb = valueOrErrorMessage(getString(aS, U(ao)), ("unsupported lp asset " + ao))
439- let cc = valueOrElse(getString(this, T()), bb)
440- let bZ = toString(bO.caller)
441- let an = if (if ((bZ == bb))
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))))
442313 then true
443- else (bZ == cc))
444- then toString(bO.originCaller)
445- else bZ
446- let bC = am(an, ao)
447- let bd = ap(ao)
448- let aW = au(bC)
449- let be = au(bd)
450- let cd = by(ao, an, bb, -(aO))
451- let bI = cd._1
452- let cb = cd._2
453- let bx = cd._3
454- if ((aO > aW))
455- then throw("passed amount is less then available")
456- else ([IntegerEntry(bC, (aW - aO)), IntegerEntry(bd, (be - aO)), ScriptTransfer(bO.caller, aO, aw), aP("unstake", an, ao, aO, bO.transactionId)] ++ cb)
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.")
457335 }
458336
459337
460338
461-@Callable(bO)
462-func claimWx (ao) = {
463- let ay = bO.caller
464- let an = toString(bO.caller)
465- let bb = v(aS, X(ao))
466- let ce = aq(ao, an)
467- let cf = at(ao)
468- let cg = ar(ao, an)
469- let ch = as(ao, an)
470- let ci = toBigInt(w(this, ce))
471- let cj = toBigInt(w(this, cg))
472- let ck = toBigInt(w(this, ch))
473- let cl = toBigInt(w(this, cf))
474- let cm = by(ao, an, bb, 0)
475- let bI = cm._1
476- let cb = cm._2
477- let bx = cm._3
478- let cn = (bI - ci)
479- if ((g >= cn))
480- then throw("nothing to claim")
481- else {
482- let co = m(i(invoke(aU, "claimWxBoost", [ao, an], nil))[0])
483- let cp = cn
484- let cq = min([(cp * toBigInt(2)), toBigInt(co)])
485- let cr = q(i(invoke(aT, "emit", [toInt(cp)], nil))[0])
486- let cs = i(invoke(aT, "emit", [toInt(cq)], nil))
487- if ((cs == cs))
488- then {
489- let ct = (ci + cn)
490- let cu = (cj + cp)
491- let cv = (cj + cp)
492- let cw = (cj + cp)
493-[StringEntry(ce, toString(ct)), StringEntry(cg, toString(cu)), StringEntry(ch, toString(cv)), StringEntry(cf, toString(cw)), ScriptTransfer(ay, toInt(cp), cr), ScriptTransfer(ay, toInt(cq), cr), aP("claim", an, ao, toInt(cn), bO.transactionId)]
494- }
495- else throw("Strict value is not equal to itself.")
496- }
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.")
497345 }
498346
499347
500348
501-@Callable(bO)
502-func claimWxREADONLY (ao,an) = {
503- let bC = am(an, ao)
504- let bd = ap(ao)
505- let ce = aq(ao, an)
506- let aW = au(bC)
507- let be = au(bd)
508- let ci = w(this, ce)
509- let bb = v(aS, X(ao))
510- let bg = getIntegerValue(aS, Y(bb))
511- let cx = z(aT, ah())
512- let bh = z(aT, aj())
513- let cy = if ((bh > height))
514- then 0
515- else (height - bh)
516- let cz = fraction((cx * cy), bg, f)
517- let cA = fraction(cz, aW, be)
518- let cB = by(ao, an, bb, 0)
519- let bI = cB._1
520- let cb = cB._2
521- let bx = cB._3
522- let cn = (bI - toBigInt(ci))
523- let cC = i(invoke(aU, "claimWxBoostREADONLY", [ao, an], nil))
524- let co = m(cC[0])
525- let cD = o(cC[1])
526- let cp = cn
527- let cq = min([(cp * toBigInt(2)), toBigInt(co)])
528- let cE = (cp + cq)
529- $Tuple2(nil, makeString(["%s%s%d%d%d%d%s", ao, an, toString(cE), toString(ci), toString(cp), toString(cq), ((((bx + "::") + toString(cA)) + "::BOOSTDEBUG::") + cD)], 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.")
530374 }
531375
532376
533377
534-@Callable(bO)
535-func onModifyWeight (ao,bb) = if ((bO.caller != aS))
536- then throw("permissions denied")
537- else {
538- let cF = ba(ao, bb, 0)
539- let aY = cF._1
540- let bA = cF._2
541- let bB = cF._3
542- bA
543- }
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+ }
544390
545391
546-@Verifier(cG)
547-func cH () = {
548- let cI = {
549- let k = bL()
550- 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"))
551417 then {
552- let bQ = k
553- bQ
418+ let S = M
419+ S
554420 }
555- else if ($isInstanceOf(k, "Unit"))
556- then cG.senderPublicKey
421+ else if ($isInstanceOf(M, "Unit"))
422+ then aQ.senderPublicKey
557423 else throw("Match error")
558424 }
559- sigVerify(cG.bodyBytes, cG.proofs[0], cI)
425+ sigVerify(aQ.bodyBytes, aQ.proofs[0], aS)
560426 }
561427

github/deemru/w8io/03bedc9 
104.95 ms