Overview
End-to-end deployment workflow for Sablier EVM contracts. Supports Comptroller, Flow, Lockup, and Airdrops with
protocol-specific adaptations.
Prerequisites
Version Check
Before proceeding, verify Foundry version:
Stop if version is below 1.3.6.
Protocol Detection
Detect the current EVM protocol from
:
| Package Name | Protocol | SDK Path |
|---|
| Comptroller | ../sdk/deployments/comptroller
|
| Flow | |
| Lockup | ../sdk/deployments/lockup
|
| Airdrops | ../sdk/deployments/airdrops
|
Extract version from
→
→ SDK version is
Workflow
Execute steps in order, tracking state between each:
Step 1: Deploy Contracts
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: Create Test Data (optional)
Reference:
./references/deploy-streams.md
For Flow and Lockup protocols only. Creates sample streams for testing:
- 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 |
| Chain ID | From deployment or user input |
| Chain name | Lowercase (e.g., , ) |
| Deployment type | or |
| Contract addresses | From broadcast JSON field |
| Block number | From deployment receipt (hex → decimal) |
| SDK version | From version |
Protocol-Specific Scripts
| Protocol | Deterministic Script | Non-deterministic Script |
|---|
| Comptroller | DeployDeterministicComptrollerProxy.s.sol
| DeployComptrollerProxy.s.sol
|
| Flow | DeployDeterministicProtocol.s.sol
| |
| Lockup | DeployDeterministicProtocol.s.sol
| |
| Airdrops | DeployDeterministicFactories.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
| |
| |
| |
| |
Campaign addresses are returned in broadcast
field, not
.