UNPKG

3.12 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3// tslint:disable:member-ordering
4const errors_1 = require("../errors");
5const utils_1 = require("../utils");
6const deserializer_1 = require("./deserializer");
7const serializer_1 = require("./serializer");
8const types_1 = require("./types");
9const utils_2 = require("./utils");
10const verifier_1 = require("./verifier");
11class TransactionFactory {
12 static fromHex(hex) {
13 return this.fromSerialized(hex);
14 }
15 static fromBytes(buffer, strict = true) {
16 return this.fromSerialized(buffer ? buffer.toString("hex") : undefined, strict);
17 }
18 /**
19 * Deserializes a transaction from `buffer` with the given `id`. It is faster
20 * than `fromBytes` at the cost of vital safety checks (validation, verification and id calculation).
21 *
22 * NOTE: Only use this internally when it is safe to assume the buffer has already been
23 * verified.
24 */
25 static fromBytesUnsafe(buffer, id) {
26 try {
27 const transaction = deserializer_1.deserializer.deserialize(buffer);
28 transaction.data.id = id || utils_2.Utils.getId(transaction.data);
29 transaction.isVerified = true;
30 return transaction;
31 }
32 catch (error) {
33 throw new errors_1.MalformedTransactionBytesError();
34 }
35 }
36 static fromJson(json) {
37 const data = { ...json };
38 data.amount = utils_1.BigNumber.make(data.amount);
39 data.fee = utils_1.BigNumber.make(data.fee);
40 return this.fromData(data);
41 }
42 static fromData(data, strict = true) {
43 const { value, error } = verifier_1.Verifier.verifySchema(data, strict);
44 if (error && !utils_1.isException(value)) {
45 throw new errors_1.TransactionSchemaError(error);
46 }
47 const transaction = types_1.TransactionTypeFactory.create(value);
48 const { version } = transaction.data;
49 if (!version || version === 1) {
50 deserializer_1.deserializer.applyV1Compatibility(transaction.data);
51 }
52 serializer_1.Serializer.serialize(transaction);
53 return this.fromBytes(transaction.serialized, strict);
54 }
55 static fromSerialized(serialized, strict = true) {
56 try {
57 const transaction = deserializer_1.deserializer.deserialize(serialized);
58 transaction.data.id = utils_2.Utils.getId(transaction.data);
59 const { value, error } = verifier_1.Verifier.verifySchema(transaction.data, strict);
60 if (error && !utils_1.isException(value)) {
61 throw new errors_1.TransactionSchemaError(error);
62 }
63 transaction.isVerified = transaction.verify();
64 return transaction;
65 }
66 catch (error) {
67 if (error instanceof errors_1.TransactionVersionError || error instanceof errors_1.TransactionSchemaError) {
68 throw error;
69 }
70 throw new errors_1.MalformedTransactionBytesError();
71 }
72 }
73}
74exports.TransactionFactory = TransactionFactory;
75//# sourceMappingURL=factory.js.map
\No newline at end of file