UNPKG

@vbyte/btc-dev

Version:

Batteries-included toolset for plebian bitcoin development

108 lines (95 loc) 2.44 kB
export namespace RefPointer { export const outpoint = { encode : encode_outpoint, decode : decode_outpoint, verify : verify_outpoint, assert : assert_outpoint, } export const record_id = { encode : encode_inscription_id, decode : decode_inscription_id, verify : verify_inscription_id, assert : assert_inscription_id, } export const rune_id = { encode : encode_rune_id, decode : decode_rune_id, verify : verify_rune_id, assert : assert_rune_id, } } function encode_inscription_id ( txid : string, order : number = 0 ) : string { return `${txid}i${order}` } function decode_inscription_id ( inscription_id : string ) : { txid : string, order : number } { assert_inscription_id(inscription_id) const [ txid, order ] = inscription_id.split('i') return { txid, order : parseInt(order) } } function verify_inscription_id ( inscription_id : string ) : boolean { return inscription_id.match(/^[a-f0-9]{64}i\d+$/) !== null } function assert_inscription_id ( inscription_id : string ) : void { if (!verify_inscription_id(inscription_id)) { throw new Error(`invalid inscription id: ${inscription_id}`) } } function encode_rune_id ( block_height : number, block_index : number ) : string { return `${block_height}:${block_index}` } function decode_rune_id ( rune_id : string ) : { block_height : number, block_index : number } { assert_rune_id(rune_id) const [ block_height, block_index ] = rune_id.split(':') return { block_height : parseInt(block_height), block_index : parseInt(block_index) } } function verify_rune_id ( rune_id : string ) : boolean { return rune_id.match(/^\d+:\d+$/) !== null } function assert_rune_id ( rune_id : string ) : void { if (!verify_rune_id(rune_id)) { throw new Error(`invalid rune id: ${rune_id}`) } } function encode_outpoint ( txid : string, vout : number ) : string { return `${txid}:${vout}` } function decode_outpoint ( outpoint : string ) : { txid : string, vout : number } { assert_outpoint(outpoint) const [ txid, vout ] = outpoint.split(':') return { txid, vout : parseInt(vout) } } function verify_outpoint ( outpoint : string ) : boolean { return outpoint.match(/^[a-f0-9]{64}:[0-9]+$/) !== null } function assert_outpoint ( outpoint : string ) : void { if (!verify_outpoint(outpoint)) { throw new Error(`invalid outpoint: ${outpoint}`) } }