Deploy Sablier EVM contracts (Comptroller, ERC20 Faucet, Flow, Lockup, Airdrops) with full workflow automation...
End-to-end deployment workflow for Sablier EVM contracts. Supports Comptroller, Flow, Lockup, and Airdrops with protocol-specific adaptations.
Before proceeding, verify Foundry version:
forge -V
Stop if version is below 1.3.6.
Detect the current EVM protocol from package.json:
| Package Name | Protocol | SDK Path |
|---|---|---|
@sablier/evm-utils |
Comptroller | ../sdk/deployments/comptroller |
@sablier/flow |
Flow | ../sdk/deployments/flow |
@sablier/lockup |
Lockup | ../sdk/deployments/lockup |
@sablier/airdrops |
Airdrops | ../sdk/deployments/airdrops |
Extract version from package.json → "version": "x.y.z" → SDK version is v<x.y>
Execute steps in order, tracking state between each:
Reference: ./references/deploy.md | Examples: ./references/examples.md
Deploy protocol contracts using Foundry. Handles:
Reference: ./references/copy-to-sdk.md
Copy broadcast artifacts to SDK repository:
Reference: ./references/deploy-streams.md
For Flow and Lockup protocols only. Creates sample streams for testing:
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 | Deterministic Script | Non-deterministic Script |
|---|---|---|
| Comptroller | DeployDeterministicComptrollerProxy.s.sol |
DeployComptrollerProxy.s.sol |
| Flow | DeployDeterministicProtocol.s.sol |
DeployProtocol.s.sol |
| Lockup | DeployDeterministicProtocol.s.sol |
DeployProtocol.s.sol |
| Airdrops | DeployDeterministicFactories.s.sol |
DeployFactories.s.sol |
After completion, provide:
When deploying Airdrops test data, campaigns are created via factory:
| Factory | Campaign Contract |
|---|---|
SablierFactoryMerkleInstant |
SablierMerkleInstant |
SablierFactoryMerkleLL |
SablierMerkleLL |
SablierFactoryMerkleLT |
SablierMerkleLT |
SablierFactoryMerkleVCA |
SablierMerkleVCA |
Campaign addresses are returned in broadcast returns field, not contractAddress.