### Question:
IbftBlockHashing { public static Address recoverProposerAddress( final BlockHeader header, final IbftExtraData ibftExtraData) { final Hash proposerHash = calculateDataHashForProposerSeal(header, ibftExtraData); return Util.signatureToAddress(ibftExtraData.getProposerSeal(), proposerHash); }  static Hash calculateDataHashForProposerSeal(
      final BlockHeader header, final IbftExtraData ibftExtraData); static Hash calculateDataHashForCommittedSeal(
      final BlockHeader header, final IbftExtraData ibftExtraData); static Hash calculateHashOfIbftBlockOnChain(final BlockHeader header); static Address recoverProposerAddress(
      final BlockHeader header, final IbftExtraData ibftExtraData); static List<Address> recoverCommitterAddresses(
      final BlockHeader header, final IbftExtraData ibftExtraData);  }### Answer:
@Test public void recoverProposerAddressFromSeal() { final IbftExtraData ibftExtraData = IbftExtraData.decode(header); final Address proposerAddress = IbftBlockHashing.recoverProposerAddress(header, ibftExtraData); assertThat(proposerAddress).isEqualTo(PROPOSER_IN_HEADER); }