UNPKG

ecash-lib

Version:

Library for eCash transaction building

68 lines 2.34 kB
"use strict"; // Copyright (c) 2024 The Bitcoin developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. Object.defineProperty(exports, "__esModule", { value: true }); exports.parseEmppScript = exports.emppScript = void 0; const op_js_1 = require("../op.js"); const opcode_js_1 = require("../opcode.js"); const script_js_1 = require("../script.js"); /** Build an eMPP OP_RETURN script with the given pushdata */ function emppScript(pushdata) { if (pushdata.find(pushdata => pushdata.length == 0) !== undefined) { throw new Error('Pushdata cannot be empty'); } return script_js_1.Script.fromOps([ opcode_js_1.OP_RETURN, opcode_js_1.OP_RESERVED, ...pushdata.map(pushdataOpEmpp), ]); } exports.emppScript = emppScript; function pushdataOpEmpp(pushdata) { if (pushdata.length < opcode_js_1.OP_PUSHDATA1) { return { opcode: pushdata.length, data: pushdata, }; } return (0, op_js_1.pushBytesOp)(pushdata); } /** * Parse a script for EMPP push(es) * * EMPP may encode multiple pushdatas in a single OP_RETURN script * * input script is a valid EMPP OP_RETURN => returns an array of EMPP pushdata(s) * input script is not an EMPP OP_RETURN => returns undefined * input script is an invalid EMPP OP_RETURN => throws */ function parseEmppScript(script) { const ops = script.ops(); const opreturnOp = ops.next(); if (opreturnOp === undefined || (0, op_js_1.isPushOp)(opreturnOp) || opreturnOp !== opcode_js_1.OP_RETURN) { return undefined; } const opreservedOp = ops.next(); if (opreservedOp === undefined || (0, op_js_1.isPushOp)(opreservedOp) || opreservedOp !== opcode_js_1.OP_RESERVED) { return undefined; } const pushdata = []; let op = undefined; while ((op = ops.next()) !== undefined) { if (!(0, op_js_1.isPushOp)(op)) { throw new Error('eMPP allows only push ops'); } if (op.data.length === 0) { throw new Error("eMPP doesn't allow empty pushdata"); } pushdata.push(op.data); } return pushdata; } exports.parseEmppScript = parseEmppScript; //# sourceMappingURL=empp.js.map