private Hash receivePendingTransaction() { final Transaction transaction = blockGenerator.transaction(); filterManager.recordPendingTransactionEvent(transaction); return transaction.hash(); } }
@Test public void shouldSendTransactionsInBatches() throws Exception { final Set<Transaction> fifteenTransactions = IntStream.range(0, 15).mapToObj(number -> generator.transaction()).collect(toSet()); fifteenTransactions.forEach( transaction -> transactionTracker.addToPeerSendQueue(peer1, transaction)); messageSender.sendTransactionsToPeers(); final ArgumentCaptor<MessageData> messageDataArgumentCaptor = ArgumentCaptor.forClass(MessageData.class); verify(peer1, times(2)).send(messageDataArgumentCaptor.capture()); final List<MessageData> sentMessages = messageDataArgumentCaptor.getAllValues(); assertThat(sentMessages).hasSize(2); assertThat(sentMessages).allMatch(message -> message.getCode() == EthPV62.TRANSACTIONS); final Set<Transaction> firstBatch = getTransactionsFromMessage(sentMessages.get(0)); final Set<Transaction> secondBatch = getTransactionsFromMessage(sentMessages.get(1)); assertThat(firstBatch).hasSize(10); assertThat(secondBatch).hasSize(5); assertThat(Sets.union(firstBatch, secondBatch)).isEqualTo(fifteenTransactions); }
@Test public void transactionRoundTrip() { // Setup list of transactions final int txCount = 20; final BlockDataGenerator gen = new BlockDataGenerator(1); final List<Transaction> transactions = new ArrayList<>(); for (int i = 0; i < txCount; ++i) { transactions.add(gen.transaction()); } // Create TransactionsMessage final MessageData initialMessage = TransactionsMessage.create(transactions); // Read message into a generic RawMessage final MessageData raw = new RawMessage(EthPV62.TRANSACTIONS, initialMessage.getData()); // Transform back to a TransactionsMessage from RawMessage final TransactionsMessage message = TransactionsMessage.readFrom(raw); // Check that transactions match original inputs after transformations final Iterator<Transaction> readTransactions = message.transactions(Transaction::readFrom); for (int i = 0; i < txCount; ++i) { Assertions.assertThat(readTransactions.next()).isEqualTo(transactions.get(i)); } Assertions.assertThat(readTransactions.hasNext()).isFalse(); } }
final List<Transaction> txes = Collections.singletonList(gen.transaction()); final MessageData initialMessage = TransactionsMessage.create(txes); final MessageData raw = new RawMessage(EthPV62.TRANSACTIONS, initialMessage.getData());
.setDifficulty(chain.get(forkBlock).getHeader().getDifficulty().plus(10L)) .addTransaction(overlappingTx) .addTransaction(gen.transaction()); final Block fork = gen.block(options); final List<TransactionReceipt> forkReceipts = gen.receipts(fork);