feat: improve RPC error logging to show detailed provider messages #1447
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When RPC providers like Alchemy return errors (especially HTTP 429 rate limit errors), only the status code was logged without the detailed error message from the response body. This made debugging provider issues difficult.
Example of current logging:
What the provider actually returns:
{ "error": { "code": 429, "message": "Monthly capacity limit exceeded. Visit https://dashboard.alchemy.com/settings/billing to increase your capacity" } }Solution
Modified
RelayError::RpcErrorto extract and display the detailed error message from JSON-RPC error responses when available.New logging format:
Changes
Modified
src/error/mod.rs:RelayError::RpcErrorvariant from#[error(transparent)]to use custom formattingformat_rpc_error()function that extractserror.messageanderror.codefrom JSON-RPC responsesAdded comprehensive tests:
Benefits
✅ Better debugging: Developers immediately see why the provider failed
✅ Actionable information: Error messages often include links to provider dashboards
✅ Consistent format: All RPC errors show detailed information when available
✅ No breaking changes: Falls back gracefully for errors without detailed responses
Examples
Alchemy Rate Limit
Execution Reverted
This change directly addresses the need to avoid situations where the relay goes down due to provider issues and we cannot figure out the reason from the logs.
Fixes #[issue number]
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
arb1.arbitrum.io/home/REDACTED/work/relay/relay/target/debug/deps/relay-0116f8e29f20dbc0(dns block)eu-central-mainnet.rpc.ithaca.xyz/home/REDACTED/work/relay/relay/target/debug/deps/relay-0116f8e29f20dbc0(dns block)mainnet.optimism.io/home/REDACTED/work/relay/relay/target/debug/deps/relay-0116f8e29f20dbc0(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.