@Test public void nonVoteBlendedIntoHeaderResultsInACoinbaseOfZero() { final BlockHeaderBuilder builderWithVote = CliqueBlockInterface.insertVoteToHeaderBuilder(builder, Optional.empty()); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(AddressHelpers.ofValue(0)); assertThat(header.getNonce()).isEqualTo(0x0L); }
@Test public void nonVoteBlendedIntoHeaderResultsInACoinbaseOfZero() { final BlockHeaderBuilder builderWithVote = IbftLegacyBlockInterface.insertVoteToHeaderBuilder(builder, Optional.empty()); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(AddressHelpers.ofValue(0)); assertThat(header.getNonce()).isEqualTo(0x0L); }
@Test public void traceTransactionShouldReturnResultFromProcessTransaction() { final Result result = mock(Result.class); when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockHeader(previousBlockHash)).thenReturn(Optional.of(previousBlockHeader)); when(blockBody.getTransactions()).thenReturn(Collections.singletonList(transaction)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.of(blockBody)); final WorldUpdater updater = mutableWorldState.updater(); final Address coinbase = blockHeader.getCoinbase(); when(transactionProcessor.processTransaction( eq(blockchain), eq(updater), eq(blockHeader), eq(transaction), eq(coinbase), eq(tracer), any())) .thenReturn(result); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(result, transactionTrace.get().getResult()); }
@Test public void blendingDropVoteToHeaderResultsInHeaderWithNonceOfZero() { final ValidatorVote vote = new ValidatorVote(DROP, AddressHelpers.ofValue(1), AddressHelpers.ofValue(2)); final BlockHeaderBuilder builderWithVote = CliqueBlockInterface.insertVoteToHeaderBuilder(builder, Optional.of(vote)); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(vote.getRecipient()); assertThat(header.getNonce()).isEqualTo(0x0L); }
@Test public void blendingAddVoteToHeaderResultsInHeaderWithNonceOfMaxLong() { final ValidatorVote vote = new ValidatorVote(ADD, AddressHelpers.ofValue(1), AddressHelpers.ofValue(2)); final BlockHeaderBuilder builderWithVote = CliqueBlockInterface.insertVoteToHeaderBuilder(builder, Optional.of(vote)); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(vote.getRecipient()); assertThat(header.getNonce()).isEqualTo(0xFFFFFFFFFFFFFFFFL); }
@Test public void blendingAddVoteToHeaderResultsInHeaderWithNonceOfMaxLong() { final ValidatorVote vote = new ValidatorVote(ADD, AddressHelpers.ofValue(1), AddressHelpers.ofValue(2)); final BlockHeaderBuilder builderWithVote = IbftLegacyBlockInterface.insertVoteToHeaderBuilder(builder, Optional.of(vote)); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(vote.getRecipient()); assertThat(header.getNonce()).isEqualTo(0xFFFFFFFFFFFFFFFFL); }
@Test public void blendingDropVoteToHeaderResultsInHeaderWithNonceOfZero() { final ValidatorVote vote = new ValidatorVote(DROP, AddressHelpers.ofValue(1), AddressHelpers.ofValue(2)); final BlockHeaderBuilder builderWithVote = IbftLegacyBlockInterface.insertVoteToHeaderBuilder(builder, Optional.of(vote)); final BlockHeader header = builderWithVote.buildBlockHeader(); assertThat(header.getCoinbase()).isEqualTo(vote.getRecipient()); assertThat(header.getNonce()).isEqualTo(0x0L); }
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()); }
@Test public void headerWithNonceOfZeroReportsDropVote() { headerBuilder.coinbase(AddressHelpers.ofValue(1)).nonce(0L); final Optional<ValidatorVote> extractedVote = blockInterface.extractVoteFromHeader(header); assertThat(extractedVote) .contains(new ValidatorVote(DROP, proposerAddress, header.getCoinbase())); }
@Test public void headerWithNonceOfMaxLongReportsAddVote() { headerBuilder.nonce(0xFFFFFFFFFFFFFFFFL).coinbase(AddressHelpers.ofValue(2)); final BlockHeader header = TestHelpers.createIbftSignedBlockHeader(headerBuilder, proposerKeys, validatorList); final Optional<ValidatorVote> extractedVote = blockInterface.extractVoteFromHeader(header); assertThat(extractedVote) .contains(new ValidatorVote(ADD, proposerAddress, header.getCoinbase())); }
@Test public void headerWithNonceOfMaxLongReportsAddVote() { headerBuilder.coinbase(AddressHelpers.ofValue(2)).nonce(0xFFFFFFFFFFFFFFFFL); final BlockHeader header = TestHelpers.createCliqueSignedBlockHeader(headerBuilder, proposerKeys, validatorList); final Optional<ValidatorVote> extractedVote = blockInterface.extractVoteFromHeader(header); assertThat(extractedVote) .contains(new ValidatorVote(ADD, proposerAddress, header.getCoinbase())); }
@Test public void headerWithNonceOfZeroReportsDropVote() { headerBuilder.nonce(0x0L).coinbase(AddressHelpers.ofValue(2)); final BlockHeader header = TestHelpers.createIbftSignedBlockHeader(headerBuilder, proposerKeys, validatorList); final Optional<ValidatorVote> extractedVote = blockInterface.extractVoteFromHeader(header); assertThat(extractedVote) .contains(new ValidatorVote(DROP, proposerAddress, header.getCoinbase())); }
@Test public void insertsValidVoteIntoConstructedBlock() { final CliqueExtraData extraData = new CliqueExtraData(BytesValue.wrap(new byte[32]), null, validatorList); final Address a1 = Address.fromHexString("5"); voteProposer.auth(a1); final Address coinbase = AddressHelpers.ofValue(1); final CliqueBlockCreator blockCreator = new CliqueBlockCreator( coinbase, parent -> extraData.encode(), new PendingTransactions(5), protocolContext, protocolSchedule, gasLimit -> gasLimit, proposerKeyPair, Wei.ZERO, blockchain.getChainHeadHeader()); final Block createdBlock = blockCreator.createBlock(0L); assertThat(createdBlock.getHeader().getNonce()).isEqualTo(CliqueBlockInterface.ADD_NONCE); assertThat(createdBlock.getHeader().getCoinbase()).isEqualTo(a1); }
@Test public void insertsNoVoteWhenAuthInValidators() { final CliqueExtraData extraData = new CliqueExtraData(BytesValue.wrap(new byte[32]), null, validatorList); final Address a1 = Util.publicKeyToAddress(otherKeyPair.getPublicKey()); voteProposer.auth(a1); final Address coinbase = AddressHelpers.ofValue(1); final CliqueBlockCreator blockCreator = new CliqueBlockCreator( coinbase, parent -> extraData.encode(), new PendingTransactions(5), protocolContext, protocolSchedule, gasLimit -> gasLimit, proposerKeyPair, Wei.ZERO, blockchain.getChainHeadHeader()); final Block createdBlock = blockCreator.createBlock(0L); assertThat(createdBlock.getHeader().getNonce()).isEqualTo(CliqueBlockInterface.DROP_NONCE); assertThat(createdBlock.getHeader().getCoinbase()).isEqualTo(Address.fromHexString("0")); } }
blockHeader, transaction, blockHeader.getCoinbase(), new BlockHashLookup(blockHeader, blockchain)); final Account coinbase = worldStateUpdater.getOrCreate(spec.blockHeader().getCoinbase()); if (coinbase != null && coinbase.isEmpty() && shouldClearEmptyAccounts(spec.eip())) { worldStateUpdater.deleteAccount(coinbase.getAddress());
.depth(execEnv.getDepth()) .completer(c -> {}) .miningBeneficiary(execEnv.getBlockHeader().getCoinbase()) .blockHashLookup(new BlockHashLookup(execEnv.getBlockHeader(), blockchain)) .build();