I'm following this guide and am trying to create a private network with its own block chain and peers.
I managed to install docker following this guide (I'm using a debian 8 jessie virtual machine) and also set up a python virtual environment for docker-compose:
($ pip install virtualenv)
$ mkdir temp_etherum
$ cd temp_ethereum
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install docker-compose
Next I ran docker with the configuration file provided in the repository:
# docker-compose scale bootstrap=1 miner=2 eth=3
The virtual environment has to be started as root otherwise docker-compose can't connect to the UNIX socket.
The network starts and I see the expecting output:
# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------
bootstrap /usr/local/bin/pyethapp -c ... Up 127.0.0.1:30304->30303/tcp, 127.0.0.1:30304->30303/udp
simple_eth_1 /usr/local/bin/pyethapp -c ... Up
simple_eth_2 /usr/local/bin/pyethapp -c ... Up
simple_eth_3 /usr/local/bin/pyethapp -c ... Up
simple_miner_1 /usr/local/bin/pyethapp -c ... Up
simple_miner_2 /usr/local/bin/pyethapp -c ... Up
One thing that is not clear is, why are there six instances of pyethapp when the configuration file, docker-compose.yml, only specifies four:
bootstrap:
image: ethereum/client-python
container_name: bootstrap
entrypoint: /usr/local/bin/pyethapp
command: "-c eth.network_id=1337 -c node.privkey_hex=091bd6067cb4612df85d9c1ff85cc47f259ced4d4cd99816b14f35650f59c322 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@localhost:30303' run --fake"
ports:
- 127.0.0.1:30304:30303
- 127.0.0.1:30304:30303/udp
eth:
image: ethereum/client-python
links:
- bootstrap
entrypoint: /usr/local/bin/pyethapp
command: "-c eth.network_id=1337 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@bootstrap:30303' run --fake"
miner:
image: ethereum/client-python
links:
- bootstrap
entrypoint: /usr/local/bin/pyethapp
command: "-c eth.network_id=1337 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@bootstrap:30303' -m 50 run --fake"
debug:
image: ethereum/client-python
container_name: debug
links:
- bootstrap
entrypoint: /usr/local/bin/pyethapp
command: "-c eth.network_id=1337 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@bootstrap:30303' -l :debug,p2p:info run --fake"
Peer discovery always fails (is this likely because I'm running pyethapp on a virtual machine in VirtualBox with NAT network settings)?
Creating an account works:
docker run -it --rm --link bootstrap:bootstrap -v /tmp/pyethapp:/root/.config ethereum/client-python account new
But when I try to mine using that account:
docker run -it --rm --link bootstrap:bootstrap -v /tmp/pyethapp:/root/.config ethereum/client-python -c eth.network_id=1337 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@bootstrap:30303' -m 50 run --fake
I get the following error from the peer manager:
INFO:accounts searching for key files directory=/root/.config/pyethapp/keystore
INFO:accounts found account(s) accounts=[<Account(address=8c78df6398b1858f2157b455cbe8b22f30768992, id=None)>]
INFO:app registering service service=accounts
INFO:db opening LevelDB path=/root/.config/pyethapp/leveldb max_open_files=128 block_cache_size=8388608 write_buffer_size=4194304
INFO:app registering service service=db
INFO:p2p.discovery NodeDiscovery init
INFO:p2p.discovery starting discovery proto this_enode=enode://7ded504e4f48f9a6b6d316b2b57a986a23427e95e1fa6f80dcd758a5fdfefa643ce528b2e613fa91831a088486ef1f51c822232a2b1c3906c0b6250d38793935@0.0.0.0:30303
INFO:app registering service service=discovery
INFO:p2p.peermgr PeerManager init
INFO:app registering service service=peermanager
INFO:eth.chainservice initializing chain
INFO:eth.chain Initializing new chain
INFO:eth.chain new genesis difficulty=17179869184 genesis_hash=<Block(#0 d4e56740)>
INFO:eth.chainservice chain at number=0
INFO:app registering service service=chain
INFO:app registering service service=pow
WARNING:jsonrpc could not import solidity
INFO:app registering service service=jsonrpc
INFO:app registering service service=console
INFO:app starting
INFO:p2p.peermgr starting peermanager
INFO:p2p.peermgr starting listener host=0.0.0.0 port=30303
INFO:p2p.discovery starting discovery
INFO:p2p.discovery starting listener host=0.0.0.0 port=30303
INFO:jsonrpc starting JSONRPCServer port=4000
INFO:p2p.peermgr waiting for bootstrap
INFO:p2p.peermgr missing peers known=1 num_peers=0 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peer received hello client_version=pyethapp/v1.0.3/linux2/py2.7.9 version=4 capabilities=[['eth', 60], ['p2p', 4]]
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
INFO:p2p.peermgr missing peers known=1 num_peers=1 min_peers=5
INFO:p2p.peermgr connecting random node=<Node(288b9726)>
Why?