Loading…
TypeScript library for subscribing to Teranode P2P topics (blocks, subtrees, mining updates) via libp2p private DHT network.
npm install @bsv/teranode-listenerimport { TeranodeListener } from '@bsv/teranode-listener'
const blockCallback = (data: Uint8Array, topic: string, from: string) => {
console.log(`New block from ${from}:`, data)
}
const subtreeCallback = (data: Uint8Array, topic: string, from: string) => {
console.log(`Subtree update from ${from}:`, data)
}
// Create listener with callbacks
const listener = new TeranodeListener({
'bitcoin/mainnet-block': blockCallback,
'bitcoin/mainnet-subtree': subtreeCallback
})
console.log('Listener started, waiting for messages...')const listener = new TeranodeListener({
'bitcoin/mainnet-block': (data, topic, from) => {
console.log('Block received:', data)
},
'bitcoin/mainnet-subtree': (data, topic, from) => {
console.log('Subtree:', data)
}
})const listener = new TeranodeListener(
{
'bitcoin/mainnet-block': (data, topic, from) => {
console.log('Block:', data)
}
},
{
listenAddresses: ['/ip4/0.0.0.0/tcp/4000'],
dhtProtocolID: '/custom-protocol',
bootstrapPeers: ['multiaddr-of-peer-1', 'multiaddr-of-peer-2']
}
)const listener = new TeranodeListener({
'bitcoin/mainnet-block': (data, topic, from) => {
console.log('Block:', data)
}
})
// Add more topics later
listener.addTopicCallback('bitcoin/mainnet-subtree', (data, topic, from) => {
console.log('Subtree:', data)
})
// Unsubscribe from a topic
listener.removeTopicCallback('bitcoin/mainnet-block')
// Access underlying libp2p node
const node = listener.getNode()
// Check connected peer count
const peerCount = listener.getConnectedPeerCount()const listener = new TeranodeListener(callbacks, config)
// Clean shutdown
await listener.stop()bitcoin/mainnet-block).stop() method for clean connection teardownbitcoin/mainnet-bestblock — Best block messagebitcoin/mainnet-block — Block solution foundbitcoin/mainnet-subtree — Subtree createdbitcoin/mainnet-mining_on — Mining enabledbitcoin/mainnet-handshake — Peer connectsbitcoin/mainnet-rejected_tx — Transaction rejectedmainnet with testnet for testnet topics.mjs files or set "type": "module" in package.jsonsharedKey must be hex-encoded; library auto-formats to PSKUint8Array; caller must deserialize (typically BSV transaction/block)