UNPKG

13.8 kBJavaScriptView Raw
1import { IOHelper } from '@neo-one/client-common-esnext-esm';
2import { BaseState } from '@neo-one/client-full-common-esnext-esm';
3import { createSerializeWire, } from './Serializable';
4import { BinaryReader, utils } from './utils';
5export class TransactionData extends BaseState {
6 constructor({ version, hash, blockHash, startHeight, index, globalIndex, endHeights = {}, claimed = {}, }) {
7 super({ version });
8 this.serializeWire = createSerializeWire(this.serializeWireBase.bind(this));
9 this.hash = hash;
10 this.blockHash = blockHash;
11 this.startHeight = startHeight;
12 this.index = index;
13 this.globalIndex = globalIndex;
14 this.endHeights = endHeights;
15 this.claimed = claimed;
16 this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt8 +
17 IOHelper.sizeOfUInt256 +
18 IOHelper.sizeOfUInt32LE +
19 IOHelper.sizeOfObject(this.endHeights, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt32LE) +
20 IOHelper.sizeOfObject(this.claimed, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfBoolean));
21 }
22 static deserializeWireBase({ reader }) {
23 const version = reader.readUInt8();
24 const hash = reader.readUInt256();
25 const blockHash = reader.readUInt256();
26 const startHeight = reader.readUInt32LE();
27 const index = reader.readUInt32LE();
28 const globalIndex = reader.readUInt64LE();
29 const endHeights = reader.readObject(() => {
30 const key = reader.readUInt32LE();
31 const value = reader.readUInt32LE();
32 return { key, value };
33 });
34 const claimed = reader.readObject(() => {
35 const key = reader.readUInt32LE();
36 const value = reader.readBoolean();
37 return { key, value };
38 });
39 return new this({
40 version,
41 hash,
42 blockHash,
43 startHeight,
44 index,
45 globalIndex,
46 endHeights,
47 claimed,
48 });
49 }
50 static deserializeWire(options) {
51 return this.deserializeWireBase({
52 context: options.context,
53 reader: new BinaryReader(options.buffer),
54 });
55 }
56 get size() {
57 return this.sizeInternal();
58 }
59 update({ endHeights = this.endHeights, claimed = this.claimed }) {
60 return new TransactionData({
61 version: this.version,
62 hash: this.hash,
63 blockHash: this.blockHash,
64 startHeight: this.startHeight,
65 index: this.index,
66 globalIndex: this.globalIndex,
67 endHeights,
68 claimed,
69 });
70 }
71 serializeWireBase(writer) {
72 writer.writeUInt8(this.version);
73 writer.writeUInt256(this.hash);
74 writer.writeUInt256(this.blockHash);
75 writer.writeUInt32LE(this.startHeight);
76 writer.writeUInt32LE(this.index);
77 writer.writeUInt64LE(this.globalIndex);
78 writer.writeObject(this.endHeights, (key, value) => {
79 writer.writeUInt32LE(key);
80 writer.writeUInt32LE(value);
81 });
82 writer.writeObject(this.claimed, (key, value) => {
83 writer.writeUInt32LE(key);
84 writer.writeBoolean(value);
85 });
86 }
87}
88
89//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvcmUvc3JjL1RyYW5zYWN0aW9uRGF0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpbmFyeVdyaXRlciwgSU9IZWxwZXIsIFVJbnQyNTYgfSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uLWVzbmV4dC1lc20nO1xuaW1wb3J0IHsgQmFzZVN0YXRlIH0gZnJvbSAnQG5lby1vbmUvY2xpZW50LWZ1bGwtY29tbW9uLWVzbmV4dC1lc20nO1xuaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNlcmlhbGl6ZVdpcmUsXG4gIERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zLFxuICBEZXNlcmlhbGl6ZVdpcmVPcHRpb25zLFxuICBTZXJpYWxpemFibGVXaXJlLFxuICBTZXJpYWxpemVXaXJlLFxufSBmcm9tICcuL1NlcmlhbGl6YWJsZSc7XG5pbXBvcnQgeyBCaW5hcnlSZWFkZXIsIHV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25EYXRhQWRkIHtcbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcbiAgcmVhZG9ubHkgaGFzaDogVUludDI1NjtcbiAgcmVhZG9ubHkgYmxvY2tIYXNoOiBVSW50MjU2O1xuICByZWFkb25seSBzdGFydEhlaWdodDogbnVtYmVyO1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICByZWFkb25seSBnbG9iYWxJbmRleDogQk47XG4gIHJlYWRvbmx5IGVuZEhlaWdodHM/OiB7IHJlYWRvbmx5IFtpbmRleDogbnVtYmVyXTogbnVtYmVyIH07XG4gIHJlYWRvbmx5IGNsYWltZWQ/OiB7IHJlYWRvbmx5IFtpbmRleDogbnVtYmVyXTogYm9vbGVhbiB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRGF0YVVwZGF0ZSB7XG4gIHJlYWRvbmx5IGVuZEhlaWdodHM/OiB7IHJlYWRvbmx5IFtpbmRleDogbnVtYmVyXTogbnVtYmVyIH07XG4gIHJlYWRvbmx5IGNsYWltZWQ/OiB7IHJlYWRvbmx5IFtpbmRleDogbnVtYmVyXTogYm9vbGVhbiB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRGF0YUtleSB7XG4gIHJlYWRvbmx5IGhhc2g6IFVJbnQyNTY7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkRhdGEgZXh0ZW5kcyBCYXNlU3RhdGUgaW1wbGVtZW50cyBTZXJpYWxpemFibGVXaXJlPFRyYW5zYWN0aW9uRGF0YT4ge1xuICBwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplV2lyZUJhc2UoeyByZWFkZXIgfTogRGVzZXJpYWxpemVXaXJlQmFzZU9wdGlvbnMpOiBUcmFuc2FjdGlvbkRhdGEge1xuICAgIGNvbnN0IHZlcnNpb24gPSByZWFkZXIucmVhZFVJbnQ4KCk7XG4gICAgY29uc3QgaGFzaCA9IHJlYWRlci5yZWFkVUludDI1NigpO1xuICAgIGNvbnN0IGJsb2NrSGFzaCA9IHJlYWRlci5yZWFkVUludDI1NigpO1xuICAgIGNvbnN0IHN0YXJ0SGVpZ2h0ID0gcmVhZGVyLnJlYWRVSW50MzJMRSgpO1xuICAgIGNvbnN0IGluZGV4ID0gcmVhZGVyLnJlYWRVSW50MzJMRSgpO1xuICAgIGNvbnN0IGdsb2JhbEluZGV4ID0gcmVhZGVyLnJlYWRVSW50NjRMRSgpO1xuICAgIGNvbnN0IGVuZEhlaWdodHMgPSByZWFkZXIucmVhZE9iamVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSByZWFkZXIucmVhZFVJbnQzMkxFKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlYWRlci5yZWFkVUludDMyTEUoKTtcblxuICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltZWQgPSByZWFkZXIucmVhZE9iamVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSByZWFkZXIucmVhZFVJbnQzMkxFKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlYWRlci5yZWFkQm9vbGVhbigpO1xuXG4gICAgICByZXR1cm4geyBrZXksIHZhbHVlIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgdmVyc2lvbixcbiAgICAgIGhhc2gsXG4gICAgICBibG9ja0hhc2gsXG4gICAgICBzdGFydEhlaWdodCxcbiAgICAgIGluZGV4LFxuICAgICAgZ2xvYmFsSW5kZXgsXG4gICAgICBlbmRIZWlnaHRzLFxuICAgICAgY2xhaW1lZCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemVXaXJlKG9wdGlvbnM6IERlc2VyaWFsaXplV2lyZU9wdGlvbnMpOiBUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplV2lyZUJhc2Uoe1xuICAgICAgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LFxuICAgICAgcmVhZGVyOiBuZXcgQmluYXJ5UmVhZGVyKG9wdGlvbnMuYnVmZmVyKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBoYXNoOiBVSW50MjU2O1xuICBwdWJsaWMgcmVhZG9ubHkgYmxvY2tIYXNoOiBVSW50MjU2O1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRIZWlnaHQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBnbG9iYWxJbmRleDogQk47XG4gIHB1YmxpYyByZWFkb25seSBlbmRIZWlnaHRzOiB7XG4gICAgcmVhZG9ubHkgW2luZGV4OiBudW1iZXJdOiBudW1iZXI7XG4gIH07XG4gIHB1YmxpYyByZWFkb25seSBjbGFpbWVkOiB7XG4gICAgcmVhZG9ubHkgW2luZGV4OiBudW1iZXJdOiBib29sZWFuO1xuICB9O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VyaWFsaXplV2lyZTogU2VyaWFsaXplV2lyZSA9IGNyZWF0ZVNlcmlhbGl6ZVdpcmUodGhpcy5zZXJpYWxpemVXaXJlQmFzZS5iaW5kKHRoaXMpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaXplSW50ZXJuYWw6ICgpID0+IG51bWJlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioe1xuICAgIHZlcnNpb24sXG4gICAgaGFzaCxcbiAgICBibG9ja0hhc2gsXG4gICAgc3RhcnRIZWlnaHQsXG4gICAgaW5kZXgsXG4gICAgZ2xvYmFsSW5kZXgsXG4gICAgZW5kSGVpZ2h0cyA9IHt9LFxuICAgIGNsYWltZWQgPSB7fSxcbiAgfTogVHJhbnNhY3Rpb25EYXRhQWRkKSB7XG4gICAgc3VwZXIoeyB2ZXJzaW9uIH0pO1xuICAgIHRoaXMuaGFzaCA9IGhhc2g7XG4gICAgdGhpcy5ibG9ja0hhc2ggPSBibG9ja0hhc2g7XG4gICAgdGhpcy5zdGFydEhlaWdodCA9IHN0YXJ0SGVpZ2h0O1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmdsb2JhbEluZGV4ID0gZ2xvYmFsSW5kZXg7XG4gICAgdGhpcy5lbmRIZWlnaHRzID0gZW5kSGVpZ2h0cztcbiAgICB0aGlzLmNsYWltZWQgPSBjbGFpbWVkO1xuICAgIHRoaXMuc2l6ZUludGVybmFsID0gdXRpbHMubGF6eShcbiAgICAgICgpID0+XG4gICAgICAgIElPSGVscGVyLnNpemVPZlVJbnQ4ICtcbiAgICAgICAgSU9IZWxwZXIuc2l6ZU9mVUludDI1NiArXG4gICAgICAgIElPSGVscGVyLnNpemVPZlVJbnQzMkxFICtcbiAgICAgICAgSU9IZWxwZXIuc2l6ZU9mT2JqZWN0KHRoaXMuZW5kSGVpZ2h0cywgKCkgPT4gSU9IZWxwZXIuc2l6ZU9mVUludDMyTEUgKyBJT0hlbHBlci5zaXplT2ZVSW50MzJMRSkgK1xuICAgICAgICBJT0hlbHBlci5zaXplT2ZPYmplY3QodGhpcy5jbGFpbWVkLCAoKSA9PiBJT0hlbHBlci5zaXplT2ZVSW50MzJMRSArIElPSGVscGVyLnNpemVPZkJvb2xlYW4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaXplSW50ZXJuYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoeyBlbmRIZWlnaHRzID0gdGhpcy5lbmRIZWlnaHRzLCBjbGFpbWVkID0gdGhpcy5jbGFpbWVkIH06IFRyYW5zYWN0aW9uRGF0YVVwZGF0ZSk6IFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkRhdGEoe1xuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgaGFzaDogdGhpcy5oYXNoLFxuICAgICAgYmxvY2tIYXNoOiB0aGlzLmJsb2NrSGFzaCxcbiAgICAgIHN0YXJ0SGVpZ2h0OiB0aGlzLnN0YXJ0SGVpZ2h0LFxuICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICBnbG9iYWxJbmRleDogdGhpcy5nbG9iYWxJbmRleCxcbiAgICAgIGVuZEhlaWdodHMsXG4gICAgICBjbGFpbWVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlcmlhbGl6ZVdpcmVCYXNlKHdyaXRlcjogQmluYXJ5V3JpdGVyKTogdm9pZCB7XG4gICAgd3JpdGVyLndyaXRlVUludDgodGhpcy52ZXJzaW9uKTtcbiAgICB3cml0ZXIud3JpdGVVSW50MjU2KHRoaXMuaGFzaCk7XG4gICAgd3JpdGVyLndyaXRlVUludDI1Nih0aGlzLmJsb2NrSGFzaCk7XG4gICAgd3JpdGVyLndyaXRlVUludDMyTEUodGhpcy5zdGFydEhlaWdodCk7XG4gICAgd3JpdGVyLndyaXRlVUludDMyTEUodGhpcy5pbmRleCk7XG4gICAgd3JpdGVyLndyaXRlVUludDY0TEUodGhpcy5nbG9iYWxJbmRleCk7XG4gICAgd3JpdGVyLndyaXRlT2JqZWN0KHRoaXMuZW5kSGVpZ2h0cywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHdyaXRlci53cml0ZVVJbnQzMkxFKGtleSk7XG4gICAgICB3cml0ZXIud3JpdGVVSW50MzJMRSh2YWx1ZSk7XG4gICAgfSk7XG4gICAgd3JpdGVyLndyaXRlT2JqZWN0KHRoaXMuY2xhaW1lZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIHdyaXRlci53cml0ZVVJbnQzMkxFKGtleSk7XG4gICAgICB3cml0ZXIud3JpdGVCb29sZWFuKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxufVxuIl19