Summary
Exported apps generated by UI Builder should ship the full ENS / name-resolution featureset by default, matching what the builder app and the other consuming apps (role-manager, rwa-wizard) now provide. Today exported apps only get partial (forward-only) resolution, so end users of a generated dApp don't see the resolved-address UX.
Current state
After #401, the export scaffolding (apps/builder/src/export/codeTemplates/main.template.tsx) wires forward name resolution:
RuntimeProvider + WalletStateProvider + a NameResolverBridge (useRuntimeNameResolver → NameResolverProvider)
createRuntime(..., { nameResolution: { enableMainnetL1MissFallback: true } })
So typing an ENS name into an address input in an exported app resolves forward. Missing in exported apps:
- Reverse resolution — no
AddressNameResolutionProvider, so AddressDisplay surfaces show raw hex instead of name + avatar.
- Rich resolved-address preview — the generated form fields render a plain
AddressField, not AddressFieldWithResolvedPreview / ResolvedAddressFieldPreviewWithNameResolution, so there's no preview card.
- Network-scoped resolution — no wiring for resolving against a target network different from the wallet-global active network (
ui-react@3.3.0 useResolveAddress(..., { network })).
Root cause (the leverage point)
The generated forms render via ui-renderer's TransactionForm / DynamicFormField, which maps a blockchain-address field to a bare AddressField. Until DynamicFormField maps blockchain-address to AddressFieldWithResolvedPreview (or exposes a registry override), neither the builder's own form preview nor exported apps get the rich ENS UX — regardless of provider wiring. (Flagged during the ENS integration round-2 work.)
Proposal
Enable the full ENS featureset by default in exported apps (and, as a by-product, in the builder's live form preview):
- ui-renderer: map
blockchain-address in DynamicFormField/TransactionForm to AddressFieldWithResolvedPreview (with the renderer's ResolvedAddressFieldPreviewWithNameResolution bridge), or expose a field-registry override the builder can opt into. This is the primary change and benefits every renderer consumer.
- ui-builder export template (
main.template.tsx): add reverse-resolution provider wiring (AddressNameResolutionProvider) so AddressDisplay surfaces resolve names, and thread the network-scoped network prop where a surface can target a network other than the wallet-global one.
- Keep it opt-outable: a builder export setting (default ON) to include ENS wiring, for teams that want a minimal bundle.
- Update export codegen snapshot/fixture tests (
apps/builder/src/export/__tests__/…) accordingly.
Acceptance criteria
Notes
Summary
Exported apps generated by UI Builder should ship the full ENS / name-resolution featureset by default, matching what the builder app and the other consuming apps (role-manager, rwa-wizard) now provide. Today exported apps only get partial (forward-only) resolution, so end users of a generated dApp don't see the resolved-address UX.
Current state
After #401, the export scaffolding (
apps/builder/src/export/codeTemplates/main.template.tsx) wires forward name resolution:RuntimeProvider+WalletStateProvider+ aNameResolverBridge(useRuntimeNameResolver→NameResolverProvider)createRuntime(..., { nameResolution: { enableMainnetL1MissFallback: true } })So typing an ENS name into an address input in an exported app resolves forward. Missing in exported apps:
AddressNameResolutionProvider, soAddressDisplaysurfaces show raw hex instead of name + avatar.AddressField, notAddressFieldWithResolvedPreview/ResolvedAddressFieldPreviewWithNameResolution, so there's no preview card.ui-react@3.3.0useResolveAddress(..., { network })).Root cause (the leverage point)
The generated forms render via ui-renderer's
TransactionForm/DynamicFormField, which maps ablockchain-addressfield to a bareAddressField. UntilDynamicFormFieldmapsblockchain-addresstoAddressFieldWithResolvedPreview(or exposes a registry override), neither the builder's own form preview nor exported apps get the rich ENS UX — regardless of provider wiring. (Flagged during the ENS integration round-2 work.)Proposal
Enable the full ENS featureset by default in exported apps (and, as a by-product, in the builder's live form preview):
blockchain-addressinDynamicFormField/TransactionFormtoAddressFieldWithResolvedPreview(with the renderer'sResolvedAddressFieldPreviewWithNameResolutionbridge), or expose a field-registry override the builder can opt into. This is the primary change and benefits every renderer consumer.main.template.tsx): add reverse-resolution provider wiring (AddressNameResolutionProvider) soAddressDisplaysurfaces resolve names, and thread the network-scopednetworkprop where a surface can target a network other than the wallet-global one.apps/builder/src/export/__tests__/…) accordingly.Acceptance criteria
AddressDisplaysurfaces.Notes
ui-components ^3.8.0,ui-react ^3.3.0,ui-renderer ^3.4.0(already adopted by the builder in feat(builder): enable full ENS featureset with mainnet L1 fallback #401).openzeppelin-ui(ui-rendererDynamicFormField); the builder change is provider wiring + an export toggle + snapshot updates.