boba_legacy
boba_legacy copied to clipboard
Monorepo implementing Boba, a compute layer for Ethereum
description: Introduction to Boba Network
Welcome to Boba
This is the primary place where Boba works on the Boba L2, a compute-focused L2. Fundamentally, Ethereum is a distributed computer. We believe that L2s can play a unique role in augmenting the base compute capabilities of the Ethereum ecosystem. You can learn more about Turing hybrid compute here.
Boba is built on the Optimistic Rollup developed by Optimism. Aside from it focus on augmenting compute, Boba differs from Optimism by:
- providing additional cross-chain messaging such as a
message-relayer-fast
- using different gas pricing logic
- providing a swap-based system for rapid L2->L1 exits (without the 7 day delay)
- providing a community fraud-detector that allows transactions to be independently verified by anyone
- interacting with L2 ETH using the normal ETH methods (
msg.value
,send eth_sendTransaction
, andprovider.getBalance(address)
rather than as WETH - being organized as a DAO
- native NFT bridging
- automatically relaying classical 7-day exit messages to L1 for you, rather than this being a separate step
Documentation
User focused documentation is available on the Boba docs website. Developer-focused documentation lives in ./boba_documentation
and within the service and contract directories. If you have questions or feel like something is missing check out our Discord server where we are actively responding, or open an issue in the GitHub repo for this site.
Direct Support
Telegram for Developers
Project Telegram
Discord
Directory Structure
Base Layer (generally similar to Optimistic Ethereum)
-
packages
: Contains all the typescript packages and contracts-
contracts
: Solidity smart contracts implementing the OVM -
core-utils
: Low-level utilities and encoding packages -
common-ts
: Common tools for TypeScript code that runs in Node -
data-transport-layer
: Event indexer, allowing thel2geth
node to access L1 data -
batch-submitter
: Daemon for submitting L2 transaction and state root batches to L1 -
message-relayer
: Service for relaying L2 messages to L1 -
replica-healthcheck
: Service to monitor the health of different replica deployments
-
-
l2geth
: Fork of go-ethereum v1.9.10 implementing the OVM. -
integration-tests
: Integration tests between a L1 testnet and thel2geth
-
ops
: Contains Dockerfiles for containerizing each service involved in the protocol, as well as a docker-compose file for bringing up local testnets easily
Boba Layer
-
packages/boba/turing
: System for hybrid compute -
boba_community
: Code for running your own Boba node/replica and the fraud detector -
boba_documentation
: Boba-specific documentation -
boba_examples
: Basic examples of deploying contracts on Boba -
boba_utilities
: A stress-tester for discovering bugs under load -
ops_boba
: Parts of the Boba back-end, including theapi-watcher
service -
packages/boba
: Contains all the Boba typescript packages and contracts-
contracts
: Solidity smart contracts implementing the fast bridges, the DAO, etc. -
gas-price-oracle
: A custom gas price oracle -
gateway
: The Boba Web gateway -
message-relayer-fast
: A batch message relayer that can be run for the fast mode without a 7 day delay -
register
: Code for registering addresses in the AddressManager -
subgraph
: Subgraphs for indexing the StandardBridge and LiquidityPool contracts
-
Contributing
Follow these instructions to set up your local development environment.
Dependencies
You'll need the following:
Note: this is only relevant to developers who wish to work on Boba core services. For most test uses, e.g. deploying your contracts, it's simpler to use https://goerli.boba.network.
Ensure that you have installed and are using nodejs v16.16.0:
$ node --version
v16.16.0
If you have multiple versions of node installed and use nvm, ensure you are using nodejs v16.16.0
$ nvm use
Install nodejs packages with yarn
:
$ git clone [email protected]:bobanetwork/boba.git
$ cd boba
$ yarn clean # only needed / will only work if you had it installed previously
$ yarn
$ yarn build
Then, make sure you have Docker installed and make sure Docker is running.
Spinning up the stack
Build and run the entire stack:
$ cd ops
$ BUILD=1 DAEMON=0 ./up_local.sh
Build side services such as aa_deployer
and bundler
$ cd ops
$ docker-compose -f docker-compose.yml -f docker-compose-side.yml build bundler aa_deployer
Spinning up the side services
$ cd ops
$ docker-compose -f docker-compose.yml -f docker-compose-side.yml up bundler aa_deployer
Stack spinup can take 15 minutes or more. There are many interdependent services to bring up with two waves of contract deployment and initialization. Recommended settings in docker - 10 CPUs, 30 to 40 GB of memory. You can either inspect the Docker Dashboard>Containers/All>Ops
for the progress of the ops_deployer
or you can run this script to wait for the sequencer to be fully up:
./scripts/wait-for-sequencer.sh
If the command returns with no log output, the sequencer is up. Once the sequencer is up, you can inspect the Docker Dashboard>Containers/All>Ops
for the progress of ops_boba_deployer
or you can run the following script to wait for all the Boba contracts (e.g. the fast message relay system) to be deployed and up:
./scripts/wait-for-boba.sh
When the command returns with Pass: Found L2 Liquidity Pool contract address
, the entire Boba stack has come up correctly.
Helpful commands
-
Running out of space on your Docker, or having other having hard to debug issues? Try running
docker system prune -a --volumes
and then rebuild the images. -
To (re)build individual base services:
docker-compose build -- l2geth
-
To (re)build individual Boba ts services:
docker-compose build -- builder
thendocker-compose build -- dtl
, for example
Running unit tests
To run unit test coverage for whole stack:
yarn test:coverage
To run unit tests for a specific package:
cd packages/<package-to-test>
yarn test
Running integration tests
Make sure you are in the ops
folder and then run
docker-compose run integration_tests
Expect the full test suite with more than 110 tests including load tests to complete in between 30 minutes to two hours depending on your computer hardware.
Viewing docker container logs
By default, the docker-compose up
command will show logs from all services, and that
can be hard to filter through. In order to view the logs from a specific service, you can run:
docker-compose logs --follow <service name>
License
Code forked from go-ethereum
under the name l2geth
is licensed under the GNU GPLv3 in accordance with the original license.
All other files within this repository are licensed under the MIT License unless stated otherwise.