UNPKG

@bitgo-beta/utxo-lib

Version:

Client-side Bitcoin JavaScript library

57 lines 7.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toOutputScript = exports.fromOutputScript = exports.toBase58Check = exports.fromBase58Check = void 0; const assert = require("assert"); const bitcoinjs_lib_1 = require("bitcoinjs-lib"); const types = require("bitcoinjs-lib/src/types"); const networks_1 = require("../../networks"); const bs58check = require('bs58check'); const typeforce = require('typeforce'); function fromBase58Check(address) { const payload = bs58check.decode(address); const version = payload.readUInt16BE(0); const hash = payload.slice(2); return { version, hash }; } exports.fromBase58Check = fromBase58Check; function toBase58Check(hash, version) { typeforce(types.tuple(types.Hash160bit, types.Number), arguments); const payload = Buffer.allocUnsafe(22); payload.writeUInt16BE(version, 0); hash.copy(payload, 2); return bs58check.encode(payload); } exports.toBase58Check = toBase58Check; function fromOutputScript(outputScript, network) { assert(networks_1.isZcash(network)); let o; let prefix; try { o = bitcoinjs_lib_1.payments.p2pkh({ output: outputScript }); prefix = network.pubKeyHash; } catch (e) { } try { o = bitcoinjs_lib_1.payments.p2sh({ output: outputScript }); prefix = network.scriptHash; } catch (e) { } if (!o || !o.hash || prefix === undefined) { throw new Error(`unsupported outputScript`); } return toBase58Check(o.hash, prefix); } exports.fromOutputScript = fromOutputScript; function toOutputScript(address, network) { assert(networks_1.isZcash(network)); const { version, hash } = fromBase58Check(address); if (version === network.pubKeyHash) { return bitcoinjs_lib_1.payments.p2pkh({ hash }).output; } if (version === network.scriptHash) { return bitcoinjs_lib_1.payments.p2sh({ hash }).output; } throw new Error(address + ' has no matching Script'); } exports.toOutputScript = toOutputScript; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQyxpREFBeUM7QUFDekMsaURBQWlEO0FBRWpELDZDQUFrRDtBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZDLFNBQWdCLGVBQWUsQ0FBQyxPQUFlO0lBQzdDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUxELDBDQUtDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLElBQVksRUFBRSxPQUFlO0lBQ3pELFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEIsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFQRCxzQ0FPQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFlBQW9CLEVBQUUsT0FBZ0I7SUFDckUsTUFBTSxDQUFDLGtCQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSTtRQUNGLENBQUMsR0FBRyx3QkFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0tBQzdCO0lBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtJQUNkLElBQUk7UUFDRixDQUFDLEdBQUcsd0JBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7SUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQUM3QztJQUNELE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQWhCRCw0Q0FnQkM7QUFFRCxTQUFnQixjQUFjLENBQUMsT0FBZSxFQUFFLE9BQWdCO0lBQzlELE1BQU0sQ0FBQyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLHdCQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFnQixDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLHdCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFnQixDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcseUJBQXlCLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBVkQsd0NBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHBheW1lbnRzIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlNThDaGVja1Jlc3VsdCB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL2FkZHJlc3MnO1xuaW1wb3J0IHsgaXNaY2FzaCwgTmV0d29yayB9IGZyb20gJy4uLy4uL25ldHdvcmtzJztcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpO1xuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQmFzZTU4Q2hlY2soYWRkcmVzczogc3RyaW5nKTogQmFzZTU4Q2hlY2tSZXN1bHQge1xuICBjb25zdCBwYXlsb2FkID0gYnM1OGNoZWNrLmRlY29kZShhZGRyZXNzKTtcbiAgY29uc3QgdmVyc2lvbiA9IHBheWxvYWQucmVhZFVJbnQxNkJFKDApO1xuICBjb25zdCBoYXNoID0gcGF5bG9hZC5zbGljZSgyKTtcbiAgcmV0dXJuIHsgdmVyc2lvbiwgaGFzaCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXNlNThDaGVjayhoYXNoOiBCdWZmZXIsIHZlcnNpb246IG51bWJlcik6IHN0cmluZyB7XG4gIHR5cGVmb3JjZSh0eXBlcy50dXBsZSh0eXBlcy5IYXNoMTYwYml0LCB0eXBlcy5OdW1iZXIpLCBhcmd1bWVudHMpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMjIpO1xuICBwYXlsb2FkLndyaXRlVUludDE2QkUodmVyc2lvbiwgMCk7XG4gIGhhc2guY29weShwYXlsb2FkLCAyKTtcbiAgcmV0dXJuIGJzNThjaGVjay5lbmNvZGUocGF5bG9hZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0U2NyaXB0KG91dHB1dFNjcmlwdDogQnVmZmVyLCBuZXR3b3JrOiBOZXR3b3JrKTogc3RyaW5nIHtcbiAgYXNzZXJ0KGlzWmNhc2gobmV0d29yaykpO1xuICBsZXQgbztcbiAgbGV0IHByZWZpeDtcbiAgdHJ5IHtcbiAgICBvID0gcGF5bWVudHMucDJwa2goeyBvdXRwdXQ6IG91dHB1dFNjcmlwdCB9KTtcbiAgICBwcmVmaXggPSBuZXR3b3JrLnB1YktleUhhc2g7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHRyeSB7XG4gICAgbyA9IHBheW1lbnRzLnAyc2goeyBvdXRwdXQ6IG91dHB1dFNjcmlwdCB9KTtcbiAgICBwcmVmaXggPSBuZXR3b3JrLnNjcmlwdEhhc2g7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGlmICghbyB8fCAhby5oYXNoIHx8IHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBvdXRwdXRTY3JpcHRgKTtcbiAgfVxuICByZXR1cm4gdG9CYXNlNThDaGVjayhvLmhhc2gsIHByZWZpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdChhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IE5ldHdvcmspOiBCdWZmZXIge1xuICBhc3NlcnQoaXNaY2FzaChuZXR3b3JrKSk7XG4gIGNvbnN0IHsgdmVyc2lvbiwgaGFzaCB9ID0gZnJvbUJhc2U1OENoZWNrKGFkZHJlc3MpO1xuICBpZiAodmVyc2lvbiA9PT0gbmV0d29yay5wdWJLZXlIYXNoKSB7XG4gICAgcmV0dXJuIHBheW1lbnRzLnAycGtoKHsgaGFzaCB9KS5vdXRwdXQgYXMgQnVmZmVyO1xuICB9XG4gIGlmICh2ZXJzaW9uID09PSBuZXR3b3JrLnNjcmlwdEhhc2gpIHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7IGhhc2ggfSkub3V0cHV0IGFzIEJ1ZmZlcjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcyArICcgaGFzIG5vIG1hdGNoaW5nIFNjcmlwdCcpO1xufVxuIl19