UNPKG

@bitgo/utxo-lib

Version:

Client-side Bitcoin JavaScript library

30 lines 4.07 kB
"use strict"; // OP_RETURN {aa21a9ed} {commitment} Object.defineProperty(exports, "__esModule", { value: true }); exports.check = check; exports.encode = encode; exports.decode = decode; const __1 = require("../../"); const __2 = require("../../"); const types = require("bitcoinjs-lib/src/types"); const typeforce = require('typeforce'); const HEADER = Buffer.from('aa21a9ed', 'hex'); function check(script) { const buffer = __1.script.compile(script); return (buffer.length > 37 && buffer[0] === __2.opcodes.OP_RETURN && buffer[1] === 0x24 && buffer.slice(2, 6).equals(HEADER)); } check.toJSON = () => { return 'Witness commitment output'; }; function encode(commitment) { typeforce(types.Hash256bit, commitment); const buffer = Buffer.allocUnsafe(36); HEADER.copy(buffer, 0); commitment.copy(buffer, 4); return __1.script.compile([__2.opcodes.OP_RETURN, buffer]); } function decode(buffer) { typeforce(check, buffer); return __1.script.decompile(buffer)[1].slice(4, 36); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy93aXRuZXNzY29tbWl0bWVudC9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9DQUFvQzs7QUFVcEMsc0JBTUM7QUFNRCx3QkFRQztBQUVELHdCQUlDO0FBbENELDhCQUEyQztBQUMzQyw4QkFBaUM7QUFDakMsaURBQWlEO0FBRWpELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV2QyxNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV0RCxTQUFnQixLQUFLLENBQUMsTUFBdUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsVUFBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV2QyxPQUFPLENBQ0wsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQU8sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQ2pILENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFXLEVBQUU7SUFDMUIsT0FBTywyQkFBMkIsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFRixTQUFnQixNQUFNLENBQUMsVUFBa0I7SUFDdkMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQixPQUFPLFVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxNQUFjO0lBQ25DLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFekIsT0FBUSxVQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUMsQ0FBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE9QX1JFVFVSTiB7YWEyMWE5ZWR9IHtjb21taXRtZW50fVxuXG5pbXBvcnQgeyBzY3JpcHQgYXMgYnNjcmlwdCB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgeyBvcGNvZGVzIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3R5cGVzJztcblxuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmNvbnN0IEhFQURFUjogQnVmZmVyID0gQnVmZmVyLmZyb20oJ2FhMjFhOWVkJywgJ2hleCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2soc2NyaXB0OiBCdWZmZXIgfCBBcnJheTxudW1iZXIgfCBCdWZmZXI+KTogYm9vbGVhbiB7XG4gIGNvbnN0IGJ1ZmZlciA9IGJzY3JpcHQuY29tcGlsZShzY3JpcHQpO1xuXG4gIHJldHVybiAoXG4gICAgYnVmZmVyLmxlbmd0aCA+IDM3ICYmIGJ1ZmZlclswXSA9PT0gb3Bjb2Rlcy5PUF9SRVRVUk4gJiYgYnVmZmVyWzFdID09PSAweDI0ICYmIGJ1ZmZlci5zbGljZSgyLCA2KS5lcXVhbHMoSEVBREVSKVxuICApO1xufVxuXG5jaGVjay50b0pTT04gPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuICdXaXRuZXNzIGNvbW1pdG1lbnQgb3V0cHV0Jztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoY29tbWl0bWVudDogQnVmZmVyKTogQnVmZmVyIHtcbiAgdHlwZWZvcmNlKHR5cGVzLkhhc2gyNTZiaXQsIGNvbW1pdG1lbnQpO1xuXG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgzNik7XG4gIEhFQURFUi5jb3B5KGJ1ZmZlciwgMCk7XG4gIGNvbW1pdG1lbnQuY29weShidWZmZXIsIDQpO1xuXG4gIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW29wY29kZXMuT1BfUkVUVVJOLCBidWZmZXJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShidWZmZXI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHR5cGVmb3JjZShjaGVjaywgYnVmZmVyKTtcblxuICByZXR1cm4gKGJzY3JpcHQuZGVjb21waWxlKGJ1ZmZlcikhWzFdIGFzIEJ1ZmZlcikuc2xpY2UoNCwgMzYpO1xufVxuIl19