This is the primary place where [Optimism](https://optimism.io) works on stuff related to [Optimistic Ethereum](https://research.paradigm.xyz/optimism).
To build all of the [TypeScript packages](./packages), run:
```bash
```bash
yarn test
yarn clean
yarn build
```
```
When you want to run tests only for packages that have changed since `master` (or any other branch)
Packages compiled when on one branch may not be compatible with packages on a different branch.
you can run `yarn lerna run test --parallel --since master`
**You should recompile all packages whenever you move from one branch to another.**
Use the above commands to recompile the packages.
### Integration Tests
### Building the rest of the system
#### Running the integration tests
If you want to run an Optimistic Ethereum node OR **if you want to run the integration tests**, you'll need to build the rest of the system.
The integration tests first require bringing up the Optimism stack. This is done via
a Docker Compose network. For better performance, we also recommend enabling Docker
BuildKit
```bash
```bash
cd ops
cd ops
export COMPOSE_DOCKER_CLI_BUILD=1
export COMPOSE_DOCKER_CLI_BUILD=1# these environment variables significantly speed up build time
export DOCKER_BUILDKIT=1
export DOCKER_BUILDKIT=1
docker-compose build
docker-compose build
cd ../integration-tests
yarn build:integration
yarn test:integration
```
```
#### Locally testing and re-building specific services
This will build the following containers:
*[`builder`](https://hub.docker.com/r/ethereumoptimism/builder): used to build the TypeScript packages
If you want to make changes to any of the containers, you'll have to bring one down,
*[`l1_chain`](https://hub.docker.com/r/ethereumoptimism/hardhat): simulated L1 chain using hardhat-evm as a backend
rebuild it, and then bring it back up.
*[`deployer`](https://hub.docker.com/r/ethereumoptimism/deployer): process that deploys L1 smart contracts to the L1 chain
*[`dtl`](https://hub.docker.com/r/ethereumoptimism/data-transport-layer): service that indexes transaction data from the L1 chain
*[`l2geth`](https://hub.docker.com/r/ethereumoptimism/l2geth): L2 geth node running in Sequencer mode
*[`verifier`](https://hub.docker.com/r/ethereumoptimism/go-ethereum): L2 geth node running in Verifier mode
*[`relayer`](https://hub.docker.com/r/ethereumoptimism/message-relayer): helper process that relays messages between L1 and L2
*[`batch_submitter`](https://hub.docker.com/r/ethereumoptimism/batch-submitter): service that submits batches of Sequencer transactions to the L1 chain
*[`integration_tests`](https://hub.docker.com/r/ethereumoptimism/integration-tests): integration tests in a box
If you want to make a change to a container, you'll need to take it down and rebuild it.
Source code changes can have an impact on more than one container.
**If you're unsure about which containers to rebuild, just rebuild them all**:
```bash
cd ops
docker-compose down
docker-compose build
docker-compose up
```
Finally, **if you're running into weird problems and nothing seems to be working**, run:
```bash
cd optimism
yarn clean
yarn build
cd ops
docker-compose down -v
docker-compose build
docker-compose up
```
#### Viewing docker container logs
By default, the `docker-compose up` command will show logs from all services, and that
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:
can be hard to filter through. In order to view the logs from a specific service, you can run:
```
```bash
docker-compose logs --follow <service name>
docker-compose logs --follow <service name>
```
```
### Static analysis
To run `slither` locally in `./packages/contracts` do
### Running tests
Before running tests: **follow the above instructions to get everything built.**
#### Running unit tests
Run unit tests for all packages in parallel via:
```bash
yarn test
```
```
To run unit tests for a specific package:
```bash
cd packages/package-to-test
yarn test
```
#### Running integration tests
Follow above instructions for building the whole stack.
Build and run the integration tests:
```bash
cd integration-tests
yarn build:integration
yarn test:integration
```
## Additional Reference Material
### Running contract static analysis
We perform static analysis with [`slither`](https://github.com/crytic/slither).
You must have Python 3.x installed to run `slither`.
To run `slither` locally, do:
```bash
cd packages/contracts
pip3 install slither-analyzer
pip3 install slither-analyzer
yarn test:slither
yarn test:slither
```
```
## License
Code forked from [`go-ethereum`](https://github.com/ethereum/go-ethereum) under the name [`l2geth`](https://github.com/ethereum-optimism/optimism/tree/master/l2geth) is licensed under the [GNU GPLv3](https://gist.github.com/kn9ts/cbe95340d29fc1aaeaa5dd5c059d2e60) in accordance with the [original license](https://github.com/ethereum/go-ethereum/blob/master/COPYING).
All other files within this repository are licensed under the [MIT License](https://github.com/ethereum-optimism/optimism/blob/master/LICENSE) unless stated otherwise.