Skip to main content
Running a local Livepeer stack lets you develop against real protocol contracts without spending ETH or affecting mainnet state. The protocol repo ships a Hardhat deploy script that deploys every contract automatically, seeds the faucet with test LPT, and writes a deployments JSON you can point go-livepeer at.
local Hardhat deployment only. For Arbitrum Sepolia testnet deployment the same deploy script applies – swap the Hardhat network target for arbitrumSepolia and provide a funded Sepolia wallet.

Prerequisites

You need the following installed before starting:
  • Node.js v18 or later and yarn
  • Go 1.21 or later (for building go-livepeer)
  • git
  • An Ethereum wallet with a private key (for Hardhat, the default accounts are pre-funded – no setup needed)

Deploy the protocol contracts

1

Clone the protocol repo

2

Install dependencies

3

Compile the contracts

This compiles all Solidity contracts in contracts/ using the compiler version specified in hardhat.config.ts. Output goes to artifacts/.
4

Start a local Hardhat node

Open a separate terminal and leave this running for the duration of your development session.
Hardhat starts a local JSON-RPC node at http://127.0.0.1:8545 with chain ID 31337. It pre-funds 20 accounts with 10,000 ETH each and prints their private keys to stdout.
5

Deploy all contracts

In your original terminal, run the deploy script against the local node:
The gethDev network config (from deploy/migrations.config.ts) sets short round lengths and unlock periods suitable for local testing:On completion, contract addresses are written to deployments/gethDev/. The deployer account is set as Controller owner and Governor owner. The faucet is seeded with 6,343,700 LPT (genesis.crowdSupply) and the deployer receives 500,000 LPT (genesis.companySupply).
6

Note the Controller address

Every contract address is resolvable from the Controller. Find it in the deployment output:
You will need this address to configure go-livepeer in the next section.

Deployed components

The deploy script (deploy/deploy_contracts.ts) deploys and registers the following contracts automatically. All proxy contracts are registered in the Controller.
LivepeerTokenFaucet is the only contract that is skipped on production networks (mainnet, arbitrumMainnet). The deploy script gates it with if (!isProdNetwork(hre.network.name)).

Connect go-livepeer to your local contracts

With contracts deployed, you can run go-livepeer nodes against your local stack.
1

Build go-livepeer

The binary is built to ./livepeer.
2

Get the Controller address

From your protocol repo:
3

Start an orchestrator node

Replace <CONTROLLER_ADDRESS> with the address from the previous step and <KEYSTORE_PATH> with a path to an Ethereum keystore file (you can export one of the Hardhat accounts).
The key flags for local contract targeting:
4

Start a gateway node

In a separate terminal, using a different keystore account:
Using -orchAddr directly bypasses the ServiceRegistry lookup and connects the Gateway to your local Orchestrator immediately.
5

Request test LPT from the faucet

The faucet address is in deployments/gethDev/LivepeerTokenFaucet.json. Call request() directly using cast or the go-livepeer CLI:
Each call transfers 10 LPT to the caller. The rate limit is 1 hour between requests, but whitelisted addresses bypass it entirely. Add your test addresses to the whitelist by calling addToWhitelist(address) from the deployer account.
6

Bond LPT and activate an orchestrator

With test LPT in your Orchestrator wallet, bond and register:
After the next round initialises (triggered automatically by -initializeRound on your Orchestrator node), your Orchestrator enters the Active Set and can call reward().

Deploying to Arbitrum Sepolia

The same deploy script targets Arbitrum Sepolia with a different network name. You need a funded Sepolia wallet (Sepolia ETH from a faucet) and an Arbitrum Sepolia RPC URL.
Add an arbitrumSepolia entry to hardhat.config.ts pointing at your RPC URL, then use the defaultConfig from migrations.config.ts as your parameter baseline. The faucet deploys and is seeded the same as local – crowdSupply worth of test LPT.
arbitrumSepolia is not a named network in migrations.config.ts as of the current delta branch. It falls through to defaultConfig, which has sensible testnet defaults. Confirm roundLength: 5760 is acceptable for your testing cadence before deploying.
The local testnet gives you a complete protocol stack for development without real ETH. Use it for testing payment flows, BYOC registration, and Gateway-Orchestrator interaction before deploying to mainnet.

Blockchain Contracts

Full technical reference for every protocol contract: purpose, key functions, and source code.

Contract Addresses

Current and historical mainnet contract addresses across Arbitrum One and Ethereum Mainnet.

Protocol repo on GitHub

Source code, deploy scripts, and migration configs for the Livepeer Protocol.

go-livepeer on GitHub

Node implementation. Build from source or use pre-built binaries.
Last modified on May 31, 2026