Skip to content

Commit 6071935

Browse files
committed
base address identification
1 parent d3a65bb commit 6071935

3 files changed

Lines changed: 60 additions & 14 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { gql, useQuery } from '@apollo/client'
2+
import React from "react";
3+
import {TerminalLoading} from "../TerminalLoading.tsx";
4+
import {DetailLabel, DetailRow, DetailValue} from "../../pages/AccountDetails.tsx";
5+
6+
interface ExtrinsicEventsProps {
7+
extrinsicId: string;
8+
}
9+
export const GET_LAST_EVM_EVENT = gql`
10+
query GetLastEVMEvent($blockNumber: BigFloat!, $extrinsicId: Int!) {
11+
events(last: 1, filter: {and: {blockNumber: {equalTo: $blockNumber}, extrinsicId: {equalTo: $extrinsicId}}}) {
12+
nodes{
13+
data
14+
}
15+
}
16+
}
17+
`
18+
19+
export const EthereumTransfer: React.FC<ExtrinsicEventsProps> = ({ extrinsicId }) => {
20+
const { loading, error, data } = useQuery(GET_LAST_EVM_EVENT, {
21+
variables: {
22+
blockNumber: extrinsicId.split('-')[0],
23+
extrinsicId: parseInt(extrinsicId.split('-')[1] || '0')
24+
}});
25+
26+
return (<>
27+
{loading && <DetailRow><TerminalLoading /></DetailRow>}
28+
{error && <div>Error: {error.message}</div>}
29+
30+
{data && (
31+
<DetailRow>
32+
<DetailLabel>Transfer to Base:</DetailLabel>
33+
<DetailValue><a target={'_blank'} href={`https://basescan.org/address/${JSON.parse(data.events.nodes[0].data)[0]}`}>{JSON.parse(data.events.nodes[0].data)[0]}</a></DetailValue>
34+
</DetailRow>
35+
)}
36+
</>
37+
)
38+
}

src/pages/AccountTransfers.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export const AccountTransfers = () => {
5353
if (!address) {
5454
return <div>Error: No address provided</div>
5555
}
56+
const formattedNumber = (num: number) => num < 10 ? `000${num}` : num < 100 ? `00${num}` : num < 1000 ? `0${num}` : `${num}`;
5657

5758
return (
5859
<TerminalWindow title={`account_transfers`} footer={pageControls}>
@@ -63,11 +64,13 @@ export const AccountTransfers = () => {
6364
{(data?.transfers?.totalCount ?? 0) > 0 && (
6465
<div style={{padding: '8px 0',
6566
borderTop: '1px solid #0050a1'}}>
66-
<DataTable names={['Amount', 'From', 'To', 'Height', 'Timestamp']} records={data.transfers.nodes.map((transfer: { id: string; amount: number; from: string; to: string; blockNumber: string; timestamp: string | number | Date }) => {
67+
<DataTable names={['Amount', 'From', 'To', 'Height', 'Timestamp']} records={data.transfers.nodes.map((transfer: {
68+
extrinsicId: number;
69+
id: string; amount: number; from: string; to: string; blockNumber: string; timestamp: string | number | Date }) => {
6770
const formattedFrom = <ResponsiveAddress address={transfer.from}/>;
6871
const formattedTo = <ResponsiveAddress address={transfer.to}/>;
6972

70-
return {id: transfer.id, data: [formatTORUS(transfer.amount), transfer.from === address ? formattedFrom : <Link to={`/account/${transfer.from}`}>{formattedFrom}</Link>, transfer.to === address ? formattedTo : <Link to={`/account/${transfer.to}`}><ResponsiveAddress address={transfer.to}/></Link>, <Link to={`/block/${transfer.blockNumber}`}>{transfer.blockNumber}</Link>, new Date(transfer.timestamp).toLocaleString()
73+
return {id: transfer.id, data: [formatTORUS(transfer.amount), transfer.from === address ? formattedFrom : <Link to={`/account/${transfer.from}`}>{formattedFrom}</Link>, transfer.to === address ? formattedTo : <Link to={`/account/${transfer.to}`}><ResponsiveAddress address={transfer.to}/></Link>, <Link to={`/extrinsic/${transfer.blockNumber}-${formattedNumber(transfer.extrinsicId)}`}>{transfer.blockNumber}-{transfer.extrinsicId}</Link>, new Date(transfer.timestamp).toLocaleString()
7174
]}
7275
})} /></div>
7376
)}

src/pages/ExtrinsicDetails.tsx

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { DetailLabel } from './AccountDetails.tsx'
99
import { DetailRow } from './AccountDetails.tsx'
1010
import { ExtrinsicEvents } from './ExtrinsicEvents.tsx';
1111
import { Helmet } from 'react-helmet-async';
12+
import {EthereumTransfer} from "../components/extrinsics/EthereumTransfer.tsx";
1213

1314
export const GET_EXTRINSIC = gql`
1415
query GetExtrinsic($id: String!) {
@@ -31,24 +32,26 @@ export const GET_EXTRINSIC = gql`
3132
export const GET_EXTRINSIC_BY_HASH = gql`
3233
query GetExtrinsic($id: String!) {
3334
extrinsics(first: 1, filter: {hash: {equalTo: $id}}) {
34-
nodes{
35-
id
36-
module
37-
method
38-
blockNumber
39-
extrinsicId
40-
tip
41-
version
42-
signer
43-
success
44-
hash
45-
args
35+
nodes{
36+
id
37+
module
38+
method
39+
blockNumber
40+
extrinsicId
41+
tip
42+
version
43+
signer
44+
success
45+
hash
46+
args
4647
}
4748
}
4849
}
4950
`
5051

5152

53+
54+
5255
export const ExtrinsicDetails = () => {
5356
const { id } = useParams()
5457
const { loading, error, data } = useQuery(id?.startsWith('0x') ? GET_EXTRINSIC_BY_HASH : GET_EXTRINSIC, {
@@ -107,6 +110,7 @@ export const ExtrinsicDetails = () => {
107110
<DetailLabel>Method:</DetailLabel>
108111
<DetailValue>{extrinsic.method}</DetailValue>
109112
</DetailRow>
113+
{extrinsic.module === 'ethereum' && <EthereumTransfer extrinsicId={extrinsic.id} />}
110114
<DetailRow>
111115
<DetailLabel>Signer:</DetailLabel>
112116
<DetailValue>{extrinsic.signer} <CopyButton textToCopy={extrinsic.signer}/></DetailValue>
@@ -123,6 +127,7 @@ export const ExtrinsicDetails = () => {
123127
<DetailLabel>Arguments:</DetailLabel>
124128
<DetailValue>{extrinsic.args}</DetailValue>
125129
</DetailRow>
130+
126131
<TerminalTabs
127132
tabs={[
128133
{

0 commit comments

Comments
 (0)