public Transaction get(final GeneralStateTestCaseSpec.Indexes indexes) { return Transaction.builder() .nonce(nonce) .gasPrice(gasPrice) .gasLimit(gasLimits.get(indexes.gas).asUInt256().toLong()) .to(to) .value(values.get(indexes.value)) .payload(payloads.get(indexes.data)) .signAndBuild(keys); } }
@Test public void shouldReturnFailureResultWhenProcessingFails() { final CallParameter callParameter = callParameter(); mockBlockchainForBlockHeader(Hash.ZERO, 1L); mockWorldStateForAccount(Hash.ZERO, Address.fromHexString("0x0"), 1L); final Transaction expectedTransaction = Transaction.builder() .nonce(1L) .gasPrice(callParameter.getGasPrice()) .gasLimit(callParameter.getGasLimit()) .to(callParameter.getTo()) .sender(callParameter.getFrom()) .value(callParameter.getValue()) .payload(callParameter.getPayload()) .signature(FAKE_SIGNATURE) .build(); mockProcessorStatusForTransaction(1L, expectedTransaction, Status.FAILED, null); final Optional<TransientTransactionProcessingResult> result = transientTransactionProcessor.process(callParameter, 1L); assertThat(result.get().isSuccessful()).isFalse(); verifyTransactionWasProcessed(expectedTransaction); }
@Test public void shouldReturnSuccessfulResultWhenProcessingIsSuccessful() { final CallParameter callParameter = callParameter(); mockBlockchainForBlockHeader(Hash.ZERO, 1L); mockWorldStateForAccount(Hash.ZERO, callParameter.getFrom(), 1L); final Transaction expectedTransaction = Transaction.builder() .nonce(1L) .gasPrice(callParameter.getGasPrice()) .gasLimit(callParameter.getGasLimit()) .to(callParameter.getTo()) .sender(callParameter.getFrom()) .value(callParameter.getValue()) .payload(callParameter.getPayload()) .signature(FAKE_SIGNATURE) .build(); mockProcessorStatusForTransaction( 1L, expectedTransaction, Status.SUCCESSFUL, callParameter.getPayload()); final Optional<TransientTransactionProcessingResult> result = transientTransactionProcessor.process(callParameter, 1L); assertThat(result.get().isSuccessful()).isTrue(); verifyTransactionWasProcessed(expectedTransaction); }
@Test public void shouldUseZeroNonceWhenAccountDoesNotExist() { final CallParameter callParameter = callParameter(); mockBlockchainForBlockHeader(Hash.ZERO, 1L); mockWorldStateForAbsentAccount(Hash.ZERO); final Transaction expectedTransaction = Transaction.builder() .nonce(0L) .gasPrice(Wei.ZERO) .gasLimit(0L) .to(DEFAULT_FROM) .sender(Address.fromHexString("0x0")) .value(Wei.ZERO) .payload(BytesValue.EMPTY) .signature(FAKE_SIGNATURE) .build(); mockProcessorStatusForTransaction(1L, expectedTransaction, Status.SUCCESSFUL, BytesValue.of()); transientTransactionProcessor.process(callParameter, 1L); verifyTransactionWasProcessed(expectedTransaction); }
@Test public void shouldUseDefaultValuesWhenMissingOptionalFields() { final CallParameter callParameter = callParameter(); mockBlockchainForBlockHeader(Hash.ZERO, 1L); mockWorldStateForAccount(Hash.ZERO, Address.fromHexString("0x0"), 1L); final Transaction expectedTransaction = Transaction.builder() .nonce(1L) .gasPrice(Wei.ZERO) .gasLimit(0L) .to(DEFAULT_FROM) .sender(Address.fromHexString("0x0")) .value(Wei.ZERO) .payload(BytesValue.EMPTY) .signature(FAKE_SIGNATURE) .build(); mockProcessorStatusForTransaction(1L, expectedTransaction, Status.SUCCESSFUL, BytesValue.of()); transientTransactionProcessor.process(callParameter, 1L); verifyTransactionWasProcessed(expectedTransaction); }
private Transaction createTransaction(final int transactionNumber) { return Transaction.builder() .gasLimit(100) .gasPrice(Wei.of(5)) .nonce(transactionNumber) .payload(BytesValue.EMPTY) .to(Address.ID) .value(Wei.of(transactionNumber)) .sender(Address.ID) .chainId(1) .signAndBuild(keyPair); }