Skip to content

Commit 39b512a

Browse files
authored
Move layer numbering to the ENV (#3278)
* Rollups: move layer numbering to the ENV Resolves #2554 * fix review comments
1 parent 46d903f commit 39b512a

File tree

66 files changed

+351
-196
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+351
-196
lines changed

configs/app/features/rollup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const title = 'Rollup (L2) chain';
3232
const config: Feature<{
3333
type: RollupType;
3434
stageIndex: string | undefined;
35+
layerNumber: number;
3536
homepage: { showLatestBlocks: boolean };
3637
outputRootsEnabled: boolean;
3738
interopEnabled: boolean;
@@ -50,6 +51,7 @@ const config: Feature<{
5051
isEnabled: true,
5152
type,
5253
stageIndex: getEnvValue('NEXT_PUBLIC_ROLLUP_STAGE_INDEX'),
54+
layerNumber: Number(getEnvValue('NEXT_PUBLIC_ROLLUP_LAYER_NUMBER') || 2),
5355
L2WithdrawalUrl: type === 'optimistic' ? L2WithdrawalUrl : undefined,
5456
outputRootsEnabled: type === 'optimistic' && getEnvValue('NEXT_PUBLIC_ROLLUP_OUTPUT_ROOTS_ENABLED') === 'true',
5557
interopEnabled: type === 'optimistic' && getEnvValue('NEXT_PUBLIC_INTEROP_ENABLED') === 'true',

deploy/tools/envs-validator/schemas/features/rollup.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,17 @@ export const rollupSchema = yup
169169
value => value === undefined,
170170
),
171171
}),
172+
NEXT_PUBLIC_ROLLUP_LAYER_NUMBER: yup.number()
173+
.positive()
174+
.integer()
175+
.min(2)
176+
.when('NEXT_PUBLIC_ROLLUP_TYPE', {
177+
is: (value: string) => Boolean(value),
178+
then: (schema) => schema,
179+
otherwise: (schema) => schema.test(
180+
'not-exist',
181+
'NEXT_PUBLIC_ROLLUP_LAYER_NUMBER can only be used with NEXT_PUBLIC_ROLLUP_TYPE',
182+
value => value === undefined,
183+
),
184+
}),
172185
});

deploy/tools/envs-validator/test/.env.optimism

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ NEXT_PUBLIC_ROLLUP_HOMEPAGE_SHOW_LATEST_BLOCKS=true
66
NEXT_PUBLIC_ROLLUP_OUTPUT_ROOTS_ENABLED=false
77
NEXT_PUBLIC_ROLLUP_PARENT_CHAIN={'baseUrl':'https://explorer.duckchain.io'}
88
NEXT_PUBLIC_INTEROP_ENABLED=true
9-
NEXT_PUBLIC_ROLLUP_STAGE_INDEX=1
9+
NEXT_PUBLIC_ROLLUP_STAGE_INDEX=1
10+
NEXT_PUBLIC_ROLLUP_LAYER_NUMBER=5

deploy/tools/llms-txt-generator/index.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { writeFileSync } from 'node:fs';
33
import { dirname, resolve as resolvePath } from 'node:path';
44
import { fileURLToPath } from 'node:url';
55
import dedent from 'dedent';
6+
import { layerLabels } from 'lib/rollups/utils';
67

78
const currentFilePath = fileURLToPath(import.meta.url);
89
const currentDir = dirname(currentFilePath);
@@ -25,6 +26,8 @@ function run() {
2526

2627
const rollupFeature = config.features.rollup;
2728
const parentChainUrl = rollupFeature.isEnabled ? rollupFeature.parentChain.baseUrl : undefined;
29+
const currentToParentLayerLabel = layerLabels.current + '→' + layerLabels.parent;
30+
const parentToCurrentLayerLabel = layerLabels.parent + '→' + layerLabels.current;
2831

2932
const validatorsFeature = config.features.validators;
3033

@@ -111,19 +114,19 @@ function run() {
111114
curl --request GET --url '${ generalApiUrl }/api/v2/blocks/arbitrum-batch/{batch_number}'
112115
\`\`\`
113116
114-
### Get L1→L2 messages
117+
### Get ${ parentToCurrentLayerLabel } messages
115118
116119
\`\`\`bash
117120
curl --request GET --url '${ generalApiUrl }/api/v2/arbitrum/messages/to-rollup'
118121
\`\`\`
119122
120-
### Get L2→L1 messages
123+
### Get ${ currentToParentLayerLabel } messages
121124
122125
\`\`\`bash
123126
curl --request GET --url '${ generalApiUrl }/api/v2/arbitrum/messages/from-rollup'
124127
\`\`\`
125128
126-
### L2→L1 messages by transaction:
129+
### ${ currentToParentLayerLabel } messages by transaction:
127130
128131
\`\`\`bash
129132
curl --request GET --url '${ generalApiUrl }/api/v2/arbitrum/messages/withdrawals/{transactions_hash}'
@@ -155,13 +158,13 @@ function run() {
155158
curl --request GET --url '${ generalApiUrl }/api/v2/optimism/games'
156159
\`\`\`
157160
158-
### Get L1→L2 messages
161+
### Get ${ parentToCurrentLayerLabel } messages
159162
160163
\`\`\`bash
161164
curl --request GET --url '${ generalApiUrl }/api/v2/optimism/deposits'
162165
\`\`\`
163166
164-
### Get L2→L1 messages
167+
### Get ${ currentToParentLayerLabel } messages
165168
166169
\`\`\`bash
167170
curl --request GET --url '${ generalApiUrl }/api/v2/optimism/withdrawals'
@@ -299,27 +302,27 @@ function run() {
299302
curl --request GET --url '${ generalApiUrl }/api/v2/blocks/scroll-batch/{batch_number}'
300303
\`\`\`
301304
302-
### Deposits (L1→L2)
305+
### Deposits (${ parentToCurrentLayerLabel })
303306
304307
\`\`\`bash
305308
curl --request GET --url '${ generalApiUrl }/api/v2/scroll/deposits'
306309
\`\`\`
307310
308-
### Withdrawals (L2→L1)
311+
### Withdrawals (${ currentToParentLayerLabel })
309312
310313
\`\`\`bash
311314
curl --request GET --url '${ generalApiUrl }/api/v2/scroll/withdrawals'
312315
\`\`\`
313316
` : undefined;
314317

315318
const SHIBARIUM_CHAIN_TEMPLATE = rollupFeature.isEnabled && rollupFeature.type === 'shibarium' ? `
316-
### Deposits (L1→L2)
319+
### Deposits (${ parentToCurrentLayerLabel })
317320
318321
\`\`\`bash
319322
curl --request GET --url '${ generalApiUrl }/api/v2/shibarium/deposits'
320323
\`\`\`
321324
322-
### Withdrawals (L2→L1)
325+
### Withdrawals (${ currentToParentLayerLabel })
323326
324327
\`\`\`bash
325328
curl --request GET --url '${ generalApiUrl }/api/v2/shibarium/withdrawals'

docs/ENVS.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -529,8 +529,9 @@ Ads are enabled by default on all self-hosted instances. If you would like to di
529529
| Variable | Type| Description | Compulsoriness | Default value | Example value | Version |
530530
| --- | --- | --- | --- | --- | --- | --- |
531531
| NEXT_PUBLIC_ROLLUP_TYPE | `'optimistic' \| 'arbitrum' \| 'shibarium' \| 'zkEvm' \| 'zkSync' \| 'scroll'` | Rollup chain type | Required | - | `'optimistic'` | v1.24.0+ |
532-
| NEXT_PUBLIC_ROLLUP_L1_BASE_URL | `string` | Blockscout base URL for L1 network. **DEPRECATED** _Use `NEXT_PUBLIC_ROLLUP_PARENT_CHAIN` instead_ | Required | - | `'http://eth-goerli.blockscout.com'` | v1.24.0+ |
533-
| NEXT_PUBLIC_ROLLUP_L2_WITHDRAWAL_URL | `string` | URL for L2 -> L1 withdrawals (Optimistic stack only) | - | - | `https://app.optimism.io/bridge/withdraw` | v1.24.0+ |
532+
| NEXT_PUBLIC_ROLLUP_L1_BASE_URL | `string` | Blockscout base URL for parent network. **DEPRECATED** _Use `NEXT_PUBLIC_ROLLUP_PARENT_CHAIN` instead_ | Required | - | `'http://eth-goerli.blockscout.com'` | v1.24.0+ |
533+
| NEXT_PUBLIC_ROLLUP_L2_WITHDRAWAL_URL | `string` | URL for rollup to parent chain withdrawals (Optimistic stack only) | - | - | `https://app.optimism.io/bridge/withdraw` | v1.24.0+ |
534+
| NEXT_PUBLIC_ROLLUP_LAYER_NUMBER | `number` | Layer number of the rollup | - | `2` | `3` | upcoming |
534535
| NEXT_PUBLIC_ROLLUP_STAGE_INDEX | `1 \| 2` | Reflects the maturity and decentralization level of the chain based on [L2BEAT's framework](https://medium.com/l2beat/introducing-stages-a-framework-to-evaluate-rollups-maturity-d290bb22befe). The label will be added to the sidebar according to the provided stage index. Not applicable for testnets. | - | - | `1` | v2.1.0+ |
535536
| NEXT_PUBLIC_FAULT_PROOF_ENABLED | `boolean` | Set to `true` for chains with fault proof system enabled (Optimistic stack only) | - | - | `true` | v1.31.0+ |
536537
| NEXT_PUBLIC_HAS_MUD_FRAMEWORK | `boolean` | Set to `true` for instances that use MUD framework (Optimistic stack only) | - | - | `true` | v1.33.0+ |
@@ -546,7 +547,7 @@ Ads are enabled by default on all self-hosted instances. If you would like to di
546547
| Variable | Type| Description | Compulsoriness | Default value | Example value |
547548
| --- | --- | --- | --- | --- | --- |
548549
| id | `number` | Chain id, see [https://chainlist.org](https://chainlist.org) for the reference. | - | - | `42` |
549-
| name | `string` | Displayed name of the chain. Set to customize L1 transaction status labels in the UI (e.g., "Sent to <chain-name>"). Currently, this setting is applicable only for Arbitrum-based chains. | - | - | `DuckChain` |
550+
| name | `string` | Displayed name of the chain. Set to customize parent chain transaction status labels in the UI (e.g., "Sent to <chain-name>"). Currently, this setting is applicable only for Arbitrum-based chains. | - | - | `DuckChain` |
550551
| baseUrl | `string` | Base url of the chain explorer. | Required | - | `https://explorer.duckchain.io` |
551552
| rpcUrls | `Array<string>` | Chain public RPC server urls, see [https://chainlist.org](https://chainlist.org) for the reference. | - | - | `['https://rpc.duckchain.io']` |
552553
| currency | `{ name: string; symbol: string; decimals: number; }` | Chain currency config. | - | - | `{ name: Quack, symbol: QUA, decimals: 18 }` |

lib/hooks/useNavItems.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React from 'react';
44
import type { NavItemInternal, NavItem, NavGroupItem } from 'types/client/navigation';
55

66
import config from 'configs/app';
7+
import { layerLabels } from 'lib/rollups/utils';
78
import { rightLineArrow } from 'toolkit/utils/htmlEntities';
89

910
const marketplaceFeature = config.features.marketplace;
@@ -98,13 +99,13 @@ export default function useNavItems(): ReturnType {
9899
isActive: pathname === '/validators' || pathname === '/validators/[id]',
99100
} : null;
100101
const rollupDeposits = {
101-
text: `Deposits (L1${ rightLineArrow }L2)`,
102+
text: `Deposits (${ layerLabels.parent }${ rightLineArrow }${ layerLabels.current })`,
102103
nextRoute: { pathname: '/deposits' as const },
103104
icon: 'navigation/deposits',
104105
isActive: pathname === '/deposits',
105106
};
106107
const rollupWithdrawals = {
107-
text: `Withdrawals (L2${ rightLineArrow }L1)`,
108+
text: `Withdrawals (${ layerLabels.current }${ rightLineArrow }${ layerLabels.parent })`,
108109
nextRoute: { pathname: '/withdrawals' as const },
109110
icon: 'navigation/withdrawals',
110111
isActive: pathname === '/withdrawals',

lib/metadata/templates/title.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getFeaturePayload } from 'configs/app/features/types';
33
import type { Route } from 'nextjs-routes';
44

55
import config from 'configs/app';
6+
import { layerLabels } from 'lib/rollups/utils';
67

78
const dappEntityName = (getFeaturePayload(config.features.marketplace)?.titles.entity_name ?? '').toLowerCase();
89

@@ -43,15 +44,15 @@ const TEMPLATE_MAP: Record<Route['pathname'], string> = {
4344
'/account/verified-addresses': '%network_name% - my verified addresses',
4445
'/public-tags/submit': '%network_name% - public tag requests',
4546
'/withdrawals': '%network_name% withdrawals - track on %network_name% explorer',
46-
'/txn-withdrawals': '%network_name% L2 to L1 message relayer',
47+
'/txn-withdrawals': `${ layerLabels.current } to ${ layerLabels.parent } message relayer`,
4748
'/visualize/sol2uml': '%network_name% Solidity UML diagram',
4849
'/csv-export': '%network_name% export data to CSV',
4950
'/deposits': '%network_name% deposits - track on %network_name% explorer',
5051
'/output-roots': '%network_name% output roots',
5152
'/dispute-games': '%network_name% dispute games',
5253
'/batches': '%network_name% txn batches',
53-
'/batches/[number]': '%network_name% L2 txn batch %number%',
54-
'/batches/celestia/[height]/[commitment]': '%network_name% L2 txn batch %height% %commitment%',
54+
'/batches/[number]': `%network_name% ${ layerLabels.current } txn batch %number%`,
55+
'/batches/celestia/[height]/[commitment]': `%network_name% ${ layerLabels.current } txn batch %height% %commitment%`,
5556
'/blobs/[hash]': '%network_name% blob %hash% details',
5657
'/ops': 'User operations on %network_name% - %network_name% explorer',
5758
'/op/[hash]': '%network_name% user operation %hash%',

lib/rollups/utils.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import type { ZKEVM_L2_TX_STATUSES } from 'types/api/transaction';
2+
import type { ZKEVM_L2_TX_BATCH_STATUSES } from 'types/api/zkEvmL2';
3+
import type { ZKSYNC_L2_TX_BATCH_STATUSES } from 'types/api/zkSyncL2';
4+
5+
import config from 'configs/app';
6+
7+
const feature = config.features.rollup;
8+
9+
export const layerLabels = feature.isEnabled ? {
10+
current: `L${ feature.layerNumber }`,
11+
parent: `L${ feature.layerNumber - 1 }`,
12+
} : {
13+
current: 'L2',
14+
parent: 'L1',
15+
};
16+
17+
export const formatZkEvmTxStatus = (status: typeof ZKEVM_L2_TX_STATUSES[number]) => {
18+
switch (status) {
19+
case 'L1 Confirmed':
20+
return `${ layerLabels.parent } Confirmed`;
21+
default:
22+
return status;
23+
}
24+
};
25+
26+
export const formatZkEvmL2TxnBatchStatus = (status: typeof ZKEVM_L2_TX_BATCH_STATUSES[number]) => {
27+
switch (status) {
28+
case 'L1 Sequence Confirmed':
29+
return `${ layerLabels.parent } Sequence Confirmed`;
30+
default:
31+
return status;
32+
}
33+
};
34+
35+
export const formatZkSyncL2TxnBatchStatus = (status: typeof ZKSYNC_L2_TX_BATCH_STATUSES[number]) => {
36+
return status.replace('L2', layerLabels.current).replace('L1', layerLabels.parent);
37+
};

ui/block/BlockDetails.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import getBlockReward from 'lib/block/getBlockReward';
1313
import { useMultichainContext } from 'lib/contexts/multichain';
1414
import getNetworkValidatorTitle from 'lib/networks/getNetworkValidatorTitle';
1515
import * as arbitrum from 'lib/rollups/arbitrum';
16+
import { formatZkSyncL2TxnBatchStatus, layerLabels } from 'lib/rollups/utils';
1617
import getQueryParamString from 'lib/router/getQueryParamString';
1718
import { CollapsibleDetails } from 'toolkit/chakra/collapsible';
1819
import { Link } from 'toolkit/chakra/link';
@@ -46,6 +47,8 @@ import BlockDetailsBlobInfo from './details/BlockDetailsBlobInfo';
4647
import BlockDetailsZilliqaQuorumCertificate from './details/BlockDetailsZilliqaQuorumCertificate';
4748
import type { BlockQuery } from './useBlockQuery';
4849

50+
const zkSyncVerificationSteps = ZKSYNC_L2_TX_BATCH_STATUSES.map(formatZkSyncL2TxnBatchStatus);
51+
4952
interface Props {
5053
query: BlockQuery;
5154
}
@@ -174,10 +177,10 @@ const BlockDetails = ({ query }: Props) => {
174177
{ rollupFeature.isEnabled && rollupFeature.type === 'arbitrum' && data.arbitrum && (
175178
<>
176179
<DetailedInfo.ItemLabel
177-
hint="The most recent L1 block height as of this L2 block"
180+
hint={ `The most recent ${ layerLabels.parent } block height as of this ${ layerLabels.current } block` }
178181
isLoading={ isPlaceholderData }
179182
>
180-
L1 block height
183+
{ layerLabels.parent } block height
181184
</DetailedInfo.ItemLabel>
182185
<DetailedInfo.ItemValue>
183186
<BlockEntityL1 isLoading={ isPlaceholderData } number={ data.arbitrum.l1_block_number }/>
@@ -305,8 +308,13 @@ const BlockDetails = ({ query }: Props) => {
305308
Status
306309
</DetailedInfo.ItemLabel>
307310
<DetailedInfo.ItemValue>
308-
{ rollupFeature.type === 'zkSync' && data.zksync &&
309-
<VerificationSteps steps={ ZKSYNC_L2_TX_BATCH_STATUSES } currentStep={ data.zksync.status } isLoading={ isPlaceholderData }/> }
311+
{ rollupFeature.type === 'zkSync' && data.zksync && (
312+
<VerificationSteps
313+
steps={ zkSyncVerificationSteps }
314+
currentStep={ formatZkSyncL2TxnBatchStatus(data.zksync.status) }
315+
isLoading={ isPlaceholderData }
316+
/>
317+
) }
310318
{ rollupFeature.type === 'arbitrum' && data.arbitrum && (
311319
<VerificationSteps
312320
steps={ arbitrum.verificationSteps }
@@ -344,7 +352,7 @@ const BlockDetails = ({ query }: Props) => {
344352
{ data.arbitrum?.commitment_transaction.hash && (
345353
<>
346354
<DetailedInfo.ItemLabel
347-
hint="L1 transaction containing this batch commitment"
355+
hint={ `${ layerLabels.parent } transaction containing this batch commitment` }
348356
isLoading={ isPlaceholderData }
349357
>
350358
Commitment tx
@@ -358,7 +366,7 @@ const BlockDetails = ({ query }: Props) => {
358366
{ data.arbitrum?.confirmation_transaction.hash && (
359367
<>
360368
<DetailedInfo.ItemLabel
361-
hint="L1 transaction containing confirmation of this batch"
369+
hint={ `${ layerLabels.parent } transaction containing confirmation of this batch` }
362370
isLoading={ isPlaceholderData }
363371
>
364372
Confirmation tx
@@ -684,7 +692,7 @@ const BlockDetails = ({ query }: Props) => {
684692
{ rollupFeature.isEnabled && rollupFeature.type === 'arbitrum' && data.arbitrum && data.arbitrum.send_count && (
685693
<>
686694
<DetailedInfo.ItemLabel
687-
hint="The cumulative number of L2 to L1 transactions as of this block"
695+
hint={ `The cumulative number of ${ layerLabels.current } to ${ layerLabels.parent } transactions as of this block` }
688696
isLoading={ isPlaceholderData }
689697
>
690698
Send count
@@ -694,7 +702,7 @@ const BlockDetails = ({ query }: Props) => {
694702
</DetailedInfo.ItemValue>
695703

696704
<DetailedInfo.ItemLabel
697-
hint="The root of the Merkle accumulator representing all L2 to L1 transactions as of this block"
705+
hint={ `The root of the Merkle accumulator representing all ${ layerLabels.current } to ${ layerLabels.parent } transactions as of this block` }
698706
isLoading={ isPlaceholderData }
699707
>
700708
Send root
@@ -704,7 +712,7 @@ const BlockDetails = ({ query }: Props) => {
704712
</DetailedInfo.ItemValue>
705713

706714
<DetailedInfo.ItemLabel
707-
hint="The number of delayed L1 to L2 messages read as of this block"
715+
hint={ `The number of delayed ${ layerLabels.parent } to ${ layerLabels.current } messages read as of this block` }
708716
isLoading={ isPlaceholderData }
709717
>
710718
Delayed messages

ui/deposits/optimisticL2/OptimisticDepositsListItem.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React from 'react';
44
import type { OptimisticL2DepositsItem } from 'types/api/optimisticL2';
55

66
import config from 'configs/app';
7+
import { layerLabels } from 'lib/rollups/utils';
78
import { Skeleton } from 'toolkit/chakra/skeleton';
89
import AddressEntityL1 from 'ui/shared/entities/address/AddressEntityL1';
910
import BlockEntityL1 from 'ui/shared/entities/block/BlockEntityL1';
@@ -24,7 +25,7 @@ const OptimisticDepositsListItem = ({ item, isLoading }: Props) => {
2425
return (
2526
<ListItemMobileGrid.Container>
2627

27-
<ListItemMobileGrid.Label isLoading={ isLoading }>L1 block No</ListItemMobileGrid.Label>
28+
<ListItemMobileGrid.Label isLoading={ isLoading }>{ layerLabels.parent } block No</ListItemMobileGrid.Label>
2829
<ListItemMobileGrid.Value>
2930
<BlockEntityL1
3031
number={ item.l1_block_number }
@@ -33,7 +34,7 @@ const OptimisticDepositsListItem = ({ item, isLoading }: Props) => {
3334
/>
3435
</ListItemMobileGrid.Value>
3536

36-
<ListItemMobileGrid.Label isLoading={ isLoading }>L2 txn hash</ListItemMobileGrid.Label>
37+
<ListItemMobileGrid.Label isLoading={ isLoading }>{ layerLabels.current } txn hash</ListItemMobileGrid.Label>
3738
<ListItemMobileGrid.Value>
3839
<TxEntity
3940
isLoading={ isLoading }
@@ -51,7 +52,7 @@ const OptimisticDepositsListItem = ({ item, isLoading }: Props) => {
5152
/>
5253
</ListItemMobileGrid.Value>
5354

54-
<ListItemMobileGrid.Label isLoading={ isLoading }>L1 txn hash</ListItemMobileGrid.Label>
55+
<ListItemMobileGrid.Label isLoading={ isLoading }>{ layerLabels.parent } txn hash</ListItemMobileGrid.Label>
5556
<ListItemMobileGrid.Value>
5657
<TxEntityL1
5758
isLoading={ isLoading }
@@ -61,7 +62,7 @@ const OptimisticDepositsListItem = ({ item, isLoading }: Props) => {
6162
/>
6263
</ListItemMobileGrid.Value>
6364

64-
<ListItemMobileGrid.Label isLoading={ isLoading }>L1 txn origin</ListItemMobileGrid.Label>
65+
<ListItemMobileGrid.Label isLoading={ isLoading }>{ layerLabels.parent } txn origin</ListItemMobileGrid.Label>
6566
<ListItemMobileGrid.Value>
6667
<AddressEntityL1
6768
address={{ hash: item.l1_transaction_origin, name: '', is_contract: false, is_verified: false, ens_domain_name: null, implementations: null }}

0 commit comments

Comments
 (0)