Exemple de docker-compose (pour Medalla)
Très très très inspiré de ça : https://github.com/stefa2k/prysm-docker-compose
version: "3.6"
x-logging: &logging
logging:
driver: "json-file"
options:
max-file: "10"
max-size: "100m"
services:
medalla-prysm-beacon:
stop_grace_period: 1m
container_name: medalla-prysm-beacon
image: gcr.io/prysmaticlabs/prysm/beacon-chain:${PRYSM_DOCKER_TAG}
hostname: medalla-prysm-beacon
command: --config-file=/config/beacon.yaml
# --p2p-max-peers=1000
ports:
- 4000:4000
- 13000:13000/tcp
- 12000:12000/udp
volumes:
- ./config/beacon.yaml:/config/beacon.yaml:ro
- ${VOLUMES_PATH}/prysm/beacon:/data
<<: *logging
medalla-prysm-validator:
stop_grace_period: 1m
tty: true
stdin_open: true
container_name: medalla-prysm-validator
image: gcr.io/prysmaticlabs/prysm/validator:${PRYSM_DOCKER_TAG}
hostname: medalla-prysm-validator
depends_on:
- medalla-prysm-beacon
command: --config-file=/config/validator.yaml
volumes:
- ./config/validator.yaml:/config/validator.yaml:ro
- ${VOLUMES_PATH}/prysm/validator:/wallet
<<: *logging
# I use a custom defined network
networks:
default:
external:
name: eth_net
Les fichiers de config :
beacon.yaml
############################################################
##
## Read up on parameters on
## https://docs.prylabs.network/docs/prysm-usage/parameters/
##
############################################################
datadir: /data
###############
# Base settings
medalla: true
accept-terms-of-use: true
# p2p-max-peers: 1000
#######################
# Connectivity settings
p2p-host-ip: ""
p2p-host-dns: ""
rpc-host: 0.0.0.0
monitoring-host: 0.0.0.0
# disable scan of local network
p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"]
# changing this also needs to be changed in docker-compose.yaml !
p2p-tcp-port: 13000
# enable db backup endpoint
enable-db-backup-webhook: true
##############################
# Connection to eth1 chain container
http-web3provider: http://goerlichain-hostname:8546
web3provider: ws://goerlichain-hostname:8546
validator.yaml :
############################################################
##
## Read up on parameters on
## https://docs.prylabs.network/docs/prysm-usage/parameters/
##
############################################################
##############
# Connectivity
beacon-rpc-provider: prysm-beacon-hostname:4000
monitoring-host: 0.0.0.0
##############
# Base settings
medalla: true
accept-terms-of-use: true
#####################################
# Validator accounts & key management
wallet-dir: /wallet
###########
# Fun Stuff
graffiti: "My funky graffiti !"
#############
# Performance
dev: true
block-batch-limit: 512
head-sync: true
Usage général
Pour exécuter une instance du validateur pour gérer les fichiers (en adaptant les chemins de volumes) :
docker run --rm -it -v ./config/validator.yaml:/config/validator.yaml -v ${VOLUMES_PATH}/testnets/medalla/prysm/validator:/wallet --config-file=/config/validator.yaml
On peut ensuite choisir les commandes Prysm ; par exemple :
help
, qui affiche l’aide
accounts
wallet
On peut spécifier des drapeaux à la suite de cette commande, mais ils doivent être placés après les commandes de prysm.
Dans ma configuration, je ne sauvegarde le mot de passe nul part sur le disque ; il faut donc le fournir au lancement du validateur ; je recommande donc la comande suivante pour démarrer le validateur :
docker-compose up -d && docker attach medalla-prysm-validator
, puis quitter avec Ctrl+P - Ctrl+Q.
Pour lire les logs de la beacon chain, et pouvoir les filtrer par exemple via grep, il faut rediriger la sortie d’erreur vers la sortie standard :
docker logs medalla-prysm-beacon 2>&1 | grep Synced
wallet
Le wallet représente l’ensemble des fichiers gérés par Prysm. On a un seul wallet à la fois. Il peut être de type “importé” ou déterministe (“HD”), ou avec signature distante, mais je ne traite pas ce cas ici.
Un wallet HD va recréer les clés en fonction de la graine fournie/générée ; C’est pratique, mais le validateur (exposé en permanence à Internet) est en possession de la graine, c’est à dire de la possibilité d’accéder aux clés de validations, mais également aux clés de retrait qui permettent de récupérer l’ETH2 ; d’où le risque de sécurité.
Les fichiers seront stockés dans le dossier “derived”.
Un wallet importé va pouvoir traiter, 1 par 1, les fichiers fournis via la command import
(voir la section accounts). On peut donc générer nos clés de manière externe (par exemple via eth2-deposit-cli, (ou via ethdo ?)), et n’exposer que les clés de validation, d’où la sécurité augmentée.
Les fichiers seront stockés dans le dossier “direct”.
Si les dossiers “derived” et “direct” existent tous les 2, le validateur ne démarrera pas.
Les commandes :
wallet create
: permet de créer un nouveau wallet, en choisissant son type ; échouera si un wallet est déjà présent à l’emplacement indiqué
edit-config
: permet de modifier la configuration d’un wallet HD uniquement
recover
: pour recréer un wallet HD dont on a déjà la graine
help
: self-explaining
accounts
Un account représente un validateur, une paire de clés. On peut avoir plusieurs validateurs actifs en même temps. On peut rajouter un ou plusieurs validateurs aux validateurs déjà actifs.
Les commandes :
create
: crée un nouveau validateur ; implique wallet create
si aucun wallet n’existe dans le dossier spécifié
delete
: permet de supprimer un ou plusieurs validateurs
list
: permet de lister les validateurs actuellement actifs dans Prysm
backup
: self-explaining. Exporte clés de validation ET clés de retrait si elles sont présentes dans Prysm
import
: permet d’ajouter une clé de validateur déjà existante. Semble ne rien faire si le wallet est de type HD ; implique la création d’un wallet de type importé si aucun wallet n’existe. On doit spécifier un dossier qui contient les fichiers keystore, et taper les mots de passe ; les mots de passe peuvent être différents pour chaque keystore, il faut alors les entrer au fur et à mesure de l’importation
voluntary-exit
: permet de quitter le pool de validateurs. Il est impossible de recommencer à valider avec ces clés, et impossible de retirer ses ethers avant la phase 1, voire la phase 2.
help
: self-explaining