private Transaction transactionWithNonceAndSender(final int nonce, final KeyPair keyPair) { return new TransactionTestFixture().nonce(nonce).createTransaction(keyPair); }
private Transaction transaction(final int nonce) { return new TransactionTestFixture().nonce(nonce).createTransaction(KEYS); } }
private Transaction createTransaction(final int transactionNumber) { return new TransactionTestFixture() .nonce(transactionNumber) .gasLimit(0) .createTransaction(KEY_PAIR1); }
@Test public void shouldAcceptTransactionWhenNonceEqualsMaximumAllowedNonce() { final MainnetTransactionValidator validator = new MainnetTransactionValidator(gasCalculator, false, 1); final Transaction transaction = new TransactionTestFixture().nonce(10).createTransaction(senderKeys); final Account account = accountWithNonce(5); assertThat(validator.validateForSender(transaction, account, OptionalLong.of(10))) .isEqualTo(ValidationResult.valid()); }
@Test public void shouldRejectTransactionWhenNonceExceedsMaximumAllowedNonce() { final MainnetTransactionValidator validator = new MainnetTransactionValidator(gasCalculator, false, 1); final Transaction transaction = new TransactionTestFixture().nonce(11).createTransaction(senderKeys); final Account account = accountWithNonce(5); assertThat(validator.validateForSender(transaction, account, OptionalLong.of(10))) .isEqualTo(ValidationResult.invalid(INCORRECT_NONCE)); }
@Test public void shouldAcceptTransactionWhenNonceBetweenAccountNonceAndMaximumAllowedNonce() { final MainnetTransactionValidator validator = new MainnetTransactionValidator(gasCalculator, false, 1); final Transaction transaction = new TransactionTestFixture().nonce(10).createTransaction(senderKeys); final Account account = accountWithNonce(5); assertThat(validator.validateForSender(transaction, account, OptionalLong.of(15))) .isEqualTo(ValidationResult.valid()); }
@Test public void shouldAllowSequenceOfTransactionsWithIncreasingNonceFromSameSenderWhenSentInBatchOutOfOrder() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(2).createTransaction(KEY_PAIR1); final Transaction transaction3 = builder.nonce(3).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction3), nullable(Account.class), eq(OptionalLong.of(3)))) .thenReturn(valid()); transactionPool.addRemoteTransactions(asList(transaction3, transaction1, transaction2)); assertTransactionPending(transaction1); assertTransactionPending(transaction2); assertTransactionPending(transaction3); }
@Test public void shouldNotNotifyBatchListenerWhenRemoteTransactionDoesNotReplaceExisting() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).gasPrice(Wei.of(10)).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(1).gasPrice(Wei.of(5)).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); transactionPool.addRemoteTransactions(singletonList(transaction1)); transactionPool.addRemoteTransactions(singletonList(transaction2)); assertTransactionPending(transaction1); verify(batchAddedListener).onTransactionsAdded(singleton(transaction1)); verify(batchAddedListener, never()).onTransactionsAdded(singleton(transaction2)); }
@Test public void shouldAllowSequenceOfTransactionsWithIncreasingNonceFromSameSender() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(2).createTransaction(KEY_PAIR1); final Transaction transaction3 = builder.nonce(3).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction3), nullable(Account.class), eq(OptionalLong.of(3)))) .thenReturn(valid()); assertThat(transactionPool.addLocalTransaction(transaction1)).isEqualTo(valid()); assertThat(transactionPool.addLocalTransaction(transaction2)).isEqualTo(valid()); assertThat(transactionPool.addLocalTransaction(transaction3)).isEqualTo(valid()); assertTransactionPending(transaction1); assertTransactionPending(transaction2); assertTransactionPending(transaction3); }
private Transaction createTransaction(final int transactionNumber) { return new TransactionTestFixture() .value(Wei.of(transactionNumber)) .nonce(transactionNumber) .createTransaction(KEYS1); } }
@Test public void shouldNotNotifyBatchListenerWhenLocalTransactionDoesNotReplaceExisting() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).gasPrice(Wei.of(10)).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(1).gasPrice(Wei.of(5)).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); transactionPool.addLocalTransaction(transaction1); transactionPool.addLocalTransaction(transaction2); assertTransactionPending(transaction1); verify(batchAddedListener).onTransactionsAdded(singletonList(transaction1)); verify(batchAddedListener, never()).onTransactionsAdded(singletonList(transaction2)); }
private Transaction transactionWithNonceSenderAndGasPrice( final int nonce, final KeyPair keyPair, final long gasPrice) { return new TransactionTestFixture() .nonce(nonce) .gasPrice(Wei.of(gasPrice)) .createTransaction(keyPair); }
@Test public void transactionWithNullSenderCanBeValidIfGasPriceAndValueIsZero() { final MainnetTransactionValidator validator = new MainnetTransactionValidator(gasCalculator, false, 1); final TransactionTestFixture builder = new TransactionTestFixture(); final KeyPair senderKeyPair = KeyPair.generate(); final Address arbitrarySender = Address.fromHexString("1"); builder.gasPrice(Wei.ZERO).nonce(0).sender(arbitrarySender).value(Wei.ZERO); assertThat( validator.validateForSender( builder.createTransaction(senderKeyPair), null, OptionalLong.of(10))) .isEqualTo(ValidationResult.valid()); }
txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.79)) .nonce(1) .createTransaction(keyPair)); transactionsToInject.add( txTestFixture.gasLimit(blockHeader.getGasLimit()).nonce(2).createTransaction(keyPair)); transactionsToInject.add( txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.1)) .nonce(3) .createTransaction(keyPair));
txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.15)) .nonce(1) .createTransaction(keyPair); final Transaction transaction2 = txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.79)) .nonce(2) .createTransaction(keyPair); final Transaction transaction3 = txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.25)) .nonce(3) .createTransaction(keyPair); final Transaction transaction4 = txTestFixture .gasLimit((long) (blockHeader.getGasLimit() * 0.1)) .nonce(4) .createTransaction(keyPair);