Skip to content

Commit 55128f5

Browse files
lukaw3dlukaw3d
authored andcommitted
Format token values in ERC20 events
ERC20 transfer 0x69ba2b1c23a5e76043d43c192985db4d9829f4894be7d26765e90214d4dc910e ERC20 approval 0x061ce16ad3433f7b23d4cc03f46e231176fd6d62986d4ec0be8f24faebd447f4 Burn 0xadfb838be0d4c4261193e88051156af6488e89960a872da9c040a99f184b08a1 Mint 0xd69958564337597153d7a6f08f5d158bc95fe37ce8adefaaaa35e86488ee4403
1 parent 2f2b592 commit 55128f5

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed

src/app/components/RuntimeEvents/RuntimeEventDetails.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import LanIcon from '@mui/icons-material/Lan'
3131
import LanOutlinedIcon from '@mui/icons-material/LanOutlined'
3232
import { MethodIcon } from '../ConsensusTransactionMethod'
3333
import { TransactionLink } from '../Transactions/TransactionLink'
34+
import Tooltip from '@mui/material/Tooltip'
35+
import { tooltipDelay } from '../../../styles/theme'
3436

3537
const getRuntimeEventMethodLabel = (t: TFunction, method: string | undefined) => {
3638
switch (method) {
@@ -116,6 +118,7 @@ const EvmEventParamData: FC<{
116118
address?: string
117119
alwaysTrimOnTable?: boolean
118120
}> = ({ scope, param, address, alwaysTrimOnTable }) => {
121+
const { t } = useTranslation()
119122
/**
120123
* According to the API docs:
121124
*
@@ -131,6 +134,24 @@ const EvmEventParamData: FC<{
131134
<AccountLink address={address} scope={scope} alwaysTrimOnTablet={alwaysTrimOnTable} />
132135
) : null
133136
case 'uint256':
137+
if (param.evm_token) {
138+
return (
139+
<Tooltip
140+
arrow
141+
placement="top"
142+
title={param.value_raw}
143+
enterDelay={tooltipDelay}
144+
enterNextDelay={tooltipDelay}
145+
>
146+
<span>
147+
{t('common.valueInToken', {
148+
...getPreciseNumberFormat(param.value as string),
149+
ticker: param.evm_token.symbol,
150+
})}
151+
</span>
152+
</Tooltip>
153+
)
154+
}
134155
return (
135156
<span>
136157
{t('common.valueLong', {

src/app/components/Tokens/TokenTransfers.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { TokenLink } from './TokenLink'
1313
import { PlaceholderLabel } from '../../utils/PlaceholderLabel'
1414
import { TokenTypeTag } from './TokenList'
1515
import { parseEvmEvent } from '../../utils/parseEvmEvent'
16-
import { fromBaseUnits } from '../../utils/number-utils'
1716
import { TransferIcon } from '../TransferIcon'
1817
import { TableCellAge } from '../TableCellAge'
1918
import { TableHeaderAge } from '../TableHeaderAge'
@@ -33,14 +32,10 @@ export const EventBalance: FC<{
3332

3433
const tokenEthAddress = event.body.address
3534
const tokenType = event.evm_token?.type
36-
const tokenDecimals = event.evm_token?.decimals
3735
const ticker = event.evm_token?.symbol
3836

3937
if (tokenType === EvmTokenType.ERC20) {
40-
// We are calling it 'raw' since it's not yet normalized according to decimals.
41-
const rawValue = event.evm_log_params?.find(param => param.name === 'value')?.value as string | undefined
42-
const value = rawValue === undefined ? undefined : fromBaseUnits(rawValue, tokenDecimals || 0)
43-
38+
const value = event.evm_log_params?.find(param => param.name === 'value')?.value as string | undefined
4439
return (
4540
<RoundedBalance
4641
value={value}

src/oasis-nexus/api.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ declare module './generated/api' {
9393
layer: Layer
9494
}
9595

96+
export interface EvmAbiParam {
97+
/** Added to fields that are likely an amount in tokens */
98+
evm_token?: EvmEventToken
99+
value_raw?: string
100+
}
101+
96102
export interface ConsensusEvent {
97103
network: Network
98104
}
@@ -893,6 +899,20 @@ const fixChecksumAddressInEvmEventParam = (param: generated.EvmAbiParam): genera
893899
}
894900
: param
895901

902+
const addTokenToParams = (event: generated.RuntimeEvent) => {
903+
if (event.evm_token?.type === 'ERC20') {
904+
if (event.evm_log_name === 'Transfer' || event.evm_log_name === 'Approval') {
905+
const valueParam = event.evm_log_params?.[2]
906+
if (valueParam?.evm_type === 'uint256' && typeof valueParam.value === 'string') {
907+
valueParam.evm_token = event.evm_token
908+
valueParam.value_raw = valueParam.value
909+
valueParam.value = fromBaseUnits(valueParam.value, event.evm_token.decimals ?? 0)
910+
}
911+
}
912+
}
913+
return event
914+
}
915+
896916
export const useGetRuntimeEvents: typeof generated.useGetRuntimeEvents = (
897917
network,
898918
runtime,
@@ -929,6 +949,9 @@ export const useGetRuntimeEvents: typeof generated.useGetRuntimeEvents = (
929949
network,
930950
}
931951
})
952+
.map(event => {
953+
return addTokenToParams(event)
954+
})
932955
.map((event): generated.RuntimeEvent => {
933956
if (
934957
event.type === RuntimeEventType.accountstransfer ||

0 commit comments

Comments
 (0)