Commit dc41d7f5 authored by tom's avatar tom

address logs

parent 4c61233e
...@@ -17,7 +17,7 @@ import type { ChartMarketResponse, ChartTransactionResponse } from 'types/api/ch ...@@ -17,7 +17,7 @@ import type { ChartMarketResponse, ChartTransactionResponse } from 'types/api/ch
import type { IndexingStatus } from 'types/api/indexingStatus'; import type { IndexingStatus } from 'types/api/indexingStatus';
import type { InternalTransactionsResponse } from 'types/api/internalTransaction'; import type { InternalTransactionsResponse } from 'types/api/internalTransaction';
import type { JsonRpcUrlResponse } from 'types/api/jsonRpcUrl'; import type { JsonRpcUrlResponse } from 'types/api/jsonRpcUrl';
import type { LogsResponse } from 'types/api/log'; import type { LogsResponseTx, LogsResponseAddress } from 'types/api/log';
import type { RawTracesResponse } from 'types/api/rawTrace'; import type { RawTracesResponse } from 'types/api/rawTrace';
import type { Stats, Charts, HomeStats } from 'types/api/stats'; import type { Stats, Charts, HomeStats } from 'types/api/stats';
import type { TokenTransferResponse, TokenTransferFilters } from 'types/api/tokenTransfer'; import type { TokenTransferResponse, TokenTransferFilters } from 'types/api/tokenTransfer';
...@@ -156,6 +156,11 @@ export const RESOURCES = { ...@@ -156,6 +156,11 @@ export const RESOURCES = {
address_coin_balance_chart: { address_coin_balance_chart: {
path: '/api/v2/addresses/:id/coin-balance-history-by-day', path: '/api/v2/addresses/:id/coin-balance-history-by-day',
}, },
address_logs: {
path: '/api/v2/addresses/:id/logs',
paginationFields: [ 'items_count' as const, 'transaction_index' as const, 'index' as const, 'block_number' as const ],
filterFields: [ ],
},
// HOMEPAGE // HOMEPAGE
homepage_stats: { homepage_stats: {
...@@ -211,7 +216,8 @@ export type ResourceErrorAccount<T> = ResourceError<{ errors: T }> ...@@ -211,7 +216,8 @@ export type ResourceErrorAccount<T> = ResourceError<{ errors: T }>
export type PaginatedResources = 'blocks' | 'block_txs' | export type PaginatedResources = 'blocks' | 'block_txs' |
'txs_validated' | 'txs_pending' | 'txs_validated' | 'txs_pending' |
'tx_internal_txs' | 'tx_logs' | 'tx_token_transfers' | 'tx_internal_txs' | 'tx_logs' | 'tx_token_transfers' |
'address_txs' | 'address_internal_txs' | 'address_token_transfers' | 'address_blocks_validated' | 'address_coin_balance'; 'address_txs' | 'address_internal_txs' | 'address_token_transfers' | 'address_blocks_validated' | 'address_coin_balance' |
'address_logs';
export type PaginatedResponse<Q extends PaginatedResources> = ResourcePayload<Q>; export type PaginatedResponse<Q extends PaginatedResources> = ResourcePayload<Q>;
...@@ -239,7 +245,7 @@ Q extends 'txs_validated' ? TransactionsResponseValidated : ...@@ -239,7 +245,7 @@ Q extends 'txs_validated' ? TransactionsResponseValidated :
Q extends 'txs_pending' ? TransactionsResponsePending : Q extends 'txs_pending' ? TransactionsResponsePending :
Q extends 'tx' ? Transaction : Q extends 'tx' ? Transaction :
Q extends 'tx_internal_txs' ? InternalTransactionsResponse : Q extends 'tx_internal_txs' ? InternalTransactionsResponse :
Q extends 'tx_logs' ? LogsResponse : Q extends 'tx_logs' ? LogsResponseTx :
Q extends 'tx_token_transfers' ? TokenTransferResponse : Q extends 'tx_token_transfers' ? TokenTransferResponse :
Q extends 'tx_raw_trace' ? RawTracesResponse : Q extends 'tx_raw_trace' ? RawTracesResponse :
Q extends 'address' ? Address : Q extends 'address' ? Address :
...@@ -251,6 +257,7 @@ Q extends 'address_token_transfers' ? AddressTokenTransferResponse : ...@@ -251,6 +257,7 @@ Q extends 'address_token_transfers' ? AddressTokenTransferResponse :
Q extends 'address_blocks_validated' ? AddressBlocksValidatedResponse : Q extends 'address_blocks_validated' ? AddressBlocksValidatedResponse :
Q extends 'address_coin_balance' ? AddressCoinBalanceHistoryResponse : Q extends 'address_coin_balance' ? AddressCoinBalanceHistoryResponse :
Q extends 'address_coin_balance_chart' ? AddressCoinBalanceHistoryChart : Q extends 'address_coin_balance_chart' ? AddressCoinBalanceHistoryChart :
Q extends 'address_logs' ? LogsResponseAddress :
Q extends 'config_json_rpc' ? JsonRpcUrlResponse : Q extends 'config_json_rpc' ? JsonRpcUrlResponse :
never; never;
/* eslint-enable @typescript-eslint/indent */ /* eslint-enable @typescript-eslint/indent */
......
...@@ -9,7 +9,7 @@ export interface Log { ...@@ -9,7 +9,7 @@ export interface Log {
decoded: DecodedInput | null; decoded: DecodedInput | null;
} }
export interface LogsResponse { export interface LogsResponseTx {
items: Array<Log>; items: Array<Log>;
next_page_params: { next_page_params: {
index: number; index: number;
...@@ -17,3 +17,13 @@ export interface LogsResponse { ...@@ -17,3 +17,13 @@ export interface LogsResponse {
transaction_hash: string; transaction_hash: string;
}; };
} }
export interface LogsResponseAddress {
items: Array<Log>;
next_page_params: {
index: number;
items_count: number;
transaction_index: number;
block_number: number;
};
}
import { Box } from '@chakra-ui/react'; import { Box } from '@chakra-ui/react';
import { useRouter } from 'next/router';
import React from 'react'; import React from 'react';
import { Element } from 'react-scroll';
import useQueryWithPages from 'lib/hooks/useQueryWithPages';
import ActionBar from 'ui/shared/ActionBar';
import DataFetchAlert from 'ui/shared/DataFetchAlert';
import LogItem from 'ui/shared/logs/LogItem';
import LogSkeleton from 'ui/shared/logs/LogSkeleton';
import Pagination from 'ui/shared/Pagination';
const SCROLL_PARAMS = {
elem: 'address-logs',
offset: -100,
};
const AddressLogs = () => { const AddressLogs = () => {
return <Box>FOO BAR</Box>; const router = useRouter();
const addressHash = String(router.query?.id);
const { data, isLoading, isError, pagination, isPaginationVisible } = useQueryWithPages({
resourceName: 'address_logs',
pathParams: { id: addressHash },
scroll: SCROLL_PARAMS,
});
if (isError) {
return <DataFetchAlert/>;
}
const bar = isPaginationVisible ? (
<ActionBar mt={ -6 }>
<Pagination ml="auto" { ...pagination }/>
</ActionBar>
) : null;
if (isLoading) {
return (
<Box>
{ bar }
<LogSkeleton/>
<LogSkeleton/>
</Box>
);
}
if (data.items.length === 0) {
return <span>There are no logs for this address.</span>;
}
return (
<Element name={ SCROLL_PARAMS.elem }>
{ bar }
{ data.items.map((item, index) => <LogItem key={ index } { ...item } type="address"/>) }
</Element>
);
}; };
export default AddressLogs; export default AddressLogs;
...@@ -4,12 +4,12 @@ import React from 'react'; ...@@ -4,12 +4,12 @@ import React from 'react';
import * as mocks from 'mocks/txs/decodedInputData'; import * as mocks from 'mocks/txs/decodedInputData';
import TestApp from 'playwright/TestApp'; import TestApp from 'playwright/TestApp';
import TxDecodedInputData from './TxDecodedInputData'; import LogDecodedInputData from './LogDecodedInputData';
test('with indexed fields +@mobile +@dark-mode', async({ mount }) => { test('with indexed fields +@mobile +@dark-mode', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxDecodedInputData data={ mocks.withIndexedFields }/> <LogDecodedInputData data={ mocks.withIndexedFields }/>
</TestApp>, </TestApp>,
); );
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
...@@ -18,7 +18,7 @@ test('with indexed fields +@mobile +@dark-mode', async({ mount }) => { ...@@ -18,7 +18,7 @@ test('with indexed fields +@mobile +@dark-mode', async({ mount }) => {
test('without indexed fields +@mobile', async({ mount }) => { test('without indexed fields +@mobile', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxDecodedInputData data={ mocks.withoutIndexedFields }/> <LogDecodedInputData data={ mocks.withoutIndexedFields }/>
</TestApp>, </TestApp>,
); );
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
......
...@@ -68,7 +68,7 @@ interface Props { ...@@ -68,7 +68,7 @@ interface Props {
data: DecodedInput; data: DecodedInput;
} }
const TxDecodedInputData = ({ data }: Props) => { const LogDecodedInputData = ({ data }: Props) => {
const bgColor = useColorModeValue('blackAlpha.50', 'whiteAlpha.50'); const bgColor = useColorModeValue('blackAlpha.50', 'whiteAlpha.50');
const hasIndexed = data.parameters.some(({ indexed }) => indexed !== undefined); const hasIndexed = data.parameters.some(({ indexed }) => indexed !== undefined);
...@@ -175,4 +175,4 @@ const TxDecodedInputData = ({ data }: Props) => { ...@@ -175,4 +175,4 @@ const TxDecodedInputData = ({ data }: Props) => {
); );
}; };
export default TxDecodedInputData; export default LogDecodedInputData;
...@@ -5,7 +5,7 @@ import * as addressMocks from 'mocks/address/address'; ...@@ -5,7 +5,7 @@ import * as addressMocks from 'mocks/address/address';
import * as inputDataMocks from 'mocks/txs/decodedInputData'; import * as inputDataMocks from 'mocks/txs/decodedInputData';
import TestApp from 'playwright/TestApp'; import TestApp from 'playwright/TestApp';
import TxLogItem from './TxLogItem'; import LogItem from './LogItem';
const TOPICS = [ const TOPICS = [
'0x3a4ec416703c36a61a4b1f690847f1963a6829eac0b52debd40a23b66c142a56', '0x3a4ec416703c36a61a4b1f690847f1963a6829eac0b52debd40a23b66c142a56',
...@@ -18,12 +18,13 @@ const DATA = '0x0000000000000000000000000000000000000000000000000070265bf0112cee ...@@ -18,12 +18,13 @@ const DATA = '0x0000000000000000000000000000000000000000000000000070265bf0112cee
test('with decoded input data +@mobile +@dark-mode', async({ mount }) => { test('with decoded input data +@mobile +@dark-mode', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxLogItem <LogItem
index={ 42 } index={ 42 }
decoded={ inputDataMocks.withIndexedFields } decoded={ inputDataMocks.withIndexedFields }
address={ addressMocks.withName } address={ addressMocks.withName }
topics={ TOPICS } topics={ TOPICS }
data={ DATA } data={ DATA }
type="tx"
/> />
</TestApp>, </TestApp>,
); );
...@@ -33,12 +34,13 @@ test('with decoded input data +@mobile +@dark-mode', async({ mount }) => { ...@@ -33,12 +34,13 @@ test('with decoded input data +@mobile +@dark-mode', async({ mount }) => {
test('without decoded input data +@mobile', async({ mount }) => { test('without decoded input data +@mobile', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxLogItem <LogItem
index={ 42 } index={ 42 }
decoded={ null } decoded={ null }
address={ addressMocks.withoutName } address={ addressMocks.withoutName }
topics={ TOPICS } topics={ TOPICS }
data={ DATA } data={ DATA }
type="tx"
/> />
</TestApp>, </TestApp>,
); );
......
...@@ -10,10 +10,12 @@ import notEmpty from 'lib/notEmpty'; ...@@ -10,10 +10,12 @@ import notEmpty from 'lib/notEmpty';
import Address from 'ui/shared/address/Address'; import Address from 'ui/shared/address/Address';
import AddressIcon from 'ui/shared/address/AddressIcon'; import AddressIcon from 'ui/shared/address/AddressIcon';
import AddressLink from 'ui/shared/address/AddressLink'; import AddressLink from 'ui/shared/address/AddressLink';
import TxLogTopic from 'ui/tx/logs/TxLogTopic'; import LogDecodedInputData from 'ui/shared/logs/LogDecodedInputData';
import DecodedInputData from 'ui/tx/TxDecodedInputData/TxDecodedInputData'; import LogTopic from 'ui/shared/logs/LogTopic';
type Props = Log; type Props = Log & {
type: 'address' | 'tx';
};
const RowHeader = ({ children }: { children: React.ReactNode }) => ( const RowHeader = ({ children }: { children: React.ReactNode }) => (
<GridItem _notFirst={{ my: { base: 4, lg: 0 } }}> <GridItem _notFirst={{ my: { base: 4, lg: 0 } }}>
...@@ -21,7 +23,7 @@ const RowHeader = ({ children }: { children: React.ReactNode }) => ( ...@@ -21,7 +23,7 @@ const RowHeader = ({ children }: { children: React.ReactNode }) => (
</GridItem> </GridItem>
); );
const TxLogItem = ({ address, index, topics, data, decoded }: Props) => { const TxLogItem = ({ address, index, topics, data, decoded, type }: Props) => {
const borderColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200'); const borderColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200');
const dataBgColor = useColorModeValue('blackAlpha.50', 'whiteAlpha.50'); const dataBgColor = useColorModeValue('blackAlpha.50', 'whiteAlpha.50');
...@@ -39,7 +41,7 @@ const TxLogItem = ({ address, index, topics, data, decoded }: Props) => { ...@@ -39,7 +41,7 @@ const TxLogItem = ({ address, index, topics, data, decoded }: Props) => {
pt: 0, pt: 0,
}} }}
> >
{ !decoded && ( { !decoded && type === 'tx' && (
<GridItem colSpan={{ base: 1, lg: 2 }}> <GridItem colSpan={{ base: 1, lg: 2 }}>
<Alert status="warning" display="inline-table" whiteSpace="normal"> <Alert status="warning" display="inline-table" whiteSpace="normal">
To see accurate decoded input data, the contract must be verified.{ space } To see accurate decoded input data, the contract must be verified.{ space }
...@@ -69,14 +71,14 @@ const TxLogItem = ({ address, index, topics, data, decoded }: Props) => { ...@@ -69,14 +71,14 @@ const TxLogItem = ({ address, index, topics, data, decoded }: Props) => {
<> <>
<RowHeader>Decode input data</RowHeader> <RowHeader>Decode input data</RowHeader>
<GridItem> <GridItem>
<DecodedInputData data={ decoded }/> <LogDecodedInputData data={ decoded }/>
</GridItem> </GridItem>
</> </>
) } ) }
<RowHeader>Topics</RowHeader> <RowHeader>Topics</RowHeader>
<GridItem> <GridItem>
{ topics.filter(notEmpty).map((item, index) => ( { topics.filter(notEmpty).map((item, index) => (
<TxLogTopic <LogTopic
key={ index } key={ index }
hex={ item } hex={ item }
index={ index } index={ index }
......
...@@ -15,7 +15,7 @@ const TopicRow = () => ( ...@@ -15,7 +15,7 @@ const TopicRow = () => (
</Flex> </Flex>
); );
const TxLogSkeleton = () => { const LogSkeleton = () => {
const borderColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200'); const borderColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200');
return ( return (
...@@ -55,4 +55,4 @@ const TxLogSkeleton = () => { ...@@ -55,4 +55,4 @@ const TxLogSkeleton = () => {
); );
}; };
export default TxLogSkeleton; export default LogSkeleton;
...@@ -3,12 +3,12 @@ import React from 'react'; ...@@ -3,12 +3,12 @@ import React from 'react';
import TestApp from 'playwright/TestApp'; import TestApp from 'playwright/TestApp';
import TxLogTopic from './TxLogTopic'; import LogTopic from './LogTopic';
test('address view +@mobile -@default', async({ mount }) => { test('address view +@mobile -@default', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxLogTopic hex="0x000000000000000000000000d789a607ceac2f0e14867de4eb15b15c9ffb5859" index={ 42 }/> <LogTopic hex="0x000000000000000000000000d789a607ceac2f0e14867de4eb15b15c9ffb5859" index={ 42 }/>
</TestApp>, </TestApp>,
); );
await component.locator('select[aria-label="Data type"]').selectOption('address'); await component.locator('select[aria-label="Data type"]').selectOption('address');
...@@ -19,7 +19,7 @@ test('address view +@mobile -@default', async({ mount }) => { ...@@ -19,7 +19,7 @@ test('address view +@mobile -@default', async({ mount }) => {
test('hex view +@mobile -@default', async({ mount }) => { test('hex view +@mobile -@default', async({ mount }) => {
const component = await mount( const component = await mount(
<TestApp> <TestApp>
<TxLogTopic hex="0x000000000000000000000000d789a607ceac2f0e14867de4eb15b15c9ffb5859" index={ 42 }/> <LogTopic hex="0x000000000000000000000000d789a607ceac2f0e14867de4eb15b15c9ffb5859" index={ 42 }/>
</TestApp>, </TestApp>,
); );
await component.locator('select[aria-label="Data type"]').selectOption('hex'); await component.locator('select[aria-label="Data type"]').selectOption('hex');
......
...@@ -24,7 +24,7 @@ const VALUE_CONVERTERS: Record<DataType, (hex: string) => string> = { ...@@ -24,7 +24,7 @@ const VALUE_CONVERTERS: Record<DataType, (hex: string) => string> = {
}; };
const OPTIONS: Array<DataType> = [ 'hex', 'address', 'text', 'number' ]; const OPTIONS: Array<DataType> = [ 'hex', 'address', 'text', 'number' ];
const TxLogTopic = ({ hex, index }: Props) => { const LogTopic = ({ hex, index }: Props) => {
const [ selectedDataType, setSelectedDataType ] = React.useState<DataType>('hex'); const [ selectedDataType, setSelectedDataType ] = React.useState<DataType>('hex');
const handleSelectChange = React.useCallback((event: React.ChangeEvent<HTMLSelectElement>) => { const handleSelectChange = React.useCallback((event: React.ChangeEvent<HTMLSelectElement>) => {
...@@ -84,4 +84,4 @@ const TxLogTopic = ({ hex, index }: Props) => { ...@@ -84,4 +84,4 @@ const TxLogTopic = ({ hex, index }: Props) => {
); );
}; };
export default React.memo(TxLogTopic); export default React.memo(LogTopic);
...@@ -20,6 +20,7 @@ import DataFetchAlert from 'ui/shared/DataFetchAlert'; ...@@ -20,6 +20,7 @@ import DataFetchAlert from 'ui/shared/DataFetchAlert';
import DetailsInfoItem from 'ui/shared/DetailsInfoItem'; import DetailsInfoItem from 'ui/shared/DetailsInfoItem';
import HashStringShortenDynamic from 'ui/shared/HashStringShortenDynamic'; import HashStringShortenDynamic from 'ui/shared/HashStringShortenDynamic';
// import PrevNext from 'ui/shared/PrevNext'; // import PrevNext from 'ui/shared/PrevNext';
import LogDecodedInputData from 'ui/shared/logs/LogDecodedInputData';
import RawInputData from 'ui/shared/RawInputData'; import RawInputData from 'ui/shared/RawInputData';
import TextSeparator from 'ui/shared/TextSeparator'; import TextSeparator from 'ui/shared/TextSeparator';
import TxStatus from 'ui/shared/TxStatus'; import TxStatus from 'ui/shared/TxStatus';
...@@ -27,7 +28,6 @@ import Utilization from 'ui/shared/Utilization/Utilization'; ...@@ -27,7 +28,6 @@ import Utilization from 'ui/shared/Utilization/Utilization';
import TxDetailsSkeleton from 'ui/tx/details/TxDetailsSkeleton'; import TxDetailsSkeleton from 'ui/tx/details/TxDetailsSkeleton';
import TxDetailsTokenTransfers from 'ui/tx/details/TxDetailsTokenTransfers'; import TxDetailsTokenTransfers from 'ui/tx/details/TxDetailsTokenTransfers';
import TxRevertReason from 'ui/tx/details/TxRevertReason'; import TxRevertReason from 'ui/tx/details/TxRevertReason';
import TxDecodedInputData from 'ui/tx/TxDecodedInputData/TxDecodedInputData';
import TxSocketAlert from 'ui/tx/TxSocketAlert'; import TxSocketAlert from 'ui/tx/TxSocketAlert';
import useFetchTxInfo from 'ui/tx/useFetchTxInfo'; import useFetchTxInfo from 'ui/tx/useFetchTxInfo';
...@@ -336,7 +336,7 @@ const TxDetails = () => { ...@@ -336,7 +336,7 @@ const TxDetails = () => {
title="Decoded input data" title="Decoded input data"
hint="Decoded input data" hint="Decoded input data"
> >
<TxDecodedInputData data={ data.decoded_input }/> <LogDecodedInputData data={ data.decoded_input }/>
</DetailsInfoItem> </DetailsInfoItem>
) } ) }
</> </>
......
...@@ -5,9 +5,9 @@ import { SECOND } from 'lib/consts'; ...@@ -5,9 +5,9 @@ import { SECOND } from 'lib/consts';
import useQueryWithPages from 'lib/hooks/useQueryWithPages'; import useQueryWithPages from 'lib/hooks/useQueryWithPages';
import ActionBar from 'ui/shared/ActionBar'; import ActionBar from 'ui/shared/ActionBar';
import DataFetchAlert from 'ui/shared/DataFetchAlert'; import DataFetchAlert from 'ui/shared/DataFetchAlert';
import LogItem from 'ui/shared/logs/LogItem';
import LogSkeleton from 'ui/shared/logs/LogSkeleton';
import Pagination from 'ui/shared/Pagination'; import Pagination from 'ui/shared/Pagination';
import TxLogItem from 'ui/tx/logs/TxLogItem';
import TxLogSkeleton from 'ui/tx/logs/TxLogSkeleton';
import TxPendingAlert from 'ui/tx/TxPendingAlert'; import TxPendingAlert from 'ui/tx/TxPendingAlert';
import TxSocketAlert from 'ui/tx/TxSocketAlert'; import TxSocketAlert from 'ui/tx/TxSocketAlert';
import useFetchTxInfo from 'ui/tx/useFetchTxInfo'; import useFetchTxInfo from 'ui/tx/useFetchTxInfo';
...@@ -33,8 +33,8 @@ const TxLogs = () => { ...@@ -33,8 +33,8 @@ const TxLogs = () => {
if (isLoading || txInfo.isLoading) { if (isLoading || txInfo.isLoading) {
return ( return (
<Box> <Box>
<TxLogSkeleton/> <LogSkeleton/>
<TxLogSkeleton/> <LogSkeleton/>
</Box> </Box>
); );
} }
...@@ -50,7 +50,7 @@ const TxLogs = () => { ...@@ -50,7 +50,7 @@ const TxLogs = () => {
<Pagination ml="auto" { ...pagination }/> <Pagination ml="auto" { ...pagination }/>
</ActionBar> </ActionBar>
) } ) }
{ data.items.map((item, index) => <TxLogItem key={ index } { ...item }/>) } { data.items.map((item, index) => <LogItem key={ index } { ...item } type="tx"/>) }
</Box> </Box>
); );
}; };
......
...@@ -4,7 +4,7 @@ import React from 'react'; ...@@ -4,7 +4,7 @@ import React from 'react';
import type { TransactionRevertReason } from 'types/api/transaction'; import type { TransactionRevertReason } from 'types/api/transaction';
import hexToUtf8 from 'lib/hexToUtf8'; import hexToUtf8 from 'lib/hexToUtf8';
import TxDecodedInputData from 'ui/tx/TxDecodedInputData/TxDecodedInputData'; import LogDecodedInputData from 'ui/shared/logs/LogDecodedInputData';
type Props = TransactionRevertReason; type Props = TransactionRevertReason;
...@@ -31,7 +31,7 @@ const TxRevertReason = (props: Props) => { ...@@ -31,7 +31,7 @@ const TxRevertReason = (props: Props) => {
); );
} }
return <TxDecodedInputData data={ props }/>; return <LogDecodedInputData data={ props }/>;
}; };
export default React.memo(TxRevertReason); export default React.memo(TxRevertReason);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment