tx · 5xqXQKu8G7H1wMKtbgPja9KPwv2ZDmwZeLyuMqp6YpGd

3PEGyZ9UqeC3coXzRt4DGJQiWaMdH2JShFG:  -0.02400000 Waves

2022.08.18 17:30 [3255534] smart account 3PEGyZ9UqeC3coXzRt4DGJQiWaMdH2JShFG > SELF 0.00000000 Waves

{ "type": 13, "id": "5xqXQKu8G7H1wMKtbgPja9KPwv2ZDmwZeLyuMqp6YpGd", "fee": 2400000, "feeAssetId": null, "timestamp": 1660832983863, "version": 1, "sender": "3PEGyZ9UqeC3coXzRt4DGJQiWaMdH2JShFG", "senderPublicKey": "DQtGXvog3Y6B9bxto8pajLFKjsTX8tBjkDi6RRhtP8X5", "proofs": [ "4weEzFyQmR2mSLu79diAG9oDmduXZ7vDrc3Sh2skbASagVHMt9LUYB6sm5ezk6EsKH7X16vXu2zHXUYxPZ6JuQ7b" ], "script": "base64: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AAAJZ3d4QW1vdW50AAAABHZvdGUEAAAAA2tleQMFAAAABHZvdGUJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVzCQAETAAAAAIFAAAACWd3eEFtb3VudAkABEwAAAACAgAAAAN5ZXMFAAAAA25pbAUAAAAJc2VwYXJhdG9yCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlcwkABEwAAAACBQAAAAlnd3hBbW91bnQJAARMAAAAAgIAAAACbm8FAAAAA25pbAUAAAAJc2VwYXJhdG9yBQAAAANrZXkBAAAACWtleUluTGlzdAAAAAEAAAAEcG9vbAQAAAALJHQwMjQ2MzI1MDMFAAAABHBvb2wEAAAADWFtb3VudEFzc2V0SWQIBQAAAAskdDAyNDYzMjUwMwAAAAJfMQQAAAAMcHJpY2VBc3NldElkCAUAAAALJHQwMjQ2MzI1MDMAAAACXzIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgIAAAAGaW5MaXN0CQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAACXNlcGFyYXRvcgEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAACAAAAFCVzX19tYW5hZ2VyUHVibGljS2V5AQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAACAAAAGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAATYXNzZXRzU3RvcmVDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAAEGJvb3N0aW5nQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlCb29zdGluZ0NvbnRyYWN0AAAAABBlbWlzc2lvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5RW1pc3Npb25Db250cmFjdAAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAASa2V5RmFjdG9yeUNvbnRyYWN0AAAAABB1c2VyUG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5VXNlclBvb2xDb250cmFjdAAAAAAWdm90aW5nRW1pc3Npb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJaXNNYW5hZ2VyAAAAAQAAAAFpBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQMJAQAAAAlpc01hbmFnZXIAAAABBQAAAAFpBgkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAG2ZhaWxlZCB0byBjYXN0IGludG8gSW50ZWdlcgAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAALAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0AAAATYm9vc3RpbmdDb250cmFjdFBybQAAABNlbWlzc2lvbkNvbnRyYWN0UHJtAAAAEmZhY3RvcnlDb250cmFjdFBybQAAABN1c2VyUG9vbENvbnRyYWN0UHJtAAAAGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0AAAAMZmVlQW1vdW50UHJtAAAADHd4QXNzZXRJZFBybQAAABF2b3RpbmdEdXJhdGlvblBybQAAAA51c2RuQXNzZXRJZFBybQAAABFmaW5hbGl6ZVJld2FyZFBybQQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAJEludmFsaWQgYXNzZXRfc3RvcmUgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATYm9vc3RpbmdDb250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABN1c2VyUG9vbENvbnRyYWN0UHJtBgkAAAIAAAABAgAAACNJbnZhbGlkIHVzZXJfcG9vbHMgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATZW1pc3Npb25Db250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABJmYWN0b3J5Q29udHJhY3RQcm0GCQAAAgAAAAECAAAAIEludmFsaWQgZmFjdG9yeSBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQAAZwAAAAIFAAAADGZlZUFtb3VudFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAASSW52YWxpZCBmZWUgYW1vdW50CQAETAAAAAIDCQAAZgAAAAIFAAAAEXZvdGluZ0R1cmF0aW9uUHJtAAAAAAAAAAAABgkAAAIAAAABAgAAABdJbnZhbGlkIHZvdGluZyBkdXJhdGlvbgkABEwAAAACAwkAAGcAAAACBQAAABFmaW5hbGl6ZVJld2FyZFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAAXSW52YWxpZCBmaW5hbGl6ZSByZXdhcmQJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAMd3hBc3NldElkUHJtBgkAAAIAAAABAgAAABNJbnZhbGlkIFdYIGFzc2V0IElECQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADnVzZG5Bc3NldElkUHJtBgkAAAIAAAABAgAAABVJbnZhbGlkIFVTRE4gYXNzZXQgSUQFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0BQAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QFAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATa2V5RW1pc3Npb25Db250cmFjdAUAAAATZW1pc3Npb25Db250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABJrZXlGYWN0b3J5Q29udHJhY3QFAAAAEmZhY3RvcnlDb250cmFjdFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlVc2VyUG9vbENvbnRyYWN0BQAAABN1c2VyUG9vbENvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QFAAAAGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUZlZUFtb3VudAUAAAAMZmVlQW1vdW50UHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5rZXlFcG9jaExlbmd0aAUAAAARdm90aW5nRHVyYXRpb25Qcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtleUZpbmFsaXplUmV3YXJkBQAAABFmaW5hbGl6ZVJld2FyZFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxrZXlXeEFzc2V0SWQFAAAADHd4QXNzZXRJZFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA5rZXlVc2RuQXNzZXRJZAUAAAAOdXNkbkFzc2V0SWRQcm0FAAAAA25pbAUAAAAEdW5pdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY29uc3RydWN0b3JWMgAAAAEAAAAJdGhyZXNob2xkBAAAAAZjaGVja3MJAARMAAAAAgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQkABEwAAAACAwkAAGYAAAACBQAAAAl0aHJlc2hvbGQAAAAAAAAAAAAGCQAAAgAAAAECAAAAEWludmFsaWQgdGhyZXNob2xkBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAG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aWNlQXNzZXRJZAUAAAAPbmV3U3VnZ2VzdEluZGV4BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAPbmV3U3VnZ2VzdEluZGV4CQEAAAAKdG90YWxWb3RlcwAAAAICAAAAATACAAAAATAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlTdWdnZXN0SW5kZXgAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAAD25ld1N1Z2dlc3RJbmRleAUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAR2b3RlAAAAAwAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAAAAAdpbkZhdm9yBAAAAAxzdWdnZXN0SW5kZXgJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAAEGtleUluTGlzdEFzc2V0SWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQEAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAA5rZXlTdGFydEhlaWdodAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEFAAAADmtleUVwb2NoTGVuZ3RoBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkAAAIAAAABAgAAACJ0aGUgdG9rZW4gaXNuJ3Qgb24gdGhlIHZvdGluZyBsaXN0CQAETAAAAAIDCQAAZgAAAAIFAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAUAAAAGaGVpZ2h0BgkAAAIAAAABAgAAABB0b28gbGF0ZSB0byB2b3RlBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAlnd3hBbW91bnQJAAP8AAAABAUAAAAQYm9vc3RpbmdDb250cmFjdAIAAAAgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAARMAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAARMAAAAAgUAAAASdm90aW5nRmluaXNoSGVpZ2h0BQAAAANuaWwFAAAAA25pbAQAAAAHbm90WmVybwMJAABmAAAAAgkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50AAAAAAAAAAAABgkAAAIAAAABAgAAABJ5b3UgZG9uJ3QgaGF2ZSBnd3gDCQAAAAAAAAIFAAAAB25vdFplcm8FAAAAB25vdFplcm8EAAAABHZvdGUEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAB2tleVZvdGUAAAAEBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAQAAAAEdm90ZQkABLUAAAACBQAAAAFzBQAAAAlzZXBhcmF0b3IEAAAACXZvdGVWYWx1ZQkAAZEAAAACBQAAAAR2b3RlAAAAAAAAAAABBAAAAAh2b3RlVHlwZQkAAZEAAAACBQAAAAR2b3RlAAAAAAAAAAACBAAAABFpc1ZvdGVUeXBlU2ltaWxhcgMDCQAAAAAAAAIFAAAACHZvdGVUeXBlAgAAAAN5ZXMJAAAAAAAAAgUAAAAHaW5GYXZvcgYHBgMJAAAAAAAAAgUAAAAIdm90ZVR5cGUCAAAAAm5vCQAAAAAAAAIFAAAAB2luRmF2b3IHBwQAAAASaXNWb3RlVmFsdWVTaW1pbGFyAwUAAAARaXNWb3RlVHlwZVNpbWlsYXIJAAAAAAAAAgkBAAAABWFzSW50AAAAAQUAAAAJZ3d4QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAACXZvdGVWYWx1ZQcEAAAAEGlzTmV3Vm90ZVNpbWlsYXIDAwUAAAARaXNWb3RlVHlwZVNpbWlsYXIFAAAAEmlzVm90ZVZhbHVlU2ltaWxhcgcJAAACAAAAAQIAAAAReW91IGFscmVhZHkgdm90ZWQJAAP8AAAABAUAAAAEdGhpcwIAAAAKY2FuY2VsVm90ZQkABEwAAAACBQAAAA1hbW91bnRBc3NldElkCQAETAAAAAIFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAAANuaWwFAAAAEGlzTmV3Vm90ZVNpbWlsYXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXUFAAAAByRtYXRjaDAFAAAAAXUJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IDCQAAAAAAAAIFAAAABHZvdGUFAAAABHZvdGUEAAAADHZvdGluZ1Jlc3VsdAkABLUAAAACCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAAJc2VwYXJhdG9yBAAAAA1wb3NpdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAQQAAAANbmVnYXRpdmVWb3RlcwkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAIEAAAAG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwMFAAAAB2luRmF2b3IEAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAABkAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAA1wb3NpdGl2ZVZvdGVzCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAABBuZXdQb3NpdGl2ZVZvdGVzCQAETAAAAAIFAAAADW5lZ2F0aXZlVm90ZXMFAAAAA25pbAQAAAAQbmV3TmVnYXRpdmVWb3RlcwkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADW5lZ2F0aXZlVm90ZXMJAQAAAAVhc0ludAAAAAEFAAAACWd3eEFtb3VudAkABEwAAAACBQAAAA1wb3NpdGl2ZVZvdGVzCQAETAAAAAIJAAGkAAAAAQUAAAAQbmV3TmVnYXRpdmVWb3RlcwUAAAADbmlsBAAAAAd2b3RlS2V5CQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAJdm90ZVZhbHVlCQEAAAAMa2V5Vm90ZVZhbHVlAAAAAgkAAaQAAAABCQEAAAAFYXNJbnQAAAABBQAAAAlnd3hBbW91bnQFAAAAB2luRmF2b3IJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgJAQAAAAp0b3RhbFZvdGVzAAAAAgkAAZEAAAACBQAAABtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAAAAAAAAAAJAAGRAAAAAgUAAAAbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAB3ZvdGVLZXkFAAAACXZvdGVWYWx1ZQUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACmNhbmNlbFZvdGUAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkBAAAAAt1c2VyQWRkcmVzcwMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABCQEAAAAPa2V5Vm90aW5nUmVzdWx0AAAAAwUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAAxzdWdnZXN0SW5kZXgGCQAAAgAAAAECAAAAF25vIHZvdGUgZm9yIGFzc2V0cyBwYWlyBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAR2b3RlCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAB2tleVZvdGUAAAAEBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAALdXNlckFkZHJlc3MFAAAACXNlcGFyYXRvcgQAAAAJdm90ZVZhbHVlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAEEAAAACHZvdGVUeXBlCQABkQAAAAIFAAAABHZvdGUAAAAAAAAAAAIEAAAADHZvdGluZ1Jlc3VsdAkABLUAAAACCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAAJc2VwYXJhdG9yBAAAAA1wb3NpdGl2ZVZvdGVzCQABkQAAAAIFAAAADHZvdGluZ1Jlc3VsdAAAAAAAAAAAAQQAAAANbmVnYXRpdmVWb3RlcwkAAZEAAAACBQAAAAx2b3RpbmdSZXN1bHQAAAAAAAAAAAIEAAAAB2FjdGlvbnMDCQAAAAAAAAIFAAAACHZvdGVUeXBlAgAAAAN5ZXMEAAAAEG5ld1Bvc2l0aXZlVm90ZXMJAABlAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAA1wb3NpdGl2ZVZvdGVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAACXZvdGVWYWx1ZQkABRQAAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAACnRvdGFsVm90ZXMAAAACCQABpAAAAAEFAAAAEG5ld1Bvc2l0aXZlVm90ZXMFAAAADW5lZ2F0aXZlVm90ZXMJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAB2tleVZvdGUAAAAEBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAAEdW5pdAQAAAAQbmV3TmVnYXRpdmVWb3RlcwkAAGUAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADW5lZ2F0aXZlVm90ZXMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAJdm90ZVZhbHVlCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAMFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4CQEAAAAKdG90YWxWb3RlcwAAAAIFAAAADXBvc2l0aXZlVm90ZXMJAAGkAAAAAQUAAAAQbmV3TmVnYXRpdmVWb3RlcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAHa2V5Vm90ZQAAAAQFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAMc3VnZ2VzdEluZGV4BQAAAAt1c2VyQWRkcmVzcwUAAAADbmlsBQAAAAR1bml0BQAAAAdhY3Rpb25zCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAZzZXRGZWUAAAABAAAABm5ld0ZlZQQAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUZlZUFtb3VudAUAAAAGbmV3RmVlBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADHNldFRocmVzaG9sZAAAAAEAAAAMbmV3VGhyZXNob2xkBAAAAAZjaGVja3MJAARMAAAAAgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQkABEwAAAACAwkAAGYAAAACBQAAAAxuZXdUaHJlc2hvbGQAAAAAAAAAAAAGCQAAAgAAAAECAAAAEWludmFsaWQgdGhyZXNob2xkBQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleVRocmVzaG9sZAUAAAAMbmV3VGhyZXNob2xkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACGZpbmFsaXplAAAAAgAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAQAAAAMc3VnZ2VzdEluZGV4CQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBAAAABJ2b3RpbmdGaW5pc2hIZWlnaHQJAABkAAAAAgkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAOa2V5U3RhcnRIZWlnaHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAkBAAAABXZhbHVlAAAAAQkABB8AAAABBQAAAA5rZXlFcG9jaExlbmd0aAQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB8AAAABCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAAACAAAAAQIAAAAObm8gYXNzZXRzIHBhaXIJAARMAAAAAgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAABJ2b3RpbmdGaW5pc2hIZWlnaHQGCQAAAgAAAAECAAAAImluc3VmZmljaWVudCBoZWlnaHQgZm9yIGNvbXBsZXRpb24FAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAADHZvdGluZ1Jlc3VsdAkABLUAAAACCQEAAAAFdmFsdWUAAAABCQAEIgAAAAEJAQAAAA9rZXlWb3RpbmdSZXN1bHQAAAADBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAADHN1Z2dlc3RJbmRleAUAAAAJc2VwYXJhdG9yBAAAAA1wb3NpdGl2ZVZvdGVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAABBAAAAA1uZWdhdGl2ZVZvdGVzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMdm90aW5nUmVzdWx0AAAAAAAAAAACBAAAAAhhbGxWb3RlcwkAAGQAAAACBQAAAA1wb3NpdGl2ZVZvdGVzBQAAAA1uZWdhdGl2ZVZvdGVzBAAAAAl0aHJlc2hvbGQJAQAAAAxnZXRJbnRPckZhaWwAAAABBQAAAAxrZXlUaHJlc2hvbGQEAAAAB2FjdGlvbnMDAwkAAGcAAAACBQAAAAhhbGxWb3RlcwUAAAAJdGhyZXNob2xkCQAAZgAAAAIFAAAADXBvc2l0aXZlVm90ZXMFAAAADW5lZ2F0aXZlVm90ZXMHBAAAAANyZXMJAAP8AAAABAUAAAAPZmFjdG9yeUNvbnRyYWN0AgAAABZzZXRXeEVtaXNzaW9uUG9vbExhYmVsCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAADcmVzBQAAAANyZXMEAAAAEXZvdGluZ0VtaXNzaW9uSW52CQAD/AAAAAQFAAAAFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QCAAAABmNyZWF0ZQkABEwAAAACBQAAAA1hbW91bnRBc3NldElkCQAETAAAAAIFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEXZvdGluZ0VtaXNzaW9uSW52BQAAABF2b3RpbmdFbWlzc2lvbkludgkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkABRQAAAACCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAANuaWwFAAAABHVuaXQFAAAAB2FjdGlvbnMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASbm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5N0f/Kg==", "chainId": 87, "height": 3255534, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4nN56at3Ve2VNphVCHRecJ3L1REGWfhxBBV5vmd9wz3z Next: Eht1RYtTrHzptmY75Z6dEoGETLB7a5i2hCjKpH3AGpvs Diff:
OldNewDifferences
206206 }
207207 if ((ensureActive == ensureActive))
208208 then {
209- let ensureAmountAssetVerified = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
210- case b: Boolean =>
211- if (b)
212- then true
213- else throw("asset is not verified")
214- case _ =>
215- throw("asset is not verified")
216- }
209+ let ensureAmountAssetVerified = if (isManager(i))
210+ then unit
211+ else {
212+ let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
213+ case b: Boolean =>
214+ if (b)
215+ then true
216+ else throw("asset is not verified")
217+ case _ =>
218+ throw("asset is not verified")
219+ }
220+ if ((inv == inv))
221+ then unit
222+ else throw("Strict value is not equal to itself.")
223+ }
217224 if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
218225 then {
219226 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let keyFeeAmount = makeString(["%s", "fee"], separator)
77
88 let keyUsdnAssetId = makeString(["%s", "usdnAssetId"], separator)
99
1010 let keyEpochLength = makeString(["%s", "epochLength"], separator)
1111
1212 let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1313
1414 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1515
1616 let keyAssetsStoreContract = makeString(["%s", "assetsStoreContract"], separator)
1717
1818 let keyUserPoolContract = makeString(["%s", "userPoolContract"], separator)
1919
2020 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
2121
2222 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2323
2424 let keyFactoryContract = makeString(["%s", "factoryContract"], separator)
2525
2626 let keyVotingEmissionContract = makeString(["%s", "votingEmissionContract"], separator)
2727
2828 let keyThreshold = makeString(["%s", "votingThreshold"], separator)
2929
3030 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
3131
3232
3333 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (key + " is not defined"))
3434
3535
3636 func keyInListAssetId (amountAssetId,priceAssetId) = makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
3737
3838
3939 func keySuggestIndex (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suggestIndex", amountAssetId, priceAssetId], separator)
4040
4141
4242 func keyStartHeight (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "startHeight", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
4343
4444
4545 func keyVotingResult (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "votingResult", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
4646
4747
4848 func totalVotes (totalYes,totalNo) = makeString(["%d%d", totalYes, totalNo], separator)
4949
5050
5151 func keyVote (amountAssetId,priceAssetId,suggestIndex,voterAddress) = makeString(["%s%s%s%d%s", "vote", amountAssetId, priceAssetId, toString(suggestIndex), voterAddress], separator)
5252
5353
5454 func keyVoteValue (gwxAmount,vote) = {
5555 let key = if (vote)
5656 then makeString(["%d%s", gwxAmount, "yes"], separator)
5757 else makeString(["%d%s", gwxAmount, "no"], separator)
5858 key
5959 }
6060
6161
6262 func keyInList (pool) = {
6363 let $t024632503 = pool
6464 let amountAssetId = $t024632503._1
6565 let priceAssetId = $t024632503._2
6666 makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
6767 }
6868
6969
7070 func keyManagerPublicKey () = "%s__managerPublicKey"
7171
7272
7373 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
7474
7575
7676 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
7777
7878 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
7979
8080 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
8181
8282 let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract))
8383
8484 let userPoolContract = addressFromStringValue(getStringOrFail(keyUserPoolContract))
8585
8686 let votingEmissionContract = addressFromStringValue(getStringOrFail(keyVotingEmissionContract))
8787
8888 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8989 case s: String =>
9090 fromBase58String(s)
9191 case _: Unit =>
9292 unit
9393 case _ =>
9494 throw("Match error")
9595 }
9696
9797
9898 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9999 case s: String =>
100100 fromBase58String(s)
101101 case _: Unit =>
102102 unit
103103 case _ =>
104104 throw("Match error")
105105 }
106106
107107
108108 func isManager (i) = match managerPublicKeyOrUnit() {
109109 case pk: ByteVector =>
110110 (i.callerPublicKey == pk)
111111 case _: Unit =>
112112 (i.caller == this)
113113 case _ =>
114114 throw("Match error")
115115 }
116116
117117
118118 func mustManager (i) = if (isManager(i))
119119 then true
120120 else throw("permission denied")
121121
122122
123123 func asInt (val) = match val {
124124 case valInt: Int =>
125125 valInt
126126 case _ =>
127127 throw("failed to cast into Integer")
128128 }
129129
130130
131131 @Callable(i)
132132 func constructor (assetsStoreContractPrm,boostingContractPrm,emissionContractPrm,factoryContractPrm,userPoolContractPrm,votingEmissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
133133 let checks = [mustManager(i), if (isDefined(addressFromString(assetsStoreContractPrm)))
134134 then true
135135 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
136136 then true
137137 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
138138 then true
139139 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
140140 then true
141141 else throw("Invalid emission contract address"), if (isDefined(addressFromString(factoryContractPrm)))
142142 then true
143143 else throw("Invalid factory contract address"), if ((feeAmountPrm >= 0))
144144 then true
145145 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
146146 then true
147147 else throw("Invalid voting duration"), if ((finalizeRewardPrm >= 0))
148148 then true
149149 else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
150150 then true
151151 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
152152 then true
153153 else throw("Invalid USDN asset ID")]
154154 if ((checks == checks))
155155 then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), StringEntry(keyFactoryContract, factoryContractPrm), StringEntry(keyUserPoolContract, userPoolContractPrm), StringEntry(keyVotingEmissionContract, votingEmissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
156156 else throw("Strict value is not equal to itself.")
157157 }
158158
159159
160160
161161 @Callable(i)
162162 func constructorV2 (threshold) = {
163163 let checks = [mustManager(i), if ((threshold > 0))
164164 then true
165165 else throw("invalid threshold")]
166166 if ((checks == checks))
167167 then $Tuple2([IntegerEntry(keyThreshold, threshold)], unit)
168168 else throw("Strict value is not equal to itself.")
169169 }
170170
171171
172172
173173 @Callable(i)
174174 func suggest (amountAssetId,priceAssetId) = {
175175 let pool = $Tuple2(amountAssetId, priceAssetId)
176176 let payment = value(i.payments[0])
177177 let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
178178 let checks = [if (if (isManager(i))
179179 then true
180180 else (info.issuer == i.caller))
181181 then true
182182 else throw("asset can only be suggested by its issuer"), if ((info.scripted == false))
183183 then true
184184 else throw("asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
185185 then true
186186 else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
187187 then true
188188 else throw("invalid fee amount"), if (if (isManager(i))
189189 then true
190190 else (priceAssetId == value(getString(keyUsdnAssetId))))
191191 then true
192192 else throw("priceAssetId is not USDN"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
193193 then true
194194 else throw("already in voting list"), if (!(valueOrElse(getBoolean(votingEmissionContract, keyInList(pool)), false)))
195195 then true
196196 else throw("pool is in emission voting list")]
197197 if ((checks == checks))
198198 then {
199199 let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
200200 case s: String =>
201201 if ((s == "active"))
202202 then true
203203 else throw("user pool is not active")
204204 case _ =>
205205 throw("user pool is not active")
206206 }
207207 if ((ensureActive == ensureActive))
208208 then {
209- let ensureAmountAssetVerified = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
210- case b: Boolean =>
211- if (b)
212- then true
213- else throw("asset is not verified")
214- case _ =>
215- throw("asset is not verified")
216- }
209+ let ensureAmountAssetVerified = if (isManager(i))
210+ then unit
211+ else {
212+ let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
213+ case b: Boolean =>
214+ if (b)
215+ then true
216+ else throw("asset is not verified")
217+ case _ =>
218+ throw("asset is not verified")
219+ }
220+ if ((inv == inv))
221+ then unit
222+ else throw("Strict value is not equal to itself.")
223+ }
217224 if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
218225 then {
219226 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
220227 if ((burnFeeInv == burnFeeInv))
221228 then {
222229 let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
223230 case int: Int =>
224231 (int + 1)
225232 case _ =>
226233 0
227234 }
228235 $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
229236 }
230237 else throw("Strict value is not equal to itself.")
231238 }
232239 else throw("Strict value is not equal to itself.")
233240 }
234241 else throw("Strict value is not equal to itself.")
235242 }
236243 else throw("Strict value is not equal to itself.")
237244 }
238245
239246
240247
241248 @Callable(i)
242249 func vote (amountAssetId,priceAssetId,inFavor) = {
243250 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
244251 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
245252 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
246253 then true
247254 else throw("the token isn't on the voting list"), if ((votingFinishHeight > height))
248255 then true
249256 else throw("too late to vote")]
250257 if ((checks == checks))
251258 then {
252259 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
253260 let notZero = if ((asInt(gwxAmount) > 0))
254261 then true
255262 else throw("you don't have gwx")
256263 if ((notZero == notZero))
257264 then {
258265 let vote = match getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) {
259266 case s: String =>
260267 let vote = split(s, separator)
261268 let voteValue = vote[1]
262269 let voteType = vote[2]
263270 let isVoteTypeSimilar = if (if ((voteType == "yes"))
264271 then (inFavor == true)
265272 else false)
266273 then true
267274 else if ((voteType == "no"))
268275 then (inFavor == false)
269276 else false
270277 let isVoteValueSimilar = if (isVoteTypeSimilar)
271278 then (asInt(gwxAmount) == parseIntValue(voteValue))
272279 else false
273280 let isNewVoteSimilar = if (if (isVoteTypeSimilar)
274281 then isVoteValueSimilar
275282 else false)
276283 then throw("you already voted")
277284 else invoke(this, "cancelVote", [amountAssetId, priceAssetId], nil)
278285 isNewVoteSimilar
279286 case u: Unit =>
280287 u
281288 case _ =>
282289 throw("Match error")
283290 }
284291 if ((vote == vote))
285292 then {
286293 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
287294 let positiveVotes = votingResult[1]
288295 let negativeVotes = votingResult[2]
289296 let newPositiveAndNegativeVotes = if (inFavor)
290297 then {
291298 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
292299 [toString(newPositiveVotes), negativeVotes]
293300 }
294301 else {
295302 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
296303 [positiveVotes, toString(newNegativeVotes)]
297304 }
298305 let voteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
299306 let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
300307 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1])), StringEntry(voteKey, voteValue)], unit)
301308 }
302309 else throw("Strict value is not equal to itself.")
303310 }
304311 else throw("Strict value is not equal to itself.")
305312 }
306313 else throw("Strict value is not equal to itself.")
307314 }
308315
309316
310317
311318 @Callable(i)
312319 func cancelVote (amountAssetId,priceAssetId) = {
313320 let userAddress = if ((i.caller == this))
314321 then toString(i.originCaller)
315322 else toString(i.caller)
316323 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
317324 let checks = [if (isDefined(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))))
318325 then true
319326 else throw("no vote for assets pair")]
320327 if ((checks == checks))
321328 then {
322329 let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))), separator)
323330 let voteValue = vote[1]
324331 let voteType = vote[2]
325332 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
326333 let positiveVotes = votingResult[1]
327334 let negativeVotes = votingResult[2]
328335 let actions = if ((voteType == "yes"))
329336 then {
330337 let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
331338 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
332339 }
333340 else {
334341 let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
335342 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
336343 }
337344 actions
338345 }
339346 else throw("Strict value is not equal to itself.")
340347 }
341348
342349
343350
344351 @Callable(i)
345352 func setFee (newFee) = {
346353 let checks = [mustManager(i)]
347354 if ((checks == checks))
348355 then [IntegerEntry(keyFeeAmount, newFee)]
349356 else throw("Strict value is not equal to itself.")
350357 }
351358
352359
353360
354361 @Callable(i)
355362 func setThreshold (newThreshold) = {
356363 let checks = [mustManager(i), if ((newThreshold > 0))
357364 then true
358365 else throw("invalid threshold")]
359366 if ((checks == checks))
360367 then $Tuple2([IntegerEntry(keyThreshold, newThreshold)], unit)
361368 else throw("Strict value is not equal to itself.")
362369 }
363370
364371
365372
366373 @Callable(i)
367374 func finalize (amountAssetId,priceAssetId) = {
368375 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
369376 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
370377 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
371378 then true
372379 else throw("no assets pair"), if ((height >= votingFinishHeight))
373380 then true
374381 else throw("insufficient height for completion")]
375382 if ((checks == checks))
376383 then {
377384 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
378385 let positiveVotes = parseIntValue(votingResult[1])
379386 let negativeVotes = parseIntValue(votingResult[2])
380387 let allVotes = (positiveVotes + negativeVotes)
381388 let threshold = getIntOrFail(keyThreshold)
382389 let actions = if (if ((allVotes >= threshold))
383390 then (positiveVotes > negativeVotes)
384391 else false)
385392 then {
386393 let res = invoke(factoryContract, "setWxEmissionPoolLabel", [amountAssetId, priceAssetId], nil)
387394 if ((res == res))
388395 then {
389396 let votingEmissionInv = invoke(votingEmissionContract, "create", [amountAssetId, priceAssetId], nil)
390397 if ((votingEmissionInv == votingEmissionInv))
391398 then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
392399 else throw("Strict value is not equal to itself.")
393400 }
394401 else throw("Strict value is not equal to itself.")
395402 }
396403 else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
397404 actions
398405 }
399406 else throw("Strict value is not equal to itself.")
400407 }
401408
402409
403410
404411 @Callable(i)
405412 func setManager (pendingManagerPublicKey) = {
406413 let checkCaller = mustManager(i)
407414 if ((checkCaller == checkCaller))
408415 then {
409416 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
410417 if ((checkManagerPublicKey == checkManagerPublicKey))
411418 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
412419 else throw("Strict value is not equal to itself.")
413420 }
414421 else throw("Strict value is not equal to itself.")
415422 }
416423
417424
418425
419426 @Callable(i)
420427 func confirmManager () = {
421428 let pm = pendingManagerPublicKeyOrUnit()
422429 let hasPM = if (isDefined(pm))
423430 then true
424431 else throw("no pending manager")
425432 if ((hasPM == hasPM))
426433 then {
427434 let checkPM = if ((i.callerPublicKey == value(pm)))
428435 then true
429436 else throw("you are not pending manager")
430437 if ((checkPM == checkPM))
431438 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
432439 else throw("Strict value is not equal to itself.")
433440 }
434441 else throw("Strict value is not equal to itself.")
435442 }
436443
437444
438445 @Verifier(tx)
439446 func verify () = {
440447 let targetPublicKey = match managerPublicKeyOrUnit() {
441448 case pk: ByteVector =>
442449 pk
443450 case _: Unit =>
444451 tx.senderPublicKey
445452 case _ =>
446453 throw("Match error")
447454 }
448455 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
449456 }
450457

github/deemru/w8io/3ef1775 
90.26 ms