# Catapulta CLI

The Catapulta CLI is a multi-chain deployment tool for Foundry and Hardhat, which allows you to deploy smart contracts, automatically verify and generate deployment reports in +10 networks, without the need to maintain RPC urls or block explorer API keys in your Foundry/Hardhat config.

Catapulta is a smart contracts deployment platform for teams, to ensure the best Chain Ops practices via automation to keep your deployments organized.

Check below for quick documentations for:

- Foundry
- Hardhat Deploy

### Requirements

For using Catapulta, you need:

- Node.js 18
- Sign up with Github at [Catapulta.sh](https://catapulta.sh), to obtain a free API key.
- Paste your `CATAPULTA_API_KEY` in your `.env` file in your repository, or in your`.bashrc` or your `.zshrc` file.

### Install

You can install `catapulta` CLI globally via NPM:

```
npm i -g catapulta
```

Can also be installed locally in your Foundry or Hardhat project, if you use Node.js

```
npm i --save-dev catapulta

# Execute with npx at your package.json scripts
npx catapulta -v
```

### Foundry: Getting started

To be able to deploy your Foundry scripts using Catapulta, you need to specify the Foundry Script path and the network to perform the deployment:

```
  npx catapulta script scripts/Deploy.s.sol --network sepolia
```

#### Multi-chain deployment

You can also perform multi-chain deployments in a single run, adding a list of networks separated by comma at the `--network` param.

```
  npx catapulta script scripts/Deploy.s.sol --networks sepolia,avalancheFuji,maticMumbai
```

#### Simulations

If you only want to perform a fork simulation of your script, add `--simulate` flag.

```
  npx catapulta script scripts/Deploy.s.sol --network sepolia --simulate
```

You can also pass the `--simulate-block-number` param to set the fork block height:

```
  npx catapulta script scripts/Deploy.s.sol --network sepolia --simulate
```

#### Verbose or debug mode

To view the deployment traces, add `-vv` or `-vvvv` verbose flag in the `catapulta` command, in your simulation or broadcast deployment.

```
  npx catapulta script scripts/Deploy.s.sol --network sepolia --simulate -vvvv
```

```
  npx catapulta script scripts/Deploy.s.sol --network sepolia -vvvv
```

Keep in mind that verbose mode removes the concurrency mode, making multi-chain deployments slower.

#### Pass extra params to `forge script`

You can pass any extra `forge script` params at the end of the command, like `--with-gas-price`.

```
  npx catapulta script scripts/Ghost.s.sol --network sepolia --with-gas-price 10000000000
```

#### Help

If you want to see full documentation, you can run:

```
npx catapulta --help
```

To remove the need to pass `--api-key` in every command, add `CATAPULTA_API_KEY` environment variable in your `.env` file.

### Hardhat: Getting Started

If you use Hardhat Deploy, you may need to install and import the Catapulta plugin in your hardhat.config.ts file.

```
npm i --save-dev catapulta
```

Them proceed to import the Catapulta plugin in your hardhat.config.ts file:

```
// hardhat.config.ts
// Include the Catapulta Hardhat plugin at the top of your config

import 'catapulta/hardhat';
```

Run your Hardhat deploy scripts using Catapulta CLI. You can pass any extra parameter needed for `hardhat deploy`.

```
npx catapulta deploy --network sepolia --api-key <your-api-key>
```
