6.5 KiB
Parameter Change Runbook
Overview
This runbook provides procedures for changing QBFT parameters and other network parameters.
QBFT Parameters
Block Period
Current: 2 seconds
Change Procedure:
-
Plan the Change
- Review impact on network performance
- Coordinate with validator operators
- Schedule maintenance window
-
Update Genesis File
# Update blockperiodseconds in genesis.json jq '.config.qbft.blockperiodseconds = 5' config/genesis.json > config/genesis-new.json mv config/genesis-new.json config/genesis.json -
Restart Validators
# Rolling restart of validators kubectl rollout restart statefulset/besu-validator -n besu-network -
Verify Change
# Check block time curl -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest", false],"id":1}' \ http://<rpc-endpoint>
Epoch Length
Current: 30,000 blocks
Change Procedure:
-
Plan the Change
- Review impact on validator set updates
- Coordinate with validator operators
- Schedule maintenance window
-
Update Genesis File
# Update epochlength in genesis.json jq '.config.qbft.epochlength = 50000' config/genesis.json > config/genesis-new.json mv config/genesis-new.json config/genesis.json -
Restart Validators
# Rolling restart of validators kubectl rollout restart statefulset/besu-validator -n besu-network -
Verify Change
# Check current block number curl -X POST -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ http://<rpc-endpoint>
Request Timeout
Current: 10 seconds
Change Procedure:
-
Update Genesis File
# Update requesttimeoutseconds in genesis.json jq '.config.qbft.requesttimeoutseconds = 15' config/genesis.json > config/genesis-new.json mv config/genesis-new.json config/genesis.json -
Restart Validators
kubectl rollout restart statefulset/besu-validator -n besu-network
Gas Limit
Current: ~30,000,000
Change Procedure:
-
Update Genesis File
# Update gasLimit in genesis.json jq '.gasLimit = "0x3d0900"' config/genesis.json > config/genesis-new.json mv config/genesis-new.json config/genesis.json -
Restart All Nodes
kubectl rollout restart statefulset/besu-validator -n besu-network kubectl rollout restart statefulset/besu-sentry -n besu-network kubectl rollout restart statefulset/besu-rpc -n besu-network
Validator Set Changes
Add Validator
-
Generate Validator Keys
./scripts/key-management/generate-validator-keys.sh 1 -
Update Genesis File
- Add validator address to extraData
- Regenerate genesis file
-
Update Static Nodes
- Add validator enode to static-nodes.json
-
Deploy Validator
- Update StatefulSet replica count
- Deploy new validator pod
-
Verify Validator
- Check validator is producing blocks
- Verify validator is in validator set
Remove Validator
-
Plan Removal
- Coordinate with validator operator
- Schedule maintenance window
-
Update Genesis File
- Remove validator address from extraData
- Regenerate genesis file
-
Update Static Nodes
- Remove validator enode from static-nodes.json
-
Remove Validator Pod
kubectl scale statefulset/besu-validator --replicas=3 -n besu-network -
Verify Removal
- Check validator set
- Verify network is still producing blocks
Network Parameter Changes
Chain ID
Current: 138
Warning: Changing Chain ID requires network restart and may break compatibility.
Change Procedure:
-
Update Genesis File
# Update chainId in genesis.json jq '.config.chainId = 139' config/genesis.json > config/genesis-new.json mv config/genesis-new.json config/genesis.json -
Update Configuration Files
- Update chain ID in all configuration files
- Update deployment scripts
- Update documentation
-
Restart All Nodes
kubectl rollout restart statefulset/besu-validator -n besu-network kubectl rollout restart statefulset/besu-sentry -n besu-network kubectl rollout restart statefulset/besu-rpc -n besu-network
Rollback Procedures
Rollback Parameter Change
-
Restore Previous Genesis File
# Restore from backup cp config/genesis.json.backup config/genesis.json -
Restart Nodes
kubectl rollout restart statefulset/besu-validator -n besu-network -
Verify Rollback
- Check network is producing blocks
- Verify parameters are correct
Testing Parameter Changes
Test Environment
-
Deploy to Test Environment
# Deploy to test cluster kubectl apply -f k8s/base/ -n besu-network-test -
Test Parameter Changes
- Apply parameter changes
- Verify network operation
- Test edge cases
-
Monitor Performance
- Check block production
- Monitor network performance
- Verify consensus
Production Deployment
-
Schedule Maintenance Window
- Notify stakeholders
- Coordinate with validators
- Plan rollback procedure
-
Apply Changes
- Update genesis file
- Restart nodes
- Verify changes
-
Monitor Network
- Check block production
- Monitor performance
- Verify consensus
Best Practices
-
Test in Test Environment First
- Always test parameter changes in test environment
- Verify network operation
- Test edge cases
-
Coordinate with Validators
- Notify all validators before changes
- Schedule maintenance windows
- Plan rollback procedures
-
Monitor Network
- Monitor block production
- Check network performance
- Verify consensus
-
Document Changes
- Document all parameter changes
- Update configuration files
- Update documentation
-
Have Rollback Plan
- Always have rollback plan
- Test rollback procedures
- Keep backups
Contacts
- Network Operators: operators@d-bis.org
- Validators: validators@d-bis.org
- Emergency: +1-XXX-XXX-XXXX