### Question:
IbftBlockHashing { public static List<Address> recoverCommitterAddresses( final BlockHeader header, final IbftExtraData ibftExtraData) { final Hash committerHash = IbftBlockHashing.calculateDataHashForCommittedSeal(header, ibftExtraData); return ibftExtraData.getSeals().stream() .map(p -> Util.signatureToAddress(p, committerHash)) .collect(Collectors.toList()); }  static Hash calculateDataHashForCommittedSeal(
      final BlockHeader header, final IbftExtraData ibftExtraData); static Hash calculateDataHashForCommittedSeal(final BlockHeader header); static Hash calculateHashOfIbftBlockOnChain(final BlockHeader header); static List<Address> recoverCommitterAddresses(
      final BlockHeader header, final IbftExtraData ibftExtraData);  }### Answer:
@Test public void testRecoverCommitterAddresses() { List<Address> actualCommitterAddresses = IbftBlockHashing.recoverCommitterAddresses( HEADER_TO_BE_HASHED, IbftExtraData.decode(HEADER_TO_BE_HASHED)); List<Address> expectedCommitterAddresses = COMMITTERS_NODE_KEYS.stream() .map(nodeKey -> Util.publicKeyToAddress(nodeKey.getPublicKey())) .collect(Collectors.toList()); assertThat(actualCommitterAddresses).isEqualTo(expectedCommitterAddresses); }