UNPKG

3.9 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const client_common_1 = require("@neo-one/client-common");
4const utils_1 = require("../utils");
5const state_1 = require("./state");
6const TransactionBase_1 = require("./TransactionBase");
7const TransactionType_1 = require("./TransactionType");
8class StateTransaction extends TransactionBase_1.TransactionBase(client_common_1.TransactionBaseModel) {
9 constructor({ version, attributes, inputs, outputs, scripts, hash, descriptors }) {
10 super({
11 version,
12 type: TransactionType_1.TransactionType.State,
13 attributes,
14 inputs,
15 outputs,
16 scripts,
17 hash,
18 });
19 this.sizeExclusive = utils_1.utils.lazy(() => client_common_1.IOHelper.sizeOfArray(this.descriptors, (descriptor) => descriptor.size));
20 this.descriptors = descriptors;
21 if (this.version !== 0) {
22 throw new client_common_1.InvalidFormatError(`Expected version to be 0. Received: ${this.version}`);
23 }
24 const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this);
25 this.stateGetScriptHashesForVerifyingInternal = utils_1.utils.lazyAsync(async (options) => {
26 const mutableHashes = await getScriptHashesForVerifying(options);
27 this.descriptors.forEach((descriptor) => {
28 descriptor.getScriptHashesForVerifying().forEach((scriptHash) => {
29 mutableHashes.add(scriptHash);
30 });
31 });
32 return mutableHashes;
33 });
34 }
35 static deserializeWireBase(options) {
36 const { reader } = options;
37 const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
38 if (type !== TransactionType_1.TransactionType.State) {
39 throw new client_common_1.InvalidFormatError(`Expected transaction type ${TransactionType_1.TransactionType.State}. Received: ${type}`);
40 }
41 const descriptors = reader.readArray(() => state_1.StateDescriptor.deserializeWireBase(options));
42 const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
43 return new this({
44 version,
45 attributes,
46 inputs,
47 outputs,
48 scripts,
49 descriptors,
50 });
51 }
52 getSystemFee(context) {
53 return this.descriptors.reduce((value, descriptor) => value.add(descriptor.getSystemFee(context)), utils_1.utils.ZERO);
54 }
55 async getScriptHashesForVerifying(options) {
56 return this.stateGetScriptHashesForVerifyingInternal(options);
57 }
58 clone({ scripts = this.scripts, attributes = this.attributes, inputs = this.inputs, outputs = this.outputs, }) {
59 return new this.constructor({
60 version: this.version,
61 attributes,
62 inputs,
63 outputs,
64 scripts,
65 descriptors: this.descriptors,
66 });
67 }
68 serializeExclusiveBase(writer) {
69 writer.writeArray(this.descriptors, (descriptor) => {
70 descriptor.serializeWireBase(writer);
71 });
72 }
73 async serializeJSON(context) {
74 const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
75 return Object.assign(Object.assign({}, transactionBaseJSON), { type: 'StateTransaction', descriptors: this.descriptors.map((descriptor) => descriptor.serializeJSON(context)) });
76 }
77 async verify(options) {
78 const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]);
79 return results;
80 }
81 async verifyInternal(options) {
82 await Promise.all(this.descriptors.map(async (descriptor) => descriptor.verify(options)));
83 }
84}
85exports.StateTransaction = StateTransaction;
86
87//# sourceMappingURL=StateTransaction.js.map