docs: public void startBlockChainDownload(PeerDataEventListener listener) {
          lock.lock();
          try {
              if (downloadPeer != null) {
                  if (this.downloadListener != null) {
                      removeDataEventListenerFromPeer(downloadPeer, this.downloadListener);
                  }
                  if (listener != null) {
                      addDataEventListenerToPeer(Threading.USER_THREAD, downloadPeer, listener);
                  }
              }
              this.downloadListener = listener;
              // TODO: be more nuanced about which peer to download from.  We can also try
              // downloading from multiple peers and handle the case when a new peer comes along
              // with a longer chain after we thought we were done.
              if (!peers.isEmpty()) {
                  startBlockChainDownloadFromPeer(peers.iterator().next()); // Will add the new download listener
              }
          } finally {
              lock.unlock();
          }
      }