From 402b3ba00fd22a90e3cc7243d07d3d8227309d10 Mon Sep 17 00:00:00 2001 From: mononaut Date: Fri, 24 Jul 2026 21:06:48 +0000 Subject: [PATCH 1/3] clean up stale unix sockets --- backend/src/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/backend/src/index.ts b/backend/src/index.ts index e857a377b..04690c4bc 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,5 +1,6 @@ import express from 'express'; import { Application, Request, Response, NextFunction } from 'express'; +import * as fs from 'fs'; import * as http from 'http'; import * as WebSocket from 'ws'; import bitcoinApi from './api/bitcoin/bitcoin-api-factory'; @@ -67,6 +68,10 @@ class Server { constructor() { this.app = express(); + if (cluster.isPrimary && config.MEMPOOL.UNIX_SOCKET_PATH) { + this.clearStaleUnixSocket(config.MEMPOOL.UNIX_SOCKET_PATH); + } + if (!config.MEMPOOL.SPAWN_CLUSTER_PROCS) { void this.startServer(); return; @@ -249,6 +254,17 @@ class Server { void poolsUpdater.$startService(); } + clearStaleUnixSocket(path: string): void { + try { + if (fs.existsSync(path)) { + fs.unlinkSync(path); + logger.notice(`Removed stale unix socket ${path}`); + } + } catch (e) { + logger.err(`Failed to remove stale unix socket ${path}. Reason: ${e instanceof Error ? e.message : e}`); + } + } + /** @asyncSafe */ async runMainUpdateLoop(): Promise { const start = Date.now(); From 2c3af53943374f1d93eb06af9bf0a08ee7e4893c Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 27 Jul 2026 21:48:20 +0200 Subject: [PATCH 2/3] Revert "[ssr] accept 301 and 302 as valid for nginx cache" --- production/nginx/server-common.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf index c5af76fc3..0737f2718 100644 --- a/production/nginx/server-common.conf +++ b/production/nginx/server-common.conf @@ -217,7 +217,7 @@ location @mempool-space-ssr { proxy_cache_background_update on; proxy_cache_use_stale updating; proxy_cache unfurler; - proxy_cache_valid 200 301 302 5m; # will re-render page if older than this + proxy_cache_valid 200 5m; # will re-render page if older than this proxy_redirect off; expires 5m; From d74b0633c88b02c1b382bf6ce67ac3d416122b10 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 28 Jul 2026 20:19:29 +0200 Subject: [PATCH 3/3] Add sv2 logo to about page --- .../app/components/about/about.component.html | 5 +++++ .../app/components/about/about.component.scss | 7 +++++++ frontend/src/resources/profile/stratum-v2.png | Bin 0 -> 21054 bytes 3 files changed, 12 insertions(+) create mode 100644 frontend/src/resources/profile/stratum-v2.png diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index acc85d65b..1012d6823 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -711,6 +711,11 @@ + + + diff --git a/frontend/src/app/components/about/about.component.scss b/frontend/src/app/components/about/about.component.scss index 28aeda160..471cf828d 100644 --- a/frontend/src/app/components/about/about.component.scss +++ b/frontend/src/app/components/about/about.component.scss @@ -104,6 +104,7 @@ .alliances-logos { align-items: center; margin-bottom: 80px; + justify-content: center; } .alliance-logo { height: 80px; @@ -114,6 +115,12 @@ margin-top: 45px; } } + .stratum-v2-logo { + object-fit: contain; + @media (max-width: 767px) { + width: 300px; + } + } .copa { @media (min-width: 992px) { position: relative; diff --git a/frontend/src/resources/profile/stratum-v2.png b/frontend/src/resources/profile/stratum-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..b792f8af72ddc11c4780b1002297222d5e826335 GIT binary patch literal 21054 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