@Test public void createSmallChain() { final BlockDataGenerator gen = new BlockDataGenerator(); final List<Block> chain = gen.blockSequence(3); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList()); final KeyValueStorage kvStore = new InMemoryKeyValueStorage(); final DefaultMutableBlockchain blockchain = createBlockchain(kvStore, chain.get(0)); for (int i = 1; i < chain.size(); i++) { blockchain.appendBlock(chain.get(i), blockReceipts.get(i)); } for (int i = 1; i < chain.size(); i++) { assertBlockDataIsStored(blockchain, chain.get(i), blockReceipts.get(i)); } final Block head = chain.get(chain.size() - 1); assertBlockIsHead(blockchain, head); assertTotalDifficultiesAreConsistent(blockchain, head); assertThat(blockchain.getForks()).isEmpty(); }
private BlockchainWithData setupBlockchain( final int blocksToAdd, final List<Address> accountsToSetup, final List<UInt256> storageKeys) { checkArgument(blocksToAdd >= 1, "Must add at least one block to the queries"); final WorldStateArchive worldStateArchive = createInMemoryWorldStateArchive(); // Generate some queries data final List<BlockData> blockData = new ArrayList<>(blocksToAdd); final List<Block> blocks = gen.blockSequence(blocksToAdd, worldStateArchive, accountsToSetup, storageKeys); for (int i = 0; i < blocksToAdd; i++) { final Block block = blocks.get(i); final List<TransactionReceipt> receipts = gen.receipts(block); blockData.add(new BlockData(block, receipts)); } // Setup blockchain final MutableBlockchain blockchain = createInMemoryBlockchain(blocks.get(0)); blockData .subList(1, blockData.size()) .forEach(b -> blockchain.appendBlock(b.block, b.receipts)); return new BlockchainWithData(blockchain, blockData, worldStateArchive); }
public void readsBlocksWithInitialCapacity( final Function<Integer, Integer> initialCapacityFromBlockSize) throws IOException { final int blockCount = 3; final List<Block> blocks = gen.blockSequence(blockCount);
@Test public void purgeBlocks() { final List<Block> blocks = gen.blockSequence(10); for (final Block block : blocks) { pendingBlocks.registerPendingBlock(block); assertThat(pendingBlocks.contains(block.getHash())).isTrue(); } final List<Block> blocksToPurge = blocks.subList(0, 5); final List<Block> blocksToKeep = blocks.subList(5, blocks.size()); pendingBlocks.purgeBlocksOlderThan(blocksToKeep.get(0).getHeader().getNumber()); for (final Block block : blocksToPurge) { assertThat(pendingBlocks.contains(block.getHash())).isFalse(); assertThat(pendingBlocks.childrenOf(block.getHeader().getParentHash()).size()).isEqualTo(0); } for (final Block block : blocksToKeep) { assertThat(pendingBlocks.contains(block.getHash())).isTrue(); assertThat(pendingBlocks.childrenOf(block.getHeader().getParentHash()).size()).isEqualTo(1); } } }
final List<Block> chain = gen.blockSequence(originalChainLength); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList());
final List<Block> chain = gen.blockSequence(chainLength); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList());
final List<Block> chain = gen.blockSequence(chainLength); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList());
final List<Block> chain = gen.blockSequence(originalChainLength); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList());
final List<Block> chain = gen.blockSequence(originalChainLength); final List<List<TransactionReceipt>> blockReceipts = chain.stream().map(gen::receipts).collect(Collectors.toList());