UNPKG

15.2 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({}, 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=data:application/json;charset=utf8;base64,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VSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUNwRjtJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWlDO1FBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQWlDO1FBQzVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUE3SEQsNENBNkhDIiwiZmlsZSI6Im5lby1vbmUtbm9kZS1jb3JlL3NyYy90cmFuc2FjdGlvbi9TdGF0ZVRyYW5zYWN0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmluYXJ5V3JpdGVyLFxuICBJbnZhbGlkRm9ybWF0RXJyb3IsXG4gIElPSGVscGVyLFxuICBTdGF0ZVRyYW5zYWN0aW9uSlNPTixcbiAgVHJhbnNhY3Rpb25CYXNlTW9kZWwsXG4gIFVJbnQxNjBIZXgsXG59IGZyb20gJ0BuZW8tb25lL2NsaWVudC1jb21tb24nO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICdAbmVvLW9uZS91dGlscyc7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zLCBTZXJpYWxpemVKU09OQ29udGV4dCB9IGZyb20gJy4uL1NlcmlhbGl6YWJsZSc7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFZlcmlmeVNjcmlwdFJlc3VsdCB9IGZyb20gJy4uL3ZtJztcbmltcG9ydCB7IFdpdG5lc3MgfSBmcm9tICcuLi9XaXRuZXNzJztcbmltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gJy4vYXR0cmlidXRlJztcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9JbnB1dCc7XG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tICcuL091dHB1dCc7XG5pbXBvcnQgeyBTdGF0ZURlc2NyaXB0b3IgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7XG4gIEZlZUNvbnRleHQsXG4gIFRyYW5zYWN0aW9uQmFzZSxcbiAgVHJhbnNhY3Rpb25CYXNlQWRkLFxuICBUcmFuc2FjdGlvbkdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZ09wdGlvbnMsXG4gIFRyYW5zYWN0aW9uVmVyaWZ5T3B0aW9ucyxcbn0gZnJvbSAnLi9UcmFuc2FjdGlvbkJhc2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9UcmFuc2FjdGlvblR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlVHJhbnNhY3Rpb25BZGQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJhc2VBZGQge1xuICByZWFkb25seSBkZXNjcmlwdG9yczogcmVhZG9ubHkgU3RhdGVEZXNjcmlwdG9yW107XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZVRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb25CYXNlPFxuICBUcmFuc2FjdGlvblR5cGUuU3RhdGUsXG4gIFN0YXRlVHJhbnNhY3Rpb25KU09OLFxuICBDb25zdHJ1Y3RvcjxUcmFuc2FjdGlvbkJhc2VNb2RlbDxUcmFuc2FjdGlvblR5cGUuU3RhdGUsIEF0dHJpYnV0ZSwgSW5wdXQsIE91dHB1dCwgV2l0bmVzcz4+XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbj4oVHJhbnNhY3Rpb25CYXNlTW9kZWwgYXMgYW55KSB7XG4gIHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemVXaXJlQmFzZShvcHRpb25zOiBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucyk6IFN0YXRlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHsgcmVhZGVyIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgdHlwZSwgdmVyc2lvbiB9ID0gc3VwZXIuZGVzZXJpYWxpemVUcmFuc2FjdGlvbkJhc2VTdGFydFdpcmVCYXNlKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRGb3JtYXRFcnJvcihgRXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZSAke1RyYW5zYWN0aW9uVHlwZS5TdGF0ZX0uIFJlY2VpdmVkOiAke3R5cGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSByZWFkZXIucmVhZEFycmF5KCgpID0+IFN0YXRlRGVzY3JpcHRvci5kZXNlcmlhbGl6ZVdpcmVCYXNlKG9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgaW5wdXRzLCBvdXRwdXRzLCBzY3JpcHRzIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZUVuZFdpcmVCYXNlKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaW5wdXRzLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBkZXNjcmlwdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdG9yczogcmVhZG9ubHkgU3RhdGVEZXNjcmlwdG9yW107XG4gIHByb3RlY3RlZCByZWFkb25seSBzaXplRXhjbHVzaXZlOiAoKSA9PiBudW1iZXIgPSB1dGlscy5sYXp5KCgpID0+XG4gICAgSU9IZWxwZXIuc2l6ZU9mQXJyYXkodGhpcy5kZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IpID0+IGRlc2NyaXB0b3Iuc2l6ZSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVHZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdJbnRlcm5hbDogKFxuICAgIG9wdGlvbnM6IFRyYW5zYWN0aW9uR2V0U2NyaXB0SGFzaGVzRm9yVmVyaWZ5aW5nT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPFNldDxVSW50MTYwSGV4Pj47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHsgdmVyc2lvbiwgYXR0cmlidXRlcywgaW5wdXRzLCBvdXRwdXRzLCBzY3JpcHRzLCBoYXNoLCBkZXNjcmlwdG9ycyB9OiBTdGF0ZVRyYW5zYWN0aW9uQWRkKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdmVyc2lvbixcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGF0ZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBpbnB1dHMsXG4gICAgICBvdXRwdXRzLFxuICAgICAgc2NyaXB0cyxcbiAgICAgIGhhc2gsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlc2NyaXB0b3JzID0gZGVzY3JpcHRvcnM7XG5cbiAgICBpZiAodGhpcy52ZXJzaW9uICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEZvcm1hdEVycm9yKGBFeHBlY3RlZCB2ZXJzaW9uIHRvIGJlIDAuIFJlY2VpdmVkOiAke3RoaXMudmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmcgPSBzdXBlci5nZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmcuYmluZCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlR2V0U2NyaXB0SGFzaGVzRm9yVmVyaWZ5aW5nSW50ZXJuYWwgPSB1dGlscy5sYXp5QXN5bmMoXG4gICAgICBhc3luYyAob3B0aW9uczogVHJhbnNhY3Rpb25HZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdPcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IG11dGFibGVIYXNoZXMgPSBhd2FpdCBnZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmcob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcnMuZm9yRWFjaCgoZGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0U2NyaXB0SGFzaGVzRm9yVmVyaWZ5aW5nKCkuZm9yRWFjaCgoc2NyaXB0SGFzaCkgPT4ge1xuICAgICAgICAgICAgbXV0YWJsZUhhc2hlcy5hZGQoc2NyaXB0SGFzaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtdXRhYmxlSGFzaGVzO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFN5c3RlbUZlZShjb250ZXh0OiBGZWVDb250ZXh0KTogQk4ge1xuICAgIHJldHVybiB0aGlzLmRlc2NyaXB0b3JzLnJlZHVjZSgodmFsdWUsIGRlc2NyaXB0b3IpID0+IHZhbHVlLmFkZChkZXNjcmlwdG9yLmdldFN5c3RlbUZlZShjb250ZXh0KSksIHV0aWxzLlpFUk8pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZyhcbiAgICBvcHRpb25zOiBUcmFuc2FjdGlvbkdldFNjcmlwdEhhc2hlc0ZvclZlcmlmeWluZ09wdGlvbnMsXG4gICk6IFByb21pc2U8U2V0PFVJbnQxNjBIZXg+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVHZXRTY3JpcHRIYXNoZXNGb3JWZXJpZnlpbmdJbnRlcm5hbChvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZSh7XG4gICAgc2NyaXB0cyA9IHRoaXMuc2NyaXB0cyxcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzLFxuICAgIGlucHV0cyA9IHRoaXMuaW5wdXRzLFxuICAgIG91dHB1dHMgPSB0aGlzLm91dHB1dHMsXG4gIH06IHtcbiAgICByZWFkb25seSBzY3JpcHRzPzogcmVhZG9ubHkgV2l0bmVzc1tdO1xuICAgIHJlYWRvbmx5IGF0dHJpYnV0ZXM/OiByZWFkb25seSBBdHRyaWJ1dGVbXTtcbiAgICByZWFkb25seSBpbnB1dHM/OiByZWFkb25seSBJbnB1dFtdO1xuICAgIHJlYWRvbmx5IG91dHB1dHM/OiByZWFkb25seSBPdXRwdXRbXTtcbiAgfSk6IHRoaXMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkoe1xuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgZGVzY3JpcHRvcnM6IHRoaXMuZGVzY3JpcHRvcnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplRXhjbHVzaXZlQmFzZSh3cml0ZXI6IEJpbmFyeVdyaXRlcik6IHZvaWQge1xuICAgIHdyaXRlci53cml0ZUFycmF5KHRoaXMuZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yKSA9PiB7XG4gICAgICBkZXNjcmlwdG9yLnNlcmlhbGl6ZVdpcmVCYXNlKHdyaXRlcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2VyaWFsaXplSlNPTihjb250ZXh0OiBTZXJpYWxpemVKU09OQ29udGV4dCk6IFByb21pc2U8U3RhdGVUcmFuc2FjdGlvbkpTT04+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkJhc2VKU09OID0gYXdhaXQgc3VwZXIuc2VyaWFsaXplVHJhbnNhY3Rpb25CYXNlSlNPTihjb250ZXh0KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFuc2FjdGlvbkJhc2VKU09OLFxuICAgICAgdHlwZTogJ1N0YXRlVHJhbnNhY3Rpb24nLFxuICAgICAgZGVzY3JpcHRvcnM6IHRoaXMuZGVzY3JpcHRvcnMubWFwKChkZXNjcmlwdG9yKSA9PiBkZXNjcmlwdG9yLnNlcmlhbGl6ZUpTT04oY29udGV4dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KG9wdGlvbnM6IFRyYW5zYWN0aW9uVmVyaWZ5T3B0aW9ucyk6IFByb21pc2U8cmVhZG9ubHkgVmVyaWZ5U2NyaXB0UmVzdWx0W10+IHtcbiAgICBjb25zdCBbcmVzdWx0c10gPSBhd2FpdCBQcm9taXNlLmFsbChbc3VwZXIudmVyaWZ5KG9wdGlvbnMpLCB0aGlzLnZlcmlmeUludGVybmFsKG9wdGlvbnMpXSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmVyaWZ5SW50ZXJuYWwob3B0aW9uczogVHJhbnNhY3Rpb25WZXJpZnlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5kZXNjcmlwdG9ycy5tYXAoYXN5bmMgKGRlc2NyaXB0b3IpID0+IGRlc2NyaXB0b3IudmVyaWZ5KG9wdGlvbnMpKSk7XG4gIH1cbn1cbiJdfQ==