Skip to content

Commit 986c062

Browse files
committed
Merge branch 'master' into sync-committee-duties
# Conflicts: # validator/remote/src/integration-test/java/tech/pegasys/teku/validator/remote/typedef/OkHttpValidatorTypeDefClientTest.java # validator/remote/src/main/java/tech/pegasys/teku/validator/remote/apiclient/OkHttpValidatorRestApiClient.java # validator/remote/src/main/java/tech/pegasys/teku/validator/remote/apiclient/ValidatorRestApiClient.java # validator/remote/src/main/java/tech/pegasys/teku/validator/remote/typedef/OkHttpValidatorTypeDefClient.java
2 parents 065b5f6 + 7870a5e commit 986c062

File tree

9 files changed

+101
-257
lines changed

9 files changed

+101
-257
lines changed

Diff for: data/serializer/src/main/java/tech/pegasys/teku/api/response/v1/validator/AttesterDuty.java

-124
This file was deleted.

Diff for: data/serializer/src/main/java/tech/pegasys/teku/api/response/v1/validator/PostAttesterDutiesResponse.java

-78
This file was deleted.

Diff for: validator/remote/src/integration-test/java/tech/pegasys/teku/validator/remote/typedef/OkHttpValidatorTypeDefClientTest.java

+40
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.assertj.core.api.Assumptions.assumeThat;
2121
import static tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorDataBuilder.STATE_VALIDATORS_RESPONSE_TYPE;
2222
import static tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDutiesBuilder.SYNC_COMMITTEE_DUTIES_TYPE;
23+
import static tech.pegasys.teku.ethereum.json.types.validator.AttesterDutiesBuilder.ATTESTER_DUTIES_RESPONSE_TYPE;
2324
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_BAD_REQUEST;
2425
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_METHOD_NOT_ALLOWED;
2526
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_NOT_FOUND;
@@ -44,6 +45,8 @@
4445
import tech.pegasys.teku.api.exceptions.RemoteServiceNotAvailableException;
4546
import tech.pegasys.teku.api.response.v1.beacon.ValidatorStatus;
4647
import tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorData;
48+
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties;
49+
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuty;
4750
import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDuties;
4851
import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDuty;
4952
import tech.pegasys.teku.infrastructure.ssz.SszDataAssert;
@@ -447,6 +450,43 @@ public void postSyncDuties_WhenSuccess_ReturnsResponse()
447450
assertThat(result.get()).isEqualTo(response);
448451
}
449452

453+
@TestTemplate
454+
public void postAttesterDuties_WhenSuccess_ReturnsResponse()
455+
throws JsonProcessingException, InterruptedException {
456+
final List<AttesterDuty> duties = List.of(randomAttesterDuty(), randomAttesterDuty());
457+
final AttesterDuties response =
458+
new AttesterDuties(true, dataStructureUtil.randomBytes32(), duties);
459+
460+
final String body = serialize(response, ATTESTER_DUTIES_RESPONSE_TYPE);
461+
mockWebServer.enqueue(new MockResponse().setResponseCode(SC_OK).setBody(body));
462+
463+
final UInt64 epoch = UInt64.ONE;
464+
final IntList validatorIndices = IntList.of(1, 2);
465+
Optional<AttesterDuties> result =
466+
okHttpValidatorTypeDefClient.postAttesterDuties(epoch, validatorIndices);
467+
468+
final RecordedRequest recordedRequest = mockWebServer.takeRequest();
469+
assertThat(recordedRequest.getPath()).isEqualTo("/eth/v1/validator/duties/attester/" + epoch);
470+
assertThat(recordedRequest.getMethod()).isEqualTo("POST");
471+
assertThat(recordedRequest.getHeader("Content-Type")).isEqualTo(JSON_CONTENT_TYPE);
472+
assertThat(recordedRequest.getBody().readByteArray())
473+
.isEqualTo("[\"1\",\"2\"]".getBytes(UTF_8));
474+
475+
assertThat(result).isPresent();
476+
assertThat(result.get()).isEqualTo(response);
477+
}
478+
479+
private AttesterDuty randomAttesterDuty() {
480+
return new AttesterDuty(
481+
dataStructureUtil.randomPublicKey(),
482+
dataStructureUtil.randomValidatorIndex().intValue(),
483+
dataStructureUtil.randomPositiveInt(),
484+
dataStructureUtil.randomPositiveInt(),
485+
dataStructureUtil.randomPositiveInt(),
486+
dataStructureUtil.randomPositiveInt(),
487+
dataStructureUtil.randomSlot());
488+
}
489+
450490
private void verifyRegisterValidatorsPostRequest(
451491
final RecordedRequest recordedRequest, final String expectedContentType) {
452492
assertThat(recordedRequest.getPath()).isEqualTo("/eth/v1/validator/register_validator");

Diff for: validator/remote/src/main/java/tech/pegasys/teku/validator/remote/RemoteValidatorApiHandler.java

+1-23
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import tech.pegasys.teku.bls.BLSSignature;
4545
import tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorData;
4646
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties;
47-
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuty;
4847
import tech.pegasys.teku.ethereum.json.types.validator.BeaconCommitteeSelectionProof;
4948
import tech.pegasys.teku.ethereum.json.types.validator.ProposerDuties;
5049
import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDuties;
@@ -205,16 +204,7 @@ private <T> Map<BLSPublicKey, T> convertToValidatorMapTypeDef(
205204
@Override
206205
public SafeFuture<Optional<AttesterDuties>> getAttestationDuties(
207206
final UInt64 epoch, final IntCollection validatorIndices) {
208-
return sendRequest(
209-
() ->
210-
apiClient
211-
.getAttestationDuties(epoch, validatorIndices)
212-
.map(
213-
response ->
214-
new AttesterDuties(
215-
response.executionOptimistic,
216-
response.dependentRoot,
217-
response.data.stream().map(this::mapToApiAttesterDuties).toList())));
207+
return sendRequest(() -> typeDefClient.postAttesterDuties(epoch, validatorIndices));
218208
}
219209

220210
@Override
@@ -228,18 +218,6 @@ public SafeFuture<Optional<ProposerDuties>> getProposerDuties(final UInt64 epoch
228218
return sendRequest(() -> typeDefClient.getProposerDuties(epoch));
229219
}
230220

231-
private AttesterDuty mapToApiAttesterDuties(
232-
final tech.pegasys.teku.api.response.v1.validator.AttesterDuty attesterDuty) {
233-
return new AttesterDuty(
234-
attesterDuty.pubkey.asBLSPublicKey(),
235-
attesterDuty.validatorIndex.intValue(),
236-
attesterDuty.committeeLength.intValue(),
237-
attesterDuty.committeeIndex.intValue(),
238-
attesterDuty.committeesAtSlot.intValue(),
239-
attesterDuty.validatorCommitteeIndex.intValue(),
240-
attesterDuty.slot);
241-
}
242-
243221
@Override
244222
public SafeFuture<Optional<AttestationData>> createAttestationData(
245223
final UInt64 slot, final int committeeIndex) {

Diff for: validator/remote/src/main/java/tech/pegasys/teku/validator/remote/apiclient/OkHttpValidatorRestApiClient.java

+1-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import static java.util.Collections.emptyMap;
1717
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_NOT_FOUND;
1818
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_AGGREGATE;
19-
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_ATTESTATION_DUTIES;
2019
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_BLOCK_HEADER;
2120
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_GENESIS;
2221
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_PROPOSER_DUTIES;
@@ -62,6 +61,7 @@
6261
import tech.pegasys.teku.api.response.v1.validator.GetAggregatedAttestationResponse;
6362
import tech.pegasys.teku.api.response.v1.validator.GetProposerDutiesResponse;
6463
import tech.pegasys.teku.api.response.v1.validator.GetSyncCommitteeContributionResponse;
64+
import tech.pegasys.teku.api.response.v1.validator.PostSyncDutiesResponse;
6565
import tech.pegasys.teku.api.response.v1.validator.PostAttesterDutiesResponse;
6666
import tech.pegasys.teku.api.response.v1.validator.PostValidatorLivenessResponse;
6767
import tech.pegasys.teku.api.schema.Attestation;
@@ -126,16 +126,6 @@ public Optional<List<ValidatorResponse>> getValidators(final List<String> valida
126126
.map(response -> response.data);
127127
}
128128

129-
@Override
130-
public Optional<PostAttesterDutiesResponse> getAttestationDuties(
131-
final UInt64 epoch, final Collection<Integer> validatorIndices) {
132-
return post(
133-
GET_ATTESTATION_DUTIES,
134-
Map.of("epoch", epoch.toString()),
135-
validatorIndices.stream().map(UInt64::valueOf).toList(),
136-
createHandler(PostAttesterDutiesResponse.class));
137-
}
138-
139129
@Override
140130
public Optional<GetProposerDutiesResponse> getProposerDuties(final UInt64 epoch) {
141131
return get(

Diff for: validator/remote/src/main/java/tech/pegasys/teku/validator/remote/apiclient/ValidatorRestApiClient.java

-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import tech.pegasys.teku.api.response.v1.beacon.PostDataFailureResponse;
2323
import tech.pegasys.teku.api.response.v1.beacon.ValidatorResponse;
2424
import tech.pegasys.teku.api.response.v1.validator.GetProposerDutiesResponse;
25-
import tech.pegasys.teku.api.response.v1.validator.PostAttesterDutiesResponse;
2625
import tech.pegasys.teku.api.response.v1.validator.PostValidatorLivenessResponse;
2726
import tech.pegasys.teku.api.schema.Attestation;
2827
import tech.pegasys.teku.api.schema.SignedAggregateAndProof;
@@ -42,9 +41,6 @@ public interface ValidatorRestApiClient {
4241

4342
Optional<List<ValidatorResponse>> getValidators(List<String> validatorIds);
4443

45-
Optional<PostAttesterDutiesResponse> getAttestationDuties(
46-
final UInt64 epoch, final Collection<Integer> validatorIndices);
47-
4844
Optional<GetProposerDutiesResponse> getProposerDuties(final UInt64 epoch);
4945

5046
Optional<PostDataFailureResponse> sendSignedAttestations(List<Attestation> attestation);

0 commit comments

Comments
 (0)