> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/cowprotocol/cow-sdk/llms.txt
> Use this file to discover all available pages before exploring further.

# Ethers v5 Adapter

> Integration adapter for using the CoW Protocol SDK with Ethers.js v5

# Ethers v5 Adapter

The Ethers v5 Adapter provides integration with the [ethers.js v5](https://docs.ethers.io/v5/) library, enabling you to use all CoW Protocol SDK packages with ethers v5 providers and signers.

## Installation

```bash theme={null}
npm install @cowprotocol/sdk-ethers-v5-adapter
```

## Constructor

```typescript theme={null}
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

<ParamField path="provider" type="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.
</ParamField>

<ParamField path="signer" type="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.
</ParamField>

## Properties

### signer

Returns the EthersV5SignerAdapter instance. Throws an error if no signer was provided.

```typescript theme={null}
const signerAdapter = adapter.signer
```

### utils

Utility methods for working with ethers v5 types and contracts.

```typescript theme={null}
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.

```typescript theme={null}
const chainId = await adapter.getChainId()
```

**Returns:** `Promise<number>`

### getCode

Returns the bytecode at a given address.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
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.

```typescript theme={null}
const signer = adapter.signerOrNull()
if (signer) {
  // Use signer
}
```

**Returns:** `EthersV5SignerAdapter | null`

### createSigner

Creates a new signer adapter from a Signer instance or private key.

```typescript theme={null}
const signerAdapter = adapter.createSigner(wallet)
```

**Parameters:**

* `signerOrPrivateKey` (Signer | PrivateKey | EthersV5SignerAdapter): Signer to wrap

**Returns:** `EthersV5SignerAdapter`

## Usage Examples

### With Provider and Wallet

```typescript theme={null}
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

```typescript theme={null}
import { EthersV5Adapter } from '@cowprotocol/sdk-ethers-v5-adapter'

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

### With CoW SDK

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

* [Ethers.js v5 Documentation](https://docs.ethers.io/v5/)
* [Viem Adapter](/api/adapters/viem)
* [Ethers v6 Adapter](/api/adapters/ethers-v6)
