Skip to content

Commit 0af1e24

Browse files
committed
Use JsonTypeDef for PostAttesterDuties request
1 parent 11720af commit 0af1e24

File tree

5 files changed

+62
-40
lines changed

5 files changed

+62
-40
lines changed

validator/remote/src/main/java/tech/pegasys/teku/validator/remote/RemoteValidatorApiHandler.java

+1-23
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import tech.pegasys.teku.bls.BLSSignature;
4848
import tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorData;
4949
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties;
50-
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuty;
5150
import tech.pegasys.teku.ethereum.json.types.validator.BeaconCommitteeSelectionProof;
5251
import tech.pegasys.teku.ethereum.json.types.validator.ProposerDuties;
5352
import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeSelectionProof;
@@ -215,16 +214,7 @@ private <T> Map<BLSPublicKey, T> convertToValidatorMapTypeDef(
215214
@Override
216215
public SafeFuture<Optional<AttesterDuties>> getAttestationDuties(
217216
final UInt64 epoch, final IntCollection validatorIndices) {
218-
return sendRequest(
219-
() ->
220-
apiClient
221-
.getAttestationDuties(epoch, validatorIndices)
222-
.map(
223-
response ->
224-
new AttesterDuties(
225-
response.executionOptimistic,
226-
response.dependentRoot,
227-
response.data.stream().map(this::mapToApiAttesterDuties).toList())));
217+
return sendRequest(() -> typeDefClient.postAttesterDuties(epoch, validatorIndices));
228218
}
229219

230220
@Override
@@ -256,18 +246,6 @@ public SafeFuture<Optional<ProposerDuties>> getProposerDuties(final UInt64 epoch
256246
return sendRequest(() -> typeDefClient.getProposerDuties(epoch));
257247
}
258248

259-
private AttesterDuty mapToApiAttesterDuties(
260-
final tech.pegasys.teku.api.response.v1.validator.AttesterDuty attesterDuty) {
261-
return new AttesterDuty(
262-
attesterDuty.pubkey.asBLSPublicKey(),
263-
attesterDuty.validatorIndex.intValue(),
264-
attesterDuty.committeeLength.intValue(),
265-
attesterDuty.committeeIndex.intValue(),
266-
attesterDuty.committeesAtSlot.intValue(),
267-
attesterDuty.validatorCommitteeIndex.intValue(),
268-
attesterDuty.slot);
269-
}
270-
271249
@Override
272250
public SafeFuture<Optional<AttestationData>> createAttestationData(
273251
final UInt64 slot, final int committeeIndex) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public Optional<List<ValidatorResponse>> postValidators(final List<String> valid
155155
}
156156

157157
@Override
158-
public Optional<PostAttesterDutiesResponse> getAttestationDuties(
158+
public Optional<PostAttesterDutiesResponse> getAttestationDuties( // todo delete
159159
final UInt64 epoch, final Collection<Integer> validatorIndices) {
160160
return post(
161161
GET_ATTESTATION_DUTIES,

validator/remote/src/main/java/tech/pegasys/teku/validator/remote/typedef/OkHttpValidatorTypeDefClient.java

+10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package tech.pegasys.teku.validator.remote.typedef;
1515

16+
import java.util.Collection;
1617
import java.util.List;
1718
import java.util.Optional;
1819
import okhttp3.HttpUrl;
@@ -22,6 +23,7 @@
2223
import org.apache.tuweni.bytes.Bytes32;
2324
import tech.pegasys.teku.bls.BLSSignature;
2425
import tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorData;
26+
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties;
2527
import tech.pegasys.teku.ethereum.json.types.validator.BeaconCommitteeSelectionProof;
2628
import tech.pegasys.teku.ethereum.json.types.validator.ProposerDuties;
2729
import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeSelectionProof;
@@ -43,6 +45,7 @@
4345
import tech.pegasys.teku.validator.remote.typedef.handlers.GetProposerDutiesRequest;
4446
import tech.pegasys.teku.validator.remote.typedef.handlers.GetStateValidatorsRequest;
4547
import tech.pegasys.teku.validator.remote.typedef.handlers.GetSyncingStatusRequest;
48+
import tech.pegasys.teku.validator.remote.typedef.handlers.PostAttesterDutiesRequest;
4649
import tech.pegasys.teku.validator.remote.typedef.handlers.ProduceBlockRequest;
4750
import tech.pegasys.teku.validator.remote.typedef.handlers.RegisterValidatorsRequest;
4851
import tech.pegasys.teku.validator.remote.typedef.handlers.SendSignedBlockRequest;
@@ -58,6 +61,7 @@ public class OkHttpValidatorTypeDefClient extends OkHttpValidatorMinimalTypeDefC
5861
private final GetGenesisRequest getGenesisRequest;
5962
private final GetProposerDutiesRequest getProposerDutiesRequest;
6063
private final GetStateValidatorsRequest getStateValidatorsRequest;
64+
private final PostAttesterDutiesRequest postAttesterDutiesRequest;
6165
private final SendSignedBlockRequest sendSignedBlockRequest;
6266
private final RegisterValidatorsRequest registerValidatorsRequest;
6367
private final CreateAttestationDataRequest createAttestationDataRequest;
@@ -76,6 +80,7 @@ public OkHttpValidatorTypeDefClient(
7680
this.getGenesisRequest = new GetGenesisRequest(okHttpClient, baseEndpoint);
7781
this.getProposerDutiesRequest = new GetProposerDutiesRequest(baseEndpoint, okHttpClient);
7882
this.getStateValidatorsRequest = new GetStateValidatorsRequest(baseEndpoint, okHttpClient);
83+
this.postAttesterDutiesRequest = new PostAttesterDutiesRequest(baseEndpoint, okHttpClient);
7984
this.sendSignedBlockRequest =
8085
new SendSignedBlockRequest(spec, baseEndpoint, okHttpClient, preferSszBlockEncoding);
8186
this.registerValidatorsRequest =
@@ -110,6 +115,11 @@ public Optional<List<StateValidatorData>> getStateValidators(final List<String>
110115
.map(ObjectAndMetaData::getData);
111116
}
112117

118+
public Optional<AttesterDuties> postAttesterDuties(
119+
final UInt64 epoch, final Collection<Integer> validatorIndices) {
120+
return postAttesterDutiesRequest.postAttesterDuties(epoch, validatorIndices);
121+
}
122+
113123
public SendSignedBlockResult sendSignedBlock(final SignedBlockContainer blockContainer) {
114124
return sendSignedBlockRequest.sendSignedBlock(blockContainer);
115125
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright Consensys Software Inc., 2024
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*/
13+
14+
package tech.pegasys.teku.validator.remote.typedef.handlers;
15+
16+
import static tech.pegasys.teku.ethereum.json.types.validator.AttesterDutiesBuilder.ATTESTER_DUTIES_RESPONSE_TYPE;
17+
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.INTEGER_TYPE;
18+
import static tech.pegasys.teku.validator.remote.apiclient.ValidatorApiMethod.GET_ATTESTATION_DUTIES;
19+
20+
import java.util.Collection;
21+
import java.util.Map;
22+
import java.util.Optional;
23+
import okhttp3.HttpUrl;
24+
import okhttp3.OkHttpClient;
25+
import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties;
26+
import tech.pegasys.teku.infrastructure.json.types.DeserializableTypeDefinition;
27+
import tech.pegasys.teku.infrastructure.unsigned.UInt64;
28+
import tech.pegasys.teku.validator.remote.typedef.ResponseHandler;
29+
30+
public class PostAttesterDutiesRequest extends AbstractTypeDefRequest {
31+
public PostAttesterDutiesRequest(final HttpUrl baseEndpoint, final OkHttpClient okHttpClient) {
32+
super(baseEndpoint, okHttpClient);
33+
}
34+
35+
public Optional<AttesterDuties> postAttesterDuties(
36+
final UInt64 epoch, final Collection<Integer> validatorIndices) {
37+
return postJson(
38+
GET_ATTESTATION_DUTIES,
39+
Map.of("epoch", epoch.toString()),
40+
validatorIndices.stream().toList(),
41+
DeserializableTypeDefinition.listOf(INTEGER_TYPE, 1),
42+
new ResponseHandler<>(ATTESTER_DUTIES_RESPONSE_TYPE));
43+
}
44+
}

validator/remote/src/test/java/tech/pegasys/teku/validator/remote/RemoteValidatorApiHandlerTest.java

+6-16
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import tech.pegasys.teku.api.response.v1.beacon.PostDataFailureResponse;
5353
import tech.pegasys.teku.api.response.v1.beacon.ValidatorResponse;
5454
import tech.pegasys.teku.api.response.v1.beacon.ValidatorStatus;
55-
import tech.pegasys.teku.api.response.v1.validator.PostAttesterDutiesResponse;
5655
import tech.pegasys.teku.api.response.v1.validator.PostValidatorLivenessResponse;
5756
import tech.pegasys.teku.api.response.v1.validator.ValidatorLiveness;
5857
import tech.pegasys.teku.api.schema.BLSPubKey;
@@ -354,11 +353,11 @@ public void getAttestationDuties_WithEmptyPublicKeys_ReturnsEmpty() {
354353

355354
@Test
356355
public void getAttestationDuties_WhenNoneFound_ReturnsEmpty() {
357-
when(apiClient.getAttestationDuties(any(), any()))
356+
when(typeDefClient.postAttesterDuties(any(), any()))
358357
.thenReturn(
359358
Optional.of(
360-
new PostAttesterDutiesResponse(
361-
dataStructureUtil.randomBytes32(), Collections.emptyList(), false)));
359+
new AttesterDuties(
360+
false, dataStructureUtil.randomBytes32(), Collections.emptyList())));
362361

363362
SafeFuture<Optional<AttesterDuties>> future =
364363
apiHandler.getAttestationDuties(ONE, IntList.of(1234));
@@ -374,15 +373,6 @@ public void getAttestationDuties_WhenFound_ReturnsDuties() {
374373
final int committeeIndex = 1;
375374
final int validatorCommitteeIndex = 3;
376375
final int committeesAtSlot = 15;
377-
final tech.pegasys.teku.api.response.v1.validator.AttesterDuty schemaValidatorDuties =
378-
new tech.pegasys.teku.api.response.v1.validator.AttesterDuty(
379-
new BLSPubKey(blsPublicKey),
380-
UInt64.valueOf(validatorIndex),
381-
UInt64.valueOf(committeeIndex),
382-
UInt64.valueOf(committeeLength),
383-
UInt64.valueOf(committeesAtSlot),
384-
UInt64.valueOf(validatorCommitteeIndex),
385-
UInt64.ZERO);
386376
final AttesterDuty expectedValidatorDuties =
387377
new AttesterDuty(
388378
blsPublicKey,
@@ -393,11 +383,11 @@ public void getAttestationDuties_WhenFound_ReturnsDuties() {
393383
validatorCommitteeIndex,
394384
UInt64.ZERO);
395385

396-
when(apiClient.getAttestationDuties(ONE, IntList.of(validatorIndex)))
386+
when(typeDefClient.postAttesterDuties(ONE, IntList.of(validatorIndex)))
397387
.thenReturn(
398388
Optional.of(
399-
new PostAttesterDutiesResponse(
400-
dataStructureUtil.randomBytes32(), List.of(schemaValidatorDuties), false)));
389+
new AttesterDuties(
390+
false, dataStructureUtil.randomBytes32(), List.of(expectedValidatorDuties))));
401391

402392
SafeFuture<Optional<AttesterDuties>> future =
403393
apiHandler.getAttestationDuties(ONE, IntList.of(validatorIndex));

0 commit comments

Comments
 (0)