Skip to content

Commit 92e5c12

Browse files
authored
Fix VC sends incorrect eth-consensus-version when publish attestations and aggregated attestations. (#7689)
1 parent 7e4b537 commit 92e5c12

File tree

5 files changed

+32
-23
lines changed

5 files changed

+32
-23
lines changed

beacon_chain/spec/eth2_apis/rest_beacon_calls.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,13 +409,13 @@ proc submitPoolAttestationsV2Plain*(
409409

410410
proc submitPoolAttestationsV2*[T: ForkyAttestation](
411411
client: RestClientRef,
412+
fork: ConsensusFork,
412413
body: seq[T]
413414
): Future[RestPlainResponse] {.
414415
async: (raises: [CancelledError, RestEncodingError, RestDnsResolveError,
415416
RestCommunicationError], raw: true).} =
416-
let consensus = T.kind.toString()
417417
client.submitPoolAttestationsV2Plain(
418-
body, extraHeaders = @[("eth-consensus-version", consensus)])
418+
body, extraHeaders = @[("eth-consensus-version", fork.toString())])
419419

420420
proc getPoolAttesterSlashingsV2Plain*(): RestPlainResponse {.
421421
rest, endpoint: "/eth/v2/beacon/pool/attester_slashings",

beacon_chain/spec/eth2_apis/rest_validator_calls.nim

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,14 @@ proc publishAggregateAndProofsV2Plain*(
8080

8181
proc publishAggregateAndProofsV2*[T: ForkySignedAggregateAndProof](
8282
client: RestClientRef,
83+
fork: ConsensusFork,
8384
body: seq[T]
8485
): Future[RestPlainResponse] {.
8586
async: (raises: [CancelledError, RestEncodingError, RestDnsResolveError,
8687
RestCommunicationError], raw: true).} =
8788
## https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Validator/publishAggregateAndProofsV2
88-
let
89-
consensus = T.kind.toString()
9089
client.publishAggregateAndProofsV2Plain(
91-
body, extraHeaders = @[("eth-consensus-version", consensus)])
90+
body, extraHeaders = @[("eth-consensus-version", fork.toString())])
9291

9392
proc prepareBeaconCommitteeSubnet*(
9493
body: seq[RestCommitteeSubscription]

beacon_chain/validator_client/api.nim

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,6 +1615,7 @@ proc produceAttestationData*(
16151615
proc submitPoolAttestationsV2*(
16161616
vc: ValidatorClientRef,
16171617
data: seq[ForkyAttestation],
1618+
fork: ConsensusFork,
16181619
strategy: ApiStrategyKind
16191620
): Future[bool] {.async: (raises: [CancelledError, ValidatorApiError]).} =
16201621
const
@@ -1629,7 +1630,7 @@ proc submitPoolAttestationsV2*(
16291630
vc.SlotDuration,
16301631
ViableNodeStatus,
16311632
{BeaconNodeRole.AttestationPublish},
1632-
submitPoolAttestationsV2(it, data)):
1633+
submitPoolAttestationsV2(it, fork, data)):
16331634
if apiResponse.isErr():
16341635
handleCommunicationError()
16351636
ApiResponse[bool].err(apiResponse.error)
@@ -1657,7 +1658,7 @@ proc submitPoolAttestationsV2*(
16571658
vc.SlotDuration,
16581659
ViableNodeStatus,
16591660
{BeaconNodeRole.AttestationPublish},
1660-
submitPoolAttestationsV2(it, data)):
1661+
submitPoolAttestationsV2(it, fork, data)):
16611662
if apiResponse.isErr():
16621663
handleCommunicationError()
16631664
false
@@ -2169,6 +2170,7 @@ proc produceSyncCommitteeContribution*(
21692170
proc publishAggregateAndProofsV2*(
21702171
vc: ValidatorClientRef,
21712172
data: seq[ForkySignedAggregateAndProof],
2173+
fork: ConsensusFork,
21722174
strategy: ApiStrategyKind
21732175
): Future[bool] {.async: (raises: [CancelledError, ValidatorApiError]).} =
21742176
const
@@ -2178,12 +2180,10 @@ proc publishAggregateAndProofsV2*(
21782180

21792181
case strategy
21802182
of ApiStrategyKind.First, ApiStrategyKind.Best:
2181-
let res = vc.firstSuccessParallel(RestPlainResponse,
2182-
bool,
2183-
vc.SlotDuration,
2184-
ViableNodeStatus,
2185-
{BeaconNodeRole.AggregatedPublish},
2186-
publishAggregateAndProofsV2(it, data)):
2183+
let res = vc.firstSuccessParallel(
2184+
RestPlainResponse, bool, vc.SlotDuration, ViableNodeStatus,
2185+
{BeaconNodeRole.AggregatedPublish},
2186+
publishAggregateAndProofsV2(it, fork, data)):
21872187
if apiResponse.isErr():
21882188
handleCommunicationError()
21892189
ApiResponse[bool].err(apiResponse.error)
@@ -2210,11 +2210,10 @@ proc publishAggregateAndProofsV2*(
22102210
res.get()
22112211

22122212
of ApiStrategyKind.Priority:
2213-
vc.firstSuccessSequential(RestPlainResponse,
2214-
vc.SlotDuration,
2215-
ViableNodeStatus,
2216-
{BeaconNodeRole.AggregatedPublish},
2217-
publishAggregateAndProofsV2(it, data)):
2213+
vc.firstSuccessSequential(
2214+
RestPlainResponse, vc.SlotDuration, ViableNodeStatus,
2215+
{BeaconNodeRole.AggregatedPublish},
2216+
publishAggregateAndProofsV2(it, fork, data)):
22182217
if apiResponse.isErr():
22192218
handleCommunicationError()
22202219
false

beacon_chain/validator_client/attestation_service.nim

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ proc serveAttestation(
4141
let
4242
vc = service.client
4343
fork = vc.forkAtEpoch(registered.data.slot.epoch)
44+
consensusFork = vc.getConsensusFork(fork)
4445
validator = registered.validator
4546
attestationSlot = registered.data.slot
4647
afterElectra = vc.isPastElectraFork(attestationSlot.epoch)
@@ -70,9 +71,11 @@ proc serveAttestation(
7071

7172
template submitAttestation(atst: untyped): untyped =
7273
logScope:
74+
fork = consensusFork
7375
attestation = shortLog(atst)
7476
try:
75-
await vc.submitPoolAttestationsV2(@[atst], ApiStrategyKind.First)
77+
await vc.submitPoolAttestationsV2(
78+
@[atst], consensusFork, ApiStrategyKind.First)
7679
except ValidatorApiError as exc:
7780
warn "Unable to publish attestation", reason = exc.getFailureReason()
7881
return false
@@ -108,12 +111,13 @@ proc serveAggregateAndProofV2*(
108111
genesisRoot = vc.beaconGenesis.genesis_validators_root
109112
slot = proof.aggregate.data.slot
110113
fork = vc.forkAtEpoch(slot.epoch)
114+
consensusFork = vc.getConsensusFork(fork)
111115

112116
logScope:
113117
validator = validatorLog(validator)
114118
attestation = shortLog(proof.aggregate)
115119

116-
debug "Signing aggregate", fork = fork
120+
debug "Signing aggregate", fork = consensusFork
117121

118122
let signature =
119123
try:
@@ -142,14 +146,14 @@ proc serveAggregateAndProofV2*(
142146
logScope:
143147
delay = vc.getDelay(slot.aggregate_deadline(vc.timeParams))
144148

145-
debug "Sending aggregated attestation", fork = fork
149+
debug "Sending aggregated attestation", fork = consensusFork
146150

147151
validator.doppelgangerActivity(proof.aggregate.data.slot.epoch)
148152

149153
let res =
150154
try:
151-
await vc.publishAggregateAndProofsV2(@[signedProof],
152-
ApiStrategyKind.First)
155+
await vc.publishAggregateAndProofsV2(
156+
@[signedProof], consensusFork, ApiStrategyKind.First)
153157
except ValidatorApiError as exc:
154158
warn "Unable to publish aggregated attestation",
155159
reason = exc.getFailureReason()

beacon_chain/validator_client/common.nim

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,13 @@ proc forkAtEpoch*(vc: ValidatorClientRef, epoch: Epoch): Fork =
955955
break
956956
res
957957

958+
proc getConsensusFork*(vc: ValidatorClientRef, fork: Fork): ConsensusFork =
959+
doAssert(vc.forkConfig.isSome())
960+
for key, value in vc.forkConfig.get().pairs():
961+
if value.version == fork.current_version:
962+
return key
963+
raiseAssert "ForkConfig missing fork [" & $fork.current_version & "]"
964+
958965
proc isPastElectraFork*(vc: ValidatorClientRef, epoch: Epoch): bool =
959966
doAssert(len(vc.forks) > 0)
960967
doAssert(vc.forkConfig.isSome())

0 commit comments

Comments
 (0)