Page is under construction.
Check the github issues for ways to contribute! Or provide your feedback in this quick form
Check the github issues for ways to contribute! Or provide your feedback in this quick form
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
- Core Protocol Contracts
- Token System
- Governance
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: Contract Registry
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.Controller
Controller
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:See on ArbiscanPurpose:
- Central address registry for all protocol contracts
- Enables contract upgrades while maintaining a stable entry point
- Provides pause functionality for emergency situations
getContract()- Get address of a contract by namesetContract()- Set address of a contract by namepause()/unpause()- Emergency pause for critical situations

BondingManager: Staking & Delegation
The BondingManager is the most critical contract managing the staking economy, orchestrator registration, and reward distribution.BondingManager
BondingManager
Address:See on ArbiscanPurpose:
- 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
Bond()- Delegate stake to an orchestratorTranscoder()- Register as an orchestrator with reward/fee parametersUnbond()- Start withdrawal process (with lock period)Reward()- Called by orchestrators to mint inflationary rewardsClaimEarnings()- Claim accumulated rewards and fees
TicketBroker: Probabilistic Micropayments
The TicketBroker manages the off-chain payment system using probabilistic micropayments for broadcaster-to-orchestrator payments.TicketBroker
TicketBroker
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
FundDepositAndReserve()- Broadcaster deposits funds for paymentsRedeemWinningTicket()- Orchestrator redeems a winning ticketUnlock()- Start withdrawal processWithdraw()- Complete withdrawal after unlock period
RoundsManager: Protocol Time Management
The RoundsManager manages the protocol’s time-based round system where each round has a fixed block length.RoundsManager
RoundsManager
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
InitializeRound()- Initialize new roundCurrentRound()- Get current round numberBlockHashForRound()- Get L1 block hash for ticket validation
Minter: Token Inflation
The Minter controls the token supply inflation that rewards active orchestrators.Minter
Minter
Purpose:
- Manages LPT token inflation schedule
- Calculates mintable tokens per round
- Adjusts inflation based on target bonding rate
- Called by BondingManager during reward distribution
CurrentMintableTokens()- Calculate tokens to mint for rewardsInflation(),InflationChange()- Query inflation parameters
ServiceRegistry: Orchestrator Discovery
The ServiceRegistry maps Ethereum addresses to service URIs for orchestrator discovery.ServiceRegistry
ServiceRegistry
Purpose:
- Allows orchestrators to advertise their network endpoints
- Enables broadcasters to discover and connect to orchestrators
- Stores URI strings on-chain
SetServiceURI()- Orchestrator registers their endpointGetServiceURI()- 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.MerkleSnapshot
MerkleSnapshot
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
CreateSnapshot()- Create snapshot at current roundMerkleRoot()- Get merkle root for a round
Token & Utility Contracts
LivepeerToken (LPT): ERC20 Token
Ethereum Mainnet Only The LivepeerToken is the native protocol token used for staking, payments, and governance based on the ERC-20 standard.LivepeerToken
LivepeerToken
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
Transfer(),BalanceOf(),TotalSupply()- Standard ERC20 operationsApprove()- Required before bonding or funding deposits
BridgeMinter: Token Bridge
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.BridgeMinter
BridgeMinter
Purpose:
- Mints LPT tokens on Arbitrum One when it receives a valid deposit from the Ethereum mainnet
LivepeerTokenFaucet: Test Token Distribution
Testnets Only The LivepeerTokenFaucet is used on testnets for distributing test LPT tokens.LivepeerTokenFaucet
LivepeerTokenFaucet
Purpose:
- Provides test tokens on testnets
- Rate-limited token requests
- Development and testing support
Governance Contracts
Governor: Contract Upgrades
Governor handles protocol upgrades through a multi-step transaction proposal and execution process.Governor
Governor
Purpose:
- Handles protocol upgrades through a multi-step transaction proposal and execution process
Propose()- Submit a new proposalQueue()- Queue a proposal for executionExecute()- Execute a queued proposal
LivepeerGovernor: Protocol Governance
The LivepeerGovernor implements on-chain governance for protocol upgrades and parameter changes.LivepeerGovernor
LivepeerGovernor
Purpose:
- On-chain voting on protocol proposals
- Weighted by bonded stake
- Implements governance mechanisms
CastVote()- Vote on governance proposalsCastVoteWithReason()- Vote with explanation
Treasury: On-chain Treasury Management
Treasury manages the on-chain treasury for funding and accounting.Treasury
Treasury
Purpose:
- Manages protocol treasury for funding
- Tracks allocations and expenditures
- Funds Special Purpose Entities (SPEs)
Deposit()- Add funds to the treasuryWithdraw()- Allocate funds to recipients