Skip to content

HTTP Transport

A function to create a HTTP Transport for a Client

The http Transport connects to a JSON-RPC API via HTTP.

Import

import { http } from 'viem'

Usage

import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'
 
const client = createPublicClient({
  chain: mainnet,
  transport: http('https://eth-mainnet.g.alchemy.com/v2/...'), 
})

Batch JSON-RPC

The http Transport supports Batch JSON-RPC. This means that multiple JSON-RPC requests can be sent in a single HTTP request.

The Transport will batch up Actions over a given period and execute them in a single Batch JSON-RPC HTTP request. By default, this period is a zero delay meaning that the batch request will be executed at the end of the current JavaScript message queue. Consumers can specify a custom time period wait (in ms).

You can enable Batch JSON-RPC by setting the batch flag to true:

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  batch: true
})

Now when you invoke Actions, the http Transport will batch and send over those requests at the end of the message queue (or custom time period) in a single Batch JSON-RPC HTTP request:

// The below will send a single Batch JSON-RPC HTTP request to the RPC Provider.
const [blockNumber, balance, ensName] = await Promise.all([
  client.getBlockNumber(),
  client.getBalance({ address: '0xd2135CfB216b74109775236E36d4b433F1DF507B' }),
  client.getEnsName({ address: '0xd2135CfB216b74109775236E36d4b433F1DF507B' }),
])

Parameters

url (optional)

  • Type: string
  • Default: chain.rpcUrls.default.http[0]

URL of the JSON-RPC API.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...')

batch (optional)

  • Type: boolean | BatchOptions
  • Default: false

Toggle to enable Batch JSON-RPC

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  batch: true
})

batch.batchSize (optional)

  • Type: number
  • Default: 1_000

The maximum number of JSON-RPC requests to send in a batch.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  batch: {
    batchSize: 2_000
  }
})

batch.wait (optional)

The maximum number of milliseconds to wait before sending a batch.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  batch: {
    wait: 16
  }
})

fetchOptions (optional)

Fetch options to pass to the internal fetch function. Useful for passing auth headers or cache options.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  fetchOptions: { 
    headers: {
      'Authorization': 'Bearer ...'
    }
  }
})

key (optional)

  • Type: string
  • Default: "http"

A key for the Transport.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  key: 'alchemy', 
})

name (optional)

  • Type: string
  • Default: "HTTP JSON-RPC"

A name for the Transport

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  name: 'Alchemy HTTP Provider', 
})

onFetchRequest (optional)

  • Type: (request: Request) => void

A callback to handle the fetch request. Useful for logging or debugging.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  onFetchRequest(request) {
    console.log(request) 
  }
})

onFetchResponse (optional)

  • Type: (response: Response) => void

A callback to handle the fetch response. Useful for logging or debugging.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  onFetchResponse(response) {
    console.log(response) 
  }
})

retryCount (optional)

  • Type: number
  • Default: 3

The max number of times to retry when a request fails.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  retryCount: 5, 
})

retryDelay (optional)

  • Type: number
  • Default: 150

The base delay (in ms) between retries. By default, the Transport will use exponential backoff (~~(1 << count) * retryDelay), which means the time between retries is not constant.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  retryDelay: 100, 
})

timeout (optional)

  • Type: number
  • Default: 10_000

The timeout for requests.

const transport = http('https://eth-mainnet.g.alchemy.com/v2/...', {
  timeout: 60_000, 
})