Skip to main content

Ethers v5 Adapter

The Ethers v5 Adapter provides integration with the ethers.js v5 library, enabling you to use all CoW Protocol SDK packages with ethers v5 providers and signers.

Installation

npm install @cowprotocol/sdk-ethers-v5-adapter

Constructor

import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'
import { ethers } from 'ethers'

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL')
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider)

const adapter = new EthersV5Adapter({ provider, signer: wallet })

Parameters

provider
Provider | string
required
An ethers v5 Provider instance (e.g., JsonRpcProvider) or an RPC URL string. If a string is provided, a JsonRpcProvider will be created automatically.
signer
Signer | PrivateKey
Optional ethers v5 Signer instance (e.g., Wallet) or private key string. If a private key is provided, a Wallet will be created automatically.

Properties

signer

Returns the EthersV5SignerAdapter instance. Throws an error if no signer was provided.
const signerAdapter = adapter.signer

utils

Utility methods for working with ethers v5 types and contracts.
const interface = adapter.utils.createInterface(abi)

TypedDataVersionedSigner

Signer class for EIP-712 typed data with version support.

TypedDataV3Signer

Signer class for EIP-712 typed data version 3 (legacy). Useful for compatibility with older protocols.

IntChainIdTypedDataV4Signer

Signer class for EIP-712 typed data version 4 with integer chain ID handling to fix MetaMask compatibility issues.

Methods

getChainId

Returns the chain ID from the connected provider.
const chainId = await adapter.getChainId()
Returns: Promise<number>

getCode

Returns the bytecode at a given address.
const code = await adapter.getCode('0x...')
Parameters:
  • address (string): The contract address
Returns: Promise<string>

getTransactionReceipt

Returns the transaction receipt for a given transaction hash.
const receipt = await adapter.getTransactionReceipt('0x...')
Parameters:
  • transactionHash (string): The transaction hash
Returns: Promise<TransactionReceipt>

getStorageAt

Returns the value from a storage position at a given address.
const value = await adapter.getStorageAt('0x...', 0)
Parameters:
  • address (string): The contract address
  • slot (BigNumberish): The storage slot
Returns: Promise<BytesLike>

call

Executes a read-only call to a contract.
const result = await adapter.call({
  to: '0x...',
  data: '0x...'
})
Parameters:
  • txParams (TransactionParams): Transaction parameters
  • provider (Provider, optional): Override provider
Returns: Promise<string>

readContract

Reads from a contract function using callStatic.
const result = await adapter.readContract({
  address: '0x...',
  abi: contractAbi,
  functionName: 'balanceOf',
  args: ['0x...']
})
Parameters:
  • address (string): Contract address
  • abi (Abi): Contract ABI
  • functionName (string): Function name to call
  • args (ContractValue[], optional): Function arguments
  • provider (Provider, optional): Override provider
Returns: Promise<unknown>

getBlock

Returns block information for a given block tag.
const block = await adapter.getBlock('latest')
Parameters:
  • blockTag (string): Block tag (e.g., ‘latest’, ‘pending’, block number)
  • provider (Provider, optional): Override provider
Returns: Promise<Block>

getContract

Creates a contract instance.
const contract = adapter.getContract('0x...', contractAbi)
const result = await contract.callStatic.functionName()
Parameters:
  • address (string): Contract address
  • abi (Abi): Contract ABI
Returns: GenericContract

setSigner

Sets or updates the signer for the adapter.
const newWallet = new ethers.Wallet('0x...', provider)
adapter.setSigner(newWallet)
Parameters:
  • signer (Signer | PrivateKey): New signer to use

setProvider

Sets or updates the provider for the adapter.
const newProvider = new ethers.providers.JsonRpcProvider('https://eth.llamarpc.com')
adapter.setProvider(newProvider)
Parameters:
  • provider (Provider): New provider to use
Returns: Provider

signerOrNull

Returns the signer adapter or null if not set.
const signer = adapter.signerOrNull()
if (signer) {
  // Use signer
}
Returns: EthersV5SignerAdapter | null

createSigner

Creates a new signer adapter from a Signer instance or private key.
const signerAdapter = adapter.createSigner(wallet)
Parameters:
  • signerOrPrivateKey (Signer | PrivateKey | EthersV5SignerAdapter): Signer to wrap
Returns: EthersV5SignerAdapter

Usage Examples

With Provider and Wallet

import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'
import { ethers } from 'ethers'

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL')
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider)

const adapter = new EthersV5Adapter({ provider, signer: wallet })

With RPC URL String

import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'

const adapter = new EthersV5Adapter({
  provider: 'https://eth.llamarpc.com',
  signer: '0x...'
})

With CoW SDK

import { CowSdk, SupportedChainId } from '@cowprotocol/cow-sdk'
import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'
import { ethers } from 'ethers'

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL')
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider)
const adapter = new EthersV5Adapter({ provider, signer: wallet })

const sdk = new CowSdk({
  chainId: SupportedChainId.SEPOLIA,
  adapter,
  tradingOptions: {
    traderParams: {
      appCode: 'YOUR_APP_CODE',
    },
    options: {
      chainId: SupportedChainId.SEPOLIA,
    },
  },
})

const orderId = await sdk.trading.postSwapOrder(parameters)

Using Individual SDK Packages

import { TradingSdk } from '@cowprotocol/sdk-trading'
import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'
import { ethers } from 'ethers'

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL')
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider)
const adapter = new EthersV5Adapter({ provider, signer: wallet })

const trading = new TradingSdk(
  { appCode: 'YOUR_APP_CODE' },
  { chainId: SupportedChainId.SEPOLIA },
  adapter
)

const orderId = await trading.postSwapOrder(parameters)

Using TypedDataV3Signer

import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'
import { ethers } from 'ethers'

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL')
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider)

const adapter = new EthersV5Adapter({ provider, signer: wallet })

// Create a TypedDataV3Signer for legacy protocol compatibility
const v3Signer = new adapter.TypedDataV3Signer(wallet)

See Also

Build docs developers (and LLMs) love