From 81d563381a26a5134989bfe623a4218246a53bab Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Mar 2023 16:15:40 +0900 Subject: [PATCH 1/2] Make bitcoin core timeout configurable --- backend/mempool-config.sample.json | 6 ++++-- backend/src/__fixtures__/mempool-config.template.json | 6 ++++-- backend/src/__tests__/config.test.ts | 6 ++++-- backend/src/api/bitcoin/bitcoin-client.ts | 2 +- backend/src/api/bitcoin/bitcoin-second-client.ts | 2 +- backend/src/config.ts | 8 ++++++-- docker/README.md | 9 +++++++-- docker/backend/mempool-config.json | 6 ++++-- docker/backend/start.sh | 4 ++++ 9 files changed, 35 insertions(+), 14 deletions(-) diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index 2369b64b5..a1391c52b 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -33,7 +33,8 @@ "HOST": "127.0.0.1", "PORT": 8332, "USERNAME": "mempool", - "PASSWORD": "mempool" + "PASSWORD": "mempool", + "TIMEOUT": 60000 }, "ELECTRUM": { "HOST": "127.0.0.1", @@ -47,7 +48,8 @@ "HOST": "127.0.0.1", "PORT": 8332, "USERNAME": "mempool", - "PASSWORD": "mempool" + "PASSWORD": "mempool", + "TIMEOUT": 60000 }, "DATABASE": { "ENABLED": true, diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 2bf52cbcf..759781045 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -34,7 +34,8 @@ "HOST": "__CORE_RPC_HOST__", "PORT": 15, "USERNAME": "__CORE_RPC_USERNAME__", - "PASSWORD": "__CORE_RPC_PASSWORD__" + "PASSWORD": "__CORE_RPC_PASSWORD__", + "TIMEOUT": "__CORE_RPC_TIMEOUT__" }, "ELECTRUM": { "HOST": "__ELECTRUM_HOST__", @@ -48,7 +49,8 @@ "HOST": "__SECOND_CORE_RPC_HOST__", "PORT": 17, "USERNAME": "__SECOND_CORE_RPC_USERNAME__", - "PASSWORD": "__SECOND_CORE_RPC_PASSWORD__" + "PASSWORD": "__SECOND_CORE_RPC_PASSWORD__", + "TIMEOUT": "__SECOND_CORE_RPC_TIMEOUT__" }, "DATABASE": { "ENABLED": false, diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index 8b7ebc9ce..04c97f961 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -52,14 +52,16 @@ describe('Mempool Backend Config', () => { HOST: '127.0.0.1', PORT: 8332, USERNAME: 'mempool', - PASSWORD: 'mempool' + PASSWORD: 'mempool', + TIMEOUT: 60000 }); expect(config.SECOND_CORE_RPC).toStrictEqual({ HOST: '127.0.0.1', PORT: 8332, USERNAME: 'mempool', - PASSWORD: 'mempool' + PASSWORD: 'mempool', + TIMEOUT: 60000 }); expect(config.DATABASE).toStrictEqual({ diff --git a/backend/src/api/bitcoin/bitcoin-client.ts b/backend/src/api/bitcoin/bitcoin-client.ts index 85a410496..429638984 100644 --- a/backend/src/api/bitcoin/bitcoin-client.ts +++ b/backend/src/api/bitcoin/bitcoin-client.ts @@ -7,7 +7,7 @@ const nodeRpcCredentials: BitcoinRpcCredentials = { port: config.CORE_RPC.PORT, user: config.CORE_RPC.USERNAME, pass: config.CORE_RPC.PASSWORD, - timeout: 60000, + timeout: config.CORE_RPC.TIMEOUT, }; export default new bitcoin.Client(nodeRpcCredentials); diff --git a/backend/src/api/bitcoin/bitcoin-second-client.ts b/backend/src/api/bitcoin/bitcoin-second-client.ts index 39633a317..7f81a96a0 100644 --- a/backend/src/api/bitcoin/bitcoin-second-client.ts +++ b/backend/src/api/bitcoin/bitcoin-second-client.ts @@ -7,7 +7,7 @@ const nodeRpcCredentials: BitcoinRpcCredentials = { port: config.SECOND_CORE_RPC.PORT, user: config.SECOND_CORE_RPC.USERNAME, pass: config.SECOND_CORE_RPC.PASSWORD, - timeout: 60000, + timeout: config.SECOND_CORE_RPC.TIMEOUT, }; export default new bitcoin.Client(nodeRpcCredentials); diff --git a/backend/src/config.ts b/backend/src/config.ts index 8ccd7e2e4..6c17d7f81 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -65,12 +65,14 @@ interface IConfig { PORT: number; USERNAME: string; PASSWORD: string; + TIMEOUT: number; }; SECOND_CORE_RPC: { HOST: string; PORT: number; USERNAME: string; PASSWORD: string; + TIMEOUT: number; }; DATABASE: { ENABLED: boolean; @@ -168,13 +170,15 @@ const defaults: IConfig = { 'HOST': '127.0.0.1', 'PORT': 8332, 'USERNAME': 'mempool', - 'PASSWORD': 'mempool' + 'PASSWORD': 'mempool', + 'TIMEOUT': 60000, }, 'SECOND_CORE_RPC': { 'HOST': '127.0.0.1', 'PORT': 8332, 'USERNAME': 'mempool', - 'PASSWORD': 'mempool' + 'PASSWORD': 'mempool', + 'TIMEOUT': 60000, }, 'DATABASE': { 'ENABLED': true, diff --git a/docker/README.md b/docker/README.md index 525ecb718..ea9ca5d51 100644 --- a/docker/README.md +++ b/docker/README.md @@ -34,6 +34,7 @@ If you want to use different credentials, specify them in the `docker-compose.ym CORE_RPC_PORT: "8332" CORE_RPC_USERNAME: "customuser" CORE_RPC_PASSWORD: "custompassword" + CORE_RPC_TIMEOUT: "60000" ``` The IP address in the example above refers to Docker's default gateway IP address so that the container can hit the `bitcoind` instance running on the host machine. If your setup is different, update it accordingly. @@ -158,7 +159,8 @@ Corresponding `docker-compose.yml` overrides: "HOST": "127.0.0.1", "PORT": 8332, "USERNAME": "mempool", - "PASSWORD": "mempool" + "PASSWORD": "mempool", + "TIMEOUT": 60000 }, ``` @@ -170,6 +172,7 @@ Corresponding `docker-compose.yml` overrides: CORE_RPC_PORT: "" CORE_RPC_USERNAME: "" CORE_RPC_PASSWORD: "" + CORE_RPC_TIMEOUT: "" ... ``` @@ -219,7 +222,8 @@ Corresponding `docker-compose.yml` overrides: "HOST": "127.0.0.1", "PORT": 8332, "USERNAME": "mempool", - "PASSWORD": "mempool" + "PASSWORD": "mempool", + "TIMEOUT": 60000 }, ``` @@ -231,6 +235,7 @@ Corresponding `docker-compose.yml` overrides: SECOND_CORE_RPC_PORT: "" SECOND_CORE_RPC_USERNAME: "" SECOND_CORE_RPC_PASSWORD: "" + SECOND_CORE_RPC_TIMEOUT: "" ... ``` diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 1b3ac1837..915f0aac3 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -32,7 +32,8 @@ "HOST": "__CORE_RPC_HOST__", "PORT": __CORE_RPC_PORT__, "USERNAME": "__CORE_RPC_USERNAME__", - "PASSWORD": "__CORE_RPC_PASSWORD__" + "PASSWORD": "__CORE_RPC_PASSWORD__", + "TIMEOUT": __CORE_RPC_TIMEOUT__ }, "ELECTRUM": { "HOST": "__ELECTRUM_HOST__", @@ -46,7 +47,8 @@ "HOST": "__SECOND_CORE_RPC_HOST__", "PORT": __SECOND_CORE_RPC_PORT__, "USERNAME": "__SECOND_CORE_RPC_USERNAME__", - "PASSWORD": "__SECOND_CORE_RPC_PASSWORD__" + "PASSWORD": "__SECOND_CORE_RPC_PASSWORD__", + "TIMEOUT": __SECOND_CORE_RPC_TIMEOUT__ }, "DATABASE": { "ENABLED": __DATABASE_ENABLED__, diff --git a/docker/backend/start.sh b/docker/backend/start.sh index fced20974..f307b7111 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -36,6 +36,7 @@ __CORE_RPC_HOST__=${CORE_RPC_HOST:=127.0.0.1} __CORE_RPC_PORT__=${CORE_RPC_PORT:=8332} __CORE_RPC_USERNAME__=${CORE_RPC_USERNAME:=mempool} __CORE_RPC_PASSWORD__=${CORE_RPC_PASSWORD:=mempool} +__CORE_RPC_TIMEOUT__=${CORE_RPC_TIMEOUT:=60000} # ELECTRUM __ELECTRUM_HOST__=${ELECTRUM_HOST:=127.0.0.1} @@ -50,6 +51,7 @@ __SECOND_CORE_RPC_HOST__=${SECOND_CORE_RPC_HOST:=127.0.0.1} __SECOND_CORE_RPC_PORT__=${SECOND_CORE_RPC_PORT:=8332} __SECOND_CORE_RPC_USERNAME__=${SECOND_CORE_RPC_USERNAME:=mempool} __SECOND_CORE_RPC_PASSWORD__=${SECOND_CORE_RPC_PASSWORD:=mempool} +__SECOND_CORE_RPC_TIMEOUT__=${SECOND_CORE_RPC_TIMEOUT:=60000} # DATABASE __DATABASE_ENABLED__=${DATABASE_ENABLED:=true} @@ -154,6 +156,7 @@ sed -i "s/__CORE_RPC_HOST__/${__CORE_RPC_HOST__}/g" mempool-config.json sed -i "s/__CORE_RPC_PORT__/${__CORE_RPC_PORT__}/g" mempool-config.json sed -i "s/__CORE_RPC_USERNAME__/${__CORE_RPC_USERNAME__}/g" mempool-config.json sed -i "s/__CORE_RPC_PASSWORD__/${__CORE_RPC_PASSWORD__}/g" mempool-config.json +sed -i "s/__CORE_RPC_TIMEOUT__/${__CORE_RPC_TIMEOUT__}/g" mempool-config.json sed -i "s/__ELECTRUM_HOST__/${__ELECTRUM_HOST__}/g" mempool-config.json sed -i "s/__ELECTRUM_PORT__/${__ELECTRUM_PORT__}/g" mempool-config.json @@ -165,6 +168,7 @@ sed -i "s/__SECOND_CORE_RPC_HOST__/${__SECOND_CORE_RPC_HOST__}/g" mempool-config sed -i "s/__SECOND_CORE_RPC_PORT__/${__SECOND_CORE_RPC_PORT__}/g" mempool-config.json sed -i "s/__SECOND_CORE_RPC_USERNAME__/${__SECOND_CORE_RPC_USERNAME__}/g" mempool-config.json sed -i "s/__SECOND_CORE_RPC_PASSWORD__/${__SECOND_CORE_RPC_PASSWORD__}/g" mempool-config.json +sed -i "s/__SECOND_CORE_RPC_TIMEOUT__/${__SECOND_CORE_RPC_TIMEOUT__}/g" mempool-config.json sed -i "s/__DATABASE_ENABLED__/${__DATABASE_ENABLED__}/g" mempool-config.json sed -i "s/__DATABASE_HOST__/${__DATABASE_HOST__}/g" mempool-config.json From c6e063ea2f58428b3d12c4496c12052a3d32de49 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Mar 2023 16:35:44 +0900 Subject: [PATCH 2/2] Make lnd timeout configurable --- backend/mempool-config.sample.json | 3 ++- backend/src/__fixtures__/mempool-config.template.json | 3 ++- backend/src/api/lightning/lnd/lnd-api.ts | 2 +- backend/src/config.ts | 2 ++ docker/README.md | 4 +++- docker/backend/mempool-config.json | 3 ++- docker/backend/start.sh | 2 ++ 7 files changed, 14 insertions(+), 5 deletions(-) diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index a1391c52b..9e941636e 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -93,7 +93,8 @@ "LND": { "TLS_CERT_PATH": "tls.cert", "MACAROON_PATH": "readonly.macaroon", - "REST_API_URL": "https://localhost:8080" + "REST_API_URL": "https://localhost:8080", + "TIMEOUT": 10000 }, "CLIGHTNING": { "SOCKET": "lightning-rpc" diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 759781045..239c30547 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -109,7 +109,8 @@ "LND": { "TLS_CERT_PATH": "", "MACAROON_PATH": "", - "REST_API_URL": "https://localhost:8080" + "REST_API_URL": "https://localhost:8080", + "TIMEOUT": 10000 }, "CLIGHTNING": { "SOCKET": "__CLIGHTNING_SOCKET__" diff --git a/backend/src/api/lightning/lnd/lnd-api.ts b/backend/src/api/lightning/lnd/lnd-api.ts index 1480f9b8f..31b868df9 100644 --- a/backend/src/api/lightning/lnd/lnd-api.ts +++ b/backend/src/api/lightning/lnd/lnd-api.ts @@ -17,7 +17,7 @@ class LndApi implements AbstractLightningApi { httpsAgent: new Agent({ ca: fs.readFileSync(config.LND.TLS_CERT_PATH) }), - timeout: 10000 + timeout: config.LND.TIMEOUT }; } } diff --git a/backend/src/config.ts b/backend/src/config.ts index 6c17d7f81..a16b38af9 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -51,6 +51,7 @@ interface IConfig { TLS_CERT_PATH: string; MACAROON_PATH: string; REST_API_URL: string; + TIMEOUT: number; }; CLIGHTNING: { SOCKET: string; @@ -218,6 +219,7 @@ const defaults: IConfig = { 'TLS_CERT_PATH': '', 'MACAROON_PATH': '', 'REST_API_URL': 'https://localhost:8080', + 'TIMEOUT': 10000, }, 'CLIGHTNING': { 'SOCKET': '', diff --git a/docker/README.md b/docker/README.md index ea9ca5d51..1b9787842 100644 --- a/docker/README.md +++ b/docker/README.md @@ -172,7 +172,7 @@ Corresponding `docker-compose.yml` overrides: CORE_RPC_PORT: "" CORE_RPC_USERNAME: "" CORE_RPC_PASSWORD: "" - CORE_RPC_TIMEOUT: "" + CORE_RPC_TIMEOUT: 60000 ... ``` @@ -408,6 +408,7 @@ Corresponding `docker-compose.yml` overrides: "TLS_CERT_PATH": "" "MACAROON_PATH": "" "REST_API_URL": "https://localhost:8080" + "TIMEOUT": 10000 } ``` @@ -418,6 +419,7 @@ Corresponding `docker-compose.yml` overrides: LND_TLS_CERT_PATH: "" LND_MACAROON_PATH: "" LND_REST_API_URL: "https://localhost:8080" + LND_TIMEOUT: 10000 ... ``` diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 915f0aac3..c1165a93a 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -85,7 +85,8 @@ "LND": { "TLS_CERT_PATH": "__LND_TLS_CERT_PATH__", "MACAROON_PATH": "__LND_MACAROON_PATH__", - "REST_API_URL": "__LND_REST_API_URL__" + "REST_API_URL": "__LND_REST_API_URL__", + "TIMEOUT": "__LND_TIMEOUT__" }, "CLIGHTNING": { "SOCKET": "__CLIGHTNING_SOCKET__" diff --git a/docker/backend/start.sh b/docker/backend/start.sh index f307b7111..3c963815c 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -109,6 +109,7 @@ __LIGHTNING_LOGGER_UPDATE_INTERVAL__=${LIGHTNING_LOGGER_UPDATE_INTERVAL:=30} __LND_TLS_CERT_PATH__=${LND_TLS_CERT_PATH:=""} __LND_MACAROON_PATH__=${LND_MACAROON_PATH:=""} __LND_REST_API_URL__=${LND_REST_API_URL:="https://localhost:8080"} +__LND_TIMEOUT__=${LND_TIMEOUT:=10000} # CLN __CLIGHTNING_SOCKET__=${CLIGHTNING_SOCKET:=""} @@ -220,6 +221,7 @@ sed -i "s!__LIGHTNING_LOGGER_UPDATE_INTERVAL__!${__LIGHTNING_LOGGER_UPDATE_INTER sed -i "s!__LND_TLS_CERT_PATH__!${__LND_TLS_CERT_PATH__}!g" mempool-config.json sed -i "s!__LND_MACAROON_PATH__!${__LND_MACAROON_PATH__}!g" mempool-config.json sed -i "s!__LND_REST_API_URL__!${__LND_REST_API_URL__}!g" mempool-config.json +sed -i "s!__LND_TIMEOUT__!${__LND_TIMEOUT__}!g" mempool-config.json # CLN sed -i "s!__CLIGHTNING_SOCKET__!${__CLIGHTNING_SOCKET__}!g" mempool-config.json