Governance reads
EIP-2535 Diamond Loupe (full four-method surface) plus the TimelockCut proposal lifecycle.
All GET, public, no auth.
EIP-2535 Loupe
The Loupe is the standard reflection interface every Diamond exposes. It tells you which facets are mounted and which 4-byte selectors each facet serves.
/v1/governance/facets?chainId=
All facets in one shot. (Lives under Meta because it's the common case.)
/v1/governance/facet-addresses/:chainId
Just the addresses, no selectors.
{ "data": { "chainId": 8453, "facetAddresses": ["0xfacet1", "0xfacet2", ...] } }
/v1/governance/facets/:chainId/by-address/:facetAddress
All selectors served by a specific facet.
{
"data": {
"chainId": 8453,
"facetAddress": "0xfacet1...",
"functionSelectors": ["0xdeadbeef", "0xcafebabe"]
}
}
/v1/governance/facet-address/:chainId/:selector
Which facet serves a given 4-byte selector (or 0x0 if no facet).
{
"data": {
"chainId": 8453,
"selector": "0xdeadbeef",
"facetAddress": "0xfacet1..."
}
}
TimelockCut proposal lifecycle
Diamond upgrades are gated by a timelock. A proposal is submitted, waits through the delay, then either executes or expires.
/v1/governance/proposals/:chainId/:proposalId
Full proposal state.
{
"data": {
"chainId": 8453,
"proposalId": "0xababab...",
"status": 0,
"statusLabel": "pending",
"executeAfter": 1782268800,
"init": "0x0000000000000000000000000000000000000000",
"callData": "0x"
}
}
status ∈ {0: pending, 1: cancelled, 2: executed}; statusLabel is the
matching human string.
executeAfter is the Unix-seconds timestamp after which executeCut() will
succeed.
/v1/governance/cut-ids/:chainId
Every proposal ID ever created on the Diamond (pending + executed + cancelled).
{ "data": { "chainId": 8453, "cutIds": ["0xabab...", "0xcdcd..."] } }
/v1/governance/pending-cut-ids/:chainId
Alias of /cut-ids (kept for compatibility with the contract's older view).
/v1/governance/pending-cut-info/:chainId/:proposalId
Lightweight status view — just eta, executed, cancelled.
{
"data": {
"chainId": 8453,
"proposalId": "0xababab...",
"eta": 1782268800,
"executed": false,
"cancelled": false
}
}
For full details (init + callData), use /proposals/:id instead.