mirror of
https://github.com/vacp2p/staking-reward-streamer.git
synced 2026-01-07 22:43:53 -05:00
This documents the exact steps to deploy the entire staking protocol including contract verification and configuration of the system.
4.0 KiB
4.0 KiB
Deployment steps
- Deploy StakeManager
MNEMONIC=$YOUR_MNEMONIC forge script scripts/DeployStakeManager.s.sol --rpc-url $RPC_URL --broadcast
- 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)
- 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
- 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)
- Deploy Karma Token
$ MNEMONIC=$YOUR_MNEMONIC forge script script/DeployKarma.s.sol --rpc-url $RPC_SN_SEPOLIA --broadcast
- 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
- Deploy KarmaNFT
$ MNEMONIC=$YOUR_MNEMONIC KARMA_ADDRESS=$KARMA_CONTRACT_ADDRESS forge script scripts/DeployKarmaNFT.s.sol --rpc-url $RPC_SN_SEPOLIA --broadcast
- 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)
- 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
- Add
StakeManageras reward distributor toKarmacontract
$ cast send $KARMA_PROXY_CONTRACT_ADDRESS "addRewardDistributor(address)" $STAKE_MANAGER_PROXY_CONTRACT_ADDRESS --rpc-url $RPC_SN_SEPOLIA --mnemonic $YOUR_MNEMONIC
- Whitelist
StakeVaultimplementation inStakeManager
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