@@ -7,11 +7,11 @@ import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__facto
77
88import type { Provider } from "@ethersproject/abstract-provider" ;
99import { bytes32ToAddress } from "@hyperlane-xyz/utils" ;
10+ import { chainIdsToName } from "../../config/index.js" ;
1011import { createLogger } from "../../logger.js" ;
1112import { Hyperlane7683__factory } from "../../typechain/factories/hyperlane7683/contracts/Hyperlane7683__factory.js" ;
12- import type { ResolvedCrossChainOrder } from "./types.js" ;
13- import { chainIdsToName } from "../../config/index.js" ;
1413import { metadata } from "./config/index.js" ;
14+ import type { ResolvedCrossChainOrder } from "./types.js" ;
1515
1616export const log = createLogger ( metadata . protocolName ) ;
1717
@@ -138,8 +138,23 @@ export async function retrieveOriginInfo(
138138) : Promise < Array < string > > {
139139 const originInfo = await Promise . all (
140140 resolvedOrder . minReceived . map ( async ( { amount, chainId, token } ) => {
141+ const tokenAddress = bytes32ToAddress ( token ) ;
142+
143+ // native token
144+ if ( tokenAddress === AddressZero ) {
145+ const { nativeToken } = multiProvider . getChainMetadata (
146+ chainId . toString ( ) ,
147+ ) ;
148+
149+ return {
150+ amount,
151+ decimals : nativeToken ?. decimals ?? 18 ,
152+ symbol : nativeToken ?. symbol ?? "ETH" ,
153+ } ;
154+ }
155+
141156 const erc20 = Erc20__factory . connect (
142- bytes32ToAddress ( token ) ,
157+ tokenAddress ,
143158 multiProvider . getProvider ( chainId . toString ( ) ) ,
144159 ) ;
145160 const [ decimals , symbol ] = await Promise . all ( [
@@ -166,20 +181,35 @@ export async function retrieveTargetInfo(
166181) : Promise < Array < string > > {
167182 const targetInfo = await Promise . all (
168183 resolvedOrder . maxSpent . map ( async ( { amount, chainId, token } ) => {
184+ const tokenAddress = bytes32ToAddress ( token ) ;
185+
186+ if ( tokenAddress === AddressZero ) {
187+ const { nativeToken } = multiProvider . getChainMetadata (
188+ chainId . toString ( ) ,
189+ ) ;
190+
191+ return {
192+ amount,
193+ chainId,
194+ decimals : nativeToken ?. decimals ?? 18 ,
195+ symbol : nativeToken ?. symbol ?? "ETH" ,
196+ } ;
197+ }
198+
169199 const erc20 = Erc20__factory . connect (
170- bytes32ToAddress ( token ) ,
200+ tokenAddress ,
171201 multiProvider . getProvider ( chainId . toString ( ) ) ,
172202 ) ;
173203 const [ decimals , symbol ] = await Promise . all ( [
174204 erc20 . decimals ( ) ,
175205 erc20 . symbol ( ) ,
176206 ] ) ;
177207
178- return { amount, decimals , symbol , chainId } ;
208+ return { amount, chainId , decimals , symbol } ;
179209 } ) ,
180210 ) ;
181211
182- return targetInfo . map ( ( { amount, decimals , symbol , chainId } ) => {
212+ return targetInfo . map ( ( { amount, chainId , decimals , symbol } ) => {
183213 const destinationChain =
184214 chainIdsToName [ chainId . toNumber ( ) ] ?? "UNKNOWN_CHAIN" ;
185215 return `${ formatUnits ( amount , decimals ) } ${ symbol } on ${ destinationChain } ` ;
0 commit comments