Problem
Portal's /$name/resolver view needs the "underlying" resolver address when the configured resolver is a proxy / composite resolver. Today this is done with two RPC hops: supportsInterface(CompositeExtendedResolver) to detect the case, then ensjs getUnderlyingAddress to unwrap. As portal migrates off RPC, Omnigraph should expose this directly.
Proposal
Expose on Resolver:
type Resolver {
# existing fields...
underlying: Resolver # null when not a proxy / composite
isComposite: Boolean! # optional ERC165 boolean, joining other is* booleans
}
underlying points at the Resolver entity the proxy delegates to (same node type, so all existing resolver fields are available on it).
isComposite may not be necessary, ui can just check Resolver.underlying for full
Consumers
apps/portal/ /$name/resolver
apps/portal/ features/resolver/hooks/useUnderlyingResolver.ts (current RPC path)
Problem
Portal's
/$name/resolverview needs the "underlying" resolver address when the configured resolver is a proxy / composite resolver. Today this is done with two RPC hops:supportsInterface(CompositeExtendedResolver)to detect the case, then ensjsgetUnderlyingAddressto unwrap. As portal migrates off RPC, Omnigraph should expose this directly.Proposal
Expose on
Resolver:underlyingpoints at theResolverentity the proxy delegates to (same node type, so all existing resolver fields are available on it).isCompositemay not be necessary, ui can just checkResolver.underlyingfor fullConsumers
apps/portal//$name/resolverapps/portal/features/resolver/hooks/useUnderlyingResolver.ts(current RPC path)