AgentSkillsCN

evm-deployment

通过全流程自动化,部署 Sablier EVM 合约(Comptroller、ERC20 Faucet、Flow、Lockup、Airdrops)。当用户请求“部署”、“部署协议”、“部署至链”时,或提及与部署相关的任务时,请使用此技能。它负责合约部署、浏览器验证、SDK 更新,以及通过 Init 脚本创建示例数据。

SKILL.md
--- frontmatter
name: evm-deployment
description: Deploy Sablier EVM contracts (Comptroller, ERC20 Faucet, Flow, Lockup, Airdrops) 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 sample data creation through Init script.
version: 0.1.0

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:

bash
forge -V

Stop if version is below 1.3.6.

Protocol Detection

Detect the current EVM protocol from package.json:

Package NameProtocolSDK Path
@sablier/evm-utilsComptroller../sdk/deployments/comptroller
@sablier/flowFlow../sdk/deployments/flow
@sablier/lockupLockup../sdk/deployments/lockup
@sablier/airdropsAirdrops../sdk/deployments/airdrops

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: 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:

StateSource
Protocol nameDetected from package.json
Chain IDFrom deployment or user input
Chain nameLowercase (e.g., ethereum, arbitrum)
Deployment typedeterministic or non-deterministic
Contract addressesFrom broadcast JSON returns field
Block numberFrom deployment receipt (hex → decimal)
SDK versionFrom package.json version

Protocol-Specific Scripts

ProtocolDeterministic ScriptNon-deterministic Script
ComptrollerDeployDeterministicComptrollerProxy.s.solDeployComptrollerProxy.s.sol
FlowDeployDeterministicProtocol.s.solDeployProtocol.s.sol
LockupDeployDeterministicProtocol.s.solDeployProtocol.s.sol
AirdropsDeployDeterministicFactories.s.solDeployFactories.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:

FactoryCampaign Contract
SablierFactoryMerkleInstantSablierMerkleInstant
SablierFactoryMerkleLLSablierMerkleLL
SablierFactoryMerkleLTSablierMerkleLT
SablierFactoryMerkleVCASablierMerkleVCA

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