Skip to content

feat: add rpcMethodName to degraded events#7954

Open
cryptodev-2s wants to merge 8 commits intomainfrom
add-rpc-method-name-to-degraded-events
Open

feat: add rpcMethodName to degraded events#7954
cryptodev-2s wants to merge 8 commits intomainfrom
add-rpc-method-name-to-degraded-events

Conversation

@cryptodev-2s
Copy link
Contributor

@cryptodev-2s cryptodev-2s commented Feb 17, 2026

Explanation

RPC endpoint degraded events (NetworkController:rpcEndpointDegraded and it's chain-level variant) now include rpcMethodName in their payloads. This identifies which JSON-RPC method was being executed when the endpoint became degraded, enabling better debugging of RPC health issues.

The method name is captured in RpcService via #currentRpcMethodName, set in the finally block of the Cockatiel policy's execute callback to minimise the race window between the write and Cockatiel's synchronous event dispatch.

References

Fixes: https://consensyssoftware.atlassian.net/browse/WPC-441

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Introduces a breaking event/listener payload shape change and adds concurrency-sensitive tracking of the “current” RPC method, which could impact downstream consumers or edge-case event accuracy under parallel requests.

Overview
Adds rpcMethodName to NetworkController:rpcEndpointDegraded and NetworkController:rpcEndpointChainDegraded event payloads so consumers can attribute slow/retry-exhausted conditions to a specific JSON-RPC method.

Threads the method name from RpcService.request() through Cockatiel’s onDegraded dispatch (via a new #currentRpcMethodName) into create-network-client’s degraded event publishers, updates the exported RpcServiceRequestable.onDegraded listener type (breaking), and expands/adjusts unit tests to assert the new field (including concurrent-request scenarios).

Written by Cursor Bugbot for commit d9075b6. This will update automatically on new commits. Configure here.

@cryptodev-2s cryptodev-2s self-assigned this Feb 17, 2026
@cryptodev-2s cryptodev-2s force-pushed the add-rpc-method-name-to-degraded-events branch 2 times, most recently from b71652f to b548d8d Compare February 17, 2026 14:08
@cryptodev-2s cryptodev-2s marked this pull request as ready for review February 17, 2026 14:11
@cryptodev-2s cryptodev-2s requested review from a team as code owners February 17, 2026 14:11
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@cryptodev-2s cryptodev-2s changed the title feat: add rpcMethodName to degraded and unavailable events feat: add rpcMethodName to degraded and unavailable events Feb 17, 2026
@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-b548d8d",
  "@metamask-previews/accounts-controller": "36.0.0-preview-b548d8d",
  "@metamask-previews/address-book-controller": "7.0.1-preview-b548d8d",
  "@metamask-previews/ai-controllers": "0.0.0-preview-b548d8d",
  "@metamask-previews/analytics-controller": "1.0.0-preview-b548d8d",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-b548d8d",
  "@metamask-previews/announcement-controller": "8.0.0-preview-b548d8d",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-b548d8d",
  "@metamask-previews/approval-controller": "8.0.0-preview-b548d8d",
  "@metamask-previews/assets-controller": "2.0.0-preview-b548d8d",
  "@metamask-previews/assets-controllers": "99.4.0-preview-b548d8d",
  "@metamask-previews/base-controller": "9.0.0-preview-b548d8d",
  "@metamask-previews/bridge-controller": "66.1.1-preview-b548d8d",
  "@metamask-previews/bridge-status-controller": "66.0.2-preview-b548d8d",
  "@metamask-previews/build-utils": "3.0.4-preview-b548d8d",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-b548d8d",
  "@metamask-previews/claims-controller": "0.4.2-preview-b548d8d",
  "@metamask-previews/composable-controller": "12.0.0-preview-b548d8d",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-b548d8d",
  "@metamask-previews/controller-utils": "11.18.0-preview-b548d8d",
  "@metamask-previews/core-backend": "5.1.1-preview-b548d8d",
  "@metamask-previews/delegation-controller": "2.0.1-preview-b548d8d",
  "@metamask-previews/earn-controller": "11.1.0-preview-b548d8d",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-b548d8d",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-b548d8d",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-b548d8d",
  "@metamask-previews/ens-controller": "19.0.2-preview-b548d8d",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-b548d8d",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-b548d8d",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-b548d8d",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-b548d8d",
  "@metamask-previews/foundryup": "1.0.1-preview-b548d8d",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-b548d8d",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-b548d8d",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-b548d8d",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-b548d8d",
  "@metamask-previews/keyring-controller": "25.1.0-preview-b548d8d",
  "@metamask-previews/logging-controller": "7.0.1-preview-b548d8d",
  "@metamask-previews/message-manager": "14.1.0-preview-b548d8d",
  "@metamask-previews/messenger": "0.3.0-preview-b548d8d",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-b548d8d",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-b548d8d",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-b548d8d",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-b548d8d",
  "@metamask-previews/name-controller": "9.0.0-preview-b548d8d",
  "@metamask-previews/network-controller": "29.0.0-preview-b548d8d",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-b548d8d",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-b548d8d",
  "@metamask-previews/permission-controller": "12.2.0-preview-b548d8d",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-b548d8d",
  "@metamask-previews/perps-controller": "0.0.0-preview-b548d8d",
  "@metamask-previews/phishing-controller": "16.2.0-preview-b548d8d",
  "@metamask-previews/polling-controller": "16.0.2-preview-b548d8d",
  "@metamask-previews/preferences-controller": "22.1.0-preview-b548d8d",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-b548d8d",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-b548d8d",
  "@metamask-previews/ramps-controller": "8.0.0-preview-b548d8d",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-b548d8d",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-b548d8d",
  "@metamask-previews/sample-controllers": "4.0.2-preview-b548d8d",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-b548d8d",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-b548d8d",
  "@metamask-previews/shield-controller": "5.0.1-preview-b548d8d",
  "@metamask-previews/signature-controller": "39.0.3-preview-b548d8d",
  "@metamask-previews/storage-service": "1.0.0-preview-b548d8d",
  "@metamask-previews/subscription-controller": "6.0.0-preview-b548d8d",
  "@metamask-previews/transaction-controller": "62.17.0-preview-b548d8d",
  "@metamask-previews/transaction-pay-controller": "15.0.1-preview-b548d8d",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-b548d8d"
}

@cryptodev-2s cryptodev-2s force-pushed the add-rpc-method-name-to-degraded-events branch from b548d8d to 497c77c Compare February 17, 2026 14:55
@cryptodev-2s cryptodev-2s force-pushed the add-rpc-method-name-to-degraded-events branch from c5e4118 to c7b7522 Compare February 17, 2026 15:43
@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-33dbba4f3",
  "@metamask-previews/accounts-controller": "36.0.0-preview-33dbba4f3",
  "@metamask-previews/address-book-controller": "7.0.1-preview-33dbba4f3",
  "@metamask-previews/ai-controllers": "0.0.0-preview-33dbba4f3",
  "@metamask-previews/analytics-controller": "1.0.0-preview-33dbba4f3",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-33dbba4f3",
  "@metamask-previews/announcement-controller": "8.0.0-preview-33dbba4f3",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-33dbba4f3",
  "@metamask-previews/approval-controller": "8.0.0-preview-33dbba4f3",
  "@metamask-previews/assets-controller": "2.0.0-preview-33dbba4f3",
  "@metamask-previews/assets-controllers": "99.4.0-preview-33dbba4f3",
  "@metamask-previews/base-controller": "9.0.0-preview-33dbba4f3",
  "@metamask-previews/bridge-controller": "66.1.1-preview-33dbba4f3",
  "@metamask-previews/bridge-status-controller": "66.0.2-preview-33dbba4f3",
  "@metamask-previews/build-utils": "3.0.4-preview-33dbba4f3",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-33dbba4f3",
  "@metamask-previews/claims-controller": "0.4.2-preview-33dbba4f3",
  "@metamask-previews/composable-controller": "12.0.0-preview-33dbba4f3",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-33dbba4f3",
  "@metamask-previews/controller-utils": "11.18.0-preview-33dbba4f3",
  "@metamask-previews/core-backend": "5.1.1-preview-33dbba4f3",
  "@metamask-previews/delegation-controller": "2.0.1-preview-33dbba4f3",
  "@metamask-previews/earn-controller": "11.1.0-preview-33dbba4f3",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-33dbba4f3",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-33dbba4f3",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-33dbba4f3",
  "@metamask-previews/ens-controller": "19.0.2-preview-33dbba4f3",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-33dbba4f3",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-33dbba4f3",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-33dbba4f3",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-33dbba4f3",
  "@metamask-previews/foundryup": "1.0.1-preview-33dbba4f3",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-33dbba4f3",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-33dbba4f3",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-33dbba4f3",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-33dbba4f3",
  "@metamask-previews/keyring-controller": "25.1.0-preview-33dbba4f3",
  "@metamask-previews/logging-controller": "7.0.1-preview-33dbba4f3",
  "@metamask-previews/message-manager": "14.1.0-preview-33dbba4f3",
  "@metamask-previews/messenger": "0.3.0-preview-33dbba4f3",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-33dbba4f3",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-33dbba4f3",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-33dbba4f3",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-33dbba4f3",
  "@metamask-previews/name-controller": "9.0.0-preview-33dbba4f3",
  "@metamask-previews/network-controller": "29.0.0-preview-33dbba4f3",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-33dbba4f3",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-33dbba4f3",
  "@metamask-previews/permission-controller": "12.2.0-preview-33dbba4f3",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-33dbba4f3",
  "@metamask-previews/perps-controller": "0.0.0-preview-33dbba4f3",
  "@metamask-previews/phishing-controller": "16.2.0-preview-33dbba4f3",
  "@metamask-previews/polling-controller": "16.0.2-preview-33dbba4f3",
  "@metamask-previews/preferences-controller": "22.1.0-preview-33dbba4f3",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-33dbba4f3",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-33dbba4f3",
  "@metamask-previews/ramps-controller": "8.0.0-preview-33dbba4f3",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-33dbba4f3",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-33dbba4f3",
  "@metamask-previews/sample-controllers": "4.0.2-preview-33dbba4f3",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-33dbba4f3",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-33dbba4f3",
  "@metamask-previews/shield-controller": "5.0.1-preview-33dbba4f3",
  "@metamask-previews/signature-controller": "39.0.3-preview-33dbba4f3",
  "@metamask-previews/storage-service": "1.0.0-preview-33dbba4f3",
  "@metamask-previews/subscription-controller": "6.0.0-preview-33dbba4f3",
  "@metamask-previews/transaction-controller": "62.17.0-preview-33dbba4f3",
  "@metamask-previews/transaction-pay-controller": "15.0.1-preview-33dbba4f3",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-33dbba4f3"
}

// Set the method name right before the callback exits so that
// it is correct when Cockatiel fires onBreak/onDegraded
// synchronously after the callback throws or returns.
this.#currentRpcMethodName = rpcMethodName;
Copy link
Contributor

@mcmire mcmire Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if there is another way we can do this that would always guarantee the right RPC method was associated with the respective onDegraded callback.

Since Cockatiel policies have a concept of "context", I wonder if, before we call execute, we can wrap this.#policy in another policy that populates its context with the rpcMethodName so that it will automatically be available in callbacks?

I'll think about this...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the way you've done this is probably best. Ideally I would like this code to be closer to onDegraded somehow, but that would probably require rearchitecting RpcService, and I'm not sure it would be worth it.

@cryptodev-2s cryptodev-2s force-pushed the add-rpc-method-name-to-degraded-events branch from e1aae33 to 454981e Compare February 17, 2026 23:13
@cryptodev-2s cryptodev-2s requested a review from mcmire February 17, 2026 23:43
@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-d9075b666",
  "@metamask-previews/accounts-controller": "36.0.0-preview-d9075b666",
  "@metamask-previews/address-book-controller": "7.0.1-preview-d9075b666",
  "@metamask-previews/ai-controllers": "0.0.0-preview-d9075b666",
  "@metamask-previews/analytics-controller": "1.0.0-preview-d9075b666",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-d9075b666",
  "@metamask-previews/announcement-controller": "8.0.0-preview-d9075b666",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-d9075b666",
  "@metamask-previews/approval-controller": "8.0.0-preview-d9075b666",
  "@metamask-previews/assets-controller": "2.0.0-preview-d9075b666",
  "@metamask-previews/assets-controllers": "99.4.0-preview-d9075b666",
  "@metamask-previews/base-controller": "9.0.0-preview-d9075b666",
  "@metamask-previews/bridge-controller": "66.1.1-preview-d9075b666",
  "@metamask-previews/bridge-status-controller": "66.0.2-preview-d9075b666",
  "@metamask-previews/build-utils": "3.0.4-preview-d9075b666",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-d9075b666",
  "@metamask-previews/claims-controller": "0.4.2-preview-d9075b666",
  "@metamask-previews/composable-controller": "12.0.0-preview-d9075b666",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-d9075b666",
  "@metamask-previews/controller-utils": "11.18.0-preview-d9075b666",
  "@metamask-previews/core-backend": "5.1.1-preview-d9075b666",
  "@metamask-previews/delegation-controller": "2.0.1-preview-d9075b666",
  "@metamask-previews/earn-controller": "11.1.0-preview-d9075b666",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-d9075b666",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-d9075b666",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-d9075b666",
  "@metamask-previews/ens-controller": "19.0.2-preview-d9075b666",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-d9075b666",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-d9075b666",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-d9075b666",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-d9075b666",
  "@metamask-previews/foundryup": "1.0.1-preview-d9075b666",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-d9075b666",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-d9075b666",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-d9075b666",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-d9075b666",
  "@metamask-previews/keyring-controller": "25.1.0-preview-d9075b666",
  "@metamask-previews/logging-controller": "7.0.1-preview-d9075b666",
  "@metamask-previews/message-manager": "14.1.0-preview-d9075b666",
  "@metamask-previews/messenger": "0.3.0-preview-d9075b666",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-d9075b666",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-d9075b666",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-d9075b666",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-d9075b666",
  "@metamask-previews/name-controller": "9.0.0-preview-d9075b666",
  "@metamask-previews/network-controller": "29.0.0-preview-d9075b666",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-d9075b666",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-d9075b666",
  "@metamask-previews/permission-controller": "12.2.0-preview-d9075b666",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-d9075b666",
  "@metamask-previews/perps-controller": "0.0.0-preview-d9075b666",
  "@metamask-previews/phishing-controller": "16.2.0-preview-d9075b666",
  "@metamask-previews/polling-controller": "16.0.2-preview-d9075b666",
  "@metamask-previews/preferences-controller": "22.1.0-preview-d9075b666",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-d9075b666",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-d9075b666",
  "@metamask-previews/ramps-controller": "8.0.0-preview-d9075b666",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-d9075b666",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-d9075b666",
  "@metamask-previews/sample-controllers": "4.0.2-preview-d9075b666",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-d9075b666",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-d9075b666",
  "@metamask-previews/shield-controller": "5.0.1-preview-d9075b666",
  "@metamask-previews/signature-controller": "39.0.3-preview-d9075b666",
  "@metamask-previews/storage-service": "1.0.0-preview-d9075b666",
  "@metamask-previews/subscription-controller": "6.0.0-preview-d9075b666",
  "@metamask-previews/transaction-controller": "62.17.0-preview-d9075b666",
  "@metamask-previews/transaction-pay-controller": "15.0.1-preview-d9075b666",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-d9075b666"
}

@cryptodev-2s cryptodev-2s changed the title feat: add rpcMethodName to degraded and unavailable events feat: add rpcMethodName to degraded events Feb 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants