@vbyte/btc-dev
Version:
Batteries-included toolset for plebian bitcoin development
54 lines (53 loc) • 2.1 kB
JavaScript
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');
}