previousBlockFuture.join(); return new BlockImporter.ImportResult(blockchain.getChainHead().getTotalDifficulty(), count); } finally { validationExecutor.shutdownNow();
assertThat(otherBlockchain.contains(localBlockchain.getChainHead().getHash())).isFalse();
EthProtocol.EthVersion.V63, 1, blockchain.getChainHead().getTotalDifficulty(), blockchain.getChainHeadHash(), blockchain.getBlockHeader(BlockHeader.GENESIS_BLOCK_NUMBER).get().getHash());
@Test public void choosesBestPeerAsSyncTarget_byTd() { final UInt256 localTd = localBlockchain.getChainHead().getTotalDifficulty(); final Responder responder = RespondingEthPeer.blockchainResponder(otherBlockchain); final RespondingEthPeer peerA = EthProtocolManagerTestUtil.createPeer(ethProtocolManager, localTd.plus(100)); final RespondingEthPeer peerB = EthProtocolManagerTestUtil.createPeer(ethProtocolManager, localTd.plus(200)); final FullSyncDownloader<?> downloader = downloader(); downloader.start(); // Process until the sync target is selected while (!syncState.syncTarget().isPresent()) { RespondingEthPeer.respondOnce(responder, peerA, peerB); } assertThat(syncState.syncTarget()).isPresent(); assertThat(syncState.syncTarget().get().peer()).isEqualTo(peerB.getEthPeer()); }
@Test public void choosesBestPeerAsSyncTarget_byTdAndHeight() { final UInt256 localTd = localBlockchain.getChainHead().getTotalDifficulty(); final Responder responder = RespondingEthPeer.blockchainResponder(otherBlockchain); final RespondingEthPeer peerA = EthProtocolManagerTestUtil.createPeer(ethProtocolManager, localTd.plus(100), 0); peerA.getEthPeer().chainState().update(gen.hash(), 100); final RespondingEthPeer peerB = EthProtocolManagerTestUtil.createPeer(ethProtocolManager, localTd.plus(200), 0); peerA.getEthPeer().chainState().update(gen.hash(), 50); final FullSyncDownloader<?> downloader = downloader(); downloader.start(); // Process until the sync target is selected while (!syncState.syncTarget().isPresent()) { RespondingEthPeer.respondOnce(responder, peerA, peerB); } assertThat(syncState.syncTarget()).isPresent(); assertThat(syncState.syncTarget().get().peer()).isEqualTo(peerA.getEthPeer()); }
@Test public void switchesSyncTarget_betterHeight() { final UInt256 localTd = localBlockchain.getChainHead().getTotalDifficulty(); final Responder responder = RespondingEthPeer.blockchainResponder(otherBlockchain);
@Test public void doesNotSwitchSyncTarget_betterHeightUnderThreshold() { otherBlockchainSetup.importFirstBlocks(8); final UInt256 localTd = localBlockchain.getChainHead().getTotalDifficulty(); final Responder responder = RespondingEthPeer.blockchainResponder(otherBlockchain);
@Test public void switchesSyncTarget_betterTd() { final UInt256 localTd = localBlockchain.getChainHead().getTotalDifficulty(); final Responder responder = RespondingEthPeer.blockchainResponder(otherBlockchain);