use of org.hyperledger.besu.ethereum.mainnet.ClassicBlockProcessor in project besu by hyperledger.
the class RewardTraceGeneratorTest method assertThatTraceGeneratorReturnValidRewardsForClassicBlockProcessor.
@Test
public void assertThatTraceGeneratorReturnValidRewardsForClassicBlockProcessor() {
final AbstractBlockProcessor.TransactionReceiptFactory transactionReceiptFactory = mock(AbstractBlockProcessor.TransactionReceiptFactory.class);
final ClassicBlockProcessor blockProcessor = new ClassicBlockProcessor(transactionProcessor, transactionReceiptFactory, blockReward, BlockHeader::getCoinbase, true, eraRounds);
when(protocolSpec.getBlockProcessor()).thenReturn(blockProcessor);
final Stream<Trace> traceStream = RewardTraceGenerator.generateFromBlock(protocolSchedule, block);
final Action.Builder actionBlockReward = Action.builder().rewardType("block").author(blockBeneficiary.toHexString()).value(blockProcessor.getCoinbaseReward(blockReward, block.getHeader().getNumber(), 1).toShortHexString());
final Trace blocReward = new RewardTrace.Builder().blockHash(block.getHash().toHexString()).blockNumber(block.getHeader().getNumber()).actionBuilder(actionBlockReward).type("reward").build();
// calculate reward with ClassicBlockProcessor
final Action.Builder actionOmmerReward = Action.builder().rewardType("uncle").author(ommerBeneficiary.toHexString()).value(blockProcessor.getOmmerReward(blockReward, block.getHeader().getNumber(), ommerHeader.getNumber()).toShortHexString());
final Trace ommerReward = new RewardTrace.Builder().blockHash(block.getHash().toHexString()).blockNumber(block.getHeader().getNumber()).actionBuilder(actionOmmerReward).type("reward").build();
final List<Trace> traces = traceStream.collect(Collectors.toList());
// check block reward
assertThat(traces.get(0)).usingRecursiveComparison().isEqualTo(blocReward);
// check ommer reward
assertThat(traces.get(1)).usingRecursiveComparison().isEqualTo(ommerReward);
}
Aggregations