1.2.0 • Published 2 years ago

@savid/rlpx-peeper v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

@savid/rlpx-peeper

Discover RLPx peers with the eth/66 protocol.

This package is adapted from the @ethereumjs/devp2p project.

Requirements

  • NodeJS v18+
  • ESM only

Install

npm install --save @savid/rlpx-peeper

Usage

Manually adding boot nodes and dns networks;

import peeper from '@savid/rlpx-peeper';

const dnsNetworks = [
  'enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.mainnet.ethdisco.net',
];

const bootnodes = [
  {
    id: Buffer.from(
      'd860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666',
      'hex',
    ),
    ip: '18.138.108.67',
    port: 30303,
  },
];

try {
  for await (const { error, enode } of peeper({ bootnodes, dnsNetworks })) {
    if (error) throw error;
    if (enode) console.log(enode);
  }
} catch (error) {
  console.error(error);
}

Consuming @ethereumjs/common chains;

import peeper from '@savid/rlpx-peeper';
import chain from '@ethereumjs/common/dist/chains/mainnet.json' assert { type: 'json' };

const bootnodes = chain.bootstrapNodes.map((bootnode) => ({
  id: Buffer.from(bootnode.id, 'hex'),
  ip: bootnode.ip,
  port: bootnode.port,
}));

const { dnsNetworks } = chain;

try {
  for await (const { error, enode } of peeper({ bootnodes, dnsNetworks })) {
    if (error) throw error;
    if (enode) console.log(enode);
  }
} catch (error) {
  console.error(error);
}

API

async function* peeper(options: {
  // EIP-1459 ENR tree urls to query for peer discovery
  dnsNetworks?: string[];
  // boot node peers
  bootnodes?: { id: Buffer; ip: string; port: number }[];
  // interval for peer table refresh
  refreshInterval?: number;
  // max number of candidate peers to retrieve from DNS records when attempting to discover new nodes
  maxPeers?: number;
  // DNS server to query DNS TXT records from for peer discovery
  dnsAddress?: string;
}): AsyncGenerator<{
  enode?: string | undefined;
  error?: Error | undefined;
}>;

License

MIT

1.2.0

2 years ago

1.1.0

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago