@Test public void calculateBlockHash() { assertThat(header.getHash()).isEqualTo(KNOWN_BLOCK_HASH); }
@Test public void calculateBlockHash() { assertThat(expectedHeader.getHash()).isEqualTo(KNOWN_BLOCK_HASH); }
private void assertHashForBlockNumber(final int blockNumber) { assertThat(lookup.getBlockHash(blockNumber)).isEqualTo(headers[blockNumber].getHash()); }
@Override protected Map<BlockHeader, List<TransactionReceipt>> generateDataToBeRequested() { final Map<BlockHeader, List<TransactionReceipt>> expectedData = new HashMap<>(); for (long i = 0; i < 3; i++) { final BlockHeader header = blockchain.getBlockHeader(10 + i).get(); final List<TransactionReceipt> transactionReceipts = blockchain.getTxReceipts(header.getHash()).get(); expectedData.put(header, transactionReceipts); } return expectedData; }
@Override protected EthTask<PeerTaskResult<List<BlockHeader>>> createTask( final List<BlockHeader> requestedData) { final BlockHeader firstHeader = requestedData.get(0); return GetHeadersFromPeerByHashTask.startingAtHash( protocolSchedule, ethContext, firstHeader.getHash(), firstHeader.getNumber(), requestedData.size(), ethTasksTimer); }
@Test public void shouldCacheBlockHashesWhileIteratingBackToPreviousHeader() { assertHashForBlockNumber(CURRENT_BLOCK_NUMBER - 4); assertHashForBlockNumber(CURRENT_BLOCK_NUMBER - 1); verify(blockchain).getBlockHeader(headers[CURRENT_BLOCK_NUMBER - 1].getHash()); verify(blockchain).getBlockHeader(headers[CURRENT_BLOCK_NUMBER - 2].getHash()); verify(blockchain).getBlockHeader(headers[CURRENT_BLOCK_NUMBER - 3].getHash()); verifyNoMoreInteractions(blockchain); }
@Override protected List<Block> generateDataToBeRequested() { // Setup data to be requested and expected response final List<Block> blocks = new ArrayList<>(); for (long i = 0; i < 3; i++) { final BlockHeader header = blockchain.getBlockHeader(10 + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); blocks.add(new Block(header, body)); } return blocks; }
@Override protected List<Block> generateDataToBeRequested() { final List<Block> requestedBlocks = new ArrayList<>(); for (long i = 0; i < 3; i++) { final BlockHeader header = blockchain.getBlockHeader(10 + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); requestedBlocks.add(new Block(header, body)); } return requestedBlocks; }
@Override protected Block generateDataToBeRequested() { final BlockHeader header = blockchain.getBlockHeader(5).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); return new Block(header, body); }
private Block getBlockAtNumber(final long number) { final BlockHeader header = blockchain.getBlockHeader(number).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); return new Block(header, body); }
@Override protected List<Block> generateDataToBeRequested() { final long chainHead = blockchain.getChainHeadBlockNumber(); final long importSize = 5; final long startNumber = chainHead - importSize + 1; final List<Block> blocksToImport = new ArrayList<>(); for (long i = 0; i < importSize; i++) { final BlockHeader header = blockchain.getBlockHeader(startNumber + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); blocksToImport.add(new Block(header, body)); } return blocksToImport; }
@Test public void statusReceivedUpdatesBestBlock() { final BlockHeader bestBlockHeader = new BlockHeaderTestFixture().number(12).buildHeader(); chainState.statusReceived(bestBlockHeader.getHash(), INITIAL_TOTAL_DIFFICULTY); assertThat(chainState.getEstimatedHeight()).isEqualTo(0L); assertThat(chainState.getBestBlock().getNumber()).isEqualTo(0L); assertThat(chainState.getBestBlock().getHash()).isEqualTo(bestBlockHeader.getHash()); assertThat(chainState.getBestBlock().getTotalDifficulty()).isEqualTo(INITIAL_TOTAL_DIFFICULTY); }
@Test public void observersInformedWhenHeightUpdatedViaHashAndNumber() { final long blockNumber = 12; final BlockHeader bestBlockHeader = new BlockHeaderTestFixture().number(blockNumber).buildHeader(); chainState.statusReceived(bestBlockHeader.getHash(), INITIAL_TOTAL_DIFFICULTY); final EstimatedHeightListener listener = mock(EstimatedHeightListener.class); chainState.addEstimatedHeightListener(listener); chainState.update(bestBlockHeader.getHash(), blockNumber); verify(listener).onEstimatedHeightChanged(blockNumber); }
private BlockHeader createHeader(final int blockNumber, final BlockHeader parentHeader) { return new BlockHeaderTestFixture() .number(blockNumber) .parentHash(parentHeader != null ? parentHeader.getHash() : Hash.EMPTY) .buildHeader(); } }
@Test public void encodeOlympicBlock() throws Exception { final GenesisState genesisState = GenesisState.fromJson( Resources.toString( GenesisStateTest.class.getResource("genesis-olympic.json"), Charsets.UTF_8), MainnetProtocolSchedule.create()); final BytesValueRLPOutput tmp = new BytesValueRLPOutput(); genesisState.getBlock().writeTo(tmp); assertThat(Hex.toHexString(genesisState.getBlock().getHeader().getHash().extractArray())) .isEqualTo(OLYMPIC_HASH); assertThat(Hex.toHexString(tmp.encoded().extractArray())).isEqualTo(OLYMPIC_RLP); } }
@Test public void observersInformedWhenHeightUpdatedViaHeaderAndTD() { final long blockNumber = 12; final BlockHeader bestBlockHeader = new BlockHeaderTestFixture().number(blockNumber).buildHeader(); chainState.statusReceived(bestBlockHeader.getHash(), INITIAL_TOTAL_DIFFICULTY); final EstimatedHeightListener listener = mock(EstimatedHeightListener.class); chainState.addEstimatedHeightListener(listener); chainState.update(bestBlockHeader, INITIAL_TOTAL_DIFFICULTY); verify(listener).onEstimatedHeightChanged(blockNumber); }
@Test public void observersInformedWhenHeightUpdatedViaHeader() { final long blockNumber = 12; final BlockHeader bestBlockHeader = new BlockHeaderTestFixture().number(blockNumber).buildHeader(); chainState.statusReceived(bestBlockHeader.getHash(), INITIAL_TOTAL_DIFFICULTY); final EstimatedHeightListener listener = mock(EstimatedHeightListener.class); chainState.addEstimatedHeightListener(listener); chainState.update(bestBlockHeader); verify(listener).onEstimatedHeightChanged(blockNumber); }
@Test public void incrementingNumberAndLinkedHashesReturnTrue() { final AncestryValidationRule uut = new AncestryValidationRule(); final BlockHeader parentHeader = new BlockHeaderTestFixture().buildHeader(); final BlockHeaderTestFixture headerBuilder = new BlockHeaderTestFixture(); headerBuilder.parentHash(parentHeader.getHash()); headerBuilder.number(parentHeader.getNumber() + 1); final BlockHeader header = headerBuilder.buildHeader(); assertThat(uut.validate(header, parentHeader)).isTrue(); }
@Test public void nonIncrementingBlockNumberReturnsFalse() { final AncestryValidationRule uut = new AncestryValidationRule(); final BlockHeader parentHeader = new BlockHeaderTestFixture().buildHeader(); final BlockHeaderTestFixture headerBuilder = new BlockHeaderTestFixture(); headerBuilder.parentHash(parentHeader.getHash()); headerBuilder.number(parentHeader.getNumber() + 2); final BlockHeader header = headerBuilder.buildHeader(); assertThat(uut.validate(header, parentHeader)).isFalse(); } }
private MockPeerConnection setupPeer( final EthProtocolManager ethManager, final PeerSendHandler onSend) { final MockPeerConnection peer = setupPeerWithoutStatusExchange(ethManager, onSend); final StatusMessage statusMessage = StatusMessage.create( EthVersion.V63, 1, blockchain.getChainHead().getTotalDifficulty(), blockchain.getChainHeadHash(), blockchain.getBlockHeader(BlockHeader.GENESIS_BLOCK_NUMBER).get().getHash()); ethManager.processMessage(EthProtocol.ETH63, new DefaultMessage(peer, statusMessage)); return peer; }