1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const client_common_1 = require("@neo-one/client-common");
|
4 | const errors_1 = require("../errors");
|
5 | const utils_1 = require("../utils");
|
6 | const TransactionBase_1 = require("./TransactionBase");
|
7 | const TransactionType_1 = require("./TransactionType");
|
8 | class EnrollmentTransaction extends TransactionBase_1.TransactionBase(client_common_1.TransactionBaseModel) {
|
9 | constructor({ version, attributes, inputs, outputs, scripts, hash, publicKey }) {
|
10 | super({
|
11 | version,
|
12 | type: TransactionType_1.TransactionType.Enrollment,
|
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.sizeOfECPoint(this.publicKey));
|
20 | this.publicKey = publicKey;
|
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.enrollmentGetScriptHashesForVerifyingInternal = utils_1.utils.lazyAsync(async (options) => {
|
26 | const hashes = await getScriptHashesForVerifying(options);
|
27 | return new Set([...hashes, client_common_1.common.uInt160ToHex(client_common_1.crypto.getVerificationScriptHash(this.publicKey))]);
|
28 | });
|
29 | }
|
30 | static deserializeWireBase(options) {
|
31 | const { reader } = options;
|
32 | const { type, version } = super.deserializeTransactionBaseStartWireBase(options);
|
33 | if (type !== TransactionType_1.TransactionType.Enrollment) {
|
34 | throw new client_common_1.InvalidFormatError(`Expected transaction type ${TransactionType_1.TransactionType.Enrollment}. Received: ${type}`);
|
35 | }
|
36 | const publicKey = reader.readECPoint();
|
37 | const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options);
|
38 | return new this({
|
39 | version,
|
40 | publicKey,
|
41 | attributes,
|
42 | inputs,
|
43 | outputs,
|
44 | scripts,
|
45 | });
|
46 | }
|
47 | clone({ scripts = this.scripts, attributes = this.attributes, inputs = this.inputs, outputs = this.outputs, }) {
|
48 | return new this.constructor({
|
49 | version: this.version,
|
50 | attributes,
|
51 | inputs,
|
52 | outputs,
|
53 | scripts,
|
54 | publicKey: this.publicKey,
|
55 | });
|
56 | }
|
57 | serializeExclusiveBase(writer) {
|
58 | writer.writeECPoint(this.publicKey);
|
59 | }
|
60 | async serializeJSON(context) {
|
61 | const transactionBaseJSON = await super.serializeTransactionBaseJSON(context);
|
62 | return Object.assign(Object.assign({}, transactionBaseJSON), { type: 'EnrollmentTransaction', pubkey: client_common_1.JSONHelper.writeECPoint(this.publicKey) });
|
63 | }
|
64 | async getScriptHashesForVerifying(options) {
|
65 | return this.enrollmentGetScriptHashesForVerifyingInternal(options);
|
66 | }
|
67 | async verify(_options) {
|
68 | throw new errors_1.VerifyError('Enrollment transactions are obsolete');
|
69 | }
|
70 | }
|
71 | exports.EnrollmentTransaction = EnrollmentTransaction;
|
72 |
|
73 |
|