msgSigAgg
indicates that BLS threshold aggregation of sufficient partial signatures failed. This indicates inconsistent signed data. This indicates a bug in charon as it is unexpected.
+ Existing private key lock file found, another charon instance may be running on your machine
error
+ --private-key-file-lock
option in Charon, it checks for a special file called the private key lock file. This file has the same name as the ENR private key file but with a .lock
extension.
+ If the private key lock file exists and is not older than 5 seconds, Charon won't run. It doesn't allow running multiple Charon instances with the same ENR private key.
+ If the private key lock file has a timestamp older than 5 seconds, Charon will replace it and continue with its work.
+ If you're sure that no other Charon instances are running, you can delete the private key lock file.
+ New Transaction
then Transaction Builder
to create a new custom transaction32
in ETHdeposit-data.json
to fill the required data : pubkey
,withdrawal credentials
,signature
,deposit_data_root
. Make sure to prefix the input with 0x
to format them in bytesAdd transaction
Create Batch
Send Batch
, you can click on Simulate to check if the transaction will execute successfully
+ npm install --save @obolnetwork/obol-sdk
+
+
+ yarn add @obolnetwork/obol-sdk
+
+
- docker run --rm -v "$(pwd):/opt/charon" obolnetwork/charon:v0.16.0 create cluster --name="mycluster" --withdrawal-addresses="{'${WITHDRAWAL_ADDR}'}" --fee-recipient-addresses="{'${FEE_RECIPIENT_ADDR}'}" --nodes="{'${NB_NODES}'}"
+ docker run --rm -v "$(pwd):/opt/charon" obolnetwork/charon:v0.17.0 create cluster --name="mycluster" --withdrawal-addresses="{'${WITHDRAWAL_ADDR}'}" --fee-recipient-addresses="{'${FEE_RECIPIENT_ADDR}'}" --nodes="{'${NB_NODES}'}" --network goerli --num-validators=1
diff --git a/docs/int/quickstart/alone/test-locally.md b/docs/int/quickstart/alone/test-locally.md
index f1c309d439..b7fd4ecce5 100644
--- a/docs/int/quickstart/alone/test-locally.md
+++ b/docs/int/quickstart/alone/test-locally.md
@@ -60,10 +60,10 @@ The default cluster consists of:
FEE_RECIPIENT_ADDR=Not enough time for a discovery seach
error
Error opening relay circuit: NO_RESERVATION
error
- Error opening relay circuit NO_RESERVATION (204)
indicates the peer isn't connected to the relay, so the the charon
+ Error opening relay circuit NO_RESERVATION (204)
indicates the peer isn't connected to the relay, so the charon
client cannot connect to the peer via the relay. That might be because the peer is offline or the
peer is configured to connect to a different relay.
Server (default)
to Browser
. Press "Save & Test". It should fail. .charon/charon-enr-private-key
, and should be kept secure, and not checked into version control.
+ enr:-JG4QAgAOXjGFcTIkXBO30aUMzg2YSo1CYV0OH8Sf2s7zA2kFjVC9ZQ_jZZItdE8gA-tUXW-rWGDqEcoQkeJ98Pw7GaGAYFI7eoegmlkgnY0gmlwhCKNyGGJc2VjcDI1NmsxoQI6SQlzw3WGZ_VxFHLhawQFhCK8Aw7Z0zq8IABksuJEJIN0Y3CCPoODdWRwgj6E
+ cd
to the directory where your private keys are located (ex: cd /path/to/charon/enr/private/key
)
+ docker run --rm -v "$(pwd):/opt/charon" obolnetwork/charon:latest enr
. This prints the ENR on your screen. charon-enr-private-key
? private-key
in a secure location (ex: cloud storage, USB Flash drive etc.) charon-enr-private-key
is generated inside a hidden folder .charon
. ls -al
in your terminal. ~/Downloads
folder for easy access by running cp .charon/charon-enr-private-key ~/Downloads
. This step maybe a bit different for windows. macOS
, press Cmd + Shift + .
to view the .charon
folder in the finder application. Failed to request attester duties
error
+ Not enough time for a discovery seach
error
+ Error communicating with Beacon Node API
& Error while connecting to beacon node event stream
+ Attester failed in consensus component
error
+ docker logs charon-distributed-validator-node-charon-1 2>&1 | grep 'absent'
+ Load private key
error
+ charon-distributed-validator-node
+ Failed to confirm node connection
error
+ Reserve relay circuit: reservation failed
error
+ RESERVATION_REFUSED
is returned by the libp2p relay when some maximum limit has been reached.
+ This is most often due to "maximum reservations per IP/peer".
+ This is when your charon node is restarting or in some error loop and constantly attempting to create new relay reservations reaching the maximum.
+ Error opening relay circuit: NO_RESERVATION
error
+ Error opening relay circuit NO_RESERVATION (204)
indicates the peer isn't connected to the relay, so the the charon
+ client cannot connect to the peer via the relay. That might be because the peer is offline or the
+ peer is configured to connect to a different relay.
+ Couldn't fetch duty data from the beacon node
error
+ msgFetcher
indicates a duty failed in the fetcher component when it failed to fetch the required data from the beacon node API. This indicates a problem with the upstream beacon node.
+ Couldn't aggregate attestation due to failed attester duty
error
+ msgFetcherAggregatorNoAttData
indicates an attestation aggregation duty failed in the fetcher component since it couldn't fetch the prerequisite attestation data. This indicates the associated attestation duty failed to obtain a cluster agreed upon value.
+ Couldn't aggregate attestation due to insufficient partial v2 committee subscriptions
error
+ msgFetcherAggregatorZeroPrepares
indicates an attestation aggregation duty failed in the fetcher component since it couldn't fetch the prerequisite aggregated v2 committee subscription. This indicates the associated prepare aggregation duty failed due to no partial v2 committee subscription submitted by the cluster validator clients.
+ Couldn't aggregate attestation due to failed prepare aggregator duty
error
+ msgFetcherAggregatorFailedPrepare
indicates an attestation aggregation duty failed in the fetcher component since it couldn't fetch the prerequisite aggregated v2 committee subscription. This indicates the associated prepare aggregation duty failed.
+ Couldn't propose block due to insufficient partial randao signatures
error
+ msgFetcherProposerFewRandaos
indicates a block proposer duty failed in the fetcher component since it couldn't fetch the prerequisite aggregated RANDAO. This indicates the associated randao duty failed due to insufficient partial randao signatures submitted by the cluster validator clients.
+ Couldn't propose block due to zero partial randao signatures
error
+ msgFetcherProposerZeroRandaos
indicates a block proposer duty failed in the fetcher component since it couldn't fetch the prerequisite aggregated RANDAO. This indicates the associated randao duty failed due to no partial randao signatures submitted by the cluster validator clients.
+ Couldn't propose block due to failed randao duty
error
+ msgFetcherProposerZeroRandaos
indicates a block proposer duty failed in the fetcher component since it couldn't fetch the prerequisite aggregated RANDAO. This indicates the associated randao duty failed.
+ Consensus algorithm didn't complete
error
+ msgConsensus
indicates a duty failed in consensus component. This could indicate that insufficient honest peers participated in consensus or p2p network connection problems.
+ Signed duty not submitted by local validator client
error
+ msgValidatorAPI
indicates that partial signature were never submitted by the local validator client. This could indicate that the local validator client is offline, or has connection problems with charon, or has some other problem. See validator client logs for more details.
+ Bug: partial signature database didn't trigger partial signature exchange
error
+ msgParSigDBInternal
indicates a bug in the partial signature database as it is unexpected.
+ No partial signatures received from peers
error
+ msgParSigEx
indicates that no partial signature for the duty was received from any peer. This indicates all peers are offline or p2p network connection problems.
+ Insufficient partial signatures received, minimum required threshold not reached
error
+ msgParSigDBThreshold
indicates that insufficient partial signatures for the duty was received from peers. This indicates problems with peers or p2p network connection problems.
+ Bug: threshold aggregation of partial signatures failed due to inconsistent signed data
error
+ msgSigAgg
indicates that BLS threshold aggregation of sufficient partial signatures failed. This indicates inconsistent signed data. This indicates a bug in charon as it is unexpected.
+ Existing private key lock file found, another charon instance may be running on your machine
error
+ --private-key-file-lock
option in Charon, it checks for a special file called the private key lock file. This file has the same name as the ENR private key file but with a .lock
extension.
+ If the private key lock file exists and is not older than 5 seconds, Charon won't run. It doesn't allow running multiple Charon instances with the same ENR private key.
+ If the private key lock file has a timestamp older than 5 seconds, Charon will replace it and continue with its work.
+ If you're sure that no other Charon instances are running, you can delete the private key lock file.
+ keystore file
error Keystore file /opt/charon/validator_keys/keystore-0.json.lock already in use.
This can be solved by deleting the file(s) ending with .lock
in the folder .charon/validator_keys
. It is caused by an unsafe shut down of Teku (usually by double pressing `Ctrl+C` to shutdown containers faster).
+ Server (default)
to Browser
. Press "Save & Test". It should fail. Server (default)
and press "Save & Test". You should be presented with a green success icon saying "Data source is working" and you can return to the dashboard page. N/A
& No data
in validator info panel
+ Unauthorized: authentication error: invalid token
+ permission denied
errors? sudo
, if you haven't setup docker to be run as a non-root user. .charon
folder with the commands: mkdir .charon
(if it doesn't already exist)
+ sudo chmod -R 666 .charon
+ docker compose up
+ CHARON_BEACON_NODE_ENDPOINTS
in the docker-compose(./docker-compose.yml#84).
+ plugin "loki" not found
error?
+ Error response from daemon: error looking up logging plugin loki: plugin "loki" not found
.docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
+ Resolve IP of p2p external host flag: lookup replace.with.public.ip.or.hostname: no such host
{" "} error
+ replace.with.public.ip.or.hostname
in the relay/docker-compose.yml with your real public IP or DNS hostname.
+ Timeout resolving bootnode ENR: context deadline exceeded
{" "} error
+
+ npm install --save @obolnetwork/obol-sdk
+
+
+ yarn add @obolnetwork/obol-sdk
+
+
+
+ WITHDRAWAL_ADDR=[ENTER YOUR WITHDRAWAL ADDRESS HERE]
+
+ FEE_RECIPIENT_ADDR=[ENTER YOUR FEE RECIPIENT ADDRESS HERE]
+
+ NB_NODES=[ENTER AMOUNT OF DESIRED NODES]
+
+
+ Then, run this command to create all the key shares and cluster artifacts locally:
+
+ docker run --rm -v "$(pwd):/opt/charon" obolnetwork/charon:v0.17.0 create cluster --name="mycluster" --withdrawal-addresses="{'${WITHDRAWAL_ADDR}'}" --fee-recipient-addresses="{'${FEE_RECIPIENT_ADDR}'}" --nodes="{'${NB_NODES}'}" --network goerli --num-validators=1
+
+
+ Create a distributed validator alone
. Follow the steps to configure your DV cluster.
+ Withdrawal Address
that will receive the validator effective balance at exit and when balance skimming occurs.Fee Recipient Address
to receive MEV rewards (if enabled), and block proposal priority fees.config_hash
. This is a hashed representation of the details of this cluster, to ensure everyone is agreeing to an identical setup.operator_config_hash
. This is your acceptance of the terms as a participating node operator.ENR
. Signing your ENR authorises the corresponding private key to act on your behalf in the cluster.config_hash
. This is a hashed representation of the details of this cluster, to ensure everyone is agreeing to an identical setup.
+
+ {String.raw`docker exec -ti charon-distributed-validator-node-teku-1 /opt/teku/bin/teku voluntary-exit \
+ --beacon-node-api-endpoint="http://charon:3600/" \
+ --confirmation-enabled=false \
+ --validator-keys="/opt/charon/validator_keys:/opt/charon/validator_keys" \
+ --epoch=162304`}
+
+
+ /home/user/data/charon
to the newly created /home/user/data/wd
directory.
+ /home/user/data/wd/secrets
directory, it:
+ {String.raw`--validator=`}
to the command
variable.nimbus_beacon_node
with the following arguments:deposits exit
: Exits validators$command
: The generated command string from the loop.--epoch=162304
: The epoch upon which to submit the voluntary exit.--rest-url=http://charon:3600/
: Specifies the Charon host:port
--data-dir=/home/user/charon/
: Specifies the Keystore path
which has all the validator keys. There will be a secrets
and a validators
folder inside it.
+
+ {String.raw`docker exec -it charon-distributed-validator-node-nimbus-1 /bin/bash -c '\
+
+ mkdir /home/user/data/wd
+ cp -r /home/user/data/charon/ /home/user/data/wd
+
+ command=""; \
+ for file in /home/user/data/wd/secrets/*; do \
+ filename=$(basename "$file" | cut -d. -f1); \
+ command+=" --validator=$filename"; \
+ done; \
+
+/home/user/nimbus_beacon_node deposits exit $command --epoch=162304 --rest-url=http://charon:3600/ --data-dir=/home/user/data/wd/'`}
+
+
+ node /usr/app/packages/cli/bin/lodestar validator voluntary-exit
with the arguments:
+ --beaconNodes="http://charon:3600"
: Specifies the Charon host:port
.--data-dir=/opt/data
: Specifies the folder where the key stores were imported.--exitEpoch=162304
: The epoch upon which to submit the voluntary exit.--network=goerli
: Specifies the network.--yes
: Skips confirmation prompt.
+
+ {String.raw`docker exec -it charon-distributed-validator-node-lodestar-1 /bin/sh -c 'node /usr/app/packages/cli/bin/lodestar validator voluntary-exit --beaconNodes="http://charon:3600" --dataDir=/opt/data --exitEpoch=162304 --network=goerli --yes'`}
+
+
+
+
+ cd charon-distributed-validator-node
+
+
+
+
+ cd charon-distributed-validator-cluster
+
+
+