The @0xsequence package v2.0 now requires at a minimum the Ethers version ethers@6.13.0.

If you are unable to upgrade to ethers v6, then you can use v1.10.5 of @0xsequence or 3.0.0 of @0xsequence/kit.

If you’ve been developing with ethers@^5.0.0 in the past, outlined below are the common ways using Ethers with Sequence will change for you:

Static and Default RPC Provider

To use ethers to connect and make RPC calls to a blockchain node in order to query information, doing so in a static or default way both have differences:

provider.ts
// v5

const provider = new ethers.providers.StaticJsonRpcProvider(chainConfig.rpcUrl);



// v6: If you know the network ahead of time and wish

// to avoid even a single eth_chainId call

const provider = new ethers.JsonRpcProvider(chainConfig.rpcUrl, undefined, {

	staticNetwork: new ethers.Network('<CHAIN_HANDLE>', <CHAIN_ID>)

});



// v6: If you want the network automatically detected,

// this will query eth_chainId only once

const provider = new ethers.JsonRpcProvider(chainConfig.rpcUrl, undefined, {

  staticNetwork: true

});

Big Number Support

If you’re using big numbers to generate randomly spaced token ID’s, nonces, or some other application of large string based numbers, ethers now supports built-in ES2020 BigInt offered by modern JavaScript environments.

bigNumber.ts
// v5

value = BigNumber.from("1000")



// v6 

// Notice the suffix n (using literal notation).

value = 1000n



// v6 

// Using the BigInt function for strings

value = BigInt("1000")

Removal of Ethers Utilities

Using Ethers you will notice there is no longer a ethers.utils path. Therefore, all paths should be updated without the utils:

contract_parameters.ts
// v5

const amountBigNumber = ethers.utils.parseUnits(String(price), 18); // currency price based on correct decimals for token contract

const erc20Interface = new ethers.utils.Interface([

          "function approve(address spender, uint256 amount) external returns (bool)"

        ]);

        

// v6

const amountBigNumber = ethers.parseUnits(String(price), 18); // currency price based on correct decimals for token contract

const erc20Interface = new ethers.Interface([

          "function approve(address spender, uint256 amount) external returns (bool)"

        ]);

Utility Hash Value Packing

If you’re using ethers utilities to perform signature creation then using ecrecover on-chain, signature creation is now slightly different:

signature_creation.ts
// v5

const hash = ethers.utils.solidityKeccak256(['uint', 'uint'], [value1, blockNumber])

const arr = ethers.utils.arrayify(hash)

const signature = await wallet.signMessage(arr)



// v6

const hash = ethers.solidityPackedKeccak256(['uint', 'uint'], [value1, blockNumber])

const arr = ethers.getBytes(hash)

const signature = await wallet.signMessage(arr)

For complete information on the differences of Ethers v5 to v6 you can read more here in the official docs.