p2p: introduce peerConn to simplify peer creation (#1226)
* expose AuthEnc in the P2P config
if AuthEnc is true, dialed peers must have a node ID in the address and
it must match the persistent pubkey from the secret handshake.
Refs #1157
* fixes after my own review
* fix docs
* fix build failure
```
p2p/pex/pex_reactor_test.go:288:88: cannot use seed.NodeInfo().NetAddress() (type *p2p.NetAddress) as type string in array or slice literal
```
* p2p: introduce peerConn to simplify peer creation
* Introduce `peerConn` containing the known fields of `peer`
* `peer` only created in `sw.addPeer` once handshake is complete and NodeInfo is checked
* Eliminates some mutable variables and makes the code flow better
* Simplifies the `newXxxPeer` funcs
* Use ID instead of PubKey where possible.
* SetPubKeyFilter -> SetIDFilter
* nodeInfo.Validate takes ID
* remove peer.PubKey()
* persistent node ids
* fixes from review
* test: use ip_plus_id.sh more
* fix invalid memory panic during fast_sync test
```
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: panic: runtime error: invalid memory address or nil pointer dereference
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x98dd3e]
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]:
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: goroutine 3432 [running]:
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: github.com/tendermint/tendermint/p2p.newOutboundPeerConn(0xc423fd1380, 0xc420933e00, 0x1, 0x1239a60, 0
xc420128c40, 0x2, 0x42caf6, 0xc42001f300, 0xc422831d98, 0xc4227951c0, ...)
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: #011/go/src/github.com/tendermint/tendermint/p2p/peer.go:123 +0x31e
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: github.com/tendermint/tendermint/p2p.(*Switch).addOutboundPeerWithConfig(0xc4200ad040, 0xc423fd1380, 0
xc420933e00, 0xc423f48801, 0x28, 0x2)
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: #011/go/src/github.com/tendermint/tendermint/p2p/switch.go:455 +0x12b
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: github.com/tendermint/tendermint/p2p.(*Switch).DialPeerWithAddress(0xc4200ad040, 0xc423fd1380, 0x1, 0x
0, 0x0)
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: #011/go/src/github.com/tendermint/tendermint/p2p/switch.go:371 +0xdc
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: github.com/tendermint/tendermint/p2p.(*Switch).reconnectToPeer(0xc4200ad040, 0x123e000, 0xc42007bb00)
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: #011/go/src/github.com/tendermint/tendermint/p2p/switch.go:290 +0x25f
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: created by github.com/tendermint/tendermint/p2p.(*Switch).StopPeerForError
2018-02-21T06:30:05Z box887.localdomain docker/local_testnet_4[14907]: #011/go/src/github.com/tendermint/tendermint/p2p/switch.go:256 +0x1b7
```
2018-02-27 06:54:40 -05:00
|
|
|
FROM golang:1.9.4
|
2016-07-23 12:48:30 -04:00
|
|
|
|
2017-03-06 02:42:00 -05:00
|
|
|
# Add testing deps for curl
|
|
|
|
RUN echo 'deb http://httpredir.debian.org/debian testing main non-free contrib' >> /etc/apt/sources.list
|
|
|
|
|
2016-09-10 20:11:45 -04:00
|
|
|
# Grab deps (jq, hexdump, xxd, killall)
|
2016-07-24 14:08:47 -04:00
|
|
|
RUN apt-get update && \
|
|
|
|
apt-get install -y --no-install-recommends \
|
2017-03-06 02:42:00 -05:00
|
|
|
jq bsdmainutils vim-common psmisc netcat curl
|
2016-07-24 14:08:47 -04:00
|
|
|
|
2017-06-26 12:08:38 +04:00
|
|
|
# Setup tendermint repo
|
2016-09-10 20:11:45 -04:00
|
|
|
ENV REPO $GOPATH/src/github.com/tendermint/tendermint
|
2018-03-06 15:32:52 +01:00
|
|
|
ENV GOBIN $GOPATH/bin
|
2016-09-10 20:11:45 -04:00
|
|
|
WORKDIR $REPO
|
2017-03-05 14:59:02 -05:00
|
|
|
|
|
|
|
# Install the vendored dependencies before copying code
|
|
|
|
# docker caching prevents reinstall on code change!
|
2018-02-27 03:59:50 -08:00
|
|
|
ADD Gopkg.toml Gopkg.toml
|
|
|
|
ADD Gopkg.lock Gopkg.lock
|
2016-09-10 20:11:45 -04:00
|
|
|
ADD Makefile Makefile
|
2017-12-25 10:24:41 -05:00
|
|
|
RUN make get_tools
|
2016-07-24 14:08:47 -04:00
|
|
|
RUN make get_vendor_deps
|
|
|
|
|
2017-03-05 20:39:52 -05:00
|
|
|
# Install the apps
|
|
|
|
ADD scripts scripts
|
|
|
|
RUN bash scripts/install_abci_apps.sh
|
|
|
|
|
2016-10-12 12:28:34 -04:00
|
|
|
# Now copy in the code
|
2018-03-08 22:52:38 +08:00
|
|
|
# NOTE: this will overwrite whatever is in vendor/
|
2016-09-10 20:11:45 -04:00
|
|
|
COPY . $REPO
|
2016-07-24 14:08:47 -04:00
|
|
|
|
2018-02-27 03:59:50 -08:00
|
|
|
|
2016-08-25 18:27:21 -04:00
|
|
|
RUN go install ./cmd/tendermint
|
2016-07-24 14:08:47 -04:00
|
|
|
|
2016-12-22 19:30:09 -05:00
|
|
|
# expose the volume for debugging
|
|
|
|
VOLUME $REPO
|
|
|
|
|
2016-07-24 14:08:47 -04:00
|
|
|
EXPOSE 46656
|
|
|
|
EXPOSE 46657
|