tx · 9e6y7EU6GqvJvV4Z68gAataQY5KyTxBhtmcgsJEU1TDZ

3Mwvh1BuhG98BDy2ce4psM5FGmsMJ3mQ6eS:  -0.01400000 Waves

2019.10.08 13:45 [710720] smart account 3Mwvh1BuhG98BDy2ce4psM5FGmsMJ3mQ6eS > SELF 0.00000000 Waves

{ "type": 13, "id": "9e6y7EU6GqvJvV4Z68gAataQY5KyTxBhtmcgsJEU1TDZ", "fee": 1400000, "feeAssetId": null, "timestamp": 1570531557505, "version": 1, "sender": "3Mwvh1BuhG98BDy2ce4psM5FGmsMJ3mQ6eS", "senderPublicKey": "7uFaW53FrwLDoCAkGsKkshhvuicD9QrVcuTDgYkMp93a", "proofs": [ "29k6oydJCXkVbzzpiuUjSbbMUQreSaGsXDrjZ8sqEXMVTGU3SUJQdBeXcLA8qie1Uca18rh3FfGSWvPD6HqXMf8S" ], "script": "base64:AAIDAAAAAAAAAAAAAAArAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAAAAAAAD0xJU1RTUExJVFNZTUJPTAIAAAABXwAAAAAPUEVSQ0VOVEFDQ1VSQUNZAAAAAAAAACcQAAAAABJOZXV0cmlub0Fzc2V0SWRLZXkCAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAAAAABNOZXV0cmlub0NvbnRyYWN0S2V5AgAAABFuZXV0cmlub19jb250cmFjdAAAAAAOTm9kZUFkZHJlc3NLZXkCAAAADG5vZGVfYWRkcmVzcwAAAAAKQmFsYW5jZUtleQIAAAALcnBkX2JhbGFuY2UAAAAADFN5bmNJbmRleEtleQIAAAAOcnBkX3N5bmNfaW5kZXgAAAAACVByb2ZpdEtleQIAAAAKcnBkX3Byb2ZpdAAAAAARQmFsYW5jZUhpc3RvcnlLZXkCAAAAD2JhbGFuY2VfaGlzdG9yeQAAAAAMSXNDbGFpbWVkS2V5AgAAAAppc19jbGFpbWVkAAAAABJBcHByb3ZlZExlYXNlVHhLZXkCAAAAB2xlYXNldHgAAAAAFkFwcHJvdmVkTGVhc2VBbW91bnRLZXkCAAAADmxlYXNldHhfYW1vdW50AQAAABhnZXRVc2VyQmFsYW5jZUhpc3RvcnlLZXkAAAABAAAABW93bmVyCQABLAAAAAIJAAEsAAAAAgUAAAARQmFsYW5jZUhpc3RvcnlLZXkCAAAAAV8FAAAABW93bmVyAQAAABFnZXRVc2VyQmFsYW5jZUtleQAAAAIAAAAFb3duZXIAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAApCYWxhbmNlS2V5AgAAAAFfBQAAAAdhc3NldElkAgAAAAFfBQAAAAVvd25lcgEAAAAYZ2V0VXNlckJhbGFuY2VLZXlCeUNvdW50AAAAAwAAAAVvd25lcgAAAAVjb3VudAAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAFb3duZXIFAAAAB2Fzc2V0SWQCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAAD2dldElzQ2xhaW1lZEtleQAAAAIAAAAFb3duZXIAAAAFY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAMSXNDbGFpbWVkS2V5AgAAAAFfBQAAAAVvd25lcgIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAcZ2V0QXBwcm92ZWRMZWFzZVR4QnlPd25lcktleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACBQAAABJBcHByb3ZlZExlYXNlVHhLZXkCAAAAAV8FAAAABW93bmVyAQAAABxnZXRPd25lclB1YktleUJ5TGVhc2VUeElkS2V5AAAAAQAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgUAAAASQXBwcm92ZWRMZWFzZVR4S2V5AgAAAAFfBQAAAAR0eElkAQAAACBnZXRBcHByb3ZlZExlYXNlQW1vdW50QnlPd25lcktleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACBQAAABZBcHByb3ZlZExlYXNlQW1vdW50S2V5AgAAAAFfBQAAAAVvd25lcgEAAAAVZ2V0Q29udHJhY3RCYWxhbmNlS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgUAAAAKQmFsYW5jZUtleQIAAAABXwUAAAAHYXNzZXRJZAEAAAAdZ2V0U25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACAAAABWNvdW50AAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAKQmFsYW5jZUtleQIAAAABXwUAAAAHYXNzZXRJZAIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAMZ2V0UHJvZml0S2V5AAAAAQAAAAVjb3VudAkAASwAAAACCQABLAAAAAIFAAAACVByb2ZpdEtleQIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAZZ2V0QXBwcm92ZWRMZWFzZVR4QnlPd25lcgAAAAEAAAAFb3duZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABxnZXRBcHByb3ZlZExlYXNlVHhCeU93bmVyS2V5AAAAAQUAAAAFb3duZXIBAAAAHWdldEFwcHJvdmVkTGVhc2VBbW91bnRCeU93bmVyAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAIGdldEFwcHJvdmVkTGVhc2VBbW91bnRCeU93bmVyS2V5AAAAAQUAAAAFb3duZXIBAAAAGWdldE93bmVyUHViS2V5QnlMZWFzZVR4SWQAAAABAAAABHR4SWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABxnZXRPd25lclB1YktleUJ5TGVhc2VUeElkS2V5AAAAAQUAAAAEdHhJZAAAAAALbm9kZUFkZHJlc3MJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADk5vZGVBZGRyZXNzS2V5AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABNOZXV0cmlub0NvbnRyYWN0S2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEk5ldXRyaW5vQXNzZXRJZEtleQAAAAAJc3luY0luZGV4CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAMU3luY0luZGV4S2V5AQAAABJnZXRDb250cmFjdEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAAdhc3NldElkAQAAABpnZXRTbmFwc2hvdENvbnRyYWN0QmFsYW5jZQAAAAIAAAAFY291bnQAAAAHYXNzZXRJZAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAB1nZXRTbmFwc2hvdENvbnRyYWN0QmFsYW5jZUtleQAAAAIFAAAABWNvdW50BQAAAAdhc3NldElkAQAAAAlnZXRQcm9maXQAAAABAAAABWNvdW50CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAADGdldFByb2ZpdEtleQAAAAEFAAAABWNvdW50AQAAAA5nZXRVc2VyQmFsYW5jZQAAAAIAAAAFb3duZXIAAAAHYXNzZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldFVzZXJCYWxhbmNlS2V5AAAAAgUAAAAFb3duZXIFAAAAB2Fzc2V0SWQBAAAAFWdldFVzZXJCYWxhbmNlQnlDb3VudAAAAAMAAAAFb3duZXIAAAAFY291bnQAAAAHYXNzZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldFVzZXJCYWxhbmNlS2V5QnlDb3VudAAAAAMFAAAABW93bmVyBQAAAAVjb3VudAUAAAAHYXNzZXRJZAEAAAAVZ2V0VXNlckJhbGFuY2VIaXN0b3J5AAAAAQAAAAVvd25lcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAGGdldFVzZXJCYWxhbmNlSGlzdG9yeUtleQAAAAEFAAAABW93bmVyAQAAAAlpc0NsYWltZWQAAAACAAAABW93bmVyAAAABWNvdW50CQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAD2dldElzQ2xhaW1lZEtleQAAAAIFAAAABW93bmVyBQAAAAVjb3VudAEAAAARZ2V0SGlzdG9yeUVsZW1lbnQAAAABAAAABWNvdW50CQABLAAAAAIJAAGkAAAAAQUAAAAFY291bnQFAAAAD0xJU1RTUExJVFNZTUJPTAEAAAARYWRkQmFsYW5jZUhpc3RvcnkAAAACAAAAB2hpc3RvcnkAAAAHZWxlbWVudAkAASwAAAACBQAAAAdoaXN0b3J5BQAAAAdlbGVtZW50AAAABQAAAAFpAQAAAAxsb2NrTmV1dHJpbm8AAAAABAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAAHWNhbiB1c2UgbmV1dHJpbm8gb3IgYm9uZCBvbmx5BAAAAAdhY2NvdW50CQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAANYXNzZXRJZFN0cmluZwkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAAB2JhbGFuY2UJAABkAAAAAgkBAAAADmdldFVzZXJCYWxhbmNlAAAAAgUAAAAHYWNjb3VudAUAAAANYXNzZXRJZFN0cmluZwgFAAAAA3BtdAAAAAZhbW91bnQEAAAADWhpc3RvcnlTdHJpbmcJAQAAABVnZXRVc2VyQmFsYW5jZUhpc3RvcnkAAAABBQAAAAdhY2NvdW50BAAAAAdoaXN0b3J5CQAEtQAAAAIFAAAADWhpc3RvcnlTdHJpbmcFAAAAD0xJU1RTUExJVFNZTUJPTAQAAAAFaW5kZXgJAABlAAAAAgkAAZAAAAABBQAAAAdoaXN0b3J5AAAAAAAAAAACBAAAAApuZXdIaXN0b3J5AwMJAQAAAAIhPQAAAAIFAAAADWhpc3RvcnlTdHJpbmcCAAAAAAkAAAAAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAHaGlzdG9yeQUAAAAFaW5kZXgFAAAACXN5bmNJbmRleAcFAAAADWhpc3RvcnlTdHJpbmcJAQAAABFhZGRCYWxhbmNlSGlzdG9yeQAAAAIFAAAADWhpc3RvcnlTdHJpbmcJAQAAABFnZXRIaXN0b3J5RWxlbWVudAAAAAEFAAAACXN5bmNJbmRleAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldENvbnRyYWN0QmFsYW5jZUtleQAAAAEFAAAADWFzc2V0SWRTdHJpbmcJAABkAAAAAgkBAAAAEmdldENvbnRyYWN0QmFsYW5jZQAAAAEFAAAADWFzc2V0SWRTdHJpbmcIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0VXNlckJhbGFuY2VLZXkAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0VXNlckJhbGFuY2VLZXlCeUNvdW50AAAAAwUAAAAHYWNjb3VudAUAAAAJc3luY0luZGV4BQAAAA1hc3NldElkU3RyaW5nBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0VXNlckJhbGFuY2VIaXN0b3J5S2V5AAAAAQUAAAAHYWNjb3VudAUAAAAKbmV3SGlzdG9yeQUAAAADbmlsAAAAAWkBAAAAE3JlZ2lzdHJhdGlvbkxlYXNlVHgAAAAEAAAABmFtb3VudAAAAANmZWUAAAAJdGltZXN0YW1wAAAABXByb29mBAAAAA1hZGRyZXNzUHViS2V5CAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAB2FkZHJl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cnkAAAACCQEAAAAcZ2V0QXBwcm92ZWRMZWFzZVR4QnlPd25lcktleQAAAAEFAAAAB2FkZHJlc3MCAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAIGdldEFwcHJvdmVkTGVhc2VBbW91bnRCeU93bmVyS2V5AAAAAQUAAAAHYWRkcmVzcwAAAAAAAAAAAAUAAAADbmlsAAAAAWkBAAAADnVubG9ja05ldXRyaW5vAAAAAgAAAAx1bmxvY2tBbW91bnQAAAANYXNzZXRJZFN0cmluZwQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAANYXNzZXRJZFN0cmluZwQAAAAHYmFsYW5jZQkAAGUAAAACCQEAAAAOZ2V0VXNlckJhbGFuY2UAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAx1bmxvY2tBbW91bnQEAAAAEGF2YWlsYWJsZUJhbGFuY2UJAABlAAAAAgUAAAAHYmFsYW5jZQkBAAAAHWdldEFwcHJvdmVkTGVhc2VBbW91bnRCeU93bmVyAAAAAQUAAAAHYWNjb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAQYXZhaWxhYmxlQmFsYW5jZQkAAAIAAAABAgAAAA5pbnZhbGlkIGFtb3VudAMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQFAAAAD25ldXRyaW5vQXNzZXRJZAkAAAIAAAABAgAAAB1jYW4gdXNlIG5ldXRyaW5vIG9yIGJvbmQgb25seQQAAAANaGlzdG9yeVN0cmluZwkBAAAAFWdldFVzZXJCYWxhbmNlSGlzdG9yeQAAAAEFAAAAB2FjY291bnQEAAAAB2hpc3RvcnkJAAS1AAAAAgUAAAANaGlzdG9yeVN0cmluZwUAAAAPTElTVFNQTElUU1lNQk9MBAAAAAVpbmRleAkAAGUAAAACCQABkAAAAAEFAAAAB2hpc3RvcnkAAAAAAAAAAAIEAAAACm5ld0hpc3RvcnkDAwkBAAAAAiE9AAAAAgUAAAANaGlzdG9yeVN0cmluZwIAAAAACQAAAAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAdoaXN0b3J5BQAAAAVpbmRleAUAAAAJc3luY0luZGV4BwUAAAANaGlzdG9yeVN0cmluZwkBAAAAEWFkZEJhbGFuY2VIaXN0b3J5AAAAAgUAAAANaGlzdG9yeVN0cmluZwkBAAAAEWdldEhpc3RvcnlFbGVtZW50AAAAAQUAAAAJc3luY0luZGV4CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAKQmFsYW5jZUtleQkAAGUAAAACCQEAAAASZ2V0Q29udHJhY3RCYWxhbmNlAAAAAQUAAAANYXNzZXRJZFN0cmluZwUAAAAMdW5sb2NrQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0VXNlckJhbGFuY2VLZXkAAAACBQAAAAdhY2NvdW50BQAAAA1hc3NldElkU3RyaW5nBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0VXNlckJhbGFuY2VLZXlCeUNvdW50AAAAAwUAAAAHYWNjb3VudAUAAAAJc3luY0luZGV4BQAAAA1hc3NldElkU3RyaW5nBQAAAAdiYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0VXNlckJhbGFuY2VIaXN0b3J5S2V5AAAAAQUAAAAHYWNjb3VudAUAAAAKbmV3SGlzdG9yeQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAUAAAAMdW5sb2NrQW1vdW50BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAPcHJvZml0U3luY0luZGV4AAAADGhpc3RvcnlJbmRleAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADWhpc3RvcnlTdHJpbmcJAQAAABVnZXRVc2VyQmFsYW5jZUhpc3RvcnkAAAABBQAAAAdhY2NvdW50BAAAAAdoaXN0b3J5CQAEtQAAAAIFAAAADWhpc3RvcnlTdHJpbmcFAAAAD0xJU1RTUExJVFNZTUJPTAQAAAAKbG9ja0FjdHVhbAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAB2hpc3RvcnkFAAAADGhpc3RvcnlJbmRleAMJAQAAAAlpc0NsYWltZWQAAAACBQAAAAdhY2NvdW50BQAAAA9wcm9maXRTeW5jSW5kZXgJAAACAAAAAQkAASwAAAACAgAAAB1hY2NvdW50IGlzIGNsYWltZWQgcnBkX2NvdW50OgkAAaQAAAABBQAAAA9wcm9maXRTeW5jSW5kZXgDAwkAAGYAAAACBQAAAA9wcm9maXRTeW5jSW5kZXgFAAAACmxvY2tBY3R1YWwGAwkAAGYAAAACCQABkAAAAAEFAAAAB2hpc3RvcnkJAABkAAAAAgUAAAAMaGlzdG9yeUluZGV4AAAAAAAAAAACCQAAZgAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAdoaXN0b3J5CQAAZAAAAAIFAAAADGhpc3RvcnlJbmRleAAAAAAAAAAAAQUAAAAPcHJvZml0U3luY0luZGV4BwkAAAIAAAABAgAAABVpbnZhbGlkIGhpc3RvcnkgaW5kZXgEAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkAAlgAAAABBQAAAA9uZXV0cmlub0Fzc2V0SWQEAAAAB2JhbGFuY2UJAQAAABVnZXRVc2VyQmFsYW5jZUJ5Q291bnQAAAADBQAAAAdhY2NvdW50BQAAAApsb2NrQWN0dWFsBQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcEAAAADHNoYXJlUGVyY2VudAkAAGkAAAACCQAAaAAAAAIJAABoAAAAAgUAAAAHYmFsYW5jZQUAAAAPUEVSQ0VOVEFDQ1VSQUNZAAAAAAAAAABkCQEAAAAaZ2V0U25hcHNob3RDb250cmFjdEJhbGFuY2UAAAACBQAAAA9wcm9maXRTeW5jSW5kZXgFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwQAAAAGcHJvZml0CQAAaQAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAxzaGFyZVBlcmNlbnQJAQAAAAlnZXRQcm9maXQAAAABBQAAAA9wcm9maXRTeW5jSW5kZXgAAAAAAAAAAGQFAAAAD1BFUkNFTlRBQ0NVUkFDWQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRJc0NsYWltZWRLZXkAAAACBQAAAAdhY2NvdW50BQAAAA9wcm9maXRTeW5jSW5kZXgGBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50BQAAAAZwcm9maXQFAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsAAAAAANV7C0=", "chainId": 84, "height": 710720, "spentComplexity": 0 } View: original | compacted Prev: 3LUkqxbUPkVWnSZ4Cg6vZcZYNnV4PZQMWt6G4bJG7Vfv Next: B3Wtf6FwBtSp7kWCyJKzP9Jn3yKkMYqFb1cxSi4YQQYS Diff:
OldNewDifferences
4747
4848 let NeutrinoAssetIdKey = "neutrino_asset_id"
4949
50-let BondAssetIdKey = "bond_asset_id"
50+let NeutrinoContractKey = "neutrino_contract"
5151
52-let NeutrinoContractKey = "neutrino_contract"
52+let NodeAddressKey = "node_address"
5353
5454 let BalanceKey = "rpd_balance"
5555
6060 let BalanceHistoryKey = "balance_history"
6161
6262 let IsClaimedKey = "is_claimed"
63+
64+let ApprovedLeaseTxKey = "leasetx"
65+
66+let ApprovedLeaseAmountKey = "leasetx_amount"
6367
6468 func getUserBalanceHistoryKey (owner) = ((BalanceHistoryKey + "_") + owner)
6569
7377 func getIsClaimedKey (owner,count) = ((((IsClaimedKey + "_") + owner) + "_") + toString(count))
7478
7579
80+func getApprovedLeaseTxByOwnerKey (owner) = ((ApprovedLeaseTxKey + "_") + owner)
81+
82+
83+func getOwnerPubKeyByLeaseTxIdKey (txId) = ((ApprovedLeaseTxKey + "_") + txId)
84+
85+
86+func getApprovedLeaseAmountByOwnerKey (owner) = ((ApprovedLeaseAmountKey + "_") + owner)
87+
88+
7689 func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
7790
7891
8295 func getProfitKey (count) = ((ProfitKey + "_") + toString(count))
8396
8497
98+func getApprovedLeaseTxByOwner (owner) = getStringByKey(getApprovedLeaseTxByOwnerKey(owner))
99+
100+
101+func getApprovedLeaseAmountByOwner (owner) = getNumberByKey(getApprovedLeaseAmountByOwnerKey(owner))
102+
103+
104+func getOwnerPubKeyByLeaseTxId (txId) = getStringByKey(getOwnerPubKeyByLeaseTxIdKey(txId))
105+
106+
107+let nodeAddress = getStringByKey(NodeAddressKey)
108+
85109 let neutrinoContract = getStringByKey(NeutrinoContractKey)
86110
87111 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
88-
89-let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
90112
91113 let syncIndex = getNumberByAddressAndKey(neutrinoContract, SyncIndexKey)
92114
120142 @Callable(i)
121143 func lockNeutrino () = {
122144 let pmt = extract(i.payment)
123- if (if ((pmt.assetId != neutrinoAssetId))
124- then (pmt.assetId != bondAssetId)
125- else false)
145+ if ((pmt.assetId != neutrinoAssetId))
126146 then throw("can use neutrino or bond only")
127147 else {
128148 let account = toString(i.caller)
143163
144164
145165 @Callable(i)
166+func registrationLeaseTx (amount,fee,timestamp,proof) = {
167+ let addressPubKey = i.callerPublicKey
168+ let address = toString(i.caller)
169+ let txBytes = (((((base58'3h1H' + fromBase58String(neutrinoContract)) + fromBase58String(nodeAddress)) + toBytes(amount)) + toBytes(fee)) + toBytes(timestamp))
170+ let isValid = sigVerify(txBytes, fromBase58String(proof), addressPubKey)
171+ let balance = getUserBalance(address, toBase58String(neutrinoAssetId))
172+ if (!(isValid))
173+ then throw("sign is not valid")
174+ else if ((fee > 500000))
175+ then throw("invalid fee")
176+ else if (if ((amount != balance))
177+ then true
178+ else (amount == 0))
179+ then throw("invalid amount")
180+ else if ((getApprovedLeaseTxByOwner(address) != ""))
181+ then throw("leaseTx is exist")
182+ else {
183+ let txHash = toBase58String(blake2b256(txBytes))
184+ WriteSet([DataEntry(getApprovedLeaseTxByOwnerKey(address), txHash), DataEntry(getApprovedLeaseAmountByOwnerKey(address), balance), DataEntry(getOwnerPubKeyByLeaseTxId(txHash), addressPubKey)])
185+ }
186+ }
187+
188+
189+
190+@Callable(i)
191+func registrationUnleaseTx (chainIdBase64,fee,timestamp,proof) = {
192+ let addressPubKey = i.callerPublicKey
193+ let address = toString(i.caller)
194+ let leaseTxHash = getApprovedLeaseTxByOwner(address)
195+ let txBytes = (((((base58'gm' + fromBase64String(chainIdBase64)) + fromBase58String(neutrinoContract)) + toBytes(fee)) + toBytes(timestamp)) + fromBase58String(leaseTxHash))
196+ let isValid = sigVerify(txBytes, fromBase58String(proof), addressPubKey)
197+ let txHash = blake2b256(txBytes)
198+ if (!(isValid))
199+ then throw("sign is not valid")
200+ else if ((transactionHeightById(txHash) == 0))
201+ then throw("blockchain does not contain this transaction")
202+ else if ((fee > 500000))
203+ then throw("invalid fee")
204+ else if ((getApprovedLeaseTxByOwner(address) != ""))
205+ then throw("leaseTx is exist")
206+ else WriteSet([DataEntry(getApprovedLeaseTxByOwnerKey(address), ""), DataEntry(getApprovedLeaseAmountByOwnerKey(address), 0)])
207+ }
208+
209+
210+
211+@Callable(i)
146212 func unlockNeutrino (unlockAmount,assetIdString) = {
147213 let account = toString(i.caller)
148214 let assetId = fromBase58String(assetIdString)
149215 let balance = (getUserBalance(account, assetIdString) - unlockAmount)
150- if ((0 > balance))
216+ let availableBalance = (balance - getApprovedLeaseAmountByOwner(account))
217+ if ((0 > availableBalance))
151218 then throw("invalid amount")
152- else if (if ((assetId != neutrinoAssetId))
153- then (assetId != bondAssetId)
154- else false)
219+ else if ((assetId != neutrinoAssetId))
155220 then throw("can use neutrino or bond only")
156221 else {
157222 let historyString = getUserBalanceHistory(account)
184249 then throw("invalid history index")
185250 else {
186251 let neutrinoAssetIdString = toBase58String(neutrinoAssetId)
187- let bondAssetIdString = toBase58String(bondAssetId)
188- let balance = (getUserBalanceByCount(account, lockActual, neutrinoAssetIdString) + getUserBalanceByCount(account, lockActual, bondAssetIdString))
189- let sharePercent = (((balance * PERCENTACCURACY) * 100) / (getSnapshotContractBalance(profitSyncIndex, neutrinoAssetIdString) + getSnapshotContractBalance(profitSyncIndex, bondAssetIdString)))
252+ let balance = getUserBalanceByCount(account, lockActual, neutrinoAssetIdString)
253+ let sharePercent = (((balance * PERCENTACCURACY) * 100) / getSnapshotContractBalance(profitSyncIndex, neutrinoAssetIdString))
190254 let profit = (((sharePercent * getProfit(profitSyncIndex)) / 100) / PERCENTACCURACY)
191255 ScriptResult(WriteSet([DataEntry(getIsClaimedKey(account, profitSyncIndex), true)]), TransferSet([ScriptTransfer(addressFromStringValue(account), profit, neutrinoAssetId)]))
192256 }
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(addressFromStringValue(address), key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 let LISTSPLITSYMBOL = "_"
4545
4646 let PERCENTACCURACY = 10000
4747
4848 let NeutrinoAssetIdKey = "neutrino_asset_id"
4949
50-let BondAssetIdKey = "bond_asset_id"
50+let NeutrinoContractKey = "neutrino_contract"
5151
52-let NeutrinoContractKey = "neutrino_contract"
52+let NodeAddressKey = "node_address"
5353
5454 let BalanceKey = "rpd_balance"
5555
5656 let SyncIndexKey = "rpd_sync_index"
5757
5858 let ProfitKey = "rpd_profit"
5959
6060 let BalanceHistoryKey = "balance_history"
6161
6262 let IsClaimedKey = "is_claimed"
63+
64+let ApprovedLeaseTxKey = "leasetx"
65+
66+let ApprovedLeaseAmountKey = "leasetx_amount"
6367
6468 func getUserBalanceHistoryKey (owner) = ((BalanceHistoryKey + "_") + owner)
6569
6670
6771 func getUserBalanceKey (owner,assetId) = ((((BalanceKey + "_") + assetId) + "_") + owner)
6872
6973
7074 func getUserBalanceKeyByCount (owner,count,assetId) = ((getUserBalanceKey(owner, assetId) + "_") + toString(count))
7175
7276
7377 func getIsClaimedKey (owner,count) = ((((IsClaimedKey + "_") + owner) + "_") + toString(count))
7478
7579
80+func getApprovedLeaseTxByOwnerKey (owner) = ((ApprovedLeaseTxKey + "_") + owner)
81+
82+
83+func getOwnerPubKeyByLeaseTxIdKey (txId) = ((ApprovedLeaseTxKey + "_") + txId)
84+
85+
86+func getApprovedLeaseAmountByOwnerKey (owner) = ((ApprovedLeaseAmountKey + "_") + owner)
87+
88+
7689 func getContractBalanceKey (assetId) = ((BalanceKey + "_") + assetId)
7790
7891
7992 func getSnapshotContractBalanceKey (count,assetId) = ((((BalanceKey + "_") + assetId) + "_") + toString(count))
8093
8194
8295 func getProfitKey (count) = ((ProfitKey + "_") + toString(count))
8396
8497
98+func getApprovedLeaseTxByOwner (owner) = getStringByKey(getApprovedLeaseTxByOwnerKey(owner))
99+
100+
101+func getApprovedLeaseAmountByOwner (owner) = getNumberByKey(getApprovedLeaseAmountByOwnerKey(owner))
102+
103+
104+func getOwnerPubKeyByLeaseTxId (txId) = getStringByKey(getOwnerPubKeyByLeaseTxIdKey(txId))
105+
106+
107+let nodeAddress = getStringByKey(NodeAddressKey)
108+
85109 let neutrinoContract = getStringByKey(NeutrinoContractKey)
86110
87111 let neutrinoAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, NeutrinoAssetIdKey))
88-
89-let bondAssetId = fromBase58String(getStringByAddressAndKey(neutrinoContract, BondAssetIdKey))
90112
91113 let syncIndex = getNumberByAddressAndKey(neutrinoContract, SyncIndexKey)
92114
93115 func getContractBalance (assetId) = getNumberByKey(getContractBalanceKey(assetId))
94116
95117
96118 func getSnapshotContractBalance (count,assetId) = getNumberByAddressAndKey(neutrinoContract, getSnapshotContractBalanceKey(count, assetId))
97119
98120
99121 func getProfit (count) = getNumberByAddressAndKey(neutrinoContract, getProfitKey(count))
100122
101123
102124 func getUserBalance (owner,assetId) = getNumberByKey(getUserBalanceKey(owner, assetId))
103125
104126
105127 func getUserBalanceByCount (owner,count,assetId) = getNumberByKey(getUserBalanceKeyByCount(owner, count, assetId))
106128
107129
108130 func getUserBalanceHistory (owner) = getStringByKey(getUserBalanceHistoryKey(owner))
109131
110132
111133 func isClaimed (owner,count) = getBoolByKey(getIsClaimedKey(owner, count))
112134
113135
114136 func getHistoryElement (count) = (toString(count) + LISTSPLITSYMBOL)
115137
116138
117139 func addBalanceHistory (history,element) = (history + element)
118140
119141
120142 @Callable(i)
121143 func lockNeutrino () = {
122144 let pmt = extract(i.payment)
123- if (if ((pmt.assetId != neutrinoAssetId))
124- then (pmt.assetId != bondAssetId)
125- else false)
145+ if ((pmt.assetId != neutrinoAssetId))
126146 then throw("can use neutrino or bond only")
127147 else {
128148 let account = toString(i.caller)
129149 let assetIdString = toBase58String(value(pmt.assetId))
130150 let balance = (getUserBalance(account, assetIdString) + pmt.amount)
131151 let historyString = getUserBalanceHistory(account)
132152 let history = split(historyString, LISTSPLITSYMBOL)
133153 let index = (size(history) - 2)
134154 let newHistory = if (if ((historyString != ""))
135155 then (parseIntValue(history[index]) == syncIndex)
136156 else false)
137157 then historyString
138158 else addBalanceHistory(historyString, getHistoryElement(syncIndex))
139159 WriteSet([DataEntry(getContractBalanceKey(assetIdString), (getContractBalance(assetIdString) + pmt.amount)), DataEntry(getUserBalanceKey(account, assetIdString), balance), DataEntry(getUserBalanceKeyByCount(account, syncIndex, assetIdString), balance), DataEntry(getUserBalanceHistoryKey(account), newHistory)])
140160 }
141161 }
142162
143163
144164
145165 @Callable(i)
166+func registrationLeaseTx (amount,fee,timestamp,proof) = {
167+ let addressPubKey = i.callerPublicKey
168+ let address = toString(i.caller)
169+ let txBytes = (((((base58'3h1H' + fromBase58String(neutrinoContract)) + fromBase58String(nodeAddress)) + toBytes(amount)) + toBytes(fee)) + toBytes(timestamp))
170+ let isValid = sigVerify(txBytes, fromBase58String(proof), addressPubKey)
171+ let balance = getUserBalance(address, toBase58String(neutrinoAssetId))
172+ if (!(isValid))
173+ then throw("sign is not valid")
174+ else if ((fee > 500000))
175+ then throw("invalid fee")
176+ else if (if ((amount != balance))
177+ then true
178+ else (amount == 0))
179+ then throw("invalid amount")
180+ else if ((getApprovedLeaseTxByOwner(address) != ""))
181+ then throw("leaseTx is exist")
182+ else {
183+ let txHash = toBase58String(blake2b256(txBytes))
184+ WriteSet([DataEntry(getApprovedLeaseTxByOwnerKey(address), txHash), DataEntry(getApprovedLeaseAmountByOwnerKey(address), balance), DataEntry(getOwnerPubKeyByLeaseTxId(txHash), addressPubKey)])
185+ }
186+ }
187+
188+
189+
190+@Callable(i)
191+func registrationUnleaseTx (chainIdBase64,fee,timestamp,proof) = {
192+ let addressPubKey = i.callerPublicKey
193+ let address = toString(i.caller)
194+ let leaseTxHash = getApprovedLeaseTxByOwner(address)
195+ let txBytes = (((((base58'gm' + fromBase64String(chainIdBase64)) + fromBase58String(neutrinoContract)) + toBytes(fee)) + toBytes(timestamp)) + fromBase58String(leaseTxHash))
196+ let isValid = sigVerify(txBytes, fromBase58String(proof), addressPubKey)
197+ let txHash = blake2b256(txBytes)
198+ if (!(isValid))
199+ then throw("sign is not valid")
200+ else if ((transactionHeightById(txHash) == 0))
201+ then throw("blockchain does not contain this transaction")
202+ else if ((fee > 500000))
203+ then throw("invalid fee")
204+ else if ((getApprovedLeaseTxByOwner(address) != ""))
205+ then throw("leaseTx is exist")
206+ else WriteSet([DataEntry(getApprovedLeaseTxByOwnerKey(address), ""), DataEntry(getApprovedLeaseAmountByOwnerKey(address), 0)])
207+ }
208+
209+
210+
211+@Callable(i)
146212 func unlockNeutrino (unlockAmount,assetIdString) = {
147213 let account = toString(i.caller)
148214 let assetId = fromBase58String(assetIdString)
149215 let balance = (getUserBalance(account, assetIdString) - unlockAmount)
150- if ((0 > balance))
216+ let availableBalance = (balance - getApprovedLeaseAmountByOwner(account))
217+ if ((0 > availableBalance))
151218 then throw("invalid amount")
152- else if (if ((assetId != neutrinoAssetId))
153- then (assetId != bondAssetId)
154- else false)
219+ else if ((assetId != neutrinoAssetId))
155220 then throw("can use neutrino or bond only")
156221 else {
157222 let historyString = getUserBalanceHistory(account)
158223 let history = split(historyString, LISTSPLITSYMBOL)
159224 let index = (size(history) - 2)
160225 let newHistory = if (if ((historyString != ""))
161226 then (parseIntValue(history[index]) == syncIndex)
162227 else false)
163228 then historyString
164229 else addBalanceHistory(historyString, getHistoryElement(syncIndex))
165230 ScriptResult(WriteSet([DataEntry(BalanceKey, (getContractBalance(assetIdString) - unlockAmount)), DataEntry(getUserBalanceKey(account, assetIdString), balance), DataEntry(getUserBalanceKeyByCount(account, syncIndex, assetIdString), balance), DataEntry(getUserBalanceHistoryKey(account), newHistory)]), TransferSet([ScriptTransfer(addressFromStringValue(account), unlockAmount, neutrinoAssetId)]))
166231 }
167232 }
168233
169234
170235
171236 @Callable(i)
172237 func withdraw (profitSyncIndex,historyIndex) = {
173238 let account = toString(i.caller)
174239 let historyString = getUserBalanceHistory(account)
175240 let history = split(historyString, LISTSPLITSYMBOL)
176241 let lockActual = parseIntValue(history[historyIndex])
177242 if (isClaimed(account, profitSyncIndex))
178243 then throw(("account is claimed rpd_count:" + toString(profitSyncIndex)))
179244 else if (if ((profitSyncIndex > lockActual))
180245 then true
181246 else if ((size(history) > (historyIndex + 2)))
182247 then (parseIntValue(history[(historyIndex + 1)]) > profitSyncIndex)
183248 else false)
184249 then throw("invalid history index")
185250 else {
186251 let neutrinoAssetIdString = toBase58String(neutrinoAssetId)
187- let bondAssetIdString = toBase58String(bondAssetId)
188- let balance = (getUserBalanceByCount(account, lockActual, neutrinoAssetIdString) + getUserBalanceByCount(account, lockActual, bondAssetIdString))
189- let sharePercent = (((balance * PERCENTACCURACY) * 100) / (getSnapshotContractBalance(profitSyncIndex, neutrinoAssetIdString) + getSnapshotContractBalance(profitSyncIndex, bondAssetIdString)))
252+ let balance = getUserBalanceByCount(account, lockActual, neutrinoAssetIdString)
253+ let sharePercent = (((balance * PERCENTACCURACY) * 100) / getSnapshotContractBalance(profitSyncIndex, neutrinoAssetIdString))
190254 let profit = (((sharePercent * getProfit(profitSyncIndex)) / 100) / PERCENTACCURACY)
191255 ScriptResult(WriteSet([DataEntry(getIsClaimedKey(account, profitSyncIndex), true)]), TransferSet([ScriptTransfer(addressFromStringValue(account), profit, neutrinoAssetId)]))
192256 }
193257 }
194258
195259

github/deemru/w8io/873ac7e 
39.65 ms