2022.03.24 19:52 [3043452] smart account 3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ > SELF 0.00000000 Waves

{ "type": 13, "id": "9D7ND3SSUw91TuNBU2KH3As5eUqQMaGYLk6exhBTKi18", "fee": 14000000, "feeAssetId": null, "timestamp": 1648143928031, "version": 1, "sender": "3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ", "senderPublicKey": "6E2n1DAd4jnydbL7hMWLtjfW6VKrAGnFrNzfddAUnWq7", "proofs": [ "5VEVnTUQAHEkUtujYwEamnNyNgCmSMs5j1hcwkLt5vkm5zoXYZtkVDjeyrtZAUXrSESQbVSvtgyuusrkfbBYprxZ", "Vcfk3EANKoLwEzqZAVFZyPje3KxVH8neD8AxLe5AobqNwGgsVpZAavGontqvR455AWDGarF4YjHTb3qA2HJRgqQ", "38k14kzumxzdPhZd4fHv16D8qrjNkZDtNrvsikrSeiVkdcNz43vKHYtdvefxr8PVmQ5WxyHKqopCjEUVs72Q4K9o", "4H63awtBSYrzcNm79yoC7xwsNwnaTztzHpTstMsWv9mzcFgB9xdZ2exU8wPeJFGGCaV211C2JNYtTqCDHCjLj6cZ" ], "script": "base64:AAIFAAAAAAAAAB4IAhIECgIIARIAEgQKAggBEgASBAoCAQgSBAoCAQgAAAAjAAAAAAtyZXZpc2lvbk51bQIAAAAoNTkzMTM4ZDRmZGY1MDM3M2ZkMDQ0ZjhiODM5MWIyOTk0YWYwMDQ5MgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AAAAAAAAAAAAAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQIAAAAAAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAABNOZXV0cmlub0NvbnRyYWN0S2V5AgAAABFuZXV0cmlub19jb250cmFjdAAAAAAKQmFsYW5jZUtleQIAAAALcnBkX2JhbGFuY2UAAAAAEkNvbnRyb2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAAOTnNidEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAACUFkbWluc0tleQIAAAAGYWRtaW5zAAAAAAhVU0ROVFlQRQIAAAAEVVNETgAAAAAITlNCVFRZUEUCAAAABE5TQlQBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgAAAAVvd25lcgAAAAdhc3NldElkCQAEuQAAAAIJAARMAAAAAgUAAAAKQmFsYW5jZUtleQkABEwAAAACBQAAAAdhc3NldElkCQAETAAAAAIFAAAABW93bmVyBQAAAANuaWwCAAAAAV8BAAAAFWdldENvbnRyYWN0QmFsYW5jZUtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAACkJhbGFuY2VLZXkCAAAAAV8FAAAAB2Fzc2V0SWQBAAAAFGdldEV4cGlyZVByb3Bvc2FsS2V5AAAAAQAAAARoYXNoCQABLAAAAAIJAAEsAAAAAgIAAAAPcHJvcG9zYWxfZXhwaXJlAgAAAAFfBQAAAARoYXNoAQAAABNnZXRPd25lclByb3Bvc2FsS2V5AAAAAQAAAARoYXNoCQABLAAAAAIJAAEsAAAAAgIAAAAOcHJvcG9zYWxfb3duZXICAAAAAV8FAAAABGhhc2gBAAAAF2dldEFyZ3VtZW50c1Byb3Bvc2FsS2V5AAAAAQAAAARoYXNoCQABLAAAAAIJAAEsAAAAAgIAAAAScHJvcG9zYWxfYXJndW1lbnRzAgAAAAFfBQAAAARoYXNoAQAAAApnZXRWb3RlS2V5AAAAAgAAAAVvd25lcgAAAARoYXNoCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADXByb3Bvc2FsX3ZvdGUCAAAAAV8FAAAABW93bmVyAgAAAAFfBQAAAARoYXNoAQAAABZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AAAAAQAAAAlqc29uQXJyYXkJAAS1AAAAAgUAAAAJanNvbkFycmF5AgAAAAEsAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABNOZXV0cmlub0NvbnRyYWN0S2V5AAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAABJDb250cm9sQ29udHJhY3RLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA5uc2J0QXNzZXRJZFN0cgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAADk5zYnRBc3NldElkS2V5AAAAAAtuc2J0QXNzZXRJZAkAAlkAAAABBQAAAA5uc2J0QXNzZXRJZFN0cgEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQAAAAdhc3NldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAEAAAAOZ2V0VXNlckJhbGFuY2UAAAACAAAABW93bmVyAAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIFAAAABW93bmVyBQAAAAdhc3NldElkAQAAABNnZXRSZXdhcmRzQ29uZmlnS2V5AAAAAwAAAAVvd25lcgAAAAVzaGFyZQAAAAhyZWNlaXZlcgkABLkAAAACCQAETAAAAAICAAAADXN0YWtpbmdjb25maWcJAARMAAAAAgUAAAAFb3duZXIJAARMAAAAAgkAAaQAAAABBQAAAAVzaGFyZQkABEwAAAACBQAAAAhyZWNlaXZlcgUAAAADbmlsAgAAAAFfAQAAABpnZXRDdXJyZW50UmV3YXJkc0NvbmZpZ0tleQAAAAEAAAAFb3duZXIJAAEsAAAAAgIAAAAWc3Rha2luZ2NvbmZpZ19jdXJyZW50XwUAAAAFb3duZXIBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIAAAAJY29uZmlnS2V5AAAAB2lzU3RhcnQJAAEsAAAAAgUAAAAJY29uZmlnS2V5AwUAAAAHaXNTdGFydAIAAAAGX3N0YXJ0AgAAAARfZW5kAQAAABtnZXRSZXdhcmRDb25maWdJbml0aWFsU2hhcmUAAAABAAAABW93bmVyCQABLAAAAAIFAAAABW93bmVyAgAAAA1faW5pdGlhbFNoYXJlAQAAABpnZXRWYWxpZFN0YWtpbmdBc3NldE9yRmFpbAAAAAIAAAALc3Rha2luZ1R5cGUAAAAHYXNzZXRJZAMDCQAAAAAAAAIFAAAAC3N0YWtpbmdUeXBlBQAAAAhVU0ROVFlQRQkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkBwkAAAIAAAABAgAAABFjYW4gdXNlIFVTRE4gb25seQMDCQAAAAAAAAIFAAAAC3N0YWtpbmdUeXBlBQAAAAhOU0JUVFlQRQkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAUAAAALbnNidEFzc2V0SWQHCQAAAgAAAAECAAAAEWNhbiB1c2UgTlNCVCBvbmx5AwMJAQAAAAIhPQAAAAIFAAAAC3N0YWtpbmdUeXBlBQAAAAhVU0ROVFlQRQkBAAAAAiE9AAAAAgUAAAALc3Rha2luZ1R5cGUFAAAACE5TQlRUWVBFBwkAAAIAAAABCQABLAAAAAICAAAAGXVuc3VwcG9ydGVkIHN0YWtpbmcgdHlwZSAFAAAAC3N0YWtpbmdUeXBlBQAAAAdhc3NldElkAQAAABRpbnRlcm5hbExvY2tOZXV0cmlubwAAAAQAAAALc3Rha2luZ1R5cGUAAAABaQAAAAhyZWNlaXZlcgAAAAVzaGFyZQQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAdhc3NldElkCQEAAAAaZ2V0VmFsaWRTdGFraW5nQXNzZXRPckZhaWwAAAACBQAAAAtzdGFraW5nVHlwZQkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAAAhyZWNlaXZlcgkAAAIAAAABCQABLAAAAAICAAAAF0ludmFsaWQgYWRkcmVzcyBmb3JtYXQgBQAAAAhyZWNlaXZlcgMJAABmAAAAAgUAAAAFc2hhcmUAAAAAAAAAAGQJAAACAAAAAQIAAAAwc3Rha2luZyByZXdhcmRzIHNoYXJlIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiAxMDAlAwkAAGYAAAACAAAAAAAAAAABBQAAAAVzaGFyZQkAAAIAAAABAgAAAC1zdGFraW5nIHJld2FyZHMgc2hhcmUgY2Fubm90IGJlIGxvd2VyIHRoYW4gMSUEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA1hc3NldElkU3RyaW5nCQACWAAAAAEFAAAAB2Fzc2V0SWQEAAAADWN1cnJlbnRDb25maWcJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABpnZXRDdXJyZW50UmV3YXJkc0NvbmZpZ0tleQAAAAEFAAAAB2FjY291bnQEAAAAC2NvcnJlY3REYXRhAwkBAAAAAiE9AAAAAgUAAAANY3VycmVudENvbmZpZwIAAAAABAAAABFjdXJyZW50Q29uZmlnRGF0YQkABLUAAAACBQAAAA1jdXJyZW50Q29uZmlnAgAAAAFfBAAAAAljdXJyU2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyZW50Q29uZmlnRGF0YQAAAAAAAAAAAgQAAAAMY3VyclJlY2VpdmVyCQABkQAAAAIFAAAAEWN1cnJlbnRDb25maWdEYXRhAAAAAAAAAAADBAAAABdub3RNaWdyYXRlZEluaXRpYWxTaGFyZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAG2dldFJld2FyZENvbmZpZ0luaXRpYWxTaGFyZQAAAAEFAAAAB2FjY291bnQEAAAAEmFjdHVhbEluaXRpYWxTaGFyZQMJAAAAAAAAAgUAAAAXbm90TWlncmF0ZWRJbml0aWFsU2hhcmUAAAAAAAAAAAAFAAAACWN1cnJTaGFyZQUAAAAXbm90TWlncmF0ZWRJbml0aWFsU2hhcmUEAAAACG5ld1NoYXJlAwMJAABmAAAAAgUAAAASYWN0dWFsSW5pdGlhbFNoYXJlBQAAAAVzaGFyZQYJAQAAAAIhPQAAAAIFAAAADGN1cnJSZWNlaXZlcgUAAAAIcmVjZWl2ZXIFAAAAEmFjdHVhbEluaXRpYWxTaGFyZQUAAAAFc2hhcmUJAARMAAAAAgkAAaQAAAABBQAAABJhY3R1YWxJbml0aWFsU2hhcmUJAARMAAAAAgkAAaQAAAABBQAAAAhuZXdTaGFyZQkABEwAAAACBQAAAAxjdXJyUmVjZWl2ZXIFAAAAA25pbAkABEwAAAACCQABpAAAAAEFAAAABXNoYXJlCQAETAAAAAIJAAGkAAAAAQUAAAAFc2hhcmUJAARMAAAAAgUAAAAIcmVjZWl2ZXIFAAAAA25pbAQAAAATY29ycmVjdEluaXRpYWxTaGFyZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2NvcnJlY3REYXRhAAAAAAAAAAAABAAAAAxjb3JyZWN0U2hhcmUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAtjb3JyZWN0RGF0YQAAAAAAAAAAAQQAAAAPY29ycmVjdFJlY2VpdmVyCQABkQAAAAIFAAAAC2NvcnJlY3REYXRhAAAAAAAAAAACBAAAABBuZXdDdXJyZW50Q29uZmlnCQEAAAATZ2V0UmV3YXJkc0NvbmZpZ0tleQAAAAMFAAAAB2FjY291bnQFAAAADGNvcnJlY3RTaGFyZQUAAAAPY29ycmVjdFJlY2VpdmVyBAAAAAtpc05ld0NvbmZpZwkBAAAAASEAAAABCQAAAAAAAAIFAAAADWN1cnJlbnRDb25maWcFAAAAEG5ld0N1cnJlbnRDb25maWcEAAAAA2VuZAMFAAAAC2lzTmV3Q29uZmlnBQAAAAZoZWlnaHQAAAAAAAAAAAAEAAAABXN0YXJ0AwUAAAALaXNOZXdDb25maWcFAAAABmhlaWdodAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIFAAAAEG5ld0N1cnJlbnRDb25maWcGCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAA1hc3NldElkU3RyaW5nCQAAZAAAAAIJAQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABBQAAAA1hc3NldElkU3RyaW5nCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwkAAGQAAAACCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nCAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGdldFJld2FyZHNDb25maWdTdGFydEtleQAAAAIFAAAADWN1cnJlbnRDb25maWcHBQAAAANlbmQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRSZXdhcmRzQ29uZmlnU3RhcnRLZXkAAAACBQAAABBuZXdDdXJyZW50Q29uZmlnBgUAAAAFc3RhcnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtnZXRSZXdhcmRDb25maWdJbml0aWFsU2hhcmUAAAABBQAAAAdhY2NvdW50BQAAABNjb3JyZWN0SW5pdGlhbFNoYXJlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABpnZXRDdXJyZW50UmV3YXJkc0NvbmZpZ0tleQAAAAEFAAAAB2FjY291bnQFAAAAEG5ld0N1cnJlbnRDb25maWcFAAAAA25pbAUAAAAEdW5pdAEAAAAOaW50ZXJuYWxVbmxvY2sAAAAEAAAAC3N0YWtpbmdUeXBlAAAAAWkAAAAMdW5sb2NrQW1vdW50AAAADGFzc2V0SWRQYXJhbQQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB2Fzc2V0SWQJAQAAABpnZXRWYWxpZFN0YWtpbmdBc3NldE9yRmFpbAAAAAIFAAAAC3N0YWtpbmdUeXBlCQACWQAAAAEFAAAADGFzc2V0SWRQYXJhbQQAAAANYXNzZXRJZFN0cmluZwkAAlgAAAABBQAAAAdhc3NldElkBAAAAAdiYWxhbmNlCQAAZQAAAAIJAQAAAA5nZXRVc2VyQmFsYW5jZQAAAAIFAAAAB2FjY291bnQFAAAADWFzc2V0SWRTdHJpbmcFAAAADHVubG9ja0Ftb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAHYmFsYW5jZQkAAAIAAAABAgAAAA5pbnZhbGlkIGFtb3VudAkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAANYXNzZXRJZFN0cmluZwkAAGUAAAACCQEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQUAAAANYXNzZXRJZFN0cmluZwUAAAAMdW5sb2NrQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0VXNlckJhbGFuY2VLZXkAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAB2FjY291bnQFAAAADHVubG9ja0Ftb3VudAUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAAR1bml0AAAABgAAAAFpAQAAAA5sb2NrTmV1dHJpbm9TUAAAAAIAAAAIcmVjZWl2ZXIAAAAFc2hhcmUJAQAAABRpbnRlcm5hbExvY2tOZXV0cmlubwAAAAQFAAAACFVTRE5UWVBFBQAAAAFpBQAAAAhyZWNlaXZlcgUAAAAFc2hhcmUAAAABaQEAAAAMbG9ja05ldXRyaW5vAAAAAAkBAAAAFGludGVybmFsTG9ja05ldXRyaW5vAAAABAUAAAAIVVNETlRZUEUFAAAAAWkJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAABkAAAAAWkBAAAACmxvY2tOc2J0U1AAAAACAAAACHJlY2VpdmVyAAAABXNoYXJlCQEAAAAUaW50ZXJuYWxMb2NrTmV1dHJpbm8AAAAEBQAAAAhOU0JUVFlQRQUAAAABaQUAAAAIcmVjZWl2ZXIFAAAABXNoYXJlAAAAAWkBAAAACGxvY2tOc2J0AAAAAAkBAAAAFGludGVybmFsTG9ja05ldXRyaW5vAAAABAUAAAAITlNCVFRZUEUFAAAAAWkJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAABkAAAAAWkBAAAADnVubG9ja05ldXRyaW5vAAAAAgAAAAx1bmxvY2tBbW91bnQAAAANYXNzZXRJZFN0cmluZwkBAAAADmludGVybmFsVW5sb2NrAAAABAUAAAAIVVNETlRZUEUFAAAAAWkFAAAADHVubG9ja0Ftb3VudAUAAAANYXNzZXRJZFN0cmluZwAAAAFpAQAAAAp1bmxvY2tOc2J0AAAAAgAAAAx1bmxvY2tBbW91bnQAAAANYXNzZXRJZFN0cmluZwkBAAAADmludGVybmFsVW5sb2NrAAAABAUAAAAITlNCVFRZUEUFAAAAAWkFAAAADHVubG9ja0Ftb3VudAUAAAANYXNzZXRJZFN0cmluZwAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEHB1YktleUFkbWluc0xpc3QJAARMAAAAAgIAAAAsR0pkTFNhTGl2NUs3eHVlamFjOG1jUmNIb3lvM2RQckVTcnZrdEczYTZNQVIJAARMAAAAAgIAAAAsRldWZmZZcjJBTG1ITWVqWm0zV3FlTHo2U2R5bTNnTEZHdEpuNEtUd3lVNXgJAARMAAAAAgIAAAAsM1doMkxhV2NiNWdnN0sycFBjVzNFcDZFQXVSQnpZa0FncmRwdDQzalRERmEJAARMAAAAAgIAAAAsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFAAAAA25pbAQAAAAFY291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAwkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAMAAAAAAAAAAAIAAAAAAAAAAAAJAABnAAAAAgUAAAAFY291bnQAAAAAAAAAAAMarUJw", "chainId": 87, "height": 3043452, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AyBu18r4ReSDqVf2fzZ9bauZGLXyWNZpvvVu2kwFETfo Next: FfKq221cZ8mGb6xVLW2eSVjt2oB1KyVqiE9gfGwQzNxb Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "443c64dd5056b5be23b700224699295e733e0452"
4+let revisionNum = "593138d4fdf50373fd044f8b8391b2994af00492"
55
66 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
77
168168
169169
170170 @Callable(i)
171-func lockNsbtSP (receiver,share) = throw("nsbt staking has been move to a new contract, please check Neutrino web site for more info")
171+func lockNsbtSP (receiver,share) = internalLockNeutrino(NSBTTYPE, i, receiver, share)
172172
173173
174174
175175 @Callable(i)
176-func lockNsbt () = throw("nsbt staking has been move to a new contract, please check Neutrino web site for more info")
176+func lockNsbt () = internalLockNeutrino(NSBTTYPE, i, toString(i.caller), 100)
177177
178178
179179
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let revisionNum = "443c64dd5056b5be23b700224699295e733e0452"
4+let revisionNum = "593138d4fdf50373fd044f8b8391b2994af00492"
55
66 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
77
88
99 func getStringByKey (key) = valueOrElse(getString(this, key), "")
1010
1111
1212 func getBoolByKey (key) = valueOrElse(getBoolean(this, key), false)
1313
1414
1515 func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
1616
1717
1818 func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
1919
2020
2121 let NeutrinoAssetIdKey = "neutrino_asset_id"
2222
2323 let NeutrinoContractKey = "neutrino_contract"
2424
2525 let BalanceKey = "rpd_balance"
2626
2727 let ControlContractKey = "control_contract"
2828
2929 let NsbtAssetIdKey = "bond_asset_id"
3030
3131 let AdminsKey = "admins"
3232
3333 let USDNTYPE = "USDN"
3434
3535 let NSBTTYPE = "NSBT"
3636
3737 func getUserBalanceKey (owner,assetId) = makeString([BalanceKey, assetId, owner], "_")
3838
3939
4040 func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
4141
4242
4343 func getExpireProposalKey (hash) = (("proposal_expire" + "_") + hash)
4444
4545
4646 func getOwnerProposalKey (hash) = (("proposal_owner" + "_") + hash)
4747
4848
4949 func getArgumentsProposalKey (hash) = (("proposal_arguments" + "_") + hash)
5050
5151
5252 func getVoteKey (owner,hash) = (((("proposal_vote" + "_") + owner) + "_") + hash)
5353
5454
5555 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
5656
5757
5858 let neutrinoContract = addressFromStringValue(getStringByKey(NeutrinoContractKey))
5959
6060 let controlContract = addressFromStringValue(getStringByAddressAndKey(neutrinoContract, ControlContractKey))
6161
6262 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
6363
6464 let nsbtAssetIdStr = getStringByAddressAndKey(neutrinoContract, NsbtAssetIdKey)
6565
6666 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
6767
6868 func getContractBalance (assetId) = getNumberByKey(getContractBalanceKey(assetId))
6969
7070
7171 func getUserBalance (owner,assetId) = getNumberByKey(getUserBalanceKey(owner, assetId))
7272
7373
7474 func getRewardsConfigKey (owner,share,receiver) = makeString(["stakingconfig", owner, toString(share), receiver], "_")
7575
7676
7777 func getCurrentRewardsConfigKey (owner) = ("stakingconfig_current_" + owner)
7878
7979
8080 func getRewardsConfigStartKey (configKey,isStart) = (configKey + (if (isStart)
8181 then "_start"
8282 else "_end"))
8383
8484
8585 func getRewardConfigInitialShare (owner) = (owner + "_initialShare")
8686
8787
8888 func getValidStakingAssetOrFail (stakingType,assetId) = if (if ((stakingType == USDNTYPE))
8989 then (assetId != neutrinoAssetId)
9090 else false)
9191 then throw("can use USDN only")
9292 else if (if ((stakingType == NSBTTYPE))
9393 then (assetId != nsbtAssetId)
9494 else false)
9595 then throw("can use NSBT only")
9696 else if (if ((stakingType != USDNTYPE))
9797 then (stakingType != NSBTTYPE)
9898 else false)
9999 then throw(("unsupported staking type " + stakingType))
100100 else assetId
101101
102102
103103 func internalLockNeutrino (stakingType,i,receiver,share) = {
104104 let pmt = value(i.payments[0])
105105 let assetId = getValidStakingAssetOrFail(stakingType, value(pmt.assetId))
106106 if (!(isDefined(addressFromString(receiver))))
107107 then throw(("Invalid address format " + receiver))
108108 else if ((share > 100))
109109 then throw("staking rewards share cannot be higher than 100%")
110110 else if ((1 > share))
111111 then throw("staking rewards share cannot be lower than 1%")
112112 else {
113113 let account = toString(i.caller)
114114 let assetIdString = toBase58String(assetId)
115115 let currentConfig = getStringByKey(getCurrentRewardsConfigKey(account))
116116 let correctData = if ((currentConfig != ""))
117117 then {
118118 let currentConfigData = split(currentConfig, "_")
119119 let currShare = parseIntValue(currentConfigData[2])
120120 let currReceiver = currentConfigData[3]
121121 let notMigratedInitialShare = getNumberByKey(getRewardConfigInitialShare(account))
122122 let actualInitialShare = if ((notMigratedInitialShare == 0))
123123 then currShare
124124 else notMigratedInitialShare
125125 let newShare = if (if ((actualInitialShare > share))
126126 then true
127127 else (currReceiver != receiver))
128128 then actualInitialShare
129129 else share
130130 [toString(actualInitialShare), toString(newShare), currReceiver]
131131 }
132132 else [toString(share), toString(share), receiver]
133133 let correctInitialShare = parseIntValue(correctData[0])
134134 let correctShare = parseIntValue(correctData[1])
135135 let correctReceiver = correctData[2]
136136 let newCurrentConfig = getRewardsConfigKey(account, correctShare, correctReceiver)
137137 let isNewConfig = !((currentConfig == newCurrentConfig))
138138 let end = if (isNewConfig)
139139 then height
140140 else 0
141141 let start = if (isNewConfig)
142142 then height
143143 else getNumberByKey(getRewardsConfigStartKey(newCurrentConfig, true))
144144 $Tuple2([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)], unit)
145145 }
146146 }
147147
148148
149149 func internalUnlock (stakingType,i,unlockAmount,assetIdParam) = {
150150 let account = toString(i.caller)
151151 let assetId = getValidStakingAssetOrFail(stakingType, fromBase58String(assetIdParam))
152152 let assetIdString = toBase58String(assetId)
153153 let balance = (getUserBalance(account, assetIdString) - unlockAmount)
154154 if ((0 > balance))
155155 then throw("invalid amount")
156156 else $Tuple2([IntegerEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) - unlockAmount)), IntegerEntry(getUserBalanceKey(account, assetIdString), balance), ScriptTransfer(addressFromStringValue(account), unlockAmount, assetId)], unit)
157157 }
158158
159159
160160 @Callable(i)
161161 func lockNeutrinoSP (receiver,share) = internalLockNeutrino(USDNTYPE, i, receiver, share)
162162
163163
164164
165165 @Callable(i)
166166 func lockNeutrino () = internalLockNeutrino(USDNTYPE, i, toString(i.caller), 100)
167167
168168
169169
170170 @Callable(i)
171-func lockNsbtSP (receiver,share) = throw("nsbt staking has been move to a new contract, please check Neutrino web site for more info")
171+func lockNsbtSP (receiver,share) = internalLockNeutrino(NSBTTYPE, i, receiver, share)
172172
173173
174174
175175 @Callable(i)
176-func lockNsbt () = throw("nsbt staking has been move to a new contract, please check Neutrino web site for more info")
176+func lockNsbt () = internalLockNeutrino(NSBTTYPE, i, toString(i.caller), 100)
177177
178178
179179
180180 @Callable(i)
181181 func unlockNeutrino (unlockAmount,assetIdString) = internalUnlock(USDNTYPE, i, unlockAmount, assetIdString)
182182
183183
184184
185185 @Callable(i)
186186 func unlockNsbt (unlockAmount,assetIdString) = internalUnlock(NSBTTYPE, i, unlockAmount, assetIdString)
187187
188188
189189 @Verifier(tx)
190190 func verify () = {
191191 let pubKeyAdminsList = ["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
192192 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
193193 then 1
194194 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
195195 then 1
196196 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
197197 then 1
198198 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
199199 then 2
200200 else 0))
201201 (count >= 3)
202202 }
203203

github/deemru/w8io/786bc32 
34.82 ms