Este é um container derivado do "ethereum/go-client" ligeiramente modificado para simplificar a vida de quem quer criar uma rede Ethereum privada.
Esta imagem está no Dokcer Hub com o nome "bacen/ethereum".
Neste projeto há scripts que facilitam a vida do usuário.
O que "isola" a sua rede Ethereum privada da rede pública não precisa ser necessariamente um isolamente de rede real - seus nós podem estar disponíveis na Internet e mesmo assim funcionarão como uma rede Ethereum privada.
Esta imagem permite que o usuário use variáveis de ambiente para definir os valores que isolam a sua rede das demais. Os scripts deste projeto detectam estas variáveis e executam os containers com as definições corretas.
As variáveis são:
A variável GEN_NONCE é usada para gerar o arquivo "genesis.json" que define a inicialização do blockchain. Todos os nós integrantes da rede deverão ter o mesmo valor para GEN_NONCE.
Analogamente, o NET_ID define o "networkid" da rede privada. Todos os nós integrantes da rede deverão ter o mesmo valor para NET_ID.
Para que os nós da rede privada encontram-se na rede há varias estratégias possíveis (entre elas a definição de nós estáticos). A opção que gera menos entraves para o desenvolvimento e crescimento da rede é o uso de um bootnode.
O bootnode é um nó simples que serve apenas como um "hub" para que a auto-descoberta dos nós seja mais rápida. Via de regra, qualquer nó Ethereum pode servir como bootnode para os demais, mas um bootnode "puro" é um nó "burro" que não participa das operações da rede. A própria rede Ethereum pública trabalha com um conjunto de bootnodes cujo endereço está hard-coded no cliente "geth".
O script bootnode.sh executa um container com o nome "ethereum-bootnode". É possível consultar o id gerado dinamicamente para o bootnode na primeira execução, consultando o log do container:
docker logs ethereum-bootnode
...
I0908 14:46:45.899423 p2p/discover/udp.go:217] Listening, enode://52f4bf370b6f407a6b3bca149b2fe24fc54ce6ac19ffe0926ad41d9bfc86ccf9bd8703fa5a4961ab28bba2a81eacba183652f744d3ff02602ecb63b7ccd3643f@172.17.0.4:30301
Há um script utilitário para obter a URL "enode" a partir deste log (este script é usado internamente em outros scripts para detectar dinamicamente o bootnode):
./getbootnodeurl.sh
enode://76e50d0dd4ae583d2653d414f9acd1df4e7a75f4bab53c7cafedc6433696ba9596c6dc84626423e629760b3ab2af9f97220dfee73961cb5be1a8ce1fa40a0bff@172.17.0.4:30301
Os scripts que executam nós criam na pasta corrente subdiretórios para persistir os dados gerados. Por exemplo, o script runnode.sh <nome do node> cria o volume ".ether-". Em produção recomenda-se usar uma estratégia para volumes que garanta a portabilidade do nó.
Nota: se chamados sem argumentos os script runnode.sh e runminer.sh assumem o argumento "node1" e "miner1", respectivamente).
O script runnode.sh executa o primeiro nó da rede privada (um container chamado "ethereum-node1"). É importante entender que, embora ele deva se conectar com o bootnode, não haverá nenhum "peer" na rede ainda (o bootnode não conta).
./runnode.sh
O mesmo script runnode.sh pode ser usado para executar um segundo nó na rede privada, bastando informar o nome do nó como argumento, o que criará um container chamado "ethereum-<nome do nó>". É importante entender que ele conecta-se ao bootnode apenas para descobrir dinamicamente seus peers na rede.
./runnode.sh node2
A auto-descoberta dos nodes pode demorar alguns segundos, mas verificá-la é simples com o script showpeers.sh. O comando abaixo exibe os peers do container "ethereum-node":
./showpeers.sh
Um argumento opcional informa o nome de outro container Ethereum para consultar:
./showpeers.sh ethereum-node2
Os nós "ethereum-node1" e "ethereum-node2" não fazem mineração - foram usados até aqui apenas para testar a capacidade de criar uma rede que se auto-descobre. Um outro script runminer.sh foi criado para executar um minerador nesta mesma rede privada:
./runminer.sh
Você pode descobrir se ele encontrou os demais membros da rede com o comando abaixo:
./showpeers.sh ethereum-miner1
E se quiser acompanhar o seu trabalho basta verificar o log do container (a mineração pode demorar um pouco para começar):
docker logs -f ethereum-miner1
Content type
Image
Digest
Size
84.8 MB
Last updated
about 10 years ago
docker pull bacen/ethereum