From e356b16f051571aac91d1d9d056eef516750e357 Mon Sep 17 00:00:00 2001 From: j0ntz Date: Fri, 24 Apr 2026 16:24:34 -0700 Subject: [PATCH 1/5] Fix lint warnings in TransactionListRow --- eslint.config.mjs | 1 - src/components/themed/TransactionListRow.tsx | 26 +++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index cb766973b19..125578333cc 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -360,7 +360,6 @@ export default [ 'src/components/themed/Thermostat.tsx', 'src/components/themed/Title.tsx', 'src/components/themed/TransactionListComponents.tsx', - 'src/components/themed/TransactionListRow.tsx', 'src/components/themed/VectorIcon.tsx', 'src/components/themed/WalletList.tsx', diff --git a/src/components/themed/TransactionListRow.tsx b/src/components/themed/TransactionListRow.tsx index aa2fdf78798..4de4f287665 100644 --- a/src/components/themed/TransactionListRow.tsx +++ b/src/components/themed/TransactionListRow.tsx @@ -57,15 +57,7 @@ interface TransactionViewInnerProps extends TransactionListRowProps { isCard?: boolean } -export const TransactionView = (props: TransactionListRowProps) => { - return -} - -export const TransactionCard = (props: TransactionListRowProps) => { - return -} - -function TransactionViewInner(props: TransactionViewInnerProps) { +const TransactionViewInner: React.FC = props => { const theme = useTheme() const styles = getStyles(theme) @@ -130,7 +122,9 @@ function TransactionViewInner(props: TransactionViewInnerProps) { ) const cryptoAmountString = `${isSentTransaction ? '-' : '+'}${ - denominationSymbol ? denominationSymbol + ' ' : '' + denominationSymbol != null && denominationSymbol !== '' + ? denominationSymbol + ' ' + : '' }${cryptoAmountFormat}` // Fiat Amount @@ -249,13 +243,13 @@ function TransactionViewInner(props: TransactionViewInnerProps) { failOnCancel: false, url } - Share.open(shareOptions).catch(e => { + Share.open(shareOptions).catch((e: unknown) => { showError(e) }) }) // HACK: Handle 100% of the margins because of SceneHeader usage on this scene - return isCard ? ( + return isCard === true ? ( <> @@ -334,6 +328,14 @@ function TransactionViewInner(props: TransactionViewInnerProps) { ) } +export const TransactionView: React.FC = props => { + return +} + +export const TransactionCard: React.FC = props => { + return +} + const getStyles = cacheStyles((theme: Theme) => ({ cardlessView: { flexDirection: 'column', From 3f6eac95b6708c8d3a04103c37678057271d57ee Mon Sep 17 00:00:00 2001 From: j0ntz Date: Fri, 24 Apr 2026 16:26:01 -0700 Subject: [PATCH 2/5] Add ZcashNames (ZNS) resolver utility --- jest.config.js | 2 +- package.json | 3 ++- src/locales/strings/enUS.json | 2 +- src/util/zns.ts | 36 +++++++++++++++++++++++++++++++++++ yarn.lock | 13 +++++++++++++ 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/util/zns.ts diff --git a/jest.config.js b/jest.config.js index 374d6f16b32..b04a05bf1b3 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,6 +11,6 @@ module.exports = { preset: 'react-native', setupFilesAfterEnv: ['./jestSetup.js'], transformIgnorePatterns: [ - '/node_modules/(?!(@react-native|react-native|@react-navigation))' + '/node_modules/(?!(@react-native|react-native|@react-navigation|zcashname-sdk|@noble/ed25519))' ] } diff --git a/package.json b/package.json index 345e1ec54dc..36882567c23 100644 --- a/package.json +++ b/package.json @@ -186,7 +186,8 @@ "url-parse": "^1.5.2", "use-context-selector": "^2.0.0", "yaob": "^0.3.12", - "yavent": "^0.1.5" + "yavent": "^0.1.5", + "zcashname-sdk": "^0.7.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/src/locales/strings/enUS.json b/src/locales/strings/enUS.json index 584b22395b4..9c3af9de0e0 100644 --- a/src/locales/strings/enUS.json +++ b/src/locales/strings/enUS.json @@ -1086,7 +1086,7 @@ "personalize_wallet_title": "Personalize Your Wallet", "get_started_button": "Get Started", "not_now_button": "Not Now", - "scan_address_modal_title": "Enter Recipient FIO, ENS, or Public Address", + "scan_address_modal_title": "Enter Recipient ZEC, ENS, or Public Address", "enter_any_title": "Enter any of the following:", "enter_any_body": "1. Public address to send money to\n2. Private key to sweep\n3. Wallet Connect URI to connect to a dApp\n4. Edge Login URI to login to another device\n\nEdge will auto-detect the URI format and allow you to select an appropriate wallet", "enter_any_input_hint": "Enter any of the above", diff --git a/src/util/zns.ts b/src/util/zns.ts new file mode 100644 index 00000000000..2e8a82f008f --- /dev/null +++ b/src/util/zns.ts @@ -0,0 +1,36 @@ +import { ZNS } from 'zcashname-sdk' + +export const ZNS_SUFFIX = '.zcash' + +// The SDK's `network` option only selects the registry address; its `url` +// always falls back to the testnet indexer unless overridden explicitly. +const ZNS_MAINNET_URL = 'https://main.zcashnames.com' + +let znsClient: ZNS | null = null + +const getZns = (): ZNS => { + znsClient ??= new ZNS({ network: 'mainnet', url: ZNS_MAINNET_URL }) + return znsClient +} + +export const isZnsName = (input: string): boolean => + input.toLowerCase().endsWith(ZNS_SUFFIX) + +export const stripZnsSuffix = (input: string): string => { + const lower = input.toLowerCase() + return lower.endsWith(ZNS_SUFFIX) + ? lower.slice(0, lower.length - ZNS_SUFFIX.length) + : lower +} + +export const resolveZnsName = async (input: string): Promise => { + const reg = await getZns().resolveName(stripZnsSuffix(input)) + return reg?.address ?? null +} + +export const reverseResolveZnsAddress = async ( + address: string +): Promise => { + const regs = await getZns().resolveAddress(address, 1, 0) + return regs.length > 0 ? `${regs[0].name}${ZNS_SUFFIX}` : null +} diff --git a/yarn.lock b/yarn.lock index e125ef7cc9b..9989578617b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3416,6 +3416,11 @@ dependencies: "@noble/hashes" "1.7.1" +"@noble/ed25519@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-2.3.0.tgz#df0dbe424cfd7da4968b956b819c15db5fbe7f21" + integrity sha512-M7dvXL2B92/M7dw9+gzuydL8qn/jiqNHaoR3Q+cb1q1GHV7uwE17WCyFMG+Y+TZb5izcaXk5TdJRrDUxHXL78A== + "@noble/hashes@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" @@ -18960,6 +18965,14 @@ yoctocolors-cjs@^2.1.2: resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== +zcashname-sdk@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/zcashname-sdk/-/zcashname-sdk-0.7.2.tgz#472d4265dd0b9778f8cb327b8f0382f89229ca2f" + integrity sha512-VVq9LHNRgpFq0+Qzxqd7bRmk+KAt3uzJW2lthKeqsgSedRjjhML9Y+IBhRYyh/gge8rFOiKWdx3EyM9LJkwqAg== + dependencies: + "@noble/ed25519" "^2.0.0" + bech32 "^2.0.0" + zod@^3.21.4: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" From 5a6ad4811f94015738da905257833d76972d2141 Mon Sep 17 00:00:00 2001 From: j0ntz Date: Fri, 24 Apr 2026 16:27:49 -0700 Subject: [PATCH 3/5] Resolve ZNS names in Zcash send flow --- eslint.config.mjs | 4 ++-- src/components/modals/AddressModal.tsx | 25 +++++++++++++++++++++++++ src/components/scenes/SendScene2.tsx | 18 +++++++++++++++--- src/components/tiles/AddressTile2.tsx | 20 +++++++++++++++++++- 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 125578333cc..ad12b892c72 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -167,7 +167,7 @@ export default [ 'src/components/layout/Peek.tsx', 'src/components/modals/AccelerateTxModal.tsx', - 'src/components/modals/AddressModal.tsx', + 'src/components/modals/AirshipFullScreenSpinner.tsx', 'src/components/modals/AutoLogoutModal.tsx', 'src/components/modals/BackupModal.tsx', @@ -373,7 +373,7 @@ export default [ 'src/components/themed/WalletListSwipeableCurrencyRow.tsx', 'src/components/themed/WalletListSwipeableLoadingRow.tsx', - 'src/components/tiles/AddressTile2.tsx', + 'src/components/tiles/AprCard.tsx', 'src/components/tiles/CountdownTile.tsx', 'src/components/tiles/CryptoFiatAmountTile.tsx', diff --git a/src/components/modals/AddressModal.tsx b/src/components/modals/AddressModal.tsx index c5cb8f877fc..1908875afb1 100644 --- a/src/components/modals/AddressModal.tsx +++ b/src/components/modals/AddressModal.tsx @@ -29,6 +29,7 @@ import { getFioAddressCache } from '../../util/FioAddressUtils' import { resolveName } from '../../util/resolveName' +import { isZnsName, resolveZnsName } from '../../util/zns' import { EdgeButton } from '../buttons/EdgeButton' import { EdgeTouchableWithoutFeedback } from '../common/EdgeTouchableWithoutFeedback' import { showDevError, showError } from '../services/AirshipInstance' @@ -183,6 +184,7 @@ export class AddressModalComponent extends React.Component { return ( this.checkIfUnstoppableDomain(domain) || this.checkIfEnsDomain(domain) || + this.checkIfZnsName(domain) || this.checkIfAlias(domain) ) } @@ -193,6 +195,8 @@ export class AddressModalComponent extends React.Component { checkIfEnsDomain = (name: string): boolean => ENS_DOMAINS.some(domain => name.endsWith(domain)) + checkIfZnsName = (name: string): boolean => isZnsName(name) + fetchUnstoppableDomainAddress = async ( resolver: Resolver, domain: string, @@ -232,6 +236,13 @@ export class AddressModalComponent extends React.Component { return address } + fetchZnsAddress = async (domain: string): Promise => { + const address = await resolveZnsName(domain) + if (address == null) + throw new ResolutionError('UnregisteredDomain', { domain }) + return address + } + resolveName = async (name: string, currencyTicker: string): Promise => { this.setState({ errorLabel: undefined }) if (name === '') return @@ -255,6 +266,11 @@ export class AddressModalComponent extends React.Component { ) } else if (this.checkIfEnsDomain(name)) { address = await this.fetchEnsAddress(name) + } else if ( + this.checkIfZnsName(name) && + this.props.coreWallet.currencyInfo.pluginId === 'zcash' + ) { + address = await this.fetchZnsAddress(name) } if (address == null) { throw new ResolutionError('UnsupportedDomain', { domain: name }) @@ -413,6 +429,15 @@ export class AddressModalComponent extends React.Component { ) { submitData = uri } + // Same idea for ZNS (.zcash) names on Zcash — return the original name so + // the caller can capture znsName and persist it in transaction metadata. + if ( + coreWallet.currencyInfo.pluginId === 'zcash' && + typeof uri === 'string' && + isZnsName(uri) + ) { + submitData = uri + } if (errorLabel != null) return this.props.bridge.resolve(submitData) } diff --git a/src/components/scenes/SendScene2.tsx b/src/components/scenes/SendScene2.tsx index f8aa17178b3..720af5c4d68 100644 --- a/src/components/scenes/SendScene2.tsx +++ b/src/components/scenes/SendScene2.tsx @@ -428,7 +428,7 @@ const SendComponent = (props: Props): React.ReactElement => { const handleChangeAddress = (spendTarget: EdgeSpendTarget) => async (changeAddressResult: ChangeAddressResult): Promise => { - const { addressEntryMethod, parsedUri, fioAddress, alias } = + const { addressEntryMethod, parsedUri, fioAddress, alias, znsName } = changeAddressResult if (parsedUri != null) { @@ -468,7 +468,8 @@ const SendComponent = (props: Props): React.ReactElement => { } spendTarget.otherParams = { fioAddress, - zanoAlias: alias + zanoAlias: alias, + znsName } // We can assume the spendTarget object came from the Component spendInfo so simply resetting the spendInfo @@ -495,10 +496,12 @@ const SendComponent = (props: Props): React.ReactElement => { spendTarget: EdgeSpendTarget ): React.ReactElement => { const { publicAddress, nativeAmount, otherParams = {} } = spendTarget - const { fioAddress } = otherParams + const { fioAddress, znsName } = otherParams let title = '' if (fioAddress != null) { title = `Send To (${fioAddress}) ${publicAddress}` + } else if (znsName != null) { + title = `Send To (${znsName}) ${publicAddress}` } else { title = `Send To ${publicAddress}` } @@ -1320,6 +1323,15 @@ const SendComponent = (props: Props): React.ReactElement => { payeeName = zanoAliases[0] } } + // Same idea for ZNS (.zec) names on Zcash + if (coreWallet.currencyInfo.pluginId === 'zcash') { + const znsNames = spendInfo.spendTargets + .map(t => t.otherParams?.znsName) + .filter((a): a is string => a != null && a.length > 0) + if (znsNames.length === 1) { + payeeName = znsNames[0] + } + } for (const target of spendInfo.spendTargets) { const { fioAddress } = target.otherParams ?? {} if (fioAddress != null) { diff --git a/src/components/tiles/AddressTile2.tsx b/src/components/tiles/AddressTile2.tsx index a2bed4b8d6b..77749f4574e 100644 --- a/src/components/tiles/AddressTile2.tsx +++ b/src/components/tiles/AddressTile2.tsx @@ -25,6 +25,7 @@ import { parseDeepLink } from '../../util/DeepLinkParser' import { checkPubAddress } from '../../util/FioAddressUtils' import { resolveName } from '../../util/resolveName' import { isEmail } from '../../util/utils' +import { isZnsName, resolveZnsName } from '../../util/zns' import { EdgeAnim } from '../common/EdgeAnim' import { EdgeTouchableOpacity } from '../common/EdgeTouchableOpacity' import { AddressModal } from '../modals/AddressModal' @@ -47,6 +48,7 @@ export interface ChangeAddressResult { parsedUri?: EdgeParsedUri addressEntryMethod: AddressEntryMethod alias?: string + znsName?: string } export interface AddressTileRef { @@ -150,6 +152,7 @@ export const AddressTile2 = React.forwardRef( const enteredInput = address.trim() address = enteredInput let zanoAlias: string | undefined + let znsName: string | undefined let fioAddress if (fioPlugin != null) { try { @@ -226,6 +229,20 @@ export const AddressTile2 = React.forwardRef( } catch (_) {} } + // Preserve and resolve ZcashNames like "alice.zcash" + if ( + coreWallet.currencyInfo.pluginId === 'zcash' && + isZnsName(enteredInput) + ) { + try { + const resolved = await resolveZnsName(enteredInput) + if (resolved != null) { + znsName = enteredInput.toLowerCase() + address = resolved + } + } catch (_) {} + } + try { const parsedUri: EdgeParsedUri & { paymentProtocolUrl?: string } = await coreWallet.parseUri(address, currencyCode) @@ -270,7 +287,8 @@ export const AddressTile2 = React.forwardRef( fioAddress, parsedUri, addressEntryMethod, - alias: zanoAlias + alias: zanoAlias, + znsName }) } catch (e: unknown) { const currencyInfo = coreWallet.currencyInfo From e90643764fb92f8130d6fb866c78c68e87d51460 Mon Sep 17 00:00:00 2001 From: j0ntz Date: Fri, 24 Apr 2026 16:32:38 -0700 Subject: [PATCH 4/5] Show ZNS names for known Zcash recipients --- CHANGELOG.md | 1 + eslint.config.mjs | 2 - .../scenes/TransactionDetailsScene.tsx | 8 +++- src/components/themed/TransactionListRow.tsx | 9 +++- src/hooks/useZnsName.ts | 44 +++++++++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 src/hooks/useZnsName.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e680084d384..afce77c7d30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - added: Show swap KYC/terms modal for NExchange - added: Nym mixnet warning in Stake, Unstake, and Claim Rewards scenes +- added: Resolve and display ZcashNames (.zcash) in the Zcash send flow and transaction history. - changed: Migrate Thorchain Savers and Thorchain Yield endpoints off NineRealms to gateway.liquify.com. ## 4.48.0 (staging) diff --git a/eslint.config.mjs b/eslint.config.mjs index ad12b892c72..73e77c8bc8c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -288,8 +288,6 @@ export default [ 'src/components/scenes/SwapSettingsScene.tsx', 'src/components/scenes/SwapSuccessScene.tsx', - 'src/components/scenes/TransactionDetailsScene.tsx', - 'src/components/scenes/TransactionsExportScene.tsx', 'src/components/scenes/WalletRestoreScene.tsx', diff --git a/src/components/scenes/TransactionDetailsScene.tsx b/src/components/scenes/TransactionDetailsScene.tsx index 8add9e8078c..f34304a6e33 100644 --- a/src/components/scenes/TransactionDetailsScene.tsx +++ b/src/components/scenes/TransactionDetailsScene.tsx @@ -27,6 +27,7 @@ import { useHandler } from '../../hooks/useHandler' import { useHistoricalRate } from '../../hooks/useHistoricalRate' import { useIconColor } from '../../hooks/useIconColor' import { useWatch } from '../../hooks/useWatch' +import { useZnsName } from '../../hooks/useZnsName' import { toPercentString } from '../../locales/intl' import { lstrings } from '../../locales/strings' import { getExchangeDenom } from '../../selectors/DenominationSelectors' @@ -444,7 +445,12 @@ export const TransactionDetailsComponent: React.FC = props => { direction === 'receive' ? lstrings.transaction_details_sender : lstrings.transaction_details_recipient - const personName = localMetadata.name ?? personLabel + const recipientAddress = transaction.spendTargets?.[0]?.publicAddress + const znsName = useZnsName(wallet.currencyInfo.pluginId, recipientAddress) + const personName = + localMetadata.name != null && localMetadata.name !== '' + ? localMetadata.name + : znsName ?? personLabel const personHeader = sprintf( lstrings.transaction_details_person_name, personLabel diff --git a/src/components/themed/TransactionListRow.tsx b/src/components/themed/TransactionListRow.tsx index 4de4f287665..cf44f35b1db 100644 --- a/src/components/themed/TransactionListRow.tsx +++ b/src/components/themed/TransactionListRow.tsx @@ -24,6 +24,7 @@ import { useDisplayDenom } from '../../hooks/useDisplayDenom' import { displayFiatAmount } from '../../hooks/useFiatText' import { useHandler } from '../../hooks/useHandler' import { useHistoricalRate } from '../../hooks/useHistoricalRate' +import { useZnsName } from '../../hooks/useZnsName' import { formatNumber } from '../../locales/intl' import { lstrings } from '../../locales/strings' import { getExchangeDenom } from '../../selectors/DenominationSelectors' @@ -101,7 +102,13 @@ const TransactionViewInner: React.FC = props => { account, wallet ) - const { category, name } = mergedData + const { category, name: metadataName } = mergedData + const recipientAddress = transaction.spendTargets?.[0]?.publicAddress + const znsName = useZnsName(currencyInfo.pluginId, recipientAddress) + const name = + metadataName != null && metadataName !== '' + ? metadataName + : znsName ?? metadataName const isSentTransaction = direction === 'send' const cryptoAmount = div( diff --git a/src/hooks/useZnsName.ts b/src/hooks/useZnsName.ts new file mode 100644 index 00000000000..ab526fa3411 --- /dev/null +++ b/src/hooks/useZnsName.ts @@ -0,0 +1,44 @@ +import { useEffect, useState } from 'react' + +import { reverseResolveZnsAddress } from '../util/zns' + +const cache = new Map() +const inflight = new Map>() + +const lookupZnsName = async (address: string): Promise => { + if (cache.has(address)) return cache.get(address) ?? null + let promise = inflight.get(address) + if (promise == null) { + promise = reverseResolveZnsAddress(address).catch((_err: unknown) => null) + inflight.set(address, promise) + } + const result = await promise + cache.set(address, result) + inflight.delete(address) + return result +} + +export const useZnsName = ( + pluginId: string, + address: string | undefined +): string | null => { + const enabled = pluginId === 'zcash' && address != null && address !== '' + const [name, setName] = useState( + enabled ? cache.get(address) ?? null : null + ) + + useEffect(() => { + if (!enabled) return + let cancelled = false + lookupZnsName(address) + .then(result => { + if (!cancelled) setName(result) + }) + .catch((_err: unknown) => null) + return () => { + cancelled = true + } + }, [enabled, address]) + + return name +} From f1848ec96374ad51860029603eea798bcabcf8e3 Mon Sep 17 00:00:00 2001 From: j0ntz Date: Mon, 27 Apr 2026 14:44:34 -0700 Subject: [PATCH 5/5] Show recipient name above address in send tile --- src/components/scenes/SendScene2.tsx | 5 +++-- src/components/tiles/AddressTile2.tsx | 12 ++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/components/scenes/SendScene2.tsx b/src/components/scenes/SendScene2.tsx index 720af5c4d68..6cf4bb68dfe 100644 --- a/src/components/scenes/SendScene2.tsx +++ b/src/components/scenes/SendScene2.tsx @@ -543,7 +543,8 @@ const SendComponent = (props: Props): React.ReactElement => { if (coreWallet != null && hiddenFeaturesMap.address !== true) { // TODO: Change API of AddressTile to access undefined recipientAddress const { publicAddress = '', otherParams = {} } = spendTarget - const { fioAddress } = otherParams + const { fioAddress, zanoAlias, znsName } = otherParams + const recipientName = fioAddress ?? znsName ?? zanoAlias const title = lstrings.send_scene_send_to_address + (spendInfo.spendTargets.length > 1 ? ` ${(index + 1).toString()}` : '') @@ -562,7 +563,7 @@ const SendComponent = (props: Props): React.ReactElement => { resetSendTransaction={handleResetSendTransaction(spendTarget)} lockInputs={lockTilesMap.address} isCameraOpen={doOpenCamera} - fioToAddress={fioAddress} + recipientName={recipientName} navigation={navigation as NavigationBase} /> ) diff --git a/src/components/tiles/AddressTile2.tsx b/src/components/tiles/AddressTile2.tsx index 77749f4574e..ef79a0df466 100644 --- a/src/components/tiles/AddressTile2.tsx +++ b/src/components/tiles/AddressTile2.tsx @@ -64,7 +64,11 @@ interface Props { resetSendTransaction: () => void lockInputs?: boolean isCameraOpen: boolean - fioToAddress?: string + /** + * Friendly recipient name to render above the public address — e.g. a FIO + * handle, Zano alias, or ZNS (.zcash) name. Display-only. + */ + recipientName?: string navigation: NavigationBase } @@ -73,7 +77,7 @@ export const AddressTile2 = React.forwardRef( const { coreWallet, tokenId, - fioToAddress, + recipientName, isCameraOpen, lockInputs, navigation, @@ -511,8 +515,8 @@ export const AddressTile2 = React.forwardRef( enter={{ type: 'stretchInY' }} exit={{ type: 'stretchOutY' }} > - {fioToAddress == null ? null : ( - {fioToAddress + '\n'} + {recipientName == null ? null : ( + {recipientName + '\n'} )}