Skip to main content

Livepeer Blockchain Contracts

Livepeer uses a comprehensive system of Ethereum smart contracts to permissionlessly govern its decentralized network. The Livepeer Protocol is currently deployed on Arbitrum One and uses a collection of Ethereum smart contracts to govern:
  • LivepeerToken (LPT) ownership and delegation
  • Staking and selection of active transcoder operators (orchestrators)
  • Distribution of inflationary rewards and fees to participants
  • Time-based progression of the protocol through rounds
  • Payment processing through a probabilistic micropayment system
There are 3 core functions of contracts in the Livepeer Protocol:
  1. Core Protocol Contracts
  2. Token System
  3. Governance
That consist of 10 smart contracts that work together to manage staking, payments, governance, and service discovery:

Contract Interaction Architecture

Here’s how these contracts interact with each other:
FIX THIS DIAGRAM - unreadable

Core Protocol Contracts

The core protocol contracts are the backbone of the Livepeer Protocol. They manage the staking, delegation, and reward distribution for orchestrators. They also manage the time-based progression of the protocol through rounds and the payment processing through a probabilistic micropayment system. The Controller serves as the central registry, enabling upgrades by updating implementation addresses
Maybe put in tab view for better layout

Controller:

The Controller is the central registry for all protocol contracts. All protocol contracts check with the Controller for the addresses of other contracts they need to interact with.
The Controller acts as the central registry for all other contract addresses in the protocol.It maintains a mapping of contract IDs to their addresses, enabling protocol upgrades by updating the registered implementation addresses. It uses Keccak256 hashes of contract names as keys to store their addresses, enabling upgradeable architecture without changing the Controller address itself.Address:
0xD8E8328501E9645d16Cf49539efC04f734606ee4
Purpose:
  • Central address registry for all protocol contracts
  • Enables contract upgrades while maintaining a stable entry point
  • Provides pause functionality for emergency situations
Key Operations:
  • getContract() - Get address of a contract by name
  • setContract() - Set address of a contract by name
  • pause()/unpause() - Emergency pause for critical situations

BondingManager:

The BondingManager is the most critical contract managing the staking economy, orchestrator registration, and reward distribution.
Address:
0x0000000000000000000000000000000000000000
Purpose:
  • Manages the transcoder (orchestrator) pool as a sorted linked list
  • Handles bonding (staking) and delegation to orchestrators
  • Distributes inflationary rewards and fees
  • Manages unbonding periods and withdrawals
  • Tracks earnings and claims
Key Operations:
  • Bond() - Delegate stake to an orchestrator
  • Transcoder() - Register as an orchestrator with reward/fee parameters
  • Unbond() - Start withdrawal process (with lock period)
  • Reward() - Called by orchestrators to mint inflationary rewards
  • ClaimEarnings() - Claim accumulated rewards and fees

TicketBroker:

The TicketBroker manages the off-chain payment system using probabilistic micropayments for broadcaster-to-orchestrator payments.
Purpose:
  • Holds broadcaster deposits and reserves for micropayments
  • Validates and settles winning payment tickets
  • Manages unlock/withdrawal periods for broadcasters
  • Tracks claimed reserves per orchestrator
Key Operations:
  • FundDepositAndReserve() - Broadcaster deposits funds for payments
  • RedeemWinningTicket() - Orchestrator redeems a winning ticket
  • Unlock() - Start withdrawal process
  • Withdraw() - Complete withdrawal after unlock period

RoundsManager:

The RoundsManager manages the protocol’s time-based round system where each round has a fixed block length.
Purpose:
  • Defines protocol rounds (epochs) of fixed block length
  • Tracks round initialization and locking
  • Provides block hashes for ticket validation
  • Coordinates time-based protocol operations
Key Operations:
  • InitializeRound() - Initialize new round
  • CurrentRound() - Get current round number
  • BlockHashForRound() - Get L1 block hash for ticket validation

Minter:

The Minter controls the token supply inflation that rewards active orchestrators.
Purpose:
  • Manages LPT token inflation schedule
  • Calculates mintable tokens per round
  • Adjusts inflation based on target bonding rate
  • Called by BondingManager during reward distribution
Key Operations:
  • CurrentMintableTokens() - Calculate tokens to mint for rewards
  • Inflation(), InflationChange() - Query inflation parameters

ServiceRegistry:

The ServiceRegistry maps Ethereum addresses to service URIs for orchestrator discovery.
Purpose:
  • Allows orchestrators to advertise their network endpoints
  • Enables broadcasters to discover and connect to orchestrators
  • Stores URI strings on-chain
Key Operations:
  • SetServiceURI() - Orchestrator registers their endpoint
  • GetServiceURI() - Query orchestrator’s service URL

MerkleSnapshot

MerkleSnapshot creates a snapshot of the staking pool at a given round and generates a merkle root for verifiable delegation.
Purpose:
  • Creates a snapshot of the staking pool at a given round
  • Generates a merkle root for verifiable delegation
  • Used for delegator rewards and governance
Key Operations:
  • CreateSnapshot() - Create snapshot at current round
  • MerkleRoot() - Get merkle root for a round

Token & Utility Contracts

Livepeer moved from the Ethereum mainnet to the Arbitrum One network in 2022 to increase transaction throughput and reduce fees.
On Ethereum mainnet, only the LivepeerToken and BridgeMinter contracts remain operational; all other contracts have migrated to Arbitrum One.This ensures the token has the higher security of the Ethereum mainnet while the network enjoys the higher throughput and lower fees of Arbitrum.

LivepeerToken (LPT):

Ethereum Mainnet Only The LivepeerToken is the native protocol token used for staking, payments, and governance based on the ERC-20 standard.
Purpose:
  • ERC20 token for all economic activity in the network
  • Used for bonding/staking to orchestrators
  • Required for broadcaster deposits and payments
  • Governance voting weight
Key Operations:
  • Transfer(), BalanceOf(), TotalSupply() - Standard ERC20 operations
  • Approve() - Required before bonding or funding deposits

BridgeMinter:

Ethereum Mainnet Only The BridgeMinter is a minting contract that mints LPT tokens on the Arbitrum One network when it receives a valid deposit from the Ethereum mainnet.
Purpose:
  • Mints LPT tokens on Arbitrum One when it receives a valid deposit from the Ethereum mainnet

LivepeerTokenFaucet:

Testnets Only The LivepeerTokenFaucet is used on testnets for distributing test LPT tokens.
Purpose:
  • Provides test tokens on testnets
  • Rate-limited token requests
  • Development and testing support

Governance Contracts

Governor:

Governor handles protocol upgrades through a multi-step transaction proposal and execution process.
Purpose:
  • Handles protocol upgrades through a multi-step transaction proposal and execution process
Key Operations:
  • Propose() - Submit a new proposal
  • Queue() - Queue a proposal for execution
  • Execute() - Execute a queued proposal

LivepeerGovernor:

The LivepeerGovernor implements on-chain governance for protocol upgrades and parameter changes.
Purpose:
  • On-chain voting on protocol proposals
  • Weighted by bonded stake
  • Implements governance mechanisms
Key Operations:
  • CastVote() - Vote on governance proposals
  • CastVoteWithReason() - Vote with explanation

Treasury:

Treasury manages the on-chain treasury for funding and accounting.
Purpose:
  • Manages protocol treasury for funding
  • Tracks allocations and expenditures
  • Funds Special Purpose Entities (SPEs)
Key Operations:
  • Deposit() - Add funds to the treasury
  • Withdraw() - Allocate funds to recipients
Last modified on March 9, 2026