UNPKG

@vbyte/btc-dev

Version:

Batteries-included toolset for plebian bitcoin development

54 lines (53 loc) 2.1 kB
import { Buff } from '@vbyte/buff'; import { decode_address } from './encode.js'; import { get_address_script } from './script.js'; const CONFIG_TABLE = [ ['1', 'p2pkh', 'main', 20, 'base58', 0x00], ['3', 'p2sh', 'main', 20, 'base58', 0x05], ['m', 'p2pkh', 'testnet', 20, 'base58', 0x6F], ['n', 'p2pkh', 'testnet', 20, 'base58', 0x6F], ['2', 'p2sh', 'testnet', 20, 'base58', 0xC4], ['m', 'p2pkh', 'regtest', 20, 'base58', 0x6F], ['n', 'p2pkh', 'regtest', 20, 'base58', 0x6F], ['2', 'p2sh', 'regtest', 20, 'base58', 0xC4], ['bc', 'p2wpkh', 'main', 20, 'bech32', 0], ['tb', 'p2wpkh', 'testnet', 20, 'bech32', 0], ['bcrt', 'p2wpkh', 'regtest', 20, 'bech32', 0], ['bc', 'p2wsh', 'main', 32, 'bech32', 0], ['tb', 'p2wsh', 'testnet', 32, 'bech32', 0], ['bcrt', 'p2wsh', 'regtest', 32, 'bech32', 0], ['bc', 'p2tr', 'main', 32, 'bech32m', 1], ['tb', 'p2tr', 'testnet', 32, 'bech32m', 1], ['bcrt', 'p2tr', 'regtest', 32, 'bech32m', 1] ]; export function get_address_config(address_network, address_type) { for (const [prefix, type, network, size, format, version] of CONFIG_TABLE) { if (type === address_type && network === address_network) { return { type, prefix, network, size, format, version }; } } return null; } export function get_address_info(address) { const dec = decode_address(address); for (const [prefix, type, network, size, format, version] of CONFIG_TABLE) { if (format !== dec.format) continue; if (size !== dec.data.length) continue; if (version !== dec.version) continue; if (dec.prefix) { if (prefix !== dec.prefix) continue; } else { if (!address.startsWith(prefix)) continue; } const data = Buff.uint(dec.data).hex; const script = get_address_script(data, type); return { data, script, type, prefix, network, size, format, version }; } throw new Error('address configuration is invalid'); }