code: func (p *Peer) negotiateOutboundProtocol() error {
  	if err := p.writeLocalVersionMsg(); err != nil {
  		return err
  	}
  
  	return p.readRemoteVersionMsg()
  }
docs: // negotiateOutboundProtocol sends our version message then waits to receive a
  // version message from the peer.  If the events do not occur in that order then
  // it returns an error.