2020.09.07 06:30 [2230049] smart account 3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ > SELF 0.00000000 Waves

{ "type": 13, "id": "53nvN76T5dbK5h1TV6KUwLab22YSy91pDmryDCTsLCZg", "fee": 14000000, "feeAssetId": null, "timestamp": 1599451253682, "version": 1, "sender": "3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ", "senderPublicKey": "6E2n1DAd4jnydbL7hMWLtjfW6VKrAGnFrNzfddAUnWq7", "proofs": [ "", "2L2PF4LsF7gGg9CmwjWP35XU7aXp2RKRbEgaWbsNx8Bx7GzJAriTFoL6aQWSo5c328K21SDh6RtDwSi9hSET3aYN", "", "361jWq4qyzv5oASkj2cyM25Sadikd4RUdh9wECxbLtkwN1FPM1RZaETxZqFC3KproDSqB538Bd9kTDCdYQ34Gv1B" ], "script": "base64:AAIEAAAAAAAAABwIAhIECgIIARIAEgQKAgEIEgQKAggBEgQKAggBAAAAHwEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AAAAAAAAAAAAAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQIAAAAAAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAABNOZXV0cmlub0NvbnRyYWN0S2V5AgAAABFuZXV0cmlub19jb250cmFjdAAAAAAKQmFsYW5jZUtleQIAAAALcnBkX2JhbGFuY2UAAAAAEkNvbnRyb2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAAJQWRtaW5zS2V5AgAAAAZhZG1pbnMBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgAAAAVvd25lcgAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACkJhbGFuY2VLZXkCAAAAAV8FAAAAB2Fzc2V0SWQCAAAAAV8FAAAABW93bmVyAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACBQAAAApCYWxhbmNlS2V5AgAAAAFfBQAAAAdhc3NldElkAQAAABRnZXRFeHBpcmVQcm9wb3NhbEtleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAAD3Byb3Bvc2FsX2V4cGlyZQIAAAABXwUAAAAEaGFzaAEAAAATZ2V0T3duZXJQcm9wb3NhbEtleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAADnByb3Bvc2FsX293bmVyAgAAAAFfBQAAAARoYXNoAQAAABdnZXRBcmd1bWVudHNQcm9wb3NhbEtleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAAEnByb3Bvc2FsX2FyZ3VtZW50cwIAAAABXwUAAAAEaGFzaAEAAAAKZ2V0Vm90ZUtleQAAAAIAAAAFb3duZXIAAAAEaGFzaAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1wcm9wb3NhbF92b3RlAgAAAAFfBQAAAAVvd25lcgIAAAABXwUAAAAEaGFzaAEAAAAWY29udmVydEpzb25BcnJheVRvTGlzdAAAAAEAAAAJanNvbkFycmF5CQAEtQAAAAIFAAAACWpzb25BcnJheQIAAAABLAAAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAATTmV1dHJpbm9Db250cmFjdEtleQAAAAAPY29udHJvbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASQ29udHJvbENvbnRyYWN0S2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEk5ldXRyaW5vQXNzZXRJZEtleQEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQAAAAdhc3NldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAEAAAAOZ2V0VXNlckJhbGFuY2UAAAACAAAABW93bmVyAAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAABW93bmVyBQAAAAdhc3NldElkAQAAABFnZXRFeHBpcmVQcm9wb3NhbAAAAAEAAAAEaGFzaAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGdldEV4cGlyZVByb3Bvc2FsS2V5AAAAAQUAAAAEaGFzaAEAAAAQZ2V0T3duZXJQcm9wb3NhbAAAAAEAAAAEaGFzaAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAE2dldE93bmVyUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoAQAAABRnZXRBcmd1bWVudHNQcm9wb3NhbAAAAAEAAAAEaGFzaAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAF2dldEFyZ3VtZW50c1Byb3Bvc2FsS2V5AAAAAQUAAAAEaGFzaAEAAAAHZ2V0Vm90ZQAAAAIAAAAFb3duZXIAAAAEaGFzaAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmdldFZvdGVLZXkAAAACBQAAAAVvd25lcgUAAAAEaGFzaAEAAAATZ2V0UmV3YXJkc0NvbmZpZ0tleQAAAAMAAAAFb3duZXIAAAAFc2hhcmUAAAAIcmVjZWl2ZXIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA5zdGFraW5nY29uZmlnXwUAAAAFb3duZXICAAAAAV8JAAGkAAAAAQUAAAAFc2hhcmUCAAAAAV8FAAAACHJlY2VpdmVyAQAAABpnZXRDdXJyZW50UmV3YXJkc0NvbmZpZ0tleQAAAAEAAAAFb3duZXIJAAEsAAAAAgIAAAAWc3Rha2luZ2NvbmZpZ19jdXJyZW50XwUAAAAFb3duZXIBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIAAAAJY29uZmlnS2V5AAAAB2lzU3RhcnQJAAEsAAAAAgUAAAAJY29uZmlnS2V5AwUAAAAHaXNTdGFydAIAAAAGX3N0YXJ0AgAAAARfZW5kAQAAABtnZXRSZXdhcmRDb25maWdJbml0aWFsU2hhcmUAAAABAAAABW93bmVyCQABLAAAAAIFAAAABW93bmVyAgAAAA1faW5pdGlhbFNoYXJlAQAAABRpbnRlcm5hbGxvY2tOZXV0cmlubwAAAAMAAAABaQAAAAhyZWNlaXZlcgAAAAVzaGFyZQQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAAAhyZWNlaXZlcgkAAAIAAAABCQABLAAAAAICAAAAF0ludmFsaWQgYWRkcmVzcyBmb3JtYXQgBQAAAAhyZWNlaXZlcgMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAAEGNhbiB1c2UgdXNkIG9ubHkDCQAAZgAAAAIFAAAABXNoYXJlAAAAAAAAAABkCQAAAgAAAAECAAAAMHN0YWtpbmcgcmV3YXJkcyBzaGFyZSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gMTAwJQMJAABmAAAAAgAAAAAAAAAAAQUAAAAFc2hhcmUJAAACAAAAAQIAAAAtc3Rha2luZyByZXdhcmRzIHNoYXJlIGNhbm5vdCBiZSBsb3dlciB0aGFuIDElBAAAAAdhY2NvdW50CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANYXNzZXRJZFN0cmluZwkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADWN1cnJlbnRDb25maWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABpnZXRDdXJyZW50UmV3YXJkc0NvbmZpZ0tleQAAAAEFAAAAB2FjY291bnQEAAAAC2NvcnJlY3REYXRhAwkBAAAAAiE9AAAAAgUAAAANY3VycmVudENvbmZpZwIAAAAABAAAABFjdXJyZW50Q29uZmlnRGF0YQkABLUAAAACBQAAAA1jdXJyZW50Q29uZmlnAgAAAAFfBAAAAAljdXJyU2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyZW50Q29uZmlnRGF0YQAAAAAAAAAAAgQAAAAMY3VyclJlY2VpdmVyCQABkQAAAAIFAAAAEWN1cnJlbnRDb25maWdEYXRhAAAAAAAAAAADBAAAABdub3RNaWdyYXRlZEluaXRpYWxTaGFyZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAG2dldFJld2FyZENvbmZpZ0luaXRpYWxTaGFyZQAAAAEFAAAAB2FjY291bnQEAAAAEmFjdHVhbEluaXRpYWxTaGFyZQMJAAAAAAAAAgUAAAAXbm90TWlncmF0ZWRJbml0aWFsU2hhcmUAAAAAAAAAAAAFAAAACWN1cnJTaGFyZQUAAAAXbm90TWlncmF0ZWRJbml0aWFsU2hhcmUEAAAACG5ld1NoYXJlAwMJAABmAAAAAgUAAAASYWN0dWFsSW5pdGlhbFNoYXJlBQAAAAVzaGFyZQYJAQAAAAIhPQAAAAIFAAAADGN1cnJSZWNlaXZlcgUAAAAIcmVjZWl2ZXIFAAAAEmFjdHVhbEluaXRpYWxTaGFyZQUAAAAFc2hhcmUJAARMAAAAAgkAAaQAAAABBQAAABJhY3R1YWxJbml0aWFsU2hhcmUJAARMAAAAAgkAAaQAAAABBQAAAAhuZXdTaGFyZQkABEwAAAACBQAAAAxjdXJyUmVjZWl2ZXIFAAAAA25pbAkABEwAAAACCQABpAAAAAEFAAAABXNoYXJlCQAETAAAAAIJAAGkAAAAAQUAAAAFc2hhcmUJAARMAAAAAgUAAAAIcmVjZWl2ZXIFAAAAA25pbAQAAAATY29ycmVjdEluaXRpYWxTaGFyZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2NvcnJlY3REYXRhAAAAAAAAAAAABAAAAAxjb3JyZWN0U2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAtjb3JyZWN0RGF0YQAAAAAAAAAAAQQAAAAPY29ycmVjdFJlY2VpdmVyCQABkQAAAAIFAAAAC2NvcnJlY3REYXRhAAAAAAAAAAACBAAAABBuZXdDdXJyZW50Q29uZmlnCQEAAAATZ2V0UmV3YXJkc0NvbmZpZ0tleQAAAAMFAAAAB2FjY291bnQFAAAADGNvcnJlY3RTaGFyZQUAAAAPY29ycmVjdFJlY2VpdmVyBAAAAAtpc05ld0NvbmZpZwkBAAAAASEAAAABCQAAAAAAAAIFAAAADWN1cnJlbnRDb25maWcFAAAAEG5ld0N1cnJlbnRDb25maWcEAAAAA2VuZAMFAAAAC2lzTmV3Q29uZmlnBQAAAAZoZWlnaHQAAAAAAAAAAAAEAAAABXN0YXJ0AwUAAAALaXNOZXdDb25maWcFAAAABmhlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIFAAAAEG5ld0N1cnJlbnRDb25maWcGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAANYXNzZXRJZFN0cmluZwkAAGQAAAACCQEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQUAAAANYXNzZXRJZFN0cmluZwgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAADWFzc2V0SWRTdHJpbmcJAABkAAAAAgkBAAAADmdldFVzZXJCYWxhbmNlAAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRSZXdhcmRzQ29uZmlnU3RhcnRLZXkAAAACBQAAAA1jdXJyZW50Q29uZmlnBwUAAAADZW5kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAYZ2V0UmV3YXJkc0NvbmZpZ1N0YXJ0S2V5AAAAAgUAAAAQbmV3Q3VycmVudENvbmZpZwYFAAAABXN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0UmV3YXJkQ29uZmlnSW5pdGlhbFNoYXJlAAAAAQUAAAAHYWNjb3VudAUAAAATY29ycmVjdEluaXRpYWxTaGFyZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaZ2V0Q3VycmVudFJld2FyZHNDb25maWdLZXkAAAABBQAAAAdhY2NvdW50BQAAABBuZXdDdXJyZW50Q29uZmlnBQAAAANuaWwAAAAFAAAAAWkBAAAADmxvY2tOZXV0cmlub1NQAAAAAgAAAAhyZWNlaXZlcgAAAAVzaGFyZQkBAAAAFGludGVybmFsbG9ja05ldXRyaW5vAAAAAwUAAAABaQUAAAAIcmVjZWl2ZXIFAAAABXNoYXJlAAAAAWkBAAAADGxvY2tOZXV0cmlubwAAAAAJAQAAABRpbnRlcm5hbGxvY2tOZXV0cmlubwAAAAMFAAAAAWkJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAABkAAAAAWkBAAAADnVubG9ja05ldXRyaW5vAAAAAgAAAAx1bmxvY2tBbW91bnQAAAANYXNzZXRJZFN0cmluZwQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAANYXNzZXRJZFN0cmluZwQAAAAHYmFsYW5jZQkAAGUAAAACCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAx1bmxvY2tBbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAB2JhbGFuY2UJAAACAAAAAQIAAAAOaW52YWxpZCBhbW91bnQDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAAQY2FuIHVzZSBuZXV0cmlubwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldENvbnRyYWN0QmFsYW5jZUtleQAAAAEFAAAADWFzc2V0SWRTdHJpbmcJAABlAAAAAgkBAAAAEmdldENvbnRyYWN0QmFsYW5jZQAAAAEFAAAADWFzc2V0SWRTdHJpbmcFAAAADHVubG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwUAAAAHYmFsYW5jZQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhY2NvdW50BQAAAAx1bmxvY2tBbW91bnQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAABHZvdGUAAAACAAAABGhhc2gAAAANaW5kZXhBcmd1bWVudAQAAAAJYXJndW1lbnRzCQAEtQAAAAIJAQAAABRnZXRBcmd1bWVudHNQcm9wb3NhbAAAAAEFAAAABGhhc2gCAAAAASwEAAAACGFyZ3VtZW50CQABkQAAAAIFAAAACWFyZ3VtZW50cwUAAAANaW5kZXhBcmd1bWVudAMJAABmAAAAAgUAAAAGaGVpZ2h0CQEAAAARZ2V0RXhwaXJlUHJvcG9zYWwAAAABBQAAAARoYXNoCQAAAgAAAAECAAAAE3Byb3Bvc2FsIGlzIGV4cGlyZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmdldFZvdGVLZXkAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEaGFzaAUAAAAIYXJndW1lbnQFAAAAA25pbAAAAAFpAQAAAA5jcmVhdGVQcm9wb3NhbAAAAAIAAAAJYXJndW1lbnRzAAAADGV4cGFpckhlaWdodAQAAAAEaGFzaAkAAlgAAAABCQAB9QAAAAEJAADLAAAAAgkAAMsAAAACCQABmwAAAAEFAAAACWFyZ3VtZW50cwkAAZoAAAABBQAAAAxleHBhaXJIZWlnaHQIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAIhPQAAAAIJAQAAABBnZXRPd25lclByb3Bvc2FsAAAAAQUAAAAEaGFzaAIAAAAACQAAAgAAAAECAAAAEXByb3Bvc2FsIGlzIGV4aXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAUZ2V0RXhwaXJlUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoBQAAAAxleHBhaXJIZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2dldE93bmVyUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAXZ2V0QXJndW1lbnRzUHJvcG9zYWxLZXkAAAABBQAAAARoYXNoBQAAAAlhcmd1bWVudHMFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEHB1YktleUFkbWluc0xpc3QJAARMAAAAAgIAAAAsQkxFb2d1elBWS1ZUZlh4eFQzVzdScWY4YVVtMmdnQzlWZW1kMk1RYXdNMkcJAARMAAAAAgIAAAAsRldWZmZZcjJBTG1ITWVqWm0zV3FlTHo2U2R5bTNnTEZHdEpuNEtUd3lVNXgJAARMAAAAAgIAAAAsM1doMkxhV2NiNWdnN0sycFBjVzNFcDZFQXVSQnpZa0FncmRwdDQzalRERmEJAARMAAAAAgIAAAAsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFAAAAA25pbAQAAAAFY291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAwkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAMAAAAAAAAAAAIAAAAAAAAAAAAJAABnAAAAAgUAAAAFY291bnQAAAAAAAAAAAMuZSN1", "chainId": 87, "height": 2230049, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FKtZsnUBieo13BVgxL8adThsF4yU63Yt1qZeicfosDcR Next: 5ZEv9K5bA6u8BZC7jkUyGTWeZX6MMLevHZ9VHzWTNjtd Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getNumberByKey (key) = match getInteger(this, key) {
5- case a: Int =>
6- a
7- case _ =>
8- 0
9-}
4+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
105
116
12-func getStringByKey (key) = match getString(this, key) {
13- case a: String =>
14- a
15- case _ =>
16- ""
17-}
7+func getStringByKey (key) = valueOrElse(getString(this, key), "")
188
199
20-func getBoolByKey (key) = match getBoolean(this, key) {
21- case a: Boolean =>
22- a
23- case _ =>
24- false
25-}
10+func getBoolByKey (key) = valueOrElse(getBoolean(this, key), false)
2611
2712
28-func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
29- case a: Int =>
30- a
31- case _ =>
32- 0
33-}
13+func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
3414
3515
36-func getStringByAddressAndKey (address,key) = match getString(address, key) {
37- case a: String =>
38- a
39- case _ =>
40- ""
41-}
16+func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
4217
4318
4419 let NeutrinoAssetIdKey = "neutrino_asset_id"
11186
11287
11388 func internallockNeutrino (i,receiver,share) = {
114- let pmt = extract(i.payment)
89+ let pmt = value(i.payments[0])
11590 if (!(isDefined(addressFromString(receiver))))
11691 then throw(("Invalid address format " + receiver))
11792 else if ((pmt.assetId != neutrinoAssetId))
152127 let start = if (isNewConfig)
153128 then height
154129 else getNumberByKey(getRewardsConfigStartKey(newCurrentConfig, true))
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)])
130+[IntegerEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), IntegerEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), IntegerEntry(getRewardsConfigStartKey(currentConfig, false), end), IntegerEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), IntegerEntry(getRewardConfigInitialShare(account), correctInitialShare), StringEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)]
156131 }
157132 }
158133
176151 then throw("invalid amount")
177152 else if ((assetId != neutrinoAssetId))
178153 then throw("can use neutrino")
179- else ScriptResult(WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), DataEntry(getUserBalanceKey(account, assetIdString), balance)]), TransferSet([ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]))
154+ else [IntegerEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), IntegerEntry(getUserBalanceKey(account, assetIdString), balance), ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]
180155 }
181156
182157
187162 let argument = arguments[indexArgument]
188163 if ((height > getExpireProposal(hash)))
189164 then throw("proposal is expired")
190- else WriteSet([DataEntry(getVoteKey(toString(i.caller), hash), argument)])
165+ else [StringEntry(getVoteKey(toString(i.caller), hash), argument)]
191166 }
192167
193168
197172 let hash = toBase58String(keccak256(((toBytes(arguments) + toBytes(expairHeight)) + i.callerPublicKey)))
198173 if ((getOwnerProposal(hash) != ""))
199174 then throw("proposal is exist")
200- else WriteSet([DataEntry(getExpireProposalKey(hash), expairHeight), DataEntry(getOwnerProposalKey(hash), toString(i.caller)), DataEntry(getArgumentsProposalKey(hash), arguments)])
175+ else [IntegerEntry(getExpireProposalKey(hash), expairHeight), StringEntry(getOwnerProposalKey(hash), toString(i.caller)), StringEntry(getArgumentsProposalKey(hash), arguments)]
201176 }
202177
203178
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getNumberByKey (key) = match getInteger(this, key) {
5- case a: Int =>
6- a
7- case _ =>
8- 0
9-}
4+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
105
116
12-func getStringByKey (key) = match getString(this, key) {
13- case a: String =>
14- a
15- case _ =>
16- ""
17-}
7+func getStringByKey (key) = valueOrElse(getString(this, key), "")
188
199
20-func getBoolByKey (key) = match getBoolean(this, key) {
21- case a: Boolean =>
22- a
23- case _ =>
24- false
25-}
10+func getBoolByKey (key) = valueOrElse(getBoolean(this, key), false)
2611
2712
28-func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
29- case a: Int =>
30- a
31- case _ =>
32- 0
33-}
13+func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
3414
3515
36-func getStringByAddressAndKey (address,key) = match getString(address, key) {
37- case a: String =>
38- a
39- case _ =>
40- ""
41-}
16+func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
4217
4318
4419 let NeutrinoAssetIdKey = "neutrino_asset_id"
4520
4621 let NeutrinoContractKey = "neutrino_contract"
4722
4823 let BalanceKey = "rpd_balance"
4924
5025 let ControlContractKey = "control_contract"
5126
5227 let AdminsKey = "admins"
5328
5429 func getUserBalanceKey (owner,assetId) = ((((BalanceKey + "_") + assetId) + "_") + owner)
5530
5631
5732 func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
5833
5934
6035 func getExpireProposalKey (hash) = (("proposal_expire" + "_") + hash)
6136
6237
6338 func getOwnerProposalKey (hash) = (("proposal_owner" + "_") + hash)
6439
6540
6641 func getArgumentsProposalKey (hash) = (("proposal_arguments" + "_") + hash)
6742
6843
6944 func getVoteKey (owner,hash) = (((("proposal_vote" + "_") + owner) + "_") + hash)
7045
7146
7247 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
7348
7449
7550 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
7651
7752 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
7853
7954 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
8055
8156 func getContractBalance (assetId) = getNumberByKey(getContractBalanceKey(assetId))
8257
8358
8459 func getUserBalance (owner,assetId) = getNumberByKey(getUserBalanceKey(owner, assetId))
8560
8661
8762 func getExpireProposal (hash) = getNumberByKey(getExpireProposalKey(hash))
8863
8964
9065 func getOwnerProposal (hash) = getStringByKey(getOwnerProposalKey(hash))
9166
9267
9368 func getArgumentsProposal (hash) = getStringByKey(getArgumentsProposalKey(hash))
9469
9570
9671 func getVote (owner,hash) = getStringByKey(getVoteKey(owner, hash))
9772
9873
9974 func getRewardsConfigKey (owner,share,receiver) = ((((("stakingconfig_" + owner) + "_") + toString(share)) + "_") + receiver)
10075
10176
10277 func getCurrentRewardsConfigKey (owner) = ("stakingconfig_current_" + owner)
10378
10479
10580 func getRewardsConfigStartKey (configKey,isStart) = (configKey + (if (isStart)
10681 then "_start"
10782 else "_end"))
10883
10984
11085 func getRewardConfigInitialShare (owner) = (owner + "_initialShare")
11186
11287
11388 func internallockNeutrino (i,receiver,share) = {
114- let pmt = extract(i.payment)
89+ let pmt = value(i.payments[0])
11590 if (!(isDefined(addressFromString(receiver))))
11691 then throw(("Invalid address format " + receiver))
11792 else if ((pmt.assetId != neutrinoAssetId))
11893 then throw("can use usd only")
11994 else if ((share > 100))
12095 then throw("staking rewards share cannot be higher than 100%")
12196 else if ((1 > share))
12297 then throw("staking rewards share cannot be lower than 1%")
12398 else {
12499 let account = toString(i.caller)
125100 let assetIdString = toBase58String(value(pmt.assetId))
126101 let currentConfig = getStringByKey(getCurrentRewardsConfigKey(account))
127102 let correctData = if ((currentConfig != ""))
128103 then {
129104 let currentConfigData = split(currentConfig, "_")
130105 let currShare = parseIntValue(currentConfigData[2])
131106 let currReceiver = currentConfigData[3]
132107 let notMigratedInitialShare = getNumberByKey(getRewardConfigInitialShare(account))
133108 let actualInitialShare = if ((notMigratedInitialShare == 0))
134109 then currShare
135110 else notMigratedInitialShare
136111 let newShare = if (if ((actualInitialShare > share))
137112 then true
138113 else (currReceiver != receiver))
139114 then actualInitialShare
140115 else share
141116 [toString(actualInitialShare), toString(newShare), currReceiver]
142117 }
143118 else [toString(share), toString(share), receiver]
144119 let correctInitialShare = parseIntValue(correctData[0])
145120 let correctShare = parseIntValue(correctData[1])
146121 let correctReceiver = correctData[2]
147122 let newCurrentConfig = getRewardsConfigKey(account, correctShare, correctReceiver)
148123 let isNewConfig = !((currentConfig == newCurrentConfig))
149124 let end = if (isNewConfig)
150125 then height
151126 else 0
152127 let start = if (isNewConfig)
153128 then height
154129 else getNumberByKey(getRewardsConfigStartKey(newCurrentConfig, true))
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)])
130+[IntegerEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), IntegerEntry(getUserBalanceKey(account, assetIdString), (getUserBalance(account, assetIdString) + pmt.amount)), IntegerEntry(getRewardsConfigStartKey(currentConfig, false), end), IntegerEntry(getRewardsConfigStartKey(newCurrentConfig, true), start), IntegerEntry(getRewardConfigInitialShare(account), correctInitialShare), StringEntry(getCurrentRewardsConfigKey(account), newCurrentConfig)]
156131 }
157132 }
158133
159134
160135 @Callable(i)
161136 func lockNeutrinoSP (receiver,share) = internallockNeutrino(i, receiver, share)
162137
163138
164139
165140 @Callable(i)
166141 func lockNeutrino () = internallockNeutrino(i, toString(i.caller), 100)
167142
168143
169144
170145 @Callable(i)
171146 func unlockNeutrino (unlockAmount,assetIdString) = {
172147 let account = toString(i.caller)
173148 let assetId = fromBase58String(assetIdString)
174149 let balance = (getUserBalance(account, assetIdString) - unlockAmount)
175150 if ((0 > balance))
176151 then throw("invalid amount")
177152 else if ((assetId != neutrinoAssetId))
178153 then throw("can use neutrino")
179- else ScriptResult(WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), DataEntry(getUserBalanceKey(account, assetIdString), balance)]), TransferSet([ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]))
154+ else [IntegerEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), IntegerEntry(getUserBalanceKey(account, assetIdString), balance), ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]
180155 }
181156
182157
183158
184159 @Callable(i)
185160 func vote (hash,indexArgument) = {
186161 let arguments = split(getArgumentsProposal(hash), ",")
187162 let argument = arguments[indexArgument]
188163 if ((height > getExpireProposal(hash)))
189164 then throw("proposal is expired")
190- else WriteSet([DataEntry(getVoteKey(toString(i.caller), hash), argument)])
165+ else [StringEntry(getVoteKey(toString(i.caller), hash), argument)]
191166 }
192167
193168
194169
195170 @Callable(i)
196171 func createProposal (arguments,expairHeight) = {
197172 let hash = toBase58String(keccak256(((toBytes(arguments) + toBytes(expairHeight)) + i.callerPublicKey)))
198173 if ((getOwnerProposal(hash) != ""))
199174 then throw("proposal is exist")
200- else WriteSet([DataEntry(getExpireProposalKey(hash), expairHeight), DataEntry(getOwnerProposalKey(hash), toString(i.caller)), DataEntry(getArgumentsProposalKey(hash), arguments)])
175+ else [IntegerEntry(getExpireProposalKey(hash), expairHeight), StringEntry(getOwnerProposalKey(hash), toString(i.caller)), StringEntry(getArgumentsProposalKey(hash), arguments)]
201176 }
202177
203178
204179 @Verifier(tx)
205180 func verify () = {
206181 let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
207182 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
208183 then 1
209184 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
210185 then 1
211186 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
212187 then 1
213188 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
214189 then 2
215190 else 0))
216191 (count >= 3)
217192 }
218193

github/deemru/w8io/786bc32 
67.35 ms