DripGovernor (contracts/governor/src/role.rs) maintains a RoleMembers(Role) index alongside grant/revoke, exposed via DripGovernor::role_members(role). TwapOracle (contracts/oracle/src/lib.rs) uses the identical Role/RoleKey/grant_role_inner/revoke_role_inner pattern (clearly derived from the same design) but never added the membership-index half — its DataKey enum has no RoleMembers-equivalent variant and there's no role_members() function. Off-chain tooling that wants to enumerate every PriceFeeder on the oracle has no on-chain way to do it and must replay every grant/revoke event from genesis, unlike the equivalent governor query.
DripGovernor(contracts/governor/src/role.rs) maintains aRoleMembers(Role)index alongsidegrant/revoke, exposed viaDripGovernor::role_members(role).TwapOracle(contracts/oracle/src/lib.rs) uses the identicalRole/RoleKey/grant_role_inner/revoke_role_innerpattern (clearly derived from the same design) but never added the membership-index half — itsDataKeyenum has noRoleMembers-equivalent variant and there's norole_members()function. Off-chain tooling that wants to enumerate everyPriceFeederon the oracle has no on-chain way to do it and must replay everygrant/revokeevent from genesis, unlike the equivalent governor query.