End-to-end framework to test Ethereum network clients.
$ go build -o viewpoint cmd/main.go
Start the server:
$ viewpoint server --name test [--genesis-time 1m] [--num-genesis-validators 10] [--min-genesis-validator-count 10] [--num-tranches 1]
2022-07-15T20:48:31.093+0200 [INFO] viewpoint: eth1 server deployed: addr=http://127.0.0.1:8001
2022-07-15T20:48:31.093+0200 [INFO] viewpoint: deposit contract deployed: addr=0xB96198679b67b455FD654aEfC91bF31DC9C0886D
2022-07-15T20:48:35.017+0200 [INFO] viewpoint: GRPC Server started: addr=localhost:5555
The server command starts the Viewpoint agent which handles the lifecycle of an Ethereum (post-merge) network. At startup, it generates an initial set of validator accounts (num-genesis-validators), splits them in tranches (num-tranches) and creates a genesis.ssz file. Each validator client will own a single tranche of accounts.
The deployment of the nodes is done using Docker containers which are stopped once the server process is over. The agent creates an e2e-<name> folder in the root directory where all the metadata, specs and node logs are stored.
Now, lets deploy a validator client for the network.
$ viewpoint node deploy validator --type [prysm|lighthouse|teku] --tranche 0 --beacon --beacon-count 2
The validator will use the accounts in the tranche 0 (the only one created), which is enough to start the network once the genesis time is reached.
The node deploy validator command includes the --beacon and --beacon-count flags as a convenience method to pre-deploy a set of beacon nodes (with the same consensus client) to which the validator can connect to join the network.
At any point we can deploy another beacon node with:
$ viewpoint node deploy beacon --type [prysm|lighthouse|teku]
$ viewpoint server
The server command starts the Viewpoint agent.
Flags:
name(test): Name of the execution round.num-genesis-validators(10): Number of active validator accounts at genesis.min-genesis-validator-count(10): Number of required active validators to start the chain at genesis.genesis-time(1m): Amount of time from now when the genesis starts.num-tranches(1): Number of tranches. It has to be an exact multiple ofgenesis-validator-count.altair(null): Enable theAltairhard fork at a given epoch. Disabled by default.
$ viewpoint deposit create
The deposit create command creates a new tranche with num-validators. For each one, it sends a deposit transaction to the deposit smart contract on the execution node (Geth). Eventually, those accounts will be active on the consensus layer.
Flags:
num-validators: Number of accounts for the tranche.
$ viewpoint deposit list
The deposit list command lists all the tranches.
$ viewpoint deploy beacon
The deploy beacon command deploys multiple beacon node clients. The nodes use a bootnode to discover each other.
Flags:
type: Client type of the beacon node (Prysm,LighthouseorTeku).count(1): Number of beacon nodes to deploy.repo: Override to the default Docker repository for the client.tag: Override for the default Docker image tag for the client.
$ viewpoint deploy validator
The deploy validator command deploys a validator client.
Flags:
type: Client type of the validator (Prysm,LighthouseorTeku).num-validators(0): If set, Viewpoint will create a new tranche ofnum-validatorsaccounts (with the deposits).tranche(0): Index of the tranche to use by the validator. It does not take effect ifnum-validatorsis set.beacon(false): If enabled, pre-deploy a set of beacon nodes to which the validator will connect.beacon-count(1): Number of beacon nodes to deploy if--beaconenabled.repo: Override to the default Docker repository for the client.tag: Override for the default Docker image tag for the client.
$ viewpoint node list
The node list command lists all the running nodes.
$ viewpoint node status <name>
The node status command queries the state of a specific node name.