use of org.hyperledger.besu.evm.account.Account in project besu by hyperledger.
the class MainnetTransactionValidatorTest method account.
private Account account(final Wei balance, final long nonce) {
final Account account = mock(Account.class);
when(account.getBalance()).thenReturn(balance);
when(account.getNonce()).thenReturn(nonce);
return account;
}
use of org.hyperledger.besu.evm.account.Account in project besu by hyperledger.
the class MainnetTransactionValidatorTest method shouldAcceptTransactionWhenTransactionNonceAboveAccountNonceAndFutureNonceIsAllowed.
@Test
public void shouldAcceptTransactionWhenTransactionNonceAboveAccountNonceAndFutureNonceIsAllowed() {
final MainnetTransactionValidator validator = new MainnetTransactionValidator(gasCalculator, false, Optional.of(BigInteger.ONE), defaultGoQuorumCompatibilityMode);
final Account account = accountWithNonce(basicTransaction.getNonce() - 1);
assertThat(validator.validateForSender(basicTransaction, account, true)).isEqualTo(ValidationResult.valid());
}
use of org.hyperledger.besu.evm.account.Account in project besu by hyperledger.
the class EthGetCode method resultByBlockHash.
@Override
protected String resultByBlockHash(final JsonRpcRequestContext request, final Hash blockHash) {
final Address address = request.getRequiredParameter(0, Address.class);
if (privacyParameters.isPresent() && privacyParameters.get().getGoQuorumPrivacyParameters().isPresent()) {
// get from private state if we can
final Optional<BlockHeader> blockHeader = blockchainQueries.get().getBlockHeaderByHash(blockHash);
if (blockHeader.isPresent()) {
final MutableWorldState privateState = getPrivateWorldStateAtBlock(privacyParameters.get().getGoQuorumPrivacyParameters(), blockHeader.get());
final Account privAccount = privateState.get(address);
if (privAccount != null) {
return privAccount.getCode().toHexString();
}
}
}
return getBlockchainQueries().getCode(address, blockHash).map(Bytes::toString).orElse(null);
}
use of org.hyperledger.besu.evm.account.Account in project besu by hyperledger.
the class FastWorldStateDownloaderTest method downloadAvailableWorldStateFromPeers.
private void downloadAvailableWorldStateFromPeers(final int peerCount, final int accountCount, final int hashesPerRequest, final int maxOutstandingRequests, final NetworkResponder networkResponder) {
final int trailingPeerCount = 5;
// Setup "remote" state
final WorldStateStorage remoteStorage = new WorldStateKeyValueStorage(new InMemoryKeyValueStorage());
final WorldStateArchive remoteWorldStateArchive = new DefaultWorldStateArchive(remoteStorage, createPreimageStorage());
final MutableWorldState remoteWorldState = remoteWorldStateArchive.getMutable();
// Generate accounts and save corresponding state root
final List<Account> accounts = dataGen.createRandomAccounts(remoteWorldState, accountCount);
final Hash stateRoot = remoteWorldState.rootHash();
// Sanity check
assertThat(stateRoot).isNotEqualTo(EMPTY_TRIE_ROOT);
final BlockHeader header = dataGen.block(BlockOptions.create().setStateRoot(stateRoot).setBlockNumber(10)).getHeader();
// Generate more data that should not be downloaded
final List<Account> otherAccounts = dataGen.createRandomAccounts(remoteWorldState, 5);
final Hash otherStateRoot = remoteWorldState.rootHash();
final BlockHeader otherHeader = dataGen.block(BlockOptions.create().setStateRoot(otherStateRoot).setBlockNumber(11)).getHeader();
// Sanity check
assertThat(otherStateRoot).isNotEqualTo(stateRoot);
final InMemoryTasksPriorityQueues<NodeDataRequest> taskCollection = new InMemoryTasksPriorityQueues<>();
final WorldStateStorage localStorage = new WorldStateKeyValueStorage(new InMemoryKeyValueStorage());
final WorldStateArchive localWorldStateArchive = new DefaultWorldStateArchive(localStorage, createPreimageStorage());
final SynchronizerConfiguration syncConfig = SynchronizerConfiguration.builder().worldStateHashCountPerRequest(hashesPerRequest).worldStateRequestParallelism(maxOutstandingRequests).build();
final WorldStateDownloader downloader = createDownloader(syncConfig, ethProtocolManager.ethContext(), localStorage, taskCollection);
// Create some peers that can respond
final List<RespondingEthPeer> usefulPeers = Stream.generate(() -> EthProtocolManagerTestUtil.createPeer(ethProtocolManager, header.getNumber())).limit(peerCount).collect(Collectors.toList());
// And some irrelevant peers
final List<RespondingEthPeer> trailingPeers = Stream.generate(() -> EthProtocolManagerTestUtil.createPeer(ethProtocolManager, header.getNumber() - 1L)).limit(trailingPeerCount).collect(Collectors.toList());
// Start downloader
final CompletableFuture<?> result = downloader.run(null, new FastSyncState(header));
// A second run should return an error without impacting the first result
final CompletableFuture<?> secondResult = downloader.run(null, new FastSyncState(header));
assertThat(secondResult).isCompletedExceptionally();
assertThat(result).isNotCompletedExceptionally();
// Respond to node data requests
// Send one round of full responses, so that we can get multiple requests queued up
final RespondingEthPeer.Responder fullResponder = RespondingEthPeer.blockchainResponder(mock(Blockchain.class), remoteWorldStateArchive);
for (final RespondingEthPeer peer : usefulPeers) {
peer.respond(fullResponder);
}
// Respond to remaining queued requests in custom way
networkResponder.respond(usefulPeers, remoteWorldStateArchive, result);
// Check that trailing peers were not queried for data
for (final RespondingEthPeer trailingPeer : trailingPeers) {
assertThat(trailingPeer.hasOutstandingRequests()).isFalse();
}
// Check that all expected account data was downloaded
final WorldState localWorldState = localWorldStateArchive.get(stateRoot, null).get();
assertThat(result).isDone();
assertAccountsMatch(localWorldState, accounts);
// We shouldn't have any extra data locally
assertThat(localStorage.contains(otherHeader.getStateRoot())).isFalse();
for (final Account otherAccount : otherAccounts) {
assertThat(localWorldState.get(otherAccount.getAddress())).isNull();
}
}
use of org.hyperledger.besu.evm.account.Account in project besu by hyperledger.
the class FastWorldStateDownloaderTest method canRecoverFromTimeouts.
@Test
public void canRecoverFromTimeouts() {
final DeterministicEthScheduler.TimeoutPolicy timeoutPolicy = DeterministicEthScheduler.TimeoutPolicy.timeoutXTimes(2);
final EthProtocolManager ethProtocolManager = EthProtocolManagerTestUtil.create(timeoutPolicy);
final MockExecutorService serviceExecutor = ((DeterministicEthScheduler) ethProtocolManager.ethContext().getScheduler()).mockServiceExecutor();
serviceExecutor.setAutoRun(false);
// Setup "remote" state
final WorldStateArchive remoteWorldStateArchive = createInMemoryWorldStateArchive();
final MutableWorldState remoteWorldState = remoteWorldStateArchive.getMutable();
// Generate accounts and save corresponding state root
final List<Account> accounts = dataGen.createRandomAccounts(remoteWorldState, 20);
final Hash stateRoot = remoteWorldState.rootHash();
// Sanity check
assertThat(stateRoot).isNotEqualTo(EMPTY_TRIE_ROOT);
final BlockHeader header = dataGen.block(BlockOptions.create().setStateRoot(stateRoot).setBlockNumber(10)).getHeader();
// Create some peers
final List<RespondingEthPeer> peers = Stream.generate(() -> EthProtocolManagerTestUtil.createPeer(ethProtocolManager, header.getNumber())).limit(5).collect(Collectors.toList());
final InMemoryTasksPriorityQueues<NodeDataRequest> taskCollection = new InMemoryTasksPriorityQueues<>();
final WorldStateStorage localStorage = new WorldStateKeyValueStorage(new InMemoryKeyValueStorage());
final WorldStateDownloader downloader = createDownloader(ethProtocolManager.ethContext(), localStorage, taskCollection);
final FastSyncState fastSyncState = new FastSyncState(header);
final CompletableFuture<Void> result = downloader.run(null, fastSyncState);
serviceExecutor.runPendingFuturesInSeparateThreads(persistenceThread);
// Respond to node data requests
final RespondingEthPeer.Responder responder = RespondingEthPeer.blockchainResponder(mock(Blockchain.class), remoteWorldStateArchive);
respondUntilDone(peers, responder, result);
// Check that all expected account data was downloaded
final WorldStateArchive localWorldStateArchive = new DefaultWorldStateArchive(localStorage, createPreimageStorage());
final WorldState localWorldState = localWorldStateArchive.get(stateRoot, null).get();
assertThat(result).isDone();
assertAccountsMatch(localWorldState, accounts);
}
Aggregations