# Evm Deployment

> Deploy Sablier EVM contracts (Utils, Flow, Lockup, Airdrops, Bob) with full workflow automation. This skill should be used when the user asks to "deploy", "deploy protocol", "deploy to chain", or mentions deployment-related tasks. Handles contract deployment, explorer verification, SDK updates, and initial setup through Init scripts. Use when this capability is needed.

- Skill: `tomevault-io/evm-deployment` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/evm-deployment`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/evm-deployment/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/evm-deployment

---


## Overview

End-to-end deployment workflow for Sablier EVM contracts. Supports Utils, Flow, Lockup, Airdrops, and Bob with
protocol-specific adaptations.

## Prerequisites

### Version Check

Before proceeding, verify Foundry version:

```bash
forge -V
```

**Stop if version is below 1.3.6.**

## Protocol Detection

Detect the current EVM protocol from `package.json`:

| Package Name         | Protocol | SDK Path                         |
| -------------------- | -------- | -------------------------------- |
| `@sablier/evm-utils` | Utils    | `../sdk/deployments/comptroller` |
| `@sablier/flow`      | Flow     | `../sdk/deployments/flow`        |
| `@sablier/lockup`    | Lockup   | `../sdk/deployments/lockup`      |
| `@sablier/airdrops`  | Airdrops | `../sdk/deployments/airdrops`    |
| `@sablier/bob`       | Bob      | `../sdk/deployments/bob`         |

Extract version from `package.json` → `"version": "x.y.z"` → SDK version is `v<x.y>`

## Workflow

Execute steps **in order**, tracking state between each:

### Step 1: Deploy Contracts

Reference: `./references/deploy.md` | Examples: `./references/examples.md`

Deploy protocol contracts using Foundry. Handles:

- RPC configuration
- Deterministic (CREATE2) vs non-deterministic (CREATE) deployment
- Contract verification on block explorer

### Step 2: Update SDK (optional)

Reference: `./references/copy-to-sdk.md`

Copy broadcast artifacts to SDK repository:

- Broadcast JSON file
- Update README.md with deployment info
- Update deployments.ts with contract addresses

### Step 3: Initial Setup (optional)

Reference: `./references/init-setup.md`

Creates initial setup for deployed contracts:

- Mint or verify ERC20 token balance
- Run Init.s.sol script to create test streams

## State Tracking

Track and carry forward between steps:

| State              | Source                                   |
| ------------------ | ---------------------------------------- |
| Protocol name      | Detected from `package.json`             |
| Chain ID           | From deployment or user input            |
| Chain name         | Lowercase (e.g., `ethereum`, `arbitrum`) |
| Deployment type    | `deterministic` or `non-deterministic`   |
| Contract addresses | From broadcast JSON `returns` field      |
| Block number       | From deployment receipt (hex → decimal)  |
| SDK version        | From `package.json` version              |

## Protocol-Specific Scripts

| Protocol | Deterministic Script                        | Non-deterministic Script       |
| -------- | ------------------------------------------- | ------------------------------ |
| Utils    | `DeployDeterministicComptrollerProxy.s.sol` | `DeployComptrollerProxy.s.sol` |
| Utils    | `DeployDeterministicERC20Faucet.s.sol`      | `DeployERC20Faucet.s.sol`      |
| Flow     | `DeployDeterministicProtocol.s.sol`         | `DeployProtocol.s.sol`         |
| Lockup   | `DeployDeterministicProtocol.s.sol`         | `DeployProtocol.s.sol`         |
| Airdrops | `DeployDeterministicFactories.s.sol`        | `DeployFactories.s.sol`        |
| Bob      | `DeployDeterministicBob.s.sol`              | `DeployBob.s.sol`              |
| Bob      | `DeployDeterministicEscrow.s.sol`           | `DeployEscrow.s.sol`           |

## Output Summary

After completion, provide:

- Protocol deployed
- Chain and deployment type
- Contract addresses (factories + campaigns if applicable)
- Verification status
- SDK files updated (if applicable)
- Test data created (if applicable)

### Airdrops Campaign Contracts

When deploying Airdrops test data, campaigns are created via factory:

| Factory                        | Campaign Contract       |
| ------------------------------ | ----------------------- |
| `SablierFactoryMerkleInstant`  | `SablierMerkleInstant`  |
| `SablierFactoryMerkleLL`       | `SablierMerkleLL`       |
| `SablierFactoryMerkleLT`       | `SablierMerkleLT`       |
| `SablierFactoryMerkleVCA`      | `SablierMerkleVCA`      |
| `SablierFactoryMerkleExecute`  | `SablierMerkleExecute`  |

Campaign addresses are returned in broadcast `returns` field, not `contractAddress`.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/sablier-labs) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-13 -->

