Files
staking-reward-streamer/docs/deployment.md
r4bbit 07cb570cb3 docs: add deployment steps documentation
This documents the exact steps to deploy the entire staking protocol
including contract verification and configuration of the system.
2025-04-02 18:30:39 +02:00

4.0 KiB

Deployment steps

  1. Deploy StakeManager
MNEMONIC=$YOUR_MNEMONIC forge script scripts/DeployStakeManager.s.sol --rpc-url $RPC_URL --broadcast
  1. Verify StakeManagerProxy

2.1 First, we need to find the implementation address that the proxy points to:

$ cast storage $STAKE_MANAGER_PROXY_ADDRESS 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc --rpc-url $RPC_SN_SEPOLIA

2.2 Then, ABI encode the constructor arguments for TransparentProxy:

$ cast calldata "initialize(address,address)" $OWNER_ADDRESS $SNT_ADDRESS

Where $OWNER is the deployer. This will return the initialization calldata to verify StakeManagerProxy:

2.3 Then, verify the contract:

$ forge verify-contract \
--chain-id 1660990954 \
--num-of-optimizations 10000 \
--watch \
--compiler-version $COMPILER_VERSION \
$PROXY_CONTRACT_ADDRESS \
--rpc-url $RPC_SN_SEPOLIA \
--verifier-url $VERIFIER_URL_SN_SEPOLIA
--verifier blockscout \
--constructor-args $(cast abi-encode "constructor(address,bytes)" $STAKE_MANAGER_IMPL_ADDRESS $INITIALIZE_CALLDATA)
  1. Verify StakeManager
$ forge verify-contract \
--chain-id 1660990954 \
--num-of-optimizations 10000 \
--watch \
--compiler-version $COMPILER_VERSION \
$STAKE_MANAGER_CONTRACT_ADDRESS \
--rpc-url $RPC_SN_SEPOLIA \
--verifier-url $VERIFIER_URL_SN_SEPOLIA
--verifier blockscout
  1. Verify VaultFactory

4.1. Find StakeVault template address

$ cast call $VAULT_FACTORY_ADDRESS "vaultImplementation()(address)" --rpc-url $RPC_SN_SEPOLIA

4.2 Verify the vault factory

$ forge verify-contract \
--chain-id 1660990954 \
--num-of-optimizations 10000 \
--watch \
--compiler-version $COMPILER_VERSION \
$VAULT_FACTORY_CONTRACT_ADDRESS \
--rpc-url $RPC_SN_SEPOLIA \
--verifier-url $VERIFIER_URL_SN_SEPOLIA
--verifier blockscout \
--constructor-args $(cast abi-encode "constructor(address,address,address)" $OWNER_ADDRESS $STAKE_MANAGER_PROXY_CONTRACT_ADDRESS $VAULT_IMPL_ADDRESS)
  1. Deploy Karma Token
$ MNEMONIC=$YOUR_MNEMONIC forge script script/DeployKarma.s.sol --rpc-url $RPC_SN_SEPOLIA --broadcast
  1. Verify Karma Token

6.1 Get Karma implementation address from Karma Proxy:

$ cast storage $KARMA_PROXY_ADDRESS 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc --rpc-url $RPC_SN_SEPOLIA

6.2 Verify Karma Implementation contract

$ forge verify-contract \
--chain-id 1660990954 \
--num-of-optimizations 10000 \
--watch \
--compiler-version $COMPILER_VERSION \
$KARMA_CONTRACT_ADDRESS \
--rpc-url $RPC_SN_SEPOLIA \
--verifier-url $VERIFIER_URL_SN_SEPOLIA
--verifier blockscout
  1. Deploy KarmaNFT
$ MNEMONIC=$YOUR_MNEMONIC KARMA_ADDRESS=$KARMA_CONTRACT_ADDRESS forge script scripts/DeployKarmaNFT.s.sol --rpc-url $RPC_SN_SEPOLIA --broadcast
  1. Verify Karma NFT
$ forge verify-contract \
--chain-id 1660990954 \
--num-of-optimizations 10000 \
--watch \
--compiler-version $COMPILER_VERSION \
$KARMA_NFT_CONTRACT_ADDRESS \
--rpc-url $RPC_SN_SEPOLIA \
--verifier-url $VERIFIER_URL_SN_SEPOLIA
--verifier blockscout \
--constructor-args $(cast abi-encode "constructor(address,address)" $KARMA_CONTRACT_ADDRESS $METADATA_GENERATOR_ADDRESS)
  1. Set reward supplier in StakeManager
$ cast send $STAKE_MANAGER_PROXY_CONTRACT_ADDRESS "setRewardsSupplier(address)" $KARMA_PROXY_ADDRESS --rpc-url $RPC_SN_SEPOLIA --mnemonic $YOUR_MNEMONIC
  1. Add StakeManager as reward distributor to Karma contract
$ cast send $KARMA_PROXY_CONTRACT_ADDRESS "addRewardDistributor(address)" $STAKE_MANAGER_PROXY_CONTRACT_ADDRESS --rpc-url $RPC_SN_SEPOLIA --mnemonic $YOUR_MNEMONIC
  1. Whitelist StakeVault implementation in StakeManager

11.1 First, get the vault's codehash:

$ cast keccak $VAULT_BYTECODE

11.2 Then, set the resulting hash in the stake manager:

$ cast send $STAKE_MANAGER_PROXY_CONTRACT_ADDRESS "addTrustedCodehash(bytes32,bool)" $STAKE_VAULT_CODE_HASH true --rpc-url $RPC_SN_SEPOLIA --mnemonic $YOUR_MNEMONIC