1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const client_common_1 = require("@neo-one/client-common");
|
4 | const utils_1 = require("../utils");
|
5 | const state_1 = require("./state");
|
6 | const TransactionBase_1 = require("./TransactionBase");
|
7 | const TransactionType_1 = require("./TransactionType");
|
8 | class 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 | }
|
85 | exports.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==
|