From c0d13ebfede8cccf384af30dc8c01c4f44b0fdeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dragi=C5=A1a=20Spasojevi=C4=87?= Date: Thu, 31 Oct 2024 11:12:36 +0100 Subject: [PATCH 1/2] fix: properly check if native token is eth --- src/lib/assetBridger/assetBridger.ts | 5 ++--- src/lib/dataEntities/networks.ts | 9 +++++++++ src/lib/message/L1ToL2MessageCreator.ts | 7 +++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/lib/assetBridger/assetBridger.ts b/src/lib/assetBridger/assetBridger.ts index f6eeb77389..ad66f8a4b7 100644 --- a/src/lib/assetBridger/assetBridger.ts +++ b/src/lib/assetBridger/assetBridger.ts @@ -16,8 +16,6 @@ /* eslint-env node */ 'use strict' -import { constants } from 'ethers' - import { L1ContractTransaction } from '../message/L1Transaction' import { L2ContractTransaction } from '../message/L2Transaction' @@ -25,6 +23,7 @@ import { L1Network, L2Network, getParentForNetwork, + isL2NetworkNativeTokenEther, } from '../dataEntities/networks' import { SignerOrProvider, @@ -73,7 +72,7 @@ export abstract class AssetBridger { * @returns {boolean} */ protected get nativeTokenIsEth() { - return !this.nativeToken || this.nativeToken === constants.AddressZero + return isL2NetworkNativeTokenEther(this.l2Network) } /** diff --git a/src/lib/dataEntities/networks.ts b/src/lib/dataEntities/networks.ts index 5ae7834b41..a6d39e1e7d 100644 --- a/src/lib/dataEntities/networks.ts +++ b/src/lib/dataEntities/networks.ts @@ -16,6 +16,8 @@ /* eslint-env node */ 'use strict' +import { constants } from 'ethers' + import { SignerOrProvider, SignerProviderUtils } from './signerOrProvider' import { ArbSdkError } from '../dataEntities/errors' import { @@ -652,6 +654,13 @@ const createNetworkStateHandler = () => { } } +export function isL2NetworkNativeTokenEther(network: L2Network): boolean { + return ( + typeof network.nativeToken === 'undefined' || + network.nativeToken === constants.AddressZero + ) +} + const { resetNetworksToDefault } = createNetworkStateHandler() export { resetNetworksToDefault } diff --git a/src/lib/message/L1ToL2MessageCreator.ts b/src/lib/message/L1ToL2MessageCreator.ts index 2c3223d2db..112c30503d 100644 --- a/src/lib/message/L1ToL2MessageCreator.ts +++ b/src/lib/message/L1ToL2MessageCreator.ts @@ -9,7 +9,10 @@ import { import { L1ContractTransaction, L1TransactionReceipt } from './L1Transaction' import { Inbox__factory } from '../abi/factories/Inbox__factory' import { ERC20Inbox__factory } from '../abi/factories/ERC20Inbox__factory' -import { getL2Network } from '../dataEntities/networks' +import { + getL2Network, + isL2NetworkNativeTokenEther, +} from '../dataEntities/networks' import { PayableOverrides } from '@ethersproject/contracts' import { SignerProviderUtils } from '../dataEntities/signerOrProvider' import { MissingProviderArbSdkError } from '../dataEntities/errors' @@ -147,7 +150,7 @@ export class L1ToL2MessageCreator { ) const l2Network = await getL2Network(l2Provider) - const nativeTokenIsEth = typeof l2Network.nativeToken === 'undefined' + const nativeTokenIsEth = isL2NetworkNativeTokenEther(l2Network) const data = L1ToL2MessageCreator.getTicketCreationRequestCallData( params, From eb7df95feee1cf452d19578d49fdf4fd84be8b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dragi=C5=A1a=20Spasojevi=C4=87?= Date: Thu, 31 Oct 2024 11:57:00 +0100 Subject: [PATCH 2/2] add tests --- tests/unit/network.test.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/unit/network.test.ts b/tests/unit/network.test.ts index ca1395eeda..a627319297 100644 --- a/tests/unit/network.test.ts +++ b/tests/unit/network.test.ts @@ -6,7 +6,10 @@ import { getL2Network, l1Networks, l2Networks, + isL2NetworkNativeTokenEther, + L2Network, } from '../../src/lib/dataEntities/networks' +import { constants } from 'ethers' const ethereumMainnetChainId = 1 const arbitrumOneChainId = 42161 @@ -315,4 +318,28 @@ describe('Networks', async () => { expect(l2NetworksKeys).to.have.members(expected) }) }) + + describe('isL2NetworkNativeTokenEther', () => { + it('returns `true` when `nativeToken` is undefined', () => { + expect( + isL2NetworkNativeTokenEther({ nativeToken: undefined } as L2Network) + ).to.equal(true) + }) + + it('returns `true` when `nativeToken` is zero address', () => { + expect( + isL2NetworkNativeTokenEther({ + nativeToken: constants.AddressZero, + } as L2Network) + ).to.equal(true) + }) + + it('returns `false` when `nativeToken` is a valid address', () => { + expect( + isL2NetworkNativeTokenEther({ + nativeToken: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + } as L2Network) + ).to.equal(false) + }) + }) })