-
Notifications
You must be signed in to change notification settings - Fork 38
Description
Title
Intermittent ECDSA signing failure: nats: no responders available for request until node restart
Description
We observed an intermittent failure in the ECDSA MPC signing flow while EDDSA signing continued to work normally.
At the time of the issue:
- EDDSA (
session_eddsa) signing sessions were created and completed successfully. - ECDSA (
session_ecdsa) signing sessions were created successfully and reached the point of "Have enough participants to sign". - However, during the ECDSA signing protocol, direct NATS messages between peers failed with
nats: no responders available for request, and the MPC layer reportedERROR_PEER_UNAVAILABLEandFailed to sign tx.
After restarting the affected MPC node, the problem disappeared and ECDSA signing started to work again, without any changes to the NATS server or its docker-compose configuration. This suggests that the issue is likely in the MPC node / signer process state (e.g. NATS subscriptions / responder registration) rather than the NATS server itself.
Environment
-
Deployment: local / docker-compose (NATS started via
docker-compose.yml) -
NATS service config (excerpt):
nats-server: image: nats:latest container_name: nats-server command: -js --http_port 8222 --store_dir /data ports: - "4222:4222" - "8222:8222" - "6222:6222" volumes: - ./data/nats:/data tty: true restart: always logging: driver: json-file options: max-size: "10m" max-file: "3"
-
NATS server was running normally (EDDSA signing via NATS was working at the same time).
Steps to Reproduce
We do not yet have a deterministic reproduction, but the observed sequence is:
- Start the MPC sentinel and NATS via
docker-compose. - Perform an EDDSA signing operation.
- EDDSA signing session (
type=session_eddsa) initializes and completes successfully.
- EDDSA signing session (
- Perform an ECDSA signing operation for the same wallet.
- ECDSA signing session (
type=session_ecdsa) initializes with three participants and logs "Have enough participants to sign".
- ECDSA signing session (
- During the ECDSA signing protocol, the node attempts to send direct NATS messages between peers.
- ECDSA signing fails with
nats: no responders available for request, and the MPC layer logsERROR_PEER_UNAVAILABLE. - Restart the affected MPC node.
- Retry the same ECDSA signing operation.
- Now the ECDSA signing succeeds and the NATS errors disappear.
Expected Behavior
- Once a signing session is initialized successfully and participants are ready, the ECDSA signing protocol should complete without NATS
no responderserrors, assuming the NATS server is up and reachable. - MPC nodes should correctly register and maintain their NATS subscriptions / responders for ECDSA direct messages as long as the process is running.
Actual Behavior
- EDDSA signing works correctly.
- ECDSA signing session is created and initialized, but fails with NATS errors indicating no responders on the direct message subjects.
- MPC logs show
ERROR_PEER_UNAVAILABLEand the signing operation fails. - Restarting the affected node immediately resolves the issue without changing the NATS server or configuration.
Relevant Logs
From the time of the failure (timestamps anonymized slightly):
2026-03-13 09:17:52.000 INF Creating signing session min ready=3 participantPeerIDs=["bc135dac-8ab0-4e31-9b72-c52d31928622","4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","c05c5a17-c805-400e-8ffe-b71bf0811803"] ready count=3 readyPeers=["4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","c05c5a17-c805-400e-8ffe-b71bf0811803","bc135dac-8ab0-4e31-9b72-c52d31928622"] type=session_eddsa version=1
2026-03-13 09:17:52.000 INF Initializing signing session with partyID: {1,keygen}, peerIDs [{0,keygen} {1,keygen} {2,keygen}]
2026-03-13 09:17:52.000 INF Have enough participants to sign participants=["bc135dac-8ab0-4e31-9b72-c52d31928622","4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","c05c5a17-c805-400e-8ffe-b71bf0811803"]
2026-03-13 09:17:52.000 INF Initialized sigining session successfully!
2026-03-13 09:17:53.000 INF Starting signing walletID=2c8af8cc-3fd9-4852-8a4e-6f92c3f5d400
2026-03-13 09:18:09.000 INF Received signing event Id=bc135dac-8ab0-4e31-9b72-c52d31928622 tx=d4094d01-dfdd-4a54-bf2e-5f9ae3116da1 type=secp256k1 waleltID=2c8af8cc-3fd9-4852-8a4e-6f92c3f5d400
2026-03-13 09:18:09.000 INF SigningConsumer: Completed signing event; reply received
2026-03-13 09:18:09.000 INF Creating signing session min ready=3 participantPeerIDs=["c05c5a17-c805-400e-8ffe-b71bf0811803","4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","bc135dac-8ab0-4e31-9b72-c52d31928622"] ready count=3 readyPeers=["4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","c05c5a17-c805-400e-8ffe-b71bf0811803","bc135dac-8ab0-4e31-9b72-c52d31928622"] type=session_ecdsa version=1
2026-03-13 09:18:09.000 INF Initializing signing session with partyID: {1,keygen}, peerIDs [{0,keygen} {1,keygen} {2,keygen}]
2026-03-13 09:18:09.000 INF Have enough participants to sign participants=["c05c5a17-c805-400e-8ffe-b71bf0811803","4060aba8-69fb-4c5c-9e8c-3b39dc5de16e","bc135dac-8ab0-4e31-9b72-c52d31928622"]
2026-03-13 09:18:09.000 INF Initialized sigining session successfully!
2026-03-13 09:18:09.000 INF Starting signing walletID=2c8af8cc-3fd9-4852-8a4e-6f92c3f5d400
2026-03-13 09:18:09.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=1 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:4060aba8-69fb-4c5c-9e8c-3b39dc5de16e:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:09.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=2 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:4060aba8-69fb-4c5c-9e8c-3b39dc5de16e:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:09.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=3 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:4060aba8-69fb-4c5c-9e8c-3b39dc5de16e:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:09.000 ERR mpcium/pkg/logger/logger.go:119 > Failed in SendToOther direct message error="All attempts fail:\n#1: nats: no responders available for request\n#2: nats: no responders available for request\n#3: nats: no responders available for request" topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:4060aba8-69fb-4c5c-9e8c-3b39dc5de16e:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:09.000 WRN Signing session error error="failed to send direct message to All attempts fail:\n#1: nats: no responders available for request\n#2: nats: no responders available for request\n#3: nats: no responders available for request" context="Failed to sign tx" errorCode=ERROR_PEER_UNAVAILABLE networkInternalCode=nero-testnet txID=d4094d01-dfdd-4a54-bf2e-5f9ae3116da1 walletID=2c8af8cc-3fd9-4852-8a4e-6f92c3f5d400
2026-03-13 09:18:09.000 INF Publishing message consumerName=mpc_signing_result topic=mpc.mpc_signing_result.complete
2026-03-13 09:18:09.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=1 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:c05c5a17-c805-400e-8ffe-b71bf0811803:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:10.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=2 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:c05c5a17-c805-400e-8ffe-b71bf0811803:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:10.000 ERR mpcium/pkg/logger/logger.go:119 > Failed to send direct message error="nats: no responders available for request" attempt=3 topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:c05c5a17-c805-400e-8ffe-b71bf0811803:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
2026-03-13 09:18:10.000 ERR mpcium/pkg/logger/logger.go:119 > Failed in SendToOther direct message error="All attempts fail:\n#1: nats: no responders available for request\n#2: nats: no responders available for request\n#3: nats: no responders available for request" topic=sign:ecdsa:direct:bc135dac-8ab0-4e31-9b72-c52d31928622:c05c5a17-c805-400e-8ffe-b71bf0811803:d4094d01-dfdd-4a54-bf2e-5f9ae3116da1
Additional Notes / Hypothesis
- Because EDDSA signing via NATS worked at the same time, and restarting only the MPC node fixed the issue, it seems unlikely that the root cause is the NATS server configuration itself.
- A possible hypothesis is that the ECDSA signer / participant on the affected node:
- Did not register the expected NATS subscriptions for
sign:ecdsa:direct:<from>:<to>:<tx-id>subjects, or - Lost its subscriptions / responder state at runtime, leading to
no responders available for requestuntil the process was restarted.
- Did not register the expected NATS subscriptions for