The objective of this effort is to create the first automatically reset ephemeral Ethereum testnet which would serve as a cross-client testing network without issues stemming from a long-term running history.
An ephemeral testnet is a single network that rolls back to the genesis after a set period of time. This kind of network is focused on short term and heavy testing usecases. The purpose of this is also to avoid problems like insufficient testnet funds, inactive validators, state bloat, and similar issues faced by long-running testnets.
More resources:
Current value | |
---|---|
Network ID | |
Iteration number | |
Rollback period | 28 days |
Next rollback |
https://ephemery.dev/ (add RPC with single click)
- https://rpc.bordel.wtf/test (geth)
- https://otter.bordel.wtf/erigon
- https://eth.ephemeral.zeus.fyi (lighthouse-geth, full beacon)
- https://checkpointz.bordel.wtf/
- https://ephemery.beaconstate.ethstaker.cc/
- https://checkpoint-sync.ephemery.ethpandaops.io/
At this moment, official client releases mostly don't include predefined Ephemery testnet. To connect the client to Ephemery network, it has to be done manualy.
Download latest Ephemery parameters from its release and point your client to it like with any custom network.
wget https://github.com/ephemery-testnet/ephemery-genesis/releases/download/ephemery-111/testnet-all.tar.gz
mkdir ephemery && tar -xzf testnet-all.tar.gz -C ephemery
Example setup for geth and lighthouse. First initialize geth genesis and then run clients with configuration pointing to downloaded testnet files and variables:
geth --datadir geth-ephemery init ephemery/genesis.json
source ephemery/nodevars_env.txt
geth --datadir geth-ephemery --authrpc.jwtsecret=/tmp/jwt --bootnodes $BOOTNODE_ENODE
lighthouse bn -t ephemery --execution-endpoint http://localhost:8551 --execution-jwt=/tmp/jwt --boot-nodes=$BOOTNODE_ENR_LIST
Lodestar supports Ephemery natively without extra arguments. Docker setups, services and more deployment options can be found in Ephemery scripts repo.
This connects your fclient to the current Ephemery iteration. To connect to the latest iteration of the network after the client already ran a previous one, you need to use a different datadir or delete the existing one.
To keep up with the reset and run your node constantly switching to latest network, e.g. for running public infrastracture, use retention script.
The network is currently in its early stages, it runs as a small network with a manual reset mechanism. Each reset changes network parameters and requires a new genesis. Setup and reset mechanism is coordinated via this repository. Each release contains values for the new release.
To run a node and participate in the network, use setup from this repository. There are various deployment options, you can either use a Docker setup, cloud-init script or manually modify the retention.sh
script to suit your system and run it as a cron job. There are also instructions for manually setting up a node.
Checkout current version of specs for client implementation and feel free to provide feedback.
Contribute by participating in the network and identifying issues caused by the ephemeral setup. You can help a lot by testing features and infrastracture which might break during the reset. Here are few ideas for general testing:
- Run a node, especially client which is not tested yet
- Add validators, monitor attestations, proposed blocks, slashing issues
- Use your wallet, find out how it behaves after the reset, how it handles different network ID from same RPC
- Deploy dapps, try your favorite developer tooling
- Run infrastracture, explorers, etc
- Reach out with your own ideas for testing
Feel free to open issue in this repository with your findings and ideas. And feel free to join the discussion in Matrix room.
Ephemeral testnet needs a lot of research and development to be stable and widely usable. Here is a simple roadmap overview, for details on current tasks, check the tracking issue.
- Proposal and initial discussion
- Private network with manual reset mechanism
- Using external script to reset the network
- A small private chain was created to identify feasibility issues and to stabilize the devops setup.
- Public network with manual reset mechanism
- Stable network open to the public and wider debugging, simplifing node/validator setup
- Creating general specifications for automatically reset ephemeral testnet
- Discussion about implementation details and specifications based on data gathered from the network with manual resets
- Specs draft
- EIP in review
- Validating specs in EIP
- Automatic onchain infrastracture
- Refuding validators
- Deploying primitives for dapps
- Preliminary client implementation work
- Single client pair, testing on private/public chain
- Improving and finishing specs
- Cross client implementation
- Testing all client combos
- ACD discussion between client teams