tx · 5hiHTy8DYEsvFvNRb3qeZf76mWdzpvzrA7mf6bshdFvY

3N8WxMD723WNbLNF6xhbBw2Nmq5mwtYdAwq:  -0.02000000 Waves

2020.06.26 15:41 [1060694] smart account 3N8WxMD723WNbLNF6xhbBw2Nmq5mwtYdAwq > SELF 0.00000000 Waves

{ "type": 13, "id": "5hiHTy8DYEsvFvNRb3qeZf76mWdzpvzrA7mf6bshdFvY", "fee": 2000000, "feeAssetId": null, "timestamp": 1593175370706, "version": 1, "sender": "3N8WxMD723WNbLNF6xhbBw2Nmq5mwtYdAwq", "senderPublicKey": "9DNsZT846MHG4j3B7Kmm2SqLP9jXQSYQ24HSnvaqrBWB", "proofs": [ "RjS8HEMcdnsxwgzsCtZyMTP6V4o5ACxF6M8MXeDSyMNTc5BpV6h6RWzhYNpVEJUN33MN93sJMVTjFWbfqR8A21B", "66wnQWAQHnJwCsvv8r15FVihDZux93izDMua5F5kKbALdrKQ3VD493dzEYygBrJNydN58B3qNAvjHiqmcX2fU1Hm", "2mRxuat8d2GkGoncprg75WJdERzoY8hBCEL6cSUqPFQ9hHfUWFqCWscJHvuCBgmmcuERyvwfXk7XcCisLdNNGDCQ" ], "script": "base64:AAIDAAAAAAAAABwIARIECgIIARIAEgQKAgEIEgQKAggBEgQKAggBAAAAHwEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAATTmV1dHJpbm9Db250cmFjdEtleQIAAAARbmV1dHJpbm9fY29udHJhY3QAAAAACkJhbGFuY2VLZXkCAAAAC3JwZF9iYWxhbmNlAAAAABJDb250cm9sQ29udHJhY3RLZXkCAAAAEGNvbnRyb2xfY29udHJhY3QAAAAACUFkbWluc0tleQIAAAAGYWRtaW5zAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIAAAAFb3duZXIAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAApCYWxhbmNlS2V5AgAAAAFfBQAAAAdhc3NldElkAgAAAAFfBQAAAAVvd25lcgEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgUAAAAKQmFsYW5jZUtleQIAAAABXwUAAAAHYXNzZXRJZAEAAAAUZ2V0RXhwaXJlUHJvcG9zYWxLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAAA9wcm9wb3NhbF9leHBpcmUCAAAAAV8FAAAABGhhc2gBAAAAE2dldE93bmVyUHJvcG9zYWxLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAAA5wcm9wb3NhbF9vd25lcgIAAAABXwUAAAAEaGFzaAEAAAAXZ2V0QXJndW1lbnRzUHJvcG9zYWxLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAABJwcm9wb3NhbF9hcmd1bWVudHMCAAAAAV8FAAAABGhhc2gBAAAACmdldFZvdGVLZXkAAAACAAAABW93bmVyAAAABGhhc2gJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAANcHJvcG9zYWxfdm90ZQIAAAABXwUAAAAFb3duZXICAAAAAV8FAAAABGhhc2gBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAATTmV1dHJpbm9Db250cmFjdEtleQAAAAAPY29udHJvbENvbnRyYWN0CQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJDb250cm9sQ29udHJhY3RLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASTmV1dHJpbm9Bc3NldElkS2V5AQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAAdhc3NldElkAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAIAAAAFb3duZXIAAAAHYXNzZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAFb3duZXIFAAAAB2Fzc2V0SWQBAAAAEWdldEV4cGlyZVByb3Bvc2FsAAAAAQAAAARoYXNoCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAUZ2V0RXhwaXJlUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoAQAAABBnZXRPd25lclByb3Bvc2FsAAAAAQAAAARoYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAATZ2V0T3duZXJQcm9wb3NhbEtleQAAAAEFAAAABGhhc2gBAAAAFGdldEFyZ3VtZW50c1Byb3Bvc2FsAAAAAQAAAARoYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAXZ2V0QXJndW1lbnRzUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoAQAAAAdnZXRWb3RlAAAAAgAAAAVvd25lcgAAAARoYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAKZ2V0Vm90ZUtleQAAAAIFAAAABW93bmVyBQAAAARoYXNoAQAAABNnZXRSZXdhcmRzQ29uZmlnS2V5AAAAAwAAAAVvd25lcgAAAAVzaGFyZQAAAAhyZWNlaXZlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADnN0YWtpbmdjb25maWdfBQAAAAVvd25lcgIAAAABXwkAAaQAAAABBQAAAAVzaGFyZQIAAAABXwUAAAAIcmVjZWl2ZXIBAAAAGmdldEN1cnJlbnRSZXdhcmRzQ29uZmlnS2V5AAAAAQAAAAVvd25lcgkAASwAAAACAgAAABZzdGFraW5nY29uZmlnX2N1cnJlbnRfBQAAAAVvd25lcgEAAAAYZ2V0UmV3YXJkc0NvbmZpZ1N0YXJ0S2V5AAAAAgAAAAljb25maWdLZXkAAAAHaXNTdGFydAkAASwAAAACBQAAAAljb25maWdLZXkDBQAAAAdpc1N0YXJ0AgAAAAZfc3RhcnQCAAAABF9lbmQBAAAAG2dldFJld2FyZENvbmZpZ0luaXRpYWxTaGFyZQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAFb3duZXICAAAADV9pbml0aWFsU2hhcmUBAAAAFGludGVybmFsbG9ja05ldXRyaW5vAAAAAwAAAAFpAAAACHJlY2VpdmVyAAAABXNoYXJlBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAACHJlY2VpdmVyCQAAAgAAAAEJAAEsAAAAAgIAAAAXSW52YWxpZCBhZGRyZXNzIGZvcm1hdCAFAAAACHJlY2VpdmVyAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAQY2FuIHVzZSB1c2Qgb25seQMJAABmAAAAAgUAAAAFc2hhcmUAAAAAAAAAAGQJAAACAAAAAQIAAAAwc3Rha2luZyByZXdhcmRzIHNoYXJlIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiAxMDAlAwkAAGYAAAACAAAAAAAAAAABBQAAAAVzaGFyZQkAAAIAAAABAgAAAC1zdGFraW5nIHJld2FyZHMgc2hhcmUgY2Fubm90IGJlIGxvd2VyIHRoYW4gMSUEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA1hc3NldElkU3RyaW5nCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAANY3VycmVudENvbmZpZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAGmdldEN1cnJlbnRSZXdhcmRzQ29uZmlnS2V5AAAAAQUAAAAHYWNjb3VudAQAAAALY29ycmVjdERhdGEDCQEAAAACIT0AAAACBQAAAA1jdXJyZW50Q29uZmlnAgAAAAAEAAAAEWN1cnJlbnRDb25maWdEYXRhCQAEtQAAAAIFAAAADWN1cnJlbnRDb25maWcCAAAAAV8EAAAACWN1cnJTaGFyZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEWN1cnJlbnRDb25maWdEYXRhAAAAAAAAAAACBAAAAAxjdXJyUmVjZWl2ZXIJAAGRAAAAAgUAAAARY3VycmVudENvbmZpZ0RhdGEAAAAAAAAAAAMEAAAAF25vdE1pZ3JhdGVkSW5pdGlhbFNoYXJlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAbZ2V0UmV3YXJkQ29uZmlnSW5pdGlhbFNoYXJlAAAAAQUAAAAHYWNjb3VudAQAAAASYWN0dWFsSW5pdGlhbFNoYXJlAwkAAAAAAAACBQAAABdub3RNaWdyYXRlZEluaXRpYWxTaGFyZQAAAAAAAAAAAAUAAAAJY3VyclNoYXJlBQAAABdub3RNaWdyYXRlZEluaXRpYWxTaGFyZQQAAAAIbmV3U2hhcmUDAwkAAGYAAAACBQAAABJhY3R1YWxJbml0aWFsU2hhcmUFAAAABXNoYXJlBgkBAAAAAiE9AAAAAgUAAAAMY3VyclJlY2VpdmVyBQAAAAhyZWNlaXZlcgUAAAASYWN0dWFsSW5pdGlhbFNoYXJlBQAAAAVzaGFyZQkABEwAAAACCQABpAAAAAEFAAAAEmFjdHVhbEluaXRpYWxTaGFyZQkABEwAAAACCQABpAAAAAEFAAAACG5ld1NoYXJlCQAETAAAAAIFAAAADGN1cnJSZWNlaXZlcgUAAAADbmlsCQAETAAAAAIJAAGkAAAAAQUAAAAFc2hhcmUJAARMAAAAAgkAAaQAAAABBQAAAAVzaGFyZQkABEwAAAACBQAAAAhyZWNlaXZlcgUAAAADbmlsBAAAABNjb3JyZWN0SW5pdGlhbFNoYXJlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALY29ycmVjdERhdGEAAAAAAAAAAAAEAAAADGNvcnJlY3RTaGFyZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2NvcnJlY3REYXRhAAAAAAAAAAABBAAAAA9jb3JyZWN0UmVjZWl2ZXIJAAGRAAAAAgUAAAALY29ycmVjdERhdGEAAAAAAAAAAAIEAAAAEG5ld0N1cnJlbnRDb25maWcJAQAAABNnZXRSZXdhcmRzQ29uZmlnS2V5AAAAAwUAAAAHYWNjb3VudAUAAAAMY29ycmVjdFNoYXJlBQAAAA9jb3JyZWN0UmVjZWl2ZXIEAAAAC2lzTmV3Q29uZmlnCQEAAAABIQAAAAEJAAAAAAAAAgUAAAANY3VycmVudENvbmZpZwUAAAAQbmV3Q3VycmVudENvbmZpZwQAAAADZW5kAwUAAAALaXNOZXdDb25maWcFAAAABmhlaWdodAAAAAAAAAAAAAQAAAAFc3RhcnQDBQAAAAtpc05ld0NvbmZpZwUAAAAGaGVpZ2h0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0UmV3YXJkc0NvbmZpZ1N0YXJ0S2V5AAAAAgUAAAAQbmV3Q3VycmVudENvbmZpZwYJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAA1hc3NldElkU3RyaW5nCQAAZAAAAAIJAQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABBQAAAA1hc3NldElkU3RyaW5nCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwkAAGQAAAACCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIFAAAADWN1cnJlbnRDb25maWcHBQAAAANlbmQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRSZXdhcmRzQ29uZmlnU3RhcnRLZXkAAAACBQAAABBuZXdDdXJyZW50Q29uZmlnBgUAAAAFc3RhcnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABtnZXRSZXdhcmRDb25maWdJbml0aWFsU2hhcmUAAAABBQAAAAdhY2NvdW50BQAAABNjb3JyZWN0SW5pdGlhbFNoYXJlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAaZ2V0Q3VycmVudFJld2FyZHNDb25maWdLZXkAAAABBQAAAAdhY2NvdW50BQAAABBuZXdDdXJyZW50Q29uZmlnBQAAAANuaWwAAAAFAAAAAWkBAAAADmxvY2tOZXV0cmlub1NQAAAAAgAAAAhyZWNlaXZlcgAAAAVzaGFyZQkBAAAAFGludGVybmFsbG9ja05ldXRyaW5vAAAAAwUAAAABaQUAAAAIcmVjZWl2ZXIFAAAABXNoYXJlAAAAAWkBAAAADGxvY2tOZXV0cmlubwAAAAAJAQAAABRpbnRlcm5hbGxvY2tOZXV0cmlubwAAAAMFAAAAAWkJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAABkAAAAAWkBAAAADnVubG9ja05ldXRyaW5vAAAAAgAAAAx1bmxvY2tBbW91bnQAAAANYXNzZXRJZFN0cmluZwQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAANYXNzZXRJZFN0cmluZwQAAAAHYmFsYW5jZQkAAGUAAAACCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAx1bmxvY2tBbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAB2JhbGFuY2UJAAACAAAAAQIAAAAOaW52YWxpZCBhbW91bnQDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAQY2FuIHVzZSBuZXV0cmlubwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAA1hc3NldElkU3RyaW5nCQAAZQAAAAIJAQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABBQAAAA1hc3NldElkU3RyaW5nBQAAAAx1bmxvY2tBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAADWFzc2V0SWRTdHJpbmcFAAAAB2JhbGFuY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQFAAAADHVubG9ja0Ftb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAAEdm90ZQAAAAIAAAAEaGFzaAAAAA1pbmRleEFyZ3VtZW50BAAAAAlhcmd1bWVudHMJAAS1AAAAAgkBAAAAFGdldEFyZ3VtZW50c1Byb3Bvc2FsAAAAAQUAAAAEaGFzaAIAAAABLAQAAAAIYXJndW1lbnQJAAGRAAAAAgUAAAAJYXJndW1lbnRzBQAAAA1pbmRleEFyZ3VtZW50AwkAAGYAAAACBQAAAAZoZWlnaHQJAQAAABFnZXRFeHBpcmVQcm9wb3NhbAAAAAEFAAAABGhhc2gJAAACAAAAAQIAAAATcHJvcG9zYWwgaXMgZXhwaXJlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAACmdldFZvdGVLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEaGFzaAUAAAAIYXJndW1lbnQFAAAAA25pbAAAAAFpAQAAAA5jcmVhdGVQcm9wb3NhbAAAAAIAAAAJYXJndW1lbnRzAAAADGV4cGFpckhlaWdodAQAAAAEaGFzaAkAAlgAAAABCQAB9QAAAAEJAADLAAAAAgkAAMsAAAACCQABmwAAAAEFAAAACWFyZ3VtZW50cwkAAZoAAAABBQAAAAxleHBhaXJIZWlnaHQIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAIhPQAAAAIJAQAAABBnZXRPd25lclByb3Bvc2FsAAAAAQUAAAAEaGFzaAIAAAAACQAAAgAAAAECAAAAEXByb3Bvc2FsIGlzIGV4aXN0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAUZ2V0RXhwaXJlUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoBQAAAAxleHBhaXJIZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRPd25lclByb3Bvc2FsS2V5AAAAAQUAAAAEaGFzaAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRBcmd1bWVudHNQcm9wb3NhbEtleQAAAAEFAAAABGhhc2gFAAAACWFyZ3VtZW50cwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAQcHViS2V5QWRtaW5zTGlzdAkABEwAAAACAgAAACxHWHhtWmFDaWdQZ0pzVDZkMWNMcjhuVVhBNjVuR1g4VjdGdUF6enJZOHdRRQkABEwAAAACAgAAACwzeHVteDRoclBwZWVvbzc5SExHYlpDZ2Z6OTVMMzlaRmR4eHdXZVNVQzJQdQkABEwAAAACAgAAACxENENxdEs1ZkJzbnpSbzMzWk1ock03bmlMc2VESDJ1Um9LNndlQnEySlEzQQkABEwAAAACAgAAACw1V1JYRlNqd2NUYk5mS2NKczhacVhtU1NXWXNTVkpVdE12TXFaajVoSDROYwUAAAADbmlsBAAAAAVjb3VudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAACCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAgAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAADCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAwAAAAAAAAAAAgAAAAAAAAAAAAkAAGcAAAACBQAAAAVjb3VudAAAAAAAAAAAA5prEK0=", "chainId": 84, "height": 1060694, "spentComplexity": 0 } View: original | compacted Prev: Am1Mij1MTChkQxtRM5XkLQnNtGXRMbF99ANdU1tApifC Next: HTtb5e81YPeffXk8dDBFQVa6G3okczaShFmUQNx81iz7 Diff:
OldNewDifferences
107107 else "_end"))
108108
109109
110+func getRewardConfigInitialShare (owner) = (owner + "_initialShare")
111+
112+
110113 func internallockNeutrino (i,receiver,share) = {
111114 let pmt = extract(i.payment)
112115 if (!(isDefined(addressFromString(receiver))))
121124 let account = toString(i.caller)
122125 let assetIdString = toBase58String(value(pmt.assetId))
123126 let currentConfig = getStringByKey(getCurrentRewardsConfigKey(account))
124- let newCurrentConfig = getRewardsConfigKey(account, share, receiver)
127+ let correctData = if ((currentConfig != ""))
128+ then {
129+ let currentConfigData = split(currentConfig, "_")
130+ let currShare = parseIntValue(currentConfigData[2])
131+ let currReceiver = currentConfigData[3]
132+ let notMigratedInitialShare = getNumberByKey(getRewardConfigInitialShare(account))
133+ let actualInitialShare = if ((notMigratedInitialShare == 0))
134+ then currShare
135+ else notMigratedInitialShare
136+ let newShare = if (if ((actualInitialShare > share))
137+ then true
138+ else (currReceiver != receiver))
139+ then actualInitialShare
140+ else share
141+[toString(actualInitialShare), toString(newShare), currReceiver]
142+ }
143+ else [toString(share), toString(share), receiver]
144+ let correctInitialShare = parseIntValue(correctData[0])
145+ let correctShare = parseIntValue(correctData[1])
146+ let correctReceiver = correctData[2]
147+ let newCurrentConfig = getRewardsConfigKey(account, correctShare, correctReceiver)
125148 let isNewConfig = !((currentConfig == newCurrentConfig))
126149 let end = if (isNewConfig)
127150 then height
129152 let start = if (isNewConfig)
130153 then height
131154 else getNumberByKey(getRewardsConfigStartKey(newCurrentConfig, true))
132- WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), DataEntry(getRewardsConfigStartKey(currentConfig, false), end), DataEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), DataEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)])
155+ WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), DataEntry(getRewardsConfigStartKey(currentConfig, false), end), DataEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), DataEntry(getRewardConfigInitialShare(account), correctInitialShare), DataEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)])
133156 }
134157 }
135158
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(address, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 let NeutrinoAssetIdKey = "neutrino_asset_id"
4545
4646 let NeutrinoContractKey = "neutrino_contract"
4747
4848 let BalanceKey = "rpd_balance"
4949
5050 let ControlContractKey = "control_contract"
5151
5252 let AdminsKey = "admins"
5353
5454 func getUserBalanceKey (owner,assetId) = ((((BalanceKey + "_") + assetId) + "_") + owner)
5555
5656
5757 func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
5858
5959
6060 func getExpireProposalKey (hash) = (("proposal_expire" + "_") + hash)
6161
6262
6363 func getOwnerProposalKey (hash) = (("proposal_owner" + "_") + hash)
6464
6565
6666 func getArgumentsProposalKey (hash) = (("proposal_arguments" + "_") + hash)
6767
6868
6969 func getVoteKey (owner,hash) = (((("proposal_vote" + "_") + owner) + "_") + hash)
7070
7171
7272 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
7373
7474
7575 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
7676
7777 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
7878
7979 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
8080
8181 func getContractBalance (assetId) = getNumberByKey(getContractBalanceKey(assetId))
8282
8383
8484 func getUserBalance (owner,assetId) = getNumberByKey(getUserBalanceKey(owner, assetId))
8585
8686
8787 func getExpireProposal (hash) = getNumberByKey(getExpireProposalKey(hash))
8888
8989
9090 func getOwnerProposal (hash) = getStringByKey(getOwnerProposalKey(hash))
9191
9292
9393 func getArgumentsProposal (hash) = getStringByKey(getArgumentsProposalKey(hash))
9494
9595
9696 func getVote (owner,hash) = getStringByKey(getVoteKey(owner, hash))
9797
9898
9999 func getRewardsConfigKey (owner,share,receiver) = ((((("stakingconfig_" + owner) + "_") + toString(share)) + "_") + receiver)
100100
101101
102102 func getCurrentRewardsConfigKey (owner) = ("stakingconfig_current_" + owner)
103103
104104
105105 func getRewardsConfigStartKey (configKey,isStart) = (configKey + (if (isStart)
106106 then "_start"
107107 else "_end"))
108108
109109
110+func getRewardConfigInitialShare (owner) = (owner + "_initialShare")
111+
112+
110113 func internallockNeutrino (i,receiver,share) = {
111114 let pmt = extract(i.payment)
112115 if (!(isDefined(addressFromString(receiver))))
113116 then throw(("Invalid address format " + receiver))
114117 else if ((pmt.assetId != neutrinoAssetId))
115118 then throw("can use usd only")
116119 else if ((share > 100))
117120 then throw("staking rewards share cannot be higher than 100%")
118121 else if ((1 > share))
119122 then throw("staking rewards share cannot be lower than 1%")
120123 else {
121124 let account = toString(i.caller)
122125 let assetIdString = toBase58String(value(pmt.assetId))
123126 let currentConfig = getStringByKey(getCurrentRewardsConfigKey(account))
124- let newCurrentConfig = getRewardsConfigKey(account, share, receiver)
127+ let correctData = if ((currentConfig != ""))
128+ then {
129+ let currentConfigData = split(currentConfig, "_")
130+ let currShare = parseIntValue(currentConfigData[2])
131+ let currReceiver = currentConfigData[3]
132+ let notMigratedInitialShare = getNumberByKey(getRewardConfigInitialShare(account))
133+ let actualInitialShare = if ((notMigratedInitialShare == 0))
134+ then currShare
135+ else notMigratedInitialShare
136+ let newShare = if (if ((actualInitialShare > share))
137+ then true
138+ else (currReceiver != receiver))
139+ then actualInitialShare
140+ else share
141+[toString(actualInitialShare), toString(newShare), currReceiver]
142+ }
143+ else [toString(share), toString(share), receiver]
144+ let correctInitialShare = parseIntValue(correctData[0])
145+ let correctShare = parseIntValue(correctData[1])
146+ let correctReceiver = correctData[2]
147+ let newCurrentConfig = getRewardsConfigKey(account, correctShare, correctReceiver)
125148 let isNewConfig = !((currentConfig == newCurrentConfig))
126149 let end = if (isNewConfig)
127150 then height
128151 else 0
129152 let start = if (isNewConfig)
130153 then height
131154 else getNumberByKey(getRewardsConfigStartKey(newCurrentConfig, true))
132- WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), DataEntry(getRewardsConfigStartKey(currentConfig, false), end), DataEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), DataEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)])
155+ WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), DataEntry(getRewardsConfigStartKey(currentConfig, false), end), DataEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), DataEntry(getRewardConfigInitialShare(account), correctInitialShare), DataEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)])
133156 }
134157 }
135158
136159
137160 @Callable(i)
138161 func lockNeutrinoSP (receiver,share) = internallockNeutrino(i, receiver, share)
139162
140163
141164
142165 @Callable(i)
143166 func lockNeutrino () = internallockNeutrino(i, toString(i.caller), 100)
144167
145168
146169
147170 @Callable(i)
148171 func unlockNeutrino (unlockAmount,assetIdString) = {
149172 let account = toString(i.caller)
150173 let assetId = fromBase58String(assetIdString)
151174 let balance = (getUserBalance(account, assetIdString) - unlockAmount)
152175 if ((0 > balance))
153176 then throw("invalid amount")
154177 else if ((assetId != neutrinoAssetId))
155178 then throw("can use neutrino")
156179 else ScriptResult(WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), DataEntry(getUserBalanceKey(account, assetIdString), balance)]), TransferSet([ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]))
157180 }
158181
159182
160183
161184 @Callable(i)
162185 func vote (hash,indexArgument) = {
163186 let arguments = split(getArgumentsProposal(hash), ",")
164187 let argument = arguments[indexArgument]
165188 if ((height > getExpireProposal(hash)))
166189 then throw("proposal is expired")
167190 else WriteSet([DataEntry(getVoteKey(toString(i.caller), hash), argument)])
168191 }
169192
170193
171194
172195 @Callable(i)
173196 func createProposal (arguments,expairHeight) = {
174197 let hash = toBase58String(keccak256(((toBytes(arguments) + toBytes(expairHeight)) + i.callerPublicKey)))
175198 if ((getOwnerProposal(hash) != ""))
176199 then throw("proposal is exist")
177200 else WriteSet([DataEntry(getExpireProposalKey(hash), expairHeight), DataEntry(getOwnerProposalKey(hash), toString(i.caller)), DataEntry(getArgumentsProposalKey(hash), arguments)])
178201 }
179202
180203
181204 @Verifier(tx)
182205 func verify () = {
183206 let pubKeyAdminsList = ["GXxmZaCigPgJsT6d1cLr8nUXA65nGX8V7FuAzzrY8wQE", "3xumx4hrPpeeoo79HLGbZCgfz95L39ZFdxxwWeSUC2Pu", "D4CqtK5fBsnzRo33ZMhrM7niLseDH2uRoK6weBq2JQ3A", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
184207 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
185208 then 1
186209 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
187210 then 1
188211 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
189212 then 1
190213 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
191214 then 2
192215 else 0))
193216 (count >= 3)
194217 }
195218

github/deemru/w8io/873ac7e 
53.86 ms