private void mockBlockchainForBlockHeader(final Hash stateRoot, final long blockNumber) { final BlockHeader blockHeader = mock(BlockHeader.class); when(blockHeader.getStateRoot()).thenReturn(stateRoot); when(blockHeader.getNumber()).thenReturn(blockNumber); when(blockchain.getBlockHeader(blockNumber)).thenReturn(Optional.of(blockHeader)); }
@Override protected List<BytesValue> generateDataToBeRequested() { final List<BytesValue> requestedData = new ArrayList<>(); for (int i = 0; i < 3; i++) { final BlockHeader blockHeader = blockchain.getBlockHeader(10 + i).get(); requestedData.add( protocolContext.getWorldStateArchive().getNodeData(blockHeader.getStateRoot()).get()); } return requestedData; }
@Test public void createFromJsonNoAllocs() throws Exception { final GenesisState genesisState = GenesisState.fromJson( Resources.toString(GenesisStateTest.class.getResource("genesis2.json"), Charsets.UTF_8), MainnetProtocolSchedule.create()); final BlockHeader header = genesisState.getBlock().getHeader(); assertThat(header.getStateRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); assertThat(header.getTransactionsRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); assertThat(header.getReceiptsRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); assertThat(header.getOmmersHash()).isEqualTo(Hash.EMPTY_LIST_HASH); assertThat(header.getExtraData()).isEqualTo(BytesValue.EMPTY); assertThat(header.getParentHash()).isEqualTo(Hash.ZERO); }
@Before public void setUp() throws Exception { transactionTracer = new TransactionTracer(new BlockReplay(protocolSchedule, blockchain, worldStateArchive)); when(transaction.hash()).thenReturn(transactionHash); when(otherTransaction.hash()).thenReturn(otherTransactionHash); when(blockHeader.getNumber()).thenReturn(12L); when(blockHeader.getHash()).thenReturn(blockHash); when(blockHeader.getParentHash()).thenReturn(previousBlockHash); when(previousBlockHeader.getStateRoot()).thenReturn(Hash.ZERO); when(worldStateArchive.getMutable(Hash.ZERO)).thenReturn(mutableWorldState); when(protocolSchedule.getByBlockNumber(12)).thenReturn(protocolSpec); when(protocolSpec.getTransactionProcessor()).thenReturn(transactionProcessor); when(protocolSpec.getMiningBeneficiaryCalculator()).thenReturn(BlockHeader::getCoinbase); }
private void assertBlockResultMatchesBlock(final JsonObject result, final Block block) { final BlockHeader header = block.getHeader(); assertThat(Hash.fromHexString(result.getString("parentHash"))) .isEqualTo(header.getParentHash()); assertThat(Hash.fromHexString(result.getString("sha3Uncles"))) .isEqualTo(header.getOmmersHash()); assertThat(Hash.fromHexString(result.getString("transactionsRoot"))) .isEqualTo(header.getTransactionsRoot()); assertThat(Hash.fromHexString(result.getString("stateRoot"))).isEqualTo(header.getStateRoot()); assertThat(Hash.fromHexString(result.getString("receiptsRoot"))) .isEqualTo(header.getReceiptsRoot()); assertThat(Address.fromHexString(result.getString("miner"))).isEqualTo(header.getCoinbase()); assertThat(UInt256.fromHexString(result.getString("difficulty"))) .isEqualTo(header.getDifficulty()); assertThat(BytesValue.fromHexString(result.getString("extraData"))) .isEqualTo(header.getExtraData()); assertThat(hexStringToInt(result.getString("size"))).isEqualTo(block.calculateSize()); assertThat(Long.decode(result.getString("gasLimit"))).isEqualTo(header.getGasLimit()); assertThat(Long.decode(result.getString("gasUsed"))).isEqualTo(header.getGasUsed()); assertThat(Long.decode(result.getString("timestamp"))).isEqualTo(header.getTimestamp()); assertThat(Long.decode(result.getString("number"))).isEqualTo(header.getNumber()); // Nonce is a data field and should represent 8 bytes exactly final String nonceResult = result.getString("nonce").toLowerCase(); assertThat(nonceResult.length() == 18 && nonceResult.startsWith("0x")).isTrue(); assertThat(Long.parseUnsignedLong(nonceResult.substring(2), 16)).isEqualTo(header.getNonce()); assertThat(Hash.fromHexString(result.getString("hash"))).isEqualTo(header.getHash()); assertThat(LogsBloomFilter.fromHexString(result.getString("logsBloom"))) .isEqualTo(header.getLogsBloom()); }
for (int i = 0; i < blockCount; i++) { final BlockHeader header = blockchain.getBlockHeader(startBlock + i).get(); requestedHashes.add(header.getStateRoot()); expectedResults.add(worldStateArchive.getNodeData(header.getStateRoot()).get());
@Test public void createFromJsonWithAllocs() throws Exception { final GenesisState genesisState = GenesisState.fromJson( Resources.toString(GenesisStateTest.class.getResource("genesis1.json"), Charsets.UTF_8), MainnetProtocolSchedule.create()); final BlockHeader header = genesisState.getBlock().getHeader(); assertThat(header.getStateRoot()) .isEqualTo( Hash.fromHexString( "0x92683e6af0f8a932e5fe08c870f2ae9d287e39d4518ec544b0be451f1035fd39")); assertThat(header.getTransactionsRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); assertThat(header.getReceiptsRoot()).isEqualTo(Hash.EMPTY_TRIE_HASH); assertThat(header.getOmmersHash()).isEqualTo(Hash.EMPTY_LIST_HASH); assertThat(header.getExtraData()).isEqualTo(BytesValue.EMPTY); assertThat(header.getParentHash()).isEqualTo(Hash.ZERO); final DefaultMutableWorldState worldState = new DefaultMutableWorldState( new KeyValueStorageWorldStateStorage(new InMemoryKeyValueStorage())); genesisState.writeStateTo(worldState); final Account first = worldState.get(Address.fromHexString("0x0000000000000000000000000000000000000001")); final Account second = worldState.get(Address.fromHexString("0x0000000000000000000000000000000000000002")); assertThat(first).isNotNull(); assertThat(first.getBalance().toLong()).isEqualTo(111111111L); assertThat(second).isNotNull(); assertThat(second.getBalance().toLong()).isEqualTo(222222222L); }
@Test public void getAccountBalanceAtBlockNumber() { final List<Address> addresses = Arrays.asList(gen.address(), gen.address(), gen.address()); final int blockCount = 3; final BlockchainWithData data = setupBlockchain(blockCount, addresses); final BlockchainQueries queries = data.blockchainQueries; for (int i = 0; i < blockCount; i++) { final long curBlockNumber = i; final Hash stateRoot = data.blockData.get(i).block.getHeader().getStateRoot(); final WorldState worldState = data.worldStateArchive.get(stateRoot); assertTrue(addresses.size() > 0); addresses.forEach( address -> { final Account actualAccount = worldState.get(address); final Wei result = queries.accountBalance(address, curBlockNumber).get(); assertEquals(actualAccount.getBalance(), result); }); } }
@Test public void getAccountStorageBlockNumber() { final List<Address> addresses = Arrays.asList(gen.address(), gen.address(), gen.address()); final List<UInt256> storageKeys = Arrays.asList(gen.storageKey(), gen.storageKey(), gen.storageKey()); final BlockchainWithData data = setupBlockchain(3, addresses, storageKeys); final BlockchainQueries queries = data.blockchainQueries; final Hash latestStateRoot0 = data.blockData.get(2).block.getHeader().getStateRoot(); final WorldState worldState0 = data.worldStateArchive.get(latestStateRoot0); addresses.forEach( address -> storageKeys.forEach( storageKey -> { final Account actualAccount0 = worldState0.get(address); final UInt256 result = queries.storageAt(address, storageKey, 2L).get(); assertEquals(actualAccount0.getStorageValue(storageKey), result); })); final Hash latestStateRoot1 = data.blockData.get(1).block.getHeader().getStateRoot(); final WorldState worldState1 = data.worldStateArchive.get(latestStateRoot1); addresses.forEach( address -> storageKeys.forEach( storageKey -> { final Account actualAccount1 = worldState1.get(address); final UInt256 result = queries.storageAt(address, storageKey, 1L).get(); assertEquals(actualAccount1.getStorageValue(storageKey), result); })); }
public static void executeTest(final BlockchainReferenceTestCaseSpec spec) { final MutableWorldState worldState = spec.getWorldStateArchive().getMutable(spec.getGenesisBlockHeader().getStateRoot()); final BlockHeader genesisBlockHeader = spec.getGenesisBlockHeader(); assertThat(worldState.rootHash()).isEqualTo(genesisBlockHeader.getStateRoot());
assertThat(localStorage.contains(otherHeader.getStateRoot())).isFalse(); for (Account otherAccount : otherAccounts) { assertThat(localWorldState.get(otherAccount.getAddress())).isNull();