# Getting Started

### Dependencies

##### Ubuntu

```
sudo apt-get install -y build-essential clang-11 pkg-config cmake git curl protobuf-compiler
```

### Install rustup

##### Linux

```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

##### macOS

```
brew install rustup
```

### Install Rust

```
rustup update
rustup toolchain install stable
rustup target add wasm32-unknown-unknown
rustup toolchain install nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
```

### Install Solidity

```
cargo install svm-rs
svm install 0.8.25
svm use 0.8.25
```

### Install Solidity Compiler Version Manager

```
cargo install svm-rs
svm install 0.8.25
svm use 0.8.25
```

### Install foundry (for tests)

```
cargo install --git https://github.com/foundry-rs/foundry --profile local --locked forge cast chisel anvil
```

### Clone and Build Serai

```
git clone https://github.com/serai-dex/serai
cd serai
cargo build --release --all-features
```

### Run Tests

Running tests requires:

- [A rootless Docker setup](https://docs.docker.com/engine/security/rootless/)
- A properly configured Bitcoin regtest node (available via Docker)
- A properly configured Monero regtest node (available via Docker)
- A properly configured monero-wallet-rpc instance (available via Docker)

To start the required daemons, one may run:

```
cargo run -p serai-orchestrator -- key_gen dev
cargo run -p serai-orchestrator -- setup dev
```

and then:

```
cargo run -p serai-orchestrator -- start dev bitcoin-daemon monero-daemon monero-wallet-rpc
```

Finally, to run the tests:

```
cargo test --all-features
```