use of tech.pegasys.teku.api.schema.Attestation in project teku by ConsenSys.
the class EventSubscriptionManager method onNewAttestation.
protected void onNewAttestation(final ValidateableAttestation attestation) {
final Attestation attestationEvent = new Attestation(attestation.getAttestation());
notifySubscribersOfEvent(EventType.attestation, attestationEvent);
}
use of tech.pegasys.teku.api.schema.Attestation in project teku by ConsenSys.
the class GetAggregateAttestation method handle.
@OpenApi(path = ROUTE, method = HttpMethod.GET, summary = "Get aggregated attestations", description = "Aggregates all attestations matching given attestation data root and slot.", tags = { TAG_VALIDATOR, TAG_VALIDATOR_REQUIRED }, queryParams = { @OpenApiParam(name = ATTESTATION_DATA_ROOT, description = "`String` HashTreeRoot of AttestationData that validator wants aggregated.", required = true), @OpenApiParam(name = SLOT, description = "`uint64` Non-finalized slot for which to create the aggregation.", required = true) }, responses = { @OpenApiResponse(status = RES_OK, content = @OpenApiContent(from = GetAggregatedAttestationResponse.class), description = "Returns aggregated `Attestation` object with same `AttestationData` root."), @OpenApiResponse(status = RES_BAD_REQUEST, description = "Invalid parameter supplied"), @OpenApiResponse(status = RES_NOT_FOUND, description = "No matching attestations were found"), @OpenApiResponse(status = RES_FORBIDDEN, description = "Beacon node was not assigned to aggregate on that subnet"), @OpenApiResponse(status = RES_INTERNAL_ERROR, description = "Beacon node internal error.") })
@Override
public void handle(Context ctx) throws Exception {
try {
final Map<String, List<String>> parameters = ctx.queryParamMap();
if (parameters.size() < 2) {
throw new IllegalArgumentException(String.format("Please specify both %s and %s", ATTESTATION_DATA_ROOT, SLOT));
}
Bytes32 beacon_block_root = getParameterValueAsBytes32(parameters, ATTESTATION_DATA_ROOT);
final UInt64 slot = getParameterValueAsUInt64(parameters, SLOT);
ctx.future(provider.createAggregate(slot, beacon_block_root).thenApplyChecked(optionalAttestation -> serializeResult(ctx, optionalAttestation)).exceptionallyCompose(error -> handleError(ctx, error)));
} catch (final IllegalArgumentException e) {
ctx.json(jsonProvider.objectToJSON(new BadRequest(e.getMessage())));
ctx.status(SC_BAD_REQUEST);
}
}
use of tech.pegasys.teku.api.schema.Attestation in project teku by ConsenSys.
the class ValidatorDataProviderTest method submitAttestation_shouldSubmitAnInternalAttestationStructure.
@TestTemplate
void submitAttestation_shouldSubmitAnInternalAttestationStructure() {
tech.pegasys.teku.spec.datastructures.operations.Attestation internalAttestation = dataStructureUtil.randomAttestation();
Attestation attestation = new Attestation(internalAttestation);
final List<SubmitDataError> errors = List.of(new SubmitDataError(ZERO, "Nope"));
final SafeFuture<List<SubmitDataError>> result = SafeFuture.completedFuture(errors);
when(validatorApiChannel.sendSignedAttestations(any())).thenReturn(result);
assertThatSafeFuture(provider.submitAttestations(List.of(attestation))).isCompletedWithOptionalContaining(new PostDataFailureResponse(SC_BAD_REQUEST, ValidatorDataProvider.PARTIAL_PUBLISH_FAILURE_MESSAGE, List.of(new PostDataFailure(ZERO, "Nope"))));
verify(validatorApiChannel).sendSignedAttestations(args.capture());
assertThat(args.getValue()).hasSize(1);
assertThatSszData(args.getValue().get(0)).isEqualByAllMeansTo(internalAttestation);
}
use of tech.pegasys.teku.api.schema.Attestation in project teku by ConsenSys.
the class OkHttpValidatorRestApiClientTest method createAggregate_WhenSuccess_ReturnsAttestation.
@Test
public void createAggregate_WhenSuccess_ReturnsAttestation() {
final Bytes32 attestationHashTreeRoot = Bytes32.random();
final Attestation expectedAttestation = schemaObjects.attestation();
mockWebServer.enqueue(new MockResponse().setResponseCode(SC_OK).setBody(asJson(new GetAggregatedAttestationResponse(expectedAttestation))));
final Optional<Attestation> attestation = apiClient.createAggregate(UInt64.ONE, attestationHashTreeRoot);
assertThat(attestation).isPresent();
assertThat(attestation.get()).usingRecursiveComparison().isEqualTo(expectedAttestation);
}
use of tech.pegasys.teku.api.schema.Attestation in project teku by ConsenSys.
the class OkHttpValidatorRestApiClientTest method sendSignedAttestation_MakesExpectedRequest.
@Test
public void sendSignedAttestation_MakesExpectedRequest() throws Exception {
final Attestation attestation = schemaObjects.attestation();
mockWebServer.enqueue(new MockResponse().setResponseCode(SC_OK));
apiClient.sendSignedAttestations(List.of(attestation));
RecordedRequest request = mockWebServer.takeRequest();
assertThat(request.getMethod()).isEqualTo("POST");
assertThat(request.getPath()).contains(ValidatorApiMethod.SEND_SIGNED_ATTESTATION.getPath(emptyMap()));
assertThat(request.getBody().readString(StandardCharsets.UTF_8)).isEqualTo(asJson(List.of(attestation)));
}
Aggregations