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
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
./livepeer.2
Get the Controller address
From your protocol repo:
3
Start an orchestrator node
Replace The key flags for local contract targeting:
<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).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 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
deployments/gethDev/LivepeerTokenFaucet.json. Call request() directly using cast or the go-livepeer CLI: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.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.
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.
Related pages
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.