tx · 2X9kpZjZoMNMzjCLbvvH4jVSqr4Tps5Ra9SZ91rJnBv1

3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA:  -0.01400000 Waves

2022.03.11 17:13 [1959391] smart account 3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA > SELF 0.00000000 Waves

{ "type": 13, "id": "2X9kpZjZoMNMzjCLbvvH4jVSqr4Tps5Ra9SZ91rJnBv1", "fee": 1400000, "feeAssetId": null, "timestamp": 1647008027824, "version": 1, "sender": "3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA", "senderPublicKey": "H19CeJVbUnfsK8EYs8K6fHxwBH7pLyxw8WCDFu7D4rGQ", "proofs": [ "24rs9NdBeuuqtLQMmHrKTqp51csrt1tLZUuRsQx46JyrYtqeo5RsrdYNYsFZqjJg8JfVEMJqrxRT6o9X3XbbEdRR" ], "script": "base64:AAIFAAAAAAAAABsIAhIJCgcIAQEBAQEIEgMKAQESABIDCgEIEgAAAAAkAAAAAANTRVACAAAAAl9fAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgIAAAAPbWFuZGF0b3J5IHRoaXMuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAgAAABwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzAAAAABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAAAAAAAAAAEAAAAAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAAAAAAAAAAIAAAAAFElkeEZhY3RvcnlDZmdJZG9EYXBwAAAAAAAAAAADAAAAABVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAAAAAAAAAAAAQAAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAAAAAAAAAAAAUAAAAAFUlkeEZhY3RvcnlDZmdSZXN0RGFwcAAAAAAAAAAABgAAAAAZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcAAAAAAAAAAABwAAAAAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAAAAAAAAAAAAoBAAAADWtleUZhY3RvcnlDZmcAAAAAAgAAABElc19fZmFjdG9yeUNvbmZpZwEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABBrZXlGYWN0b3J5THBMaXN0AAAAAAIAAAAQJXNfX2xwVG9rZW5zTGlzdAEAAAAma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABRrZXlGYWN0b3J5UG9vbFdlaWdodAAAAAEAAAAPY29udHJhY3RBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAApwb29sV2VpZ2h0CQAETAAAAAIFAAAAD2NvbnRyYWN0QWRkcmVzcwUAAAADbmlsBQAAAANTRVABAAAAGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAQAAAApyZWFkTHBMaXN0AAAAAAkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIJAQAAABhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAAAACQEAAAAQa2V5RmFjdG9yeUxwTGlzdAAAAAACAAAAAAUAAAADU0VQAQAAABRyZWFkRmFjdG9yeUNmZ09yRmFpbAAAAAEAAAAHZmFjdG9yeQkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAHZmFjdG9yeQkBAAAADWtleUZhY3RvcnlDZmcAAAAABQAAAANTRVABAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAQAAABlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAQAAAAlrZXlDb25maWcAAAAAAgAAAAolc19fY29uZmlnAQAAABlrZXlSYXRlUGVyQmxvY2tNYXhDdXJyZW50AAAAAAIAAAAeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50AQAAABtrZXlSYXRlUGVyQmxvY2tNYXhTdGFydEZyb20AAAACAAAACXRpbWVzdGFtcAAAAAVibG9jawkABLkAAAACCQAETAAAAAICAAAAICVzJXMlZCVkX19yYXRlUGVyQmxvY2tNYXhfX3N0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAFYmxvY2sFAAAAA25pbAUAAAADU0VQAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQAAABhrZXlSYXRlUGVyQmxvY2tTdGFydEZyb20AAAACAAAACXRpbWVzdGFtcAAAAAVibG9jawkABLkAAAACCQAETAAAAAICAAAAHSVzJXMlZCVkX19yYXRlUGVyQmxvY2tfX3N0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAFYmxvY2sFAAAAA25pbAUAAAADU0VQAQAAABVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAAAAAgAAABolcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEAAAAba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAAAAAIAAAAYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uAQAAABNrZXlFbWlzc2lvbkVuZEJsb2NrAAAAAAIAAAAYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAUJXNfX21hbmFnZXJQdWJsaWNLZXkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAIAAAAbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAUAAAABaQEAAAALY29uc3RydWN0b3IAAAAHAAAADmZhY3RvcnlBZGRyZXNzAAAAD3JhdGVQZXJCbG9ja01heAAAAAxyYXRlUGVyQmxvY2sAAAASZW1pc3Npb25TdGFydEJsb2NrAAAAEGVtaXNzaW9uRHVyYXRpb24AAAAWZW1pc3Npb25TdGFydFRpbWVzdGFtcAAAAAx3eEFzc2V0SWRTdHIEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtrZXlSYXRlUGVyQmxvY2tNYXhTdGFydEZyb20AAAACBQAAABZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBQAAABJlbWlzc2lvblN0YXJ0QmxvY2sFAAAAD3JhdGVQZXJCbG9ja01heAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWtleVJhdGVQZXJCbG9ja01heEN1cnJlbnQAAAAABQAAAA9yYXRlUGVyQmxvY2tNYXgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhrZXlSYXRlUGVyQmxvY2tTdGFydEZyb20AAAACBQAAABZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBQAAABJlbWlzc2lvblN0YXJ0QmxvY2sFAAAADHJhdGVQZXJCbG9jawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQAAAAABQAAAAxyYXRlUGVyQmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAAAABQAAABJlbWlzc2lvblN0YXJ0QmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAAAABQAAABBlbWlzc2lvbkR1cmF0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAATa2V5RW1pc3Npb25FbmRCbG9jawAAAAAJAABkAAAAAgUAAAASZW1pc3Npb25TdGFydEJsb2NrBQAAABBlbWlzc2lvbkR1cmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAAFAAAADmZhY3RvcnlBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQABLAAAAAICAAAABCVzX18FAAAADHd4QXNzZXRJZFN0cgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAARlbWl0AAAAAQAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkABRQAAAACBQAAAANuaWwFAAAAA25pbAQAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAAAAAQAAAAKZmFjdG9yeUNmZwkBAAAAFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAAAAAQUAAAAPZmFjdG9yeUNvbnRyYWN0BAAAAA9zdGFraW5nQ29udHJhY3QJAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAAEmd3eFJld2FyZHNDb250cmFjdAkBAAAAGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnBAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgMDCQEAAAACIT0AAAACBQAAAAZjYWxsZXIFAAAAD3N0YWtpbmdDb250cmFjdAkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAABJnd3hSZXdhcmRzQ29udHJhY3QHCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAMd3hBc3NldElkU3RyCQABkQAAAAIJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVAAAAAAAAAAAAEEAAAACXd4QXNzZXRJZAkAAlkAAAABBQAAAAx3eEFzc2V0SWRTdHIJAAUUAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAJd3hBc3NldElkBQAAAANuaWwJAARMAAAAAgUAAAAJd3hBc3NldElkBQAAAANuaWwAAAABaQEAAAAEYnVybgAAAAAEAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAAAAAEAAAACmZhY3RvcnlDZmcJAQAAABRyZWFkRmFjdG9yeUNmZ09yRmFpbAAAAAEFAAAAD2ZhY3RvcnlDb250cmFjdAQAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHGV4YWN0IG9uZSBwYXltZW50IGlzIGFsbG93ZWQEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50BAAAAAl3eEFzc2V0SWQJAAJZAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAJa2V5Q29uZmlnAAAAAAUAAAADU0VQAAAAAAAAAAABAwkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAUAAAAJd3hBc3NldElkCQAAAgAAAAECAAAAG2ludmFsaWQgd3hBc3NldElkIGlzIHBhc3NlZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAQYm9vc3RpbmdDb250cmFjdAkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAdhc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABclcyVzJXNfX2hpc3RvcnlfX2J1cm5fXwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQAEuQAAAAIJAARMAAAAAgIAAAAGJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAGaGVpZ2h0CQAETAAAAAIJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkAAaQAAAABBQAAAAlwbXRBbW91bnQFAAAAA25pbAUAAAADU0VQBQAAAANuaWwAAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXlmRwea", "chainId": 84, "height": 1959391, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DwMYXzoHTS8ySHVgiXzVqStdDCzmZ2oSthwBCGEfQ59S Next: 4SjcLom5ejSTWQXTpxcA78r9BQ1xKMjf9HmNYAn4Y76A Diff:
OldNewDifferences
88
99 func keyFactoryAddress () = "%s%s__config__factoryAddress"
1010
11-
12-func keyGwxRewardsAddress () = "%s%s__config__gwxRewardsAddress"
13-
14-
15-let gwxRewardsAddressStr = getStringOrFail(this, keyGwxRewardsAddress())
16-
17-let gwxRewardsContract = addressFromStringValue(gwxRewardsAddressStr)
1811
1912 let IdxFactoryCfgStakingDapp = 1
2013
2922 let IdxFactoryCfgRestDapp = 6
3023
3124 let IdxFactoryCfgSlippageDapp = 7
25+
26+let IdxFactoryCfgGwxRewardDapp = 10
3227
3328 func keyFactoryCfg () = "%s__factoryConfig"
3429
6358 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
6459
6560
61+func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
62+
63+
6664 func keyConfig () = "%s__config"
6765
6866
8785 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
8886
8987
90-@Callable(i)
91-func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = if ((i.caller != this))
92- then throw("permissions denied")
93- else [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
88+func keyManagerPublicKey () = "%s__managerPublicKey"
9489
90+
91+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
92+
93+
94+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
95+ case s: String =>
96+ fromBase58String(s)
97+ case _: Unit =>
98+ unit
99+ case _ =>
100+ throw("Match error")
101+}
102+
103+
104+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
105+ case s: String =>
106+ fromBase58String(s)
107+ case _: Unit =>
108+ unit
109+ case _ =>
110+ throw("Match error")
111+}
112+
113+
114+func mustManager (i) = {
115+ let pd = throw("Permission denied")
116+ match managerPublicKeyOrUnit() {
117+ case pk: ByteVector =>
118+ if ((i.callerPublicKey == pk))
119+ then true
120+ else pd
121+ case _: Unit =>
122+ if ((i.caller == this))
123+ then true
124+ else pd
125+ case _ =>
126+ throw("Match error")
127+ }
128+ }
95129
96130
97131 @Callable(i)
98-func constructorV2 (gwxRewardsAddress) = if ((this != i.caller))
99- then throw("not authorized")
100- else [StringEntry(keyGwxRewardsAddress(), gwxRewardsAddress)]
132+func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = {
133+ let checkCaller = mustManager(i)
134+ if ((checkCaller == checkCaller))
135+ then [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
136+ else throw("Strict value is not equal to itself.")
137+ }
101138
102139
103140
108145 let factoryContract = readFactoryAddressOrFail()
109146 let factoryCfg = readFactoryCfgOrFail(factoryContract)
110147 let stakingContract = getStakingAddressOrFail(factoryCfg)
148+ let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
111149 let caller = i.caller
112150 if (if ((caller != stakingContract))
113151 then (caller != gwxRewardsContract)
121159 }
122160
123161
162+
163+@Callable(i)
164+func burn () = {
165+ let factoryContract = readFactoryAddressOrFail()
166+ let factoryCfg = readFactoryCfgOrFail(factoryContract)
167+ let boostingContract = getBoostingAddressOrFail(factoryCfg)
168+ if ((size(i.payments) != 1))
169+ then throw("exact one payment is allowed")
170+ else {
171+ let pmt = i.payments[0]
172+ let assetId = value(pmt.assetId)
173+ let pmtAmount = pmt.amount
174+ let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
175+ if ((assetId != wxAssetId))
176+ then throw("invalid wxAssetId is passed")
177+ else if ((i.caller != boostingContract))
178+ then throw("permissions denied")
179+ else [Burn(assetId, pmtAmount), StringEntry(("%s%s%s__history__burn__" + toBase58String(i.transactionId)), makeString(["%d%d%d", toString(height), toString(lastBlock.timestamp), toString(pmtAmount)], SEP))]
180+ }
181+ }
182+
183+
184+
185+@Callable(i)
186+func setManager (pendingManagerPublicKey) = {
187+ let checkCaller = mustManager(i)
188+ if ((checkCaller == checkCaller))
189+ then {
190+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
191+ if ((checkManagerPublicKey == checkManagerPublicKey))
192+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
193+ else throw("Strict value is not equal to itself.")
194+ }
195+ else throw("Strict value is not equal to itself.")
196+ }
197+
198+
199+
200+@Callable(i)
201+func confirmManager () = {
202+ let pm = pendingManagerPublicKeyOrUnit()
203+ let hasPM = if (isDefined(pm))
204+ then true
205+ else throw("No pending manager")
206+ if ((hasPM == hasPM))
207+ then {
208+ let checkPM = if ((i.callerPublicKey == value(pm)))
209+ then true
210+ else throw("You are not pending manager")
211+ if ((checkPM == checkPM))
212+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+
218+
219+@Verifier(tx)
220+func verify () = {
221+ let targetPublicKey = match managerPublicKeyOrUnit() {
222+ case pk: ByteVector =>
223+ pk
224+ case _: Unit =>
225+ tx.senderPublicKey
226+ case _ =>
227+ throw("Match error")
228+ }
229+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
230+ }
231+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), (("mandatory this." + key) + " is not defined"))
77
88
99 func keyFactoryAddress () = "%s%s__config__factoryAddress"
1010
11-
12-func keyGwxRewardsAddress () = "%s%s__config__gwxRewardsAddress"
13-
14-
15-let gwxRewardsAddressStr = getStringOrFail(this, keyGwxRewardsAddress())
16-
17-let gwxRewardsContract = addressFromStringValue(gwxRewardsAddressStr)
1811
1912 let IdxFactoryCfgStakingDapp = 1
2013
2114 let IdxFactoryCfgBoostingDapp = 2
2215
2316 let IdxFactoryCfgIdoDapp = 3
2417
2518 let IdxFactoryCfgTeamDapp = 4
2619
2720 let IdxFactoryCfgEmissionDapp = 5
2821
2922 let IdxFactoryCfgRestDapp = 6
3023
3124 let IdxFactoryCfgSlippageDapp = 7
25+
26+let IdxFactoryCfgGwxRewardDapp = 10
3227
3328 func keyFactoryCfg () = "%s__factoryConfig"
3429
3530
3631 func keyFactoryLp2AssetsMapping (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
3732
3833
3934 func keyFactoryLpList () = "%s__lpTokensList"
4035
4136
4237 func keyFactoryLpAssetToPoolContractAddress (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
4338
4439
4540 func keyFactoryPoolWeight (contractAddress) = makeString(["%s%s", "poolWeight", contractAddress], SEP)
4641
4742
4843 func readFactoryAddressOrFail () = addressFromStringValue(getStringOrFail(this, keyFactoryAddress()))
4944
5045
5146 func readLpList () = split(valueOrElse(getString(readFactoryAddressOrFail(), keyFactoryLpList()), ""), SEP)
5247
5348
5449 func readFactoryCfgOrFail (factory) = split(getStringOrFail(factory, keyFactoryCfg()), SEP)
5550
5651
5752 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
5853
5954
6055 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
6156
6257
6358 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
6459
6560
61+func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
62+
63+
6664 func keyConfig () = "%s__config"
6765
6866
6967 func keyRatePerBlockMaxCurrent () = "%s%s__ratePerBlockMax__current"
7068
7169
7270 func keyRatePerBlockMaxStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlockMax__start", toString(timestamp), toString(block)], SEP)
7371
7472
7573 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
7674
7775
7876 func keyRatePerBlockStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlock__start", toString(timestamp), toString(block)], SEP)
7977
8078
8179 func keyEmissionStartBlock () = "%s%s__emission__startBlock"
8280
8381
8482 func keyEmissionDurationInBlocks () = "%s%s__emission__duration"
8583
8684
8785 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
8886
8987
90-@Callable(i)
91-func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = if ((i.caller != this))
92- then throw("permissions denied")
93- else [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
88+func keyManagerPublicKey () = "%s__managerPublicKey"
9489
90+
91+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
92+
93+
94+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
95+ case s: String =>
96+ fromBase58String(s)
97+ case _: Unit =>
98+ unit
99+ case _ =>
100+ throw("Match error")
101+}
102+
103+
104+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
105+ case s: String =>
106+ fromBase58String(s)
107+ case _: Unit =>
108+ unit
109+ case _ =>
110+ throw("Match error")
111+}
112+
113+
114+func mustManager (i) = {
115+ let pd = throw("Permission denied")
116+ match managerPublicKeyOrUnit() {
117+ case pk: ByteVector =>
118+ if ((i.callerPublicKey == pk))
119+ then true
120+ else pd
121+ case _: Unit =>
122+ if ((i.caller == this))
123+ then true
124+ else pd
125+ case _ =>
126+ throw("Match error")
127+ }
128+ }
95129
96130
97131 @Callable(i)
98-func constructorV2 (gwxRewardsAddress) = if ((this != i.caller))
99- then throw("not authorized")
100- else [StringEntry(keyGwxRewardsAddress(), gwxRewardsAddress)]
132+func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = {
133+ let checkCaller = mustManager(i)
134+ if ((checkCaller == checkCaller))
135+ then [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
136+ else throw("Strict value is not equal to itself.")
137+ }
101138
102139
103140
104141 @Callable(i)
105142 func emit (amount) = if ((0 >= amount))
106143 then $Tuple2(nil, nil)
107144 else {
108145 let factoryContract = readFactoryAddressOrFail()
109146 let factoryCfg = readFactoryCfgOrFail(factoryContract)
110147 let stakingContract = getStakingAddressOrFail(factoryCfg)
148+ let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
111149 let caller = i.caller
112150 if (if ((caller != stakingContract))
113151 then (caller != gwxRewardsContract)
114152 else false)
115153 then throw("permissions denied")
116154 else {
117155 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
118156 let wxAssetId = fromBase58String(wxAssetIdStr)
119157 $Tuple2([ScriptTransfer(caller, amount, wxAssetId)], [wxAssetId])
120158 }
121159 }
122160
123161
162+
163+@Callable(i)
164+func burn () = {
165+ let factoryContract = readFactoryAddressOrFail()
166+ let factoryCfg = readFactoryCfgOrFail(factoryContract)
167+ let boostingContract = getBoostingAddressOrFail(factoryCfg)
168+ if ((size(i.payments) != 1))
169+ then throw("exact one payment is allowed")
170+ else {
171+ let pmt = i.payments[0]
172+ let assetId = value(pmt.assetId)
173+ let pmtAmount = pmt.amount
174+ let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
175+ if ((assetId != wxAssetId))
176+ then throw("invalid wxAssetId is passed")
177+ else if ((i.caller != boostingContract))
178+ then throw("permissions denied")
179+ else [Burn(assetId, pmtAmount), StringEntry(("%s%s%s__history__burn__" + toBase58String(i.transactionId)), makeString(["%d%d%d", toString(height), toString(lastBlock.timestamp), toString(pmtAmount)], SEP))]
180+ }
181+ }
182+
183+
184+
185+@Callable(i)
186+func setManager (pendingManagerPublicKey) = {
187+ let checkCaller = mustManager(i)
188+ if ((checkCaller == checkCaller))
189+ then {
190+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
191+ if ((checkManagerPublicKey == checkManagerPublicKey))
192+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
193+ else throw("Strict value is not equal to itself.")
194+ }
195+ else throw("Strict value is not equal to itself.")
196+ }
197+
198+
199+
200+@Callable(i)
201+func confirmManager () = {
202+ let pm = pendingManagerPublicKeyOrUnit()
203+ let hasPM = if (isDefined(pm))
204+ then true
205+ else throw("No pending manager")
206+ if ((hasPM == hasPM))
207+ then {
208+ let checkPM = if ((i.callerPublicKey == value(pm)))
209+ then true
210+ else throw("You are not pending manager")
211+ if ((checkPM == checkPM))
212+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
213+ else throw("Strict value is not equal to itself.")
214+ }
215+ else throw("Strict value is not equal to itself.")
216+ }
217+
218+
219+@Verifier(tx)
220+func verify () = {
221+ let targetPublicKey = match managerPublicKeyOrUnit() {
222+ case pk: ByteVector =>
223+ pk
224+ case _: Unit =>
225+ tx.senderPublicKey
226+ case _ =>
227+ throw("Match error")
228+ }
229+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
230+ }
231+

github/deemru/w8io/3ef1775 
52.39 ms