@Test void getUnsignedBeaconBlockAtSlot_throwsWithoutSlotDefined() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> provider.getUnsignedBeaconBlockAtSlot(null, null, Optional.empty())); }
public SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot( UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti) { if (slot == null) { throw new IllegalArgumentException(NO_SLOT_PROVIDED); } if (randao == null) { throw new IllegalArgumentException(NO_RANDAO_PROVIDED); } UInt64 bestSlot = combinedChainDataClient.getHeadSlot(); if (bestSlot.plus(SLOTS_PER_EPOCH).isLessThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_FAR_FUTURE_BLOCK); } if (bestSlot.isGreaterThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_HISTORIC_BLOCK); } return validatorApiChannel .createUnsignedBlock( slot, tech.pegasys.teku.bls.BLSSignature.fromBytesCompressed(randao.getBytes()), graffiti) .thenApply(maybeBlock -> maybeBlock.map(BeaconBlock::new)); }
ValidatorDataProvider { public SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot( UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti) { if (slot == null) { throw new IllegalArgumentException(NO_SLOT_PROVIDED); } if (randao == null) { throw new IllegalArgumentException(NO_RANDAO_PROVIDED); } UInt64 bestSlot = combinedChainDataClient.getHeadSlot(); if (bestSlot.plus(SLOTS_PER_EPOCH).isLessThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_FAR_FUTURE_BLOCK); } if (bestSlot.isGreaterThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_HISTORIC_BLOCK); } return validatorApiChannel .createUnsignedBlock( slot, tech.pegasys.teku.bls.BLSSignature.fromBytesCompressed(randao.getBytes()), graffiti) .thenApply(maybeBlock -> maybeBlock.map(BeaconBlock::new)); } }
ValidatorDataProvider { public SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot( UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti) { if (slot == null) { throw new IllegalArgumentException(NO_SLOT_PROVIDED); } if (randao == null) { throw new IllegalArgumentException(NO_RANDAO_PROVIDED); } UInt64 bestSlot = combinedChainDataClient.getHeadSlot(); if (bestSlot.plus(SLOTS_PER_EPOCH).isLessThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_FAR_FUTURE_BLOCK); } if (bestSlot.isGreaterThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_HISTORIC_BLOCK); } return validatorApiChannel .createUnsignedBlock( slot, tech.pegasys.teku.bls.BLSSignature.fromBytesCompressed(randao.getBytes()), graffiti) .thenApply(maybeBlock -> maybeBlock.map(BeaconBlock::new)); } ValidatorDataProvider(
      final ValidatorApiChannel validatorApiChannel,
      final BlockImporter blockImporter,
      final CombinedChainDataClient combinedChainDataClient); }
ValidatorDataProvider { public SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot( UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti) { if (slot == null) { throw new IllegalArgumentException(NO_SLOT_PROVIDED); } if (randao == null) { throw new IllegalArgumentException(NO_RANDAO_PROVIDED); } UInt64 bestSlot = combinedChainDataClient.getHeadSlot(); if (bestSlot.plus(SLOTS_PER_EPOCH).isLessThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_FAR_FUTURE_BLOCK); } if (bestSlot.isGreaterThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_HISTORIC_BLOCK); } return validatorApiChannel .createUnsignedBlock( slot, tech.pegasys.teku.bls.BLSSignature.fromBytesCompressed(randao.getBytes()), graffiti) .thenApply(maybeBlock -> maybeBlock.map(BeaconBlock::new)); } ValidatorDataProvider(
      final ValidatorApiChannel validatorApiChannel,
      final BlockImporter blockImporter,
      final CombinedChainDataClient combinedChainDataClient); boolean isStoreAvailable(); boolean isEpochFinalized(final UInt64 epoch); SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot(
      UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti); SafeFuture<Optional<Attestation>> createUnsignedAttestationAtSlot(
      UInt64 slot, int committeeIndex); SafeFuture<Optional<List<ValidatorDuties>>> getValidatorDutiesByRequest(
      final ValidatorDutiesRequest validatorDutiesRequest); void submitAttestation(Attestation attestation); SafeFuture<ValidatorBlockResult> submitSignedBlock(
      final SignedBeaconBlock signedBeaconBlock); SafeFuture<Optional<Attestation>> createAggregate(final Bytes32 attestationHashTreeRoot); void sendAggregateAndProof(SignedAggregateAndProof aggregateAndProof); void subscribeToBeaconCommitteeForAggregation(
      final SubscribeToBeaconCommitteeRequest request); void subscribeToPersistentSubnets(final List<SubnetSubscription> subnetSubscriptions); SafeFuture<Optional<List<AttesterDuty>>> getAttesterDuties(
      final UInt64 epoch, final List<Integer> indexes); SafeFuture<Optional<List<ProposerDuty>>> getProposerDuties(final UInt64 epoch); }
ValidatorDataProvider { public SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot( UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti) { if (slot == null) { throw new IllegalArgumentException(NO_SLOT_PROVIDED); } if (randao == null) { throw new IllegalArgumentException(NO_RANDAO_PROVIDED); } UInt64 bestSlot = combinedChainDataClient.getHeadSlot(); if (bestSlot.plus(SLOTS_PER_EPOCH).isLessThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_FAR_FUTURE_BLOCK); } if (bestSlot.isGreaterThan(slot)) { throw new IllegalArgumentException(CANNOT_PRODUCE_HISTORIC_BLOCK); } return validatorApiChannel .createUnsignedBlock( slot, tech.pegasys.teku.bls.BLSSignature.fromBytesCompressed(randao.getBytes()), graffiti) .thenApply(maybeBlock -> maybeBlock.map(BeaconBlock::new)); } ValidatorDataProvider(
      final ValidatorApiChannel validatorApiChannel,
      final BlockImporter blockImporter,
      final CombinedChainDataClient combinedChainDataClient); boolean isStoreAvailable(); boolean isEpochFinalized(final UInt64 epoch); SafeFuture<Optional<BeaconBlock>> getUnsignedBeaconBlockAtSlot(
      UInt64 slot, BLSSignature randao, Optional<Bytes32> graffiti); SafeFuture<Optional<Attestation>> createUnsignedAttestationAtSlot(
      UInt64 slot, int committeeIndex); SafeFuture<Optional<List<ValidatorDuties>>> getValidatorDutiesByRequest(
      final ValidatorDutiesRequest validatorDutiesRequest); void submitAttestation(Attestation attestation); SafeFuture<ValidatorBlockResult> submitSignedBlock(
      final SignedBeaconBlock signedBeaconBlock); SafeFuture<Optional<Attestation>> createAggregate(final Bytes32 attestationHashTreeRoot); void sendAggregateAndProof(SignedAggregateAndProof aggregateAndProof); void subscribeToBeaconCommitteeForAggregation(
      final SubscribeToBeaconCommitteeRequest request); void subscribeToPersistentSubnets(final List<SubnetSubscription> subnetSubscriptions); SafeFuture<Optional<List<AttesterDuty>>> getAttesterDuties(
      final UInt64 epoch, final List<Integer> indexes); SafeFuture<Optional<List<ProposerDuty>>> getProposerDuties(final UInt64 epoch); static final String CANNOT_PRODUCE_FAR_FUTURE_BLOCK; static final String CANNOT_PRODUCE_HISTORIC_BLOCK; static final String NO_SLOT_PROVIDED; static final String NO_RANDAO_PROVIDED; }