UNPKG

12.5 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const client_common_1 = require("@neo-one/client-common");
4const errors_1 = require("../errors");
5const utils_1 = require("../utils");
6const TransactionBase_1 = require("./TransactionBase");
7const TransactionType_1 = require("./TransactionType");
8class MinerTransaction extends TransactionBase_1.TransactionBase(client_common_1.TransactionBaseModel) {
9 constructor({ version, attributes, inputs, outputs, scripts, hash, nonce }) {
10 super({
11 version,
12 type: TransactionType_1.TransactionType.Miner,
13 attributes,
14 inputs,
15 outputs,
16 scripts,
17 hash,
18 });
19 this.sizeExclusive = utils_1.utils.lazy(() => client_common_1.IOHelper.sizeOfUInt8 + client_common_1.IOHelper.sizeOfUInt32LE);
20 this.nonce = nonce;
21 if (this.version !== 0) {
22 throw new client_common_1.InvalidFormatError(`Expected version to be 0. Received: ${this.version}`);
23 }
24 }
25 static deserializeWireBase(options) {
26 const { reader } = options;
27 const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
28 if (type !== TransactionType_1.TransactionType.Miner) {
29 throw new client_common_1.InvalidFormatError(`Expected transaction type ${TransactionType_1.TransactionType.Miner}. Received: ${type}`);
30 }
31 const nonce = reader.readUInt32LE();
32 const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
33 return new this({
34 version,
35 attributes,
36 inputs,
37 outputs,
38 scripts,
39 nonce,
40 });
41 }
42 clone({ scripts = this.scripts, attributes = this.attributes, inputs = this.inputs, outputs = this.outputs, }) {
43 return new this.constructor({
44 version: this.version,
45 attributes,
46 inputs,
47 outputs,
48 scripts,
49 nonce: this.nonce,
50 });
51 }
52 serializeExclusiveBase(writer) {
53 writer.writeUInt32LE(this.nonce);
54 }
55 async serializeJSON(context) {
56 const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
57 return Object.assign({}, transactionBaseJSON, { type: 'MinerTransaction', nonce: this.nonce });
58 }
59 async getNetworkFee(_context) {
60 return utils_1.utils.ZERO;
61 }
62 async verify(options) {
63 const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]);
64 return results;
65 }
66 async verifyInternal(options) {
67 const { getOutput, utilityToken } = options;
68 const results = await this.getTransactionResults({ getOutput });
69 const resultsIssue = Object.entries(results).filter(([_, value]) => value.lt(utils_1.utils.ZERO));
70 if (resultsIssue.some(([assetHex, _]) => !client_common_1.common.uInt256Equal(client_common_1.common.hexToUInt256(assetHex), utilityToken.hash))) {
71 throw new errors_1.VerifyError('Invalid miner result');
72 }
73 }
74}
75exports.MinerTransaction = MinerTransaction;
76
77//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFPLGFBQUssQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBaUM7UUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBaUM7UUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFHMUYsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsc0JBQU0sQ0FBQyxZQUFZLENBQUMsc0JBQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDaEgsTUFBTSxJQUFJLG9CQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7Q0FDRjtBQTFHRCw0Q0EwR0MiLCJmaWxlIjoibmVvLW9uZS1ub2RlLWNvcmUvc3JjL3RyYW5zYWN0aW9uL01pbmVyVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCaW5hcnlXcml0ZXIsXG4gIGNvbW1vbixcbiAgSW52YWxpZEZvcm1hdEVycm9yLFxuICBJT0hlbHBlcixcbiAgTWluZXJUcmFuc2FjdGlvbkpTT04sXG4gIFRyYW5zYWN0aW9uQmFzZU1vZGVsLFxufSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29tbW9uJztcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSAnQG5lby1vbmUvdXRpbHMnO1xuaW1wb3J0IHsgQk4gfSBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBWZXJpZnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucywgU2VyaWFsaXplSlNPTkNvbnRleHQgfSBmcm9tICcuLi9TZXJpYWxpemFibGUnO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBWZXJpZnlTY3JpcHRSZXN1bHQgfSBmcm9tICcuLi92bSc7XG5pbXBvcnQgeyBXaXRuZXNzIH0gZnJvbSAnLi4vV2l0bmVzcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vSW5wdXQnO1xuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnLi9PdXRwdXQnO1xuaW1wb3J0IHsgRmVlQ29udGV4dCwgVHJhbnNhY3Rpb25CYXNlLCBUcmFuc2FjdGlvbkJhc2VBZGQsIFRyYW5zYWN0aW9uVmVyaWZ5T3B0aW9ucyB9IGZyb20gJy4vVHJhbnNhY3Rpb25CYXNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vVHJhbnNhY3Rpb25UeXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBNaW5lclRyYW5zYWN0aW9uQWRkIGV4dGVuZHMgVHJhbnNhY3Rpb25CYXNlQWRkIHtcbiAgcmVhZG9ubHkgbm9uY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE1pbmVyVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbkJhc2U8XG4gIFRyYW5zYWN0aW9uVHlwZS5NaW5lcixcbiAgTWluZXJUcmFuc2FjdGlvbkpTT04sXG4gIENvbnN0cnVjdG9yPFRyYW5zYWN0aW9uQmFzZU1vZGVsPFRyYW5zYWN0aW9uVHlwZS5NaW5lciwgQXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBXaXRuZXNzPj5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuPihUcmFuc2FjdGlvbkJhc2VNb2RlbCBhcyBhbnkpIHtcbiAgcHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZVdpcmVCYXNlKG9wdGlvbnM6IERlc2VyaWFsaXplV2lyZUJhc2VPcHRpb25zKTogTWluZXJUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgeyByZWFkZXIgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyB0eXBlLCB2ZXJzaW9uIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZVN0YXJ0V2lyZUJhc2Uob3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLk1pbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEZvcm1hdEVycm9yKGBFeHBlY3RlZCB0cmFuc2FjdGlvbiB0eXBlICR7VHJhbnNhY3Rpb25UeXBlLk1pbmVyfS4gUmVjZWl2ZWQ6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub25jZSA9IHJlYWRlci5yZWFkVUludDMyTEUoKTtcblxuICAgIGNvbnN0IHsgYXR0cmlidXRlcywgaW5wdXRzLCBvdXRwdXRzLCBzY3JpcHRzIH0gPSBzdXBlci5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZUVuZFdpcmVCYXNlKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaW5wdXRzLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBub25jZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBub25jZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2l6ZUV4Y2x1c2l2ZTogKCkgPT4gbnVtYmVyID0gdXRpbHMubGF6eSgoKSA9PiBJT0hlbHBlci5zaXplT2ZVSW50OCArIElPSGVscGVyLnNpemVPZlVJbnQzMkxFKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyB2ZXJzaW9uLCBhdHRyaWJ1dGVzLCBpbnB1dHMsIG91dHB1dHMsIHNjcmlwdHMsIGhhc2gsIG5vbmNlIH06IE1pbmVyVHJhbnNhY3Rpb25BZGQpIHtcbiAgICBzdXBlcih7XG4gICAgICB2ZXJzaW9uLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLk1pbmVyLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgaGFzaCxcbiAgICB9KTtcblxuICAgIHRoaXMubm9uY2UgPSBub25jZTtcblxuICAgIGlmICh0aGlzLnZlcnNpb24gIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRm9ybWF0RXJyb3IoYEV4cGVjdGVkIHZlcnNpb24gdG8gYmUgMC4gUmVjZWl2ZWQ6ICR7dGhpcy52ZXJzaW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9uZSh7XG4gICAgc2NyaXB0cyA9IHRoaXMuc2NyaXB0cyxcbiAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzLFxuICAgIGlucHV0cyA9IHRoaXMuaW5wdXRzLFxuICAgIG91dHB1dHMgPSB0aGlzLm91dHB1dHMsXG4gIH06IHtcbiAgICByZWFkb25seSBzY3JpcHRzPzogcmVhZG9ubHkgV2l0bmVzc1tdO1xuICAgIHJlYWRvbmx5IGF0dHJpYnV0ZXM/OiByZWFkb25seSBBdHRyaWJ1dGVbXTtcbiAgICByZWFkb25seSBpbnB1dHM/OiByZWFkb25seSBJbnB1dFtdO1xuICAgIHJlYWRvbmx5IG91dHB1dHM/OiByZWFkb25seSBPdXRwdXRbXTtcbiAgfSk6IHRoaXMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkoe1xuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBzY3JpcHRzLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplRXhjbHVzaXZlQmFzZSh3cml0ZXI6IEJpbmFyeVdyaXRlcik6IHZvaWQge1xuICAgIHdyaXRlci53cml0ZVVJbnQzMkxFKHRoaXMubm9uY2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNlcmlhbGl6ZUpTT04oY29udGV4dDogU2VyaWFsaXplSlNPTkNvbnRleHQpOiBQcm9taXNlPE1pbmVyVHJhbnNhY3Rpb25KU09OPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25CYXNlSlNPTiA9IGF3YWl0IHN1cGVyLnNlcmlhbGl6ZVRyYW5zYWN0aW9uQmFzZUpTT04oY29udGV4dCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udHJhbnNhY3Rpb25CYXNlSlNPTixcbiAgICAgIHR5cGU6ICdNaW5lclRyYW5zYWN0aW9uJyxcbiAgICAgIG5vbmNlOiB0aGlzLm5vbmNlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TmV0d29ya0ZlZShfY29udGV4dDogRmVlQ29udGV4dCk6IFByb21pc2U8Qk4+IHtcbiAgICByZXR1cm4gdXRpbHMuWkVSTztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkob3B0aW9uczogVHJhbnNhY3Rpb25WZXJpZnlPcHRpb25zKTogUHJvbWlzZTxyZWFkb25seSBWZXJpZnlTY3JpcHRSZXN1bHRbXT4ge1xuICAgIGNvbnN0IFtyZXN1bHRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtzdXBlci52ZXJpZnkob3B0aW9ucyksIHRoaXMudmVyaWZ5SW50ZXJuYWwob3B0aW9ucyldKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlJbnRlcm5hbChvcHRpb25zOiBUcmFuc2FjdGlvblZlcmlmeU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGdldE91dHB1dCwgdXRpbGl0eVRva2VuIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uUmVzdWx0cyh7IGdldE91dHB1dCB9KTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkXG4gICAgY29uc3QgcmVzdWx0c0lzc3VlID0gT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZS5sdCh1dGlscy5aRVJPKSk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkXG4gICAgaWYgKHJlc3VsdHNJc3N1ZS5zb21lKChbYXNzZXRIZXgsIF9dKSA9PiAhY29tbW9uLnVJbnQyNTZFcXVhbChjb21tb24uaGV4VG9VSW50MjU2KGFzc2V0SGV4KSwgdXRpbGl0eVRva2VuLmhhc2gpKSkge1xuICAgICAgdGhyb3cgbmV3IFZlcmlmeUVycm9yKCdJbnZhbGlkIG1pbmVyIHJlc3VsdCcpO1xuICAgIH1cbiAgfVxufVxuIl19