Browse Source

feat(bitcoind): expose Bitcoin Core P2P port

bitcoind-p2p-port
Luke Childs 4 years ago
parent
commit
139dd982ac
  1. 1
      src/components/designer/bitcoind/ConnectTab.tsx
  2. 1
      src/i18n/locales/en-US.json
  3. 3
      src/lib/docker/composeFile.ts
  4. 1
      src/lib/docker/nodeTemplates.spec.ts
  5. 2
      src/lib/docker/nodeTemplates.ts
  6. 1
      src/shared/types.ts
  7. 1
      src/utils/constants.ts
  8. 16
      src/utils/network.spec.ts
  9. 12
      src/utils/network.ts

1
src/components/designer/bitcoind/ConnectTab.tsx

@ -37,6 +37,7 @@ const ConnectTab: React.FC<Props> = ({ node }) => {
const details: DetailValues = [
{ label: l('rpcHost'), value: `http://127.0.0.1:${node.ports.rpc}` },
{ label: l('p2pHost'), value: `tcp://127.0.0.1:${node.ports.p2p}` },
{ label: l('zmqBlockHost'), value: `tcp://127.0.0.1:${node.ports.zmqBlock}` },
{ label: l('zmqTxHost'), value: `tcp://127.0.0.1:${node.ports.zmqTx}` },
{ label: l('rpcUser'), value: bitcoinCredentials.user },

1
src/i18n/locales/en-US.json

@ -50,6 +50,7 @@
"cmps.designer.bitcoind.BitcoinDetails.waitingNotice": "Waiting for bitcoind to come online",
"cmps.designer.bitcoind.BitcoinDetails.getInfoErr": "Unable to connect to node",
"cmps.designer.bitcoind.ConnectTab.rpcHost": "RPC Host",
"cmps.designer.bitcoind.ConnectTab.p2pHost": "P2P Host",
"cmps.designer.bitcoind.ConnectTab.zmqBlockHost": "ZMQ Block Host",
"cmps.designer.bitcoind.ConnectTab.zmqTxHost": "ZMQ Transaction Host",
"cmps.designer.bitcoind.ConnectTab.rpcUser": "Username",

3
src/lib/docker/composeFile.ts

@ -40,7 +40,7 @@ class ComposeFile {
addBitcoind(node: BitcoinNode) {
const { name, version, ports } = node;
const { rpc, zmqBlock, zmqTx } = ports;
const { rpc, p2p, zmqBlock, zmqTx } = ports;
const container = getContainerName(node);
// define the variable substitutions
const variables = {
@ -59,6 +59,7 @@ class ComposeFile {
container,
image,
rpc,
p2p,
zmqBlock,
zmqTx,
command,

1
src/lib/docker/nodeTemplates.spec.ts

@ -7,6 +7,7 @@ describe('nodeTemplates', () => {
'polar-mynode',
'bitcoind:v0.8.0',
18443,
19444,
28334,
29335,
'',

2
src/lib/docker/nodeTemplates.ts

@ -10,6 +10,7 @@ export const bitcoind = (
container: string,
image: string,
rpcPort: number,
p2pPort: number,
zmqBlockPort: number,
zmqTxPort: number,
command: string,
@ -33,6 +34,7 @@ export const bitcoind = (
],
ports: [
`${rpcPort}:18443`, // RPC
`${p2pPort}:18444`, // P2P
`${zmqBlockPort}:28334`, // ZMQ blocks
`${zmqTxPort}:28335`, // ZMQ txns
],

1
src/shared/types.ts

@ -63,6 +63,7 @@ export interface BitcoinNode extends CommonNode {
peers: string[];
ports: {
rpc: number;
p2p: number;
zmqBlock: number;
zmqTx: number;
};

1
src/utils/constants.ts

@ -46,6 +46,7 @@ export const denominationNames: { [key in Denomination]: string } = {
export const BasePorts: Record<NodeImplementation, Record<string, number>> = {
bitcoind: {
rest: 18443,
p2p: 19444,
zmqBlock: 28334,
zmqTx: 29335,
},

16
src/utils/network.spec.ts

@ -48,11 +48,13 @@ describe('Network Utils', () => {
mockDetectPort.mockImplementation(port => Promise.resolve(port + 1));
network.nodes.lightning = [];
const restPort = network.nodes.bitcoin[0].ports.rpc;
const p2pPort = network.nodes.bitcoin[0].ports.p2p;
const zmqBlockPort = network.nodes.bitcoin[0].ports.zmqBlock;
const zmqTxPort = network.nodes.bitcoin[0].ports.zmqTx;
const ports = (await getOpenPorts(network)) as OpenPorts;
expect(ports).toBeDefined();
expect(ports[network.nodes.bitcoin[0].name].rpc).toBe(restPort + 1);
expect(ports[network.nodes.bitcoin[0].name].p2p).toBe(p2pPort + 1);
expect(ports[network.nodes.bitcoin[0].name].zmqBlock).toBe(zmqBlockPort + 1);
expect(ports[network.nodes.bitcoin[0].name].zmqTx).toBe(zmqTxPort + 1);
});
@ -71,6 +73,20 @@ describe('Network Utils', () => {
expect(ports[network.nodes.bitcoin[0].name].zmqTx).toBeUndefined();
});
it('should update the p2p port for bitcoind', async () => {
const portsInUse = [19444];
mockDetectPort.mockImplementation(port =>
Promise.resolve(portsInUse.includes(port) ? port + 1 : port),
);
network.nodes.lightning = [];
const p2pPort = network.nodes.bitcoin[0].ports.p2p;
const ports = (await getOpenPorts(network)) as OpenPorts;
expect(ports).toBeDefined();
expect(ports[network.nodes.bitcoin[0].name].p2p).toBe(p2pPort + 1);
expect(ports[network.nodes.bitcoin[0].name].zmqBlock).toBeUndefined();
expect(ports[network.nodes.bitcoin[0].name].zmqTx).toBeUndefined();
});
it('should update the zmq block port for bitcoind', async () => {
const portsInUse = [28334];
mockDetectPort.mockImplementation(port =>

12
src/utils/network.ts

@ -240,6 +240,7 @@ export const createBitcoindNetworkNode = (
status,
ports: {
rpc: BasePorts.bitcoind.rest + id,
p2p: BasePorts.bitcoind.p2p + id,
zmqBlock: BasePorts.bitcoind.zmqBlock + id,
zmqTx: BasePorts.bitcoind.zmqTx + id,
},
@ -448,6 +449,17 @@ export const getOpenPorts = async (network: Network): Promise<OpenPorts | undefi
});
}
existingPorts = bitcoin.map(n => n.ports.p2p);
openPorts = await getOpenPortRange(existingPorts);
if (openPorts.join() !== existingPorts.join()) {
openPorts.forEach((port, index) => {
ports[bitcoin[index].name] = {
...(ports[bitcoin[index].name] || {}),
p2p: port,
};
});
}
existingPorts = bitcoin.map(n => n.ports.zmqBlock);
openPorts = await getOpenPortRange(existingPorts);
if (openPorts.join() !== existingPorts.join()) {

Loading…
Cancel
Save