class SlashingProtectedSigner implements Signer {

  @Override
  public SafeFuture<BLSSignature> signBlock(final BeaconBlock block, final ForkInfo forkInfo) {
    return slashingProtector
        .maySignBlock(validatorPublicKey, forkInfo.getGenesisValidatorsRoot(), block.getSlot())
        .thenAccept(verifySigningAllowed(slashableBlockMessage(block)))
        .thenCompose(__ -> delegate.signBlock(block, forkInfo));
  }

  public  SlashingProtectedSigner(
      final BLSPublicKey validatorPublicKey,
      final SlashingProtector slashingProtector,
      final Signer delegate);

}