@desig/web3
Version:
Desig: The Blockchain-Agnostic Multisig Solution
149 lines • 7.26 kB
JavaScript
;
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