PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/test/integration_local_rpc/generate
Просмотр файла: regtestNode.ts
import * as crypto from 'crypto';
import * as util from 'util';
import { spawn, execFile } from 'child_process';
import * as utxolib from '../../../src';
import { Network, getNetworkName } from '../../../src/networks';
type DockerImageParams = {
extraArgsDocker: string[];
image: string;
binary: string | undefined;
extraArgsNode: string[];
};
const rpcPort = 18333;
const rpcUser = 'utxolib';
const rpcPassword = crypto.randomBytes(16).toString('hex');
function dockerImage(
image: string,
binary: string | undefined,
extraArgsNode: string[] = [],
extraArgsDocker: string[] = []
): DockerImageParams {
return { image, binary, extraArgsNode, extraArgsDocker };
}
function getDockerParams(network: Network): DockerImageParams {
switch (network) {
case utxolib.networks.testnet:
return dockerImage('ruimarinho/bitcoin-core:0.21.1', 'bitcoind', ['-fallbackfee=0.0001']);
case utxolib.networks.bitcoincashTestnet:
return dockerImage('zquestz/bitcoin-cash-node:23.0.0', 'bitcoind', ['-usecashaddr=0']);
case utxolib.networks.bitcoinsvTestnet:
return dockerImage('bitcoinsv/bitcoin-sv:1.0.5', 'bitcoind', [
'-excessiveblocksize=0',
'-maxstackmemoryusageconsensus=0',
]);
case utxolib.networks.bitcoingoldTestnet:
return dockerImage('uphold/bitcoin-gold:0.17.3', 'bgoldd');
case utxolib.networks.dashTest:
return dockerImage('dashpay/dashd:0.16.1.1', 'dashd');
case utxolib.networks.dogecoinTest:
return dockerImage('williamqinbitgo/dogeimage:1.14.5-v3', 'dogecoind');
case utxolib.networks.ecashTest:
return dockerImage('bitcoinabc/bitcoin-abc:0.26.9', 'bitcoind', ['-ecash=0 -usecashaddr=0']);
case utxolib.networks.litecoinTest:
return dockerImage('uphold/litecoin-core:0.17.1', 'litecoind');
case utxolib.networks.zcashTest:
return dockerImage(
'electriccoinco/zcashd:v6.0.0',
undefined, // `zcashd` is implicit
[
'-nuparams=5ba81b19:10',
'-nuparams=76b809bb:20',
'-nuparams=2bb40e60:30',
'-nuparams=f5b9230b:40',
'-nuparams=e9ff75a6:400',
// https://zips.z.cash/zip-0252
'-nuparams=c2d6d0b4:500',
// https://zips.z.cash/zip-0253
'-nuparams=c8e71055:600',
]
// [`--volume=${paramsDir}:/srv/zcashd/.zcash-params`]
);
}
throw new Error(`unsupported network ${getNetworkName(network)}`);
}
export interface Node {
stop(): Promise<void>;
}
export async function getRegtestNode(network: Network): Promise<Node> {
const dockerParams = getDockerParams(network);
const args = [
'run',
`--publish=${rpcPort}:${rpcPort}`,
...dockerParams.extraArgsDocker,
dockerParams.image,
...(dockerParams.binary ? [dockerParams.binary] : []),
'-regtest',
'-txindex',
`-rpcuser=${rpcUser}`,
`-rpcpassword=${rpcPassword}`,
`-rpcbind=0.0.0.0:${rpcPort}`,
`-rpcallowip=0.0.0.0/0`,
...dockerParams.extraArgsNode,
] as string[];
let stdio: 'ignore' | 'inherit' = 'ignore';
if (process.env.UTXOLIB_TESTS_LOG_DOCKER === '1') {
stdio = 'inherit';
}
const proc = spawn('docker', args, { stdio });
return {
stop(): Promise<void> {
proc.kill();
return new Promise((resolve, reject) => {
proc.on('exit', (code, signal) => {
if (code === 0) {
return resolve();
}
reject(new Error(`code=${code} signal=${signal}`));
});
});
},
};
}
export async function getRegtestNodeHelp(network: Network): Promise<{ stdout: string; stderr: string }> {
const dockerParams = getDockerParams(network);
const args = [
'run',
...dockerParams.extraArgsDocker,
dockerParams.image,
...(dockerParams.binary ? [dockerParams.binary] : []),
'--help',
'-help-debug',
'-regtest',
];
return await util.promisify(execFile)('docker', args);
}
export function getRegtestNodeUrl(network: Network): string {
return `http://${rpcUser}:${rpcPassword}@localhost:${rpcPort}`;
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!