@vbyte/btc-dev
Version:
Batteries-included toolset for plebian bitcoin development
33 lines (32 loc) • 1.26 kB
JavaScript
import { Buff } from '@vbyte/buff';
import { get_lock_script_type } from '../../lib/script/lock.js';
import { get_address_info } from './util.js';
import { LOCK_SCRIPT_TYPE } from '../../const.js';
import { P2PKH } from './p2pkh.js';
import { P2SH } from './p2sh.js';
import { P2TR } from './p2tr.js';
import { P2WPKH } from './p2wpkh.js';
import { P2WSH } from './p2wsh.js';
export function get_address(script, network = 'main') {
const bytes = Buff.bytes(script);
const type = get_lock_script_type(bytes);
if (type === null)
throw new Error('unknown locking script: ' + bytes.hex);
switch (type) {
case LOCK_SCRIPT_TYPE.P2PKH:
return P2PKH.encode_address(script, network);
case LOCK_SCRIPT_TYPE.P2SH:
return P2SH.encode_address(script, network);
case LOCK_SCRIPT_TYPE.P2WPKH:
return P2WPKH.encode_address(script, network);
case LOCK_SCRIPT_TYPE.P2WSH:
return P2WSH.encode_address(script, network);
case LOCK_SCRIPT_TYPE.P2TR:
return P2TR.encode_address(script, network);
default:
throw new Error('unknown script type: ' + type);
}
}
export function parse_address(address) {
return get_address_info(address);
}