UNPKG

@desig/web3

Version:

Desig: The Blockchain-Agnostic Multisig Solution

149 lines 7.26 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.TZkProofParser = exports.TransactionParser = exports.TransactionType = void 0; const sha3_1 = require("@noble/hashes/sha3"); const proto_1 = require("../../proto"); const core_1 = require("@desig/core"); var TransactionType; (function (TransactionType) { TransactionType["tExtension"] = "tExtension"; TransactionType["tReduction"] = "tReduction"; TransactionType["nExtension"] = "nExtension"; TransactionType["nReduction"] = "nReduction"; })(TransactionType = exports.TransactionType || (exports.TransactionType = {})); class TransactionParser { constructor() { this.verify = (buf, gid) => __awaiter(this, void 0, void 0, function* () { const { selector, refgid, t, n } = proto_1.transaction.BaseTransaction.decode(buf); if (!!gid && !(0, core_1.equal)([gid, refgid])) throw new Error('Stale transaction.'); return { txType: TransactionParser.parseType(selector), refgid, t: Number(t), n: Number(n), }; }); this.nExtension = { encode: (data) => { const payload = Object.assign({ selector: TransactionParser.selectors[TransactionType.nExtension] }, data); const er = proto_1.transaction.nExtension.verify(payload); if (er) throw new Error(er); const msg = proto_1.transaction.nExtension.create(payload); return proto_1.transaction.nExtension.encode(msg).finish(); }, decode: (buf) => { const _b = proto_1.transaction.nExtension.decode(buf), { selector } = _b, data = __rest(_b, ["selector"]); if (TransactionParser.parseType(selector) !== TransactionType.nExtension) throw new Error('Invalid type'); return data; }, }; this.nReduction = { encode: (data) => { const payload = Object.assign({ selector: TransactionParser.selectors[TransactionType.nReduction] }, data); const er = proto_1.transaction.nReduction.verify(payload); if (er) throw new Error(er); const msg = proto_1.transaction.nReduction.create(payload); return proto_1.transaction.nReduction.encode(msg).finish(); }, decode: (buf) => { const _b = proto_1.transaction.nReduction.decode(buf), { selector } = _b, data = __rest(_b, ["selector"]); if (TransactionParser.parseType(selector) !== TransactionType.nReduction) throw new Error('Invalid type'); return data; }, }; this.tExtension = { encode: (data) => { const payload = Object.assign({ selector: TransactionParser.selectors[TransactionType.tExtension] }, data); const er = proto_1.transaction.tExtension.verify(payload); if (er) throw new Error(er); const msg = proto_1.transaction.tExtension.create(payload); return proto_1.transaction.tExtension.encode(msg).finish(); }, decode: (buf) => { const _b = proto_1.transaction.tExtension.decode(buf), { selector } = _b, data = __rest(_b, ["selector"]); if (TransactionParser.parseType(selector) !== TransactionType.tExtension) throw new Error('Invalid type'); return data; }, }; this.tReduction = { encode: (data) => { const payload = Object.assign({ selector: TransactionParser.selectors[TransactionType.tReduction] }, data); const er = proto_1.transaction.tReduction.verify(payload); if (er) throw new Error(er); const msg = proto_1.transaction.tReduction.create(payload); return proto_1.transaction.tReduction.encode(msg).finish(); }, decode: (buf) => { const _b = proto_1.transaction.tReduction.decode(buf), { selector } = _b, data = __rest(_b, ["selector"]); if (TransactionParser.parseType(selector) !== TransactionType.tReduction) throw new Error('Invalid type'); return data; }, }; } } exports.TransactionParser = TransactionParser; _a = TransactionParser; TransactionParser.selectors = { tExtension: (0, sha3_1.keccak_256)(TransactionType.tExtension).subarray(0, 8), tReduction: (0, sha3_1.keccak_256)(TransactionType.tReduction).subarray(0, 8), nExtension: (0, sha3_1.keccak_256)(TransactionType.nExtension).subarray(0, 8), nReduction: (0, sha3_1.keccak_256)(TransactionType.nReduction).subarray(0, 8), }; TransactionParser.parseType = (selector) => { if ((0, core_1.equal)([selector, _a.selectors.nExtension])) return TransactionType.nExtension; if ((0, core_1.equal)([selector, _a.selectors.nReduction])) return TransactionType.nReduction; if ((0, core_1.equal)([selector, _a.selectors.tExtension])) return TransactionType.tExtension; if ((0, core_1.equal)([selector, _a.selectors.tReduction])) return TransactionType.tReduction; throw new Error('Unsupported Desig transaction.'); }; class TZkProofParser { constructor() { this.encode = (data) => { const er = proto_1.transaction.ZKProof.verify(data); if (er) throw new Error(er); const msg = proto_1.transaction.ZKProof.create(data); return proto_1.transaction.ZKProof.encode(msg).finish(); }; this.decode = (buf) => { const data = proto_1.transaction.ZKProof.decode(buf); return data; }; } } exports.TZkProofParser = TZkProofParser; //# sourceMappingURL=transaction.parser.js.map