Custom Deployments
Want to get Sablier deployed on your chain? If you meet the requirements listed below, fill out this form and our team will get back to you.
Requirements
The Sablier Interface currently supports only The Graph and Envio indexer services. If you use a different indexer, you can schedule a call here to discuss integration.
- GraphQL indexer: either The Graph or Envio
- Blockchain explorer with instructions for verifying contracts, e.g., Etherscan
- Functional JSON-RPC endpoint, ideally listed on ChainList
- Bridge, and instructions for how to obtain gas tokens (e.g., ETH) and ERC-20 tokens to the target chain
- Support for Shanghai EVM version or later
- Support for Solidity v0.8.22 or later
Contracts
- Foundry's Deterministic Deployer contract at
0x4e59b44847b379578588920cA78FbF26c0B4956C - Multicall3 contract at
0xcA11bde05977b3631167028862bE2a173976CA11
Making a Deployment
The rest of the guide applies ONLY IF you have been granted a BUSL license to deploy the protocol. Otherwise, this section is not relevant to you.
Prerequisites
- Check if the deployments are not already made: Airdrops, Flow, Lockup
- Follow the contributing guides for Airdrops, Flow and Lockup.
- RPC endpoint, e.g., a paid Infura or Alchemy account
- Have enough gas tokens (e.g., ETH) in your deployer account
- Have an Etherscan API key (for source code verification)
Comptroller Deployment
Step 1: Clone the EVM Utils repo and checkout to the v1.0.0 tag
git clone -b v1.0.0 git@github.com:sablier-labs/evm-utils.git
cd evm-utils
bun install --frozen-lockfile
Step 2: Create an .env file
touch .env
Add the following variables to .env file:
ETH_FROM="DEPLOYER ADDRESS"
ETHERSCAN_API_KEY="EXPLORER API KEY"
PRIVATE_KEY="PRIVATE KEY OF DEPLOYER ADDRESS"
RPC_URL="RPC ENDPOINT URL"
VERIFIER_URL="EXPLORER VERIFICATION URL"
Load the environment variables into your shell:
source .env
Step 3: Run the following deployment command
FOUNDRY_PROFILE=optimized \
forge script scripts/solidity/DeployDeterministicComptrollerProxy.s.sol:DeployDeterministicComptrollerProxy \
--broadcast \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--sig "run()" \
--etherscan-api-key $ETHERSCAN_API_KEY \
--verifier "etherscan" \
--verify \
-vvv
The above command works for etherscan equivalent explorers. If the chain uses a custom explorer, modify the verifier arguments according to forge script documentation. You should also refer to the forge script documentation for different wallet options such as mnemonic or hardware device.
Step 4: Update the EVM Utils repository
Add the chain ID of your newly deployed chain to the ChainId library in the
EVM Utils repo.
Then, bump the EVM Utils version in each protocol repository's package.json file (e.g.,
Lockup,
Flow,
Airdrops).
Lockup Deployment
Step 1: Clone the Lockup repo and checkout to the v3.0.1 tag
git clone -b v3.0.1 git@github.com:sablier-labs/lockup.git
cd lockup
bun install --frozen-lockfile
Step 2: Create an .env file
touch .env
Add the following variables to .env file:
ETH_FROM="DEPLOYER ADDRESS"
ETHERSCAN_API_KEY="EXPLORER API KEY"
PRIVATE_KEY="PRIVATE KEY OF DEPLOYER ADDRESS"
RPC_URL="RPC ENDPOINT URL"
VERIFIER_URL="EXPLORER VERIFICATION URL"
Load the environment variables into your shell:
source .env
Step 3: Run the following deployment command
FOUNDRY_PROFILE=optimized \
forge script scripts/solidity/DeployDeterministicProtocol.s.sol:DeployDeterministicProtocol \
--broadcast \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--sig "run()" \
--etherscan-api-key $ETHERSCAN_API_KEY \
--verifier "etherscan" \
--verify \
-vvv
The above command works for etherscan equivalent explorers. If the chain uses a custom explorer, modify the verifier arguments according to forge script documentation. You should also refer to the forge script documentation for different wallet options such as mnemonic or hardware device.
Merkle Airdrops Deployment
Step 1: Clone the Merkle Airdrops repo and checkout to v2.0.1 tag
git clone -b v2.0.1 git@github.com:sablier-labs/airdrops.git
cd airdrops
bun install --frozen-lockfile
Step 2: Create an .env file
touch .env
Add the following variables to .env file:
ETH_FROM="DEPLOYER ADDRESS"
ETHERSCAN_API_KEY="EXPLORER API KEY"
PRIVATE_KEY="PRIVATE KEY OF DEPLOYER ADDRESS"
RPC_URL="RPC ENDPOINT URL"
VERIFIER_URL="EXPLORER VERIFICATION URL"
Load the environment variables into shell:
source .env
Step 3: Run the following command to deploy all merkle airdrop contracts
FOUNDRY_PROFILE=optimized \
forge script scripts/solidity/DeployDeterministicFactories.s.sol:DeployDeterministicFactories \
--broadcast \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--sig "run()" \
--etherscan-api-key $ETHERSCAN_API_KEY \
--verifier "etherscan" \
--verify \
-vvv
The above command works for etherscan equivalent explorers. If the chain uses a custom explorer, modify the verifier arguments according to forge script documentation. You should also refer to the forge script documentation for different wallet options such as mnemonic or hardware device.
Flow Deployment
Step 1: Clone the Flow repo and checkout to v2.0.0 tag
git clone -b v2.0.0 git@github.com:sablier-labs/flow.git
cd flow
bun install --frozen-lockfile
Step 2: Create an .env file
touch .env
Add the following variables to .env file:
ETH_FROM="DEPLOYER ADDRESS"
ETHERSCAN_API_KEY="EXPLORER API KEY"
PRIVATE_KEY="PRIVATE KEY OF DEPLOYER ADDRESS"
RPC_URL="RPC ENDPOINT URL"
VERIFIER_URL="EXPLORER VERIFICATION URL"
Load the environment variables into your shell:
source .env
Step 3: Run the following deployment command
FOUNDRY_PROFILE=optimized \
forge script scripts/solidity/DeployDeterministicProtocol.s.sol:DeployDeterministicProtocol \
--broadcast \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--sig "run()" \
--etherscan-api-key $ETHERSCAN_API_KEY \
--verifier "etherscan" \
--verify \
-vvv
The above command works for etherscan equivalent explorers. If the chain uses a custom explorer, modify the verifier arguments according to forge script documentation. You should also refer to the forge script documentation for different wallet options such as mnemonic or hardware device.
List your deployments
After the contracts are deployed, you can submit a PR in the SDK repo by including the following details:
- Add the broadcast files (JSON) to deployments directory.
- Add the deployment addresses to the following files: