Electrum protocol and tx lookup setting.

This commit is contained in:
softsimon 2021-01-05 03:06:57 +07:00
parent 7729ad8b79
commit 1a6c2e79e6
No known key found for this signature in database
GPG Key ID: 488D7DCFB5A430D7
3 changed files with 27 additions and 10 deletions

View File

@ -9,9 +9,13 @@
}, },
"ELECTRS": { "ELECTRS": {
"REST_API_URL": "http://127.0.0.1:3000", "REST_API_URL": "http://127.0.0.1:3000",
"POLL_RATE_MS": 2000, "POLL_RATE_MS": 2000
},
"ELECTRUM": {
"HOST": "127.0.0.1", "HOST": "127.0.0.1",
"PORT": 50002 "PORT": 50002,
"PROTOCOL": "tcl",
"TX_LOOKUPS": false
}, },
"BITCOIND": { "BITCOIND": {
"HOST": "127.0.0.1", "HOST": "127.0.0.1",

View File

@ -21,16 +21,16 @@ class BitcoindElectrsApi extends BitcoinApi implements AbstractBitcoinApi {
const electrumPersistencePolicy = { retryPeriod: 10000, maxRetry: 1000, callback: null }; const electrumPersistencePolicy = { retryPeriod: 10000, maxRetry: 1000, callback: null };
const electrumCallbacks = { const electrumCallbacks = {
onConnect: (client, versionInfo) => { logger.info(`Connected to Electrum Server at ${config.ELECTRS.HOST}:${config.ELECTRS.PORT} (${JSON.stringify(versionInfo)})`); }, onConnect: (client, versionInfo) => { logger.info(`Connected to Electrum Server at ${config.ELECTRUM.HOST}:${config.ELECTRUM.PORT} (${JSON.stringify(versionInfo)})`); },
onClose: (client) => { logger.info(`Disconnected from Electrum Server at ${config.ELECTRS.HOST}:${config.ELECTRS.PORT}`); }, onClose: (client) => { logger.info(`Disconnected from Electrum Server at ${config.ELECTRUM.HOST}:${config.ELECTRUM.PORT}`); },
onError: (err) => { logger.err(`Electrum error: ${JSON.stringify(err)}`); }, onError: (err) => { logger.err(`Electrum error: ${JSON.stringify(err)}`); },
onLog: (str) => { logger.debug(str); }, onLog: (str) => { logger.debug(str); },
}; };
this.electrumClient = new ElectrumClient( this.electrumClient = new ElectrumClient(
config.ELECTRS.PORT, config.ELECTRUM.PORT,
config.ELECTRS.HOST, config.ELECTRUM.HOST,
config.ELECTRS.PORT === 50001 ? 'tcp' : 'tls', config.ELECTRUM.PROTOCOL,
null, null,
electrumCallbacks electrumCallbacks
); );
@ -38,11 +38,14 @@ class BitcoindElectrsApi extends BitcoinApi implements AbstractBitcoinApi {
this.electrumClient.initElectrum(electrumConfig, electrumPersistencePolicy) this.electrumClient.initElectrum(electrumConfig, electrumPersistencePolicy)
.then(() => {}) .then(() => {})
.catch((err) => { .catch((err) => {
logger.err(`Error connecting to Electrum Server at ${config.ELECTRS.HOST}:${config.ELECTRS.PORT}`); logger.err(`Error connecting to Electrum Server at ${config.ELECTRUM.HOST}:${config.ELECTRUM.PORT}`);
}); });
} }
async $getRawTransaction(txId: string, skipConversion = false, addPrevout = false): Promise<IEsploraApi.Transaction> { async $getRawTransaction(txId: string, skipConversion = false, addPrevout = false): Promise<IEsploraApi.Transaction> {
if (!config.ELECTRUM.TX_LOOKUPS) {
return super.$getRawTransaction(txId, skipConversion, addPrevout);
}
const txInMempool = mempool.getMempool()[txId]; const txInMempool = mempool.getMempool()[txId];
if (txInMempool && addPrevout) { if (txInMempool && addPrevout) {
return this.$addPrevouts(txInMempool); return this.$addPrevouts(txInMempool);

View File

@ -12,8 +12,12 @@ interface IConfig {
ELECTRS: { ELECTRS: {
REST_API_URL: string; REST_API_URL: string;
POLL_RATE_MS: number; POLL_RATE_MS: number;
};
ELECTRUM: {
HOST: string; HOST: string;
PORT: number; PORT: number;
PROTOCOL: 'tls' | 'tcp';
TX_LOOKUPS: boolean;
}; };
BITCOIND: { BITCOIND: {
HOST: string; HOST: string;
@ -61,9 +65,13 @@ const defaults: IConfig = {
}, },
'ELECTRS': { 'ELECTRS': {
'REST_API_URL': 'http://127.0.0.1:3000', 'REST_API_URL': 'http://127.0.0.1:3000',
'POLL_RATE_MS': 2000, 'POLL_RATE_MS': 2000
},
'ELECTRUM': {
'HOST': '127.0.0.1', 'HOST': '127.0.0.1',
'PORT': 3306 'PORT': 3306,
'PROTOCOL': 'tls',
'TX_LOOKUPS': false
}, },
'BITCOIND': { 'BITCOIND': {
'HOST': '127.0.0.1', 'HOST': '127.0.0.1',
@ -103,6 +111,7 @@ const defaults: IConfig = {
class Config implements IConfig { class Config implements IConfig {
MEMPOOL: IConfig['MEMPOOL']; MEMPOOL: IConfig['MEMPOOL'];
ELECTRS: IConfig['ELECTRS']; ELECTRS: IConfig['ELECTRS'];
ELECTRUM: IConfig['ELECTRUM'];
BITCOIND: IConfig['BITCOIND']; BITCOIND: IConfig['BITCOIND'];
DATABASE: IConfig['DATABASE']; DATABASE: IConfig['DATABASE'];
STATISTICS: IConfig['STATISTICS']; STATISTICS: IConfig['STATISTICS'];
@ -114,6 +123,7 @@ class Config implements IConfig {
const configs = this.merge(configFile, defaults); const configs = this.merge(configFile, defaults);
this.MEMPOOL = configs.MEMPOOL; this.MEMPOOL = configs.MEMPOOL;
this.ELECTRS = configs.ELECTRS; this.ELECTRS = configs.ELECTRS;
this.ELECTRUM = configs.ELECTRUM;
this.BITCOIND = configs.BITCOIND; this.BITCOIND = configs.BITCOIND;
this.DATABASE = configs.DATABASE; this.DATABASE = configs.DATABASE;
this.STATISTICS = configs.STATISTICS; this.STATISTICS = configs.STATISTICS;