{"id":28513555,"url":"https://github.com/livepeer/protocol","last_synced_at":"2025-09-12T19:40:41.574Z","repository":{"id":38475219,"uuid":"89298984","full_name":"livepeer/protocol","owner":"livepeer","description":"Livepeer protocol","archived":false,"fork":false,"pushed_at":"2025-08-23T00:53:32.000Z","size":5220,"stargazers_count":151,"open_issues_count":47,"forks_count":47,"subscribers_count":16,"default_branch":"delta","last_synced_at":"2025-08-28T17:47:40.092Z","etag":null,"topics":["ethereum","livestreaming","smart-contracts","solidity"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/livepeer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-25T00:22:38.000Z","updated_at":"2025-08-23T00:53:37.000Z","dependencies_parsed_at":"2023-09-22T03:30:54.694Z","dependency_job_id":"d0e367c1-4a1e-47b1-a699-8a8251c4ac56","html_url":"https://github.com/livepeer/protocol","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/livepeer/protocol","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fprotocol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fprotocol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fprotocol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fprotocol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/livepeer","download_url":"https://codeload.github.com/livepeer/protocol/tar.gz/refs/heads/delta","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fprotocol/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274864883,"owners_count":25364238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ethereum","livestreaming","smart-contracts","solidity"],"created_at":"2025-06-09T01:07:23.132Z","updated_at":"2025-09-12T19:40:41.541Z","avatar_url":"https://github.com/livepeer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://img.shields.io/circleci/project/github/RedSparr0w/node-csgo-parser.svg)](https://circleci.com/gh/livepeer/protocol/tree/master)\n[![Coverage Status](https://coveralls.io/repos/github/livepeer/protocol/badge.svg)](https://coveralls.io/github/livepeer/protocol)\n\n# Livepeer Protocol\n\nEthereum smart contracts used for the Livepeer protocol. These contracts govern the logic for:\n\n-   Livepeer Token (LPT) ownership\n-   Bonding and delegating LPT to elect active workers\n-   Distributing inflationary rewards and fees to active participants\n-   Time progression in the protocol\n-   ETH escrow and ticket validation for a probabilistic micropayment protocol used to pay for transcoding work\n\n## Documentation\n\nFor a general overview of the protocol refer to the [wiki](https://github.com/livepeer/wiki) resources.\n\n## Development\n\nAll contributions and bug fixes are welcome as pull requests back into the repo.\n\nA note on branches as of [LIP-73: Confluence - Arbitrum One Migration](https://github.com/livepeer/LIPs/blob/master/LIPs/LIP-73.md):\n\n- The `confluence` branch contains the latest contract code deployed on the Arbitrum One rollup. Since the core protocol is operating on Arbitrum One rollup going forward all contract code changes pertaining to the core protocol should be on this branch.\n- The `streamflow` branch contains the latest contract code deployed on Ethereum. Since the only operational contracts (not paused) on Ethereum, excluding the Controller, are the [LivepeerToken](https://github.com/livepeer/protocol/blob/streamflow/contracts/token/LivepeerToken.sol) and [BridgeMinter](https://github.com/livepeer/protocol/blob/streamflow/contracts/token/BridgeMinter.sol) the only contract code changes on this branch would be for those contracts.\n\nThe Arbitrum bridge contracts can be found in the [arbitrum-lpt-bridge](https://github.com/livepeer/arbitrum-lpt-bridge) repository.\n\n### ERC20 Note\n\nThe Livepeer token is implemented as an ERC20 token in `token/LivepeerToken.sol` which inherits from the OpenZeppelin ERC20 token contract and all implemented ERC20 functions will revert if the operation is not successful. However, the [ERC20 spec](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) does not require functions to revert and instead requires functions to return true if the operation succeed and false if the operation fails. The contracts `bonding/BondingManager.sol` and `token/Minter.sol` do not check the return value of ERC20 functions and instead assume that they will revert if the operation fails. The Livepeer token contract is already [deployed on mainnet](https://github.com/livepeer/wiki/blob/master/Deployed-Contract-Addresses.md) and its implementation should not change so this is not a problem. However, if for some reason the implementation ever does change, developers should keep in mind that `bonding/BondingManager.sol` and `token/Minter.sol` do not check the return value of ERC20 functions.\n\n### Install\n\nMake sure Node.js (\u003e=v12.0) is installed.\n\n```\ngit clone https://github.com/livepeer/protocol.git\ncd protocol\nyarn\n```\n\n### Build\n\nCompile the contracts and build artifacts used for testing and deployment.\n\n```\nyarn compile\n```\n\n### Clean\n\nRemove existing build artifacts.\n\n```\nyarn clean\n```\n\n### Lint\n\nThe project uses [ESLint](https://github.com/eslint/eslint) for Javascript linting and [Solium](https://github.com/duaraghav8/Ethlint) for Solidity linting.\n\n```\nyarn lint\n```\n\n### Run Tests\n\nAll tests will be executed via [hardhat](https://hardhat.org/guides/waffle-testing.html).\n\nMake sure to add relevant API keys inside `.env` file (by copying provided `.env.example`) to assist tests and deployments.\n\nTo run all tests:\n\n```\nyarn test\n```\n\nTo run unit tests only:\n\n```\nyarn test:unit\n```\n\nTo run integration tests only:\n\n```\nyarn test:integration\n```\n\nTo run gas reporting tests (via [hardhat-gas-reporter](https://hardhat.org/plugins/hardhat-gas-reporter.html)) only:\n\n```\nyarn test:gas\n```\n\nTo run tests with coverage (via [solidity-coverage](https://github.com/sc-forks/solidity-coverage)) reporting:\n\n```\nyarn test:coverage\n```\n\n## Deployment\n\nMake sure that an ETH node is accessible and that the network being deployed to is supported by the `hardhat.config.ts` configuration.\n\n```\nexport LPT_DEPLOYMENT_EXPORT_PATH=~/Development/lpt_contracts.json\nyarn deploy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Fprotocol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flivepeer%2Fprotocol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Fprotocol/lists"}