.. | ||
beacon-chain.deploy.yaml | ||
beacon-chain.service.yaml | ||
beacon-config.config.yaml | ||
bootnode.deploy.yaml | ||
bootnode.encrypted_secret.yaml | ||
bootnode.service.yaml | ||
BUILD.bazel | ||
cluster-manager.encrypted_secret.yaml | ||
cluster-manager.yaml | ||
contract-address.yaml | ||
infura.yaml | ||
namespace.yaml | ||
public-api.yaml | ||
README.md | ||
relay.deploy.yaml | ||
relay.encrypted_secret.yaml | ||
relay.service.yaml | ||
ssz-server.yaml | ||
testnet-site.yaml | ||
validator.deploy.yaml |
Minikube setup for Beacon-chain and 8 Validators
Set up Kubernetes and Minikube
Make sure you have kubectl installed
https://kubernetes.io/docs/tasks/tools/install-minikube/
For installing the hypervisor, it's recommended if you're on OS X to use hyperkit, install it here
https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperkit-driver
Configure Hyperkit as your default
minikube config set vm-driver hyperkit
Running the beacon chain and validators in Minikube
Start Minikube and the dashboard
minikube start --memory 4096
minikube dashboard
Set up the beacon-chain config
Deploy a new deposit contract with:
bazel run //contracts/deposit-contract/deployContract -- --httpPath=https://goerli.prylabs.net --privKey=$(cat /path/to/private/key/file) --chainStart=8 --minDeposit=100000 --maxDeposit=3200000 --customChainstartDelay 120
Place the Goerli network deposit contract address from above in k8s/beacon-chain/beacon-config.config.yaml
Apply the namespace and config yamls
cd k8s/
kubectl apply -f priority.yaml
cd beacon-chain/
kubectl apply -f namespace.yaml
kubectl apply -f beacon-config.config.yaml
Edit the beacon-chain.deploy.yaml to prepare it for a local instance
Change the lines 40-53 to:
args:
- --web3provider=ws://goerli.prylabs.com/websocket
#- --verbosity=debug
- --deposit-contract=$(DEPOSIT_CONTRACT_ADDRESS)
- --rpc-port=4000
- --monitoring-port=9090
# - --bootstrap-node=/ip4/$(BOOTNODE_SERVICE_HOST)/tcp/$(BOOTNODE_SERVICE_PORT)/p2p/QmQEe7o6hKJdGdSkJRh7WJzS6xrex5f4w2SPR6oWbJNriw
# - --relay-node=/ip4/35.224.249.2/tcp/30000/p2p/QmfAgkmjiZNZhr2wFN9TwaRgHouMTBT6HELyzE5A3BT2wK
- --p2p-port=5000
- --demo-config
# - --enable-tracing
# - --tracing-endpoint=http://jaeger-collector.istio-system.svc.cluster.local:14268
# - --trace-sample-fraction=1.0
- --datadir=/data
(commenting out the 3 tracing items and the bootstrap/relay nodes, also changing the web3 provider to ws://goerli.prylabs.com/websocket)
Apply the beacon chain yamls to start the beacon-chain
kubectl apply -f beacon-chain.service.yaml
kubectl apply -f beacon-chain.deploy.yaml
Go into the minikube dashboard and set your namespace to "beacon-chain" in the middle of the left side
You should see 3 beacon-chain node replicas
Add your private key into the cluster manger config
Convert a goerli private key with ETH to base64 in a browser js console and set it in k8s/beacon-chain/cluster-manager.encrypted_secret.yaml
.
Edit the cluster-manager.yaml to use the Prylabs Goerli node endpoint
Change lines 55-63 to:
args:
- --deposit-contract=$(DEPOSIT_CONTRACT_ADDRESS)
- --private-key=$(PRIVATE_KEY)
- --rpc=ws://goerli.prylabs.com/websocket
- --port=8000
- --metrics-port=9090
- --deposit-amount=3200000000000000
- --db-path=/data
- --verbose
Edit the validator.deploy.yaml to prepare it for a local instance
Change the lines 20-28 to:
args:
- --keystore-path=/keystore
- --password=nopass
- --datadir=/data
- --beacon-rpc-provider=beacon-chain:4000
- --demo-config
# - --enable-tracing
# - --tracing-endpoint=http://jaeger-collector.istio-system.svc.cluster.local:14268
# - --trace-sample-fraction=1.0
(commenting out the bottom 3)
Apply the cluster manager and validator yamls
kubectl apply -f cluster-manager.encrypted_secret.yaml
kubectl apply -f cluster-manager.yaml
kubectl apply -f validator.deploy.yaml
Check the beacon-chain namespace in the dashboard and you should see 8 validators loading
Minikube common commands
To remove all the containers inside the minikube
kubectl delete -f k8s/beacon-chain/namespace.yaml
To stop the minikube instance
minikube stop
To delete the container
minikube delete