Skip to content

Commit 6232605

Browse files
authored
Add getPayloadAttestationSignature for local signing (#7750)
* Add PayloadAttestaition message support to web3signer * update copyright year and AllTests-mainnet, add remote signing test * remove debug echo's * remove remote remote signing support for payload attestations
1 parent 3aa47a7 commit 6232605

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

AllTests-mainnet.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,7 @@ AllTests-mainnet
834834
+ Signing aggregate and proof (getAggregateAndProofSignature(phase0)) OK
835835
+ Signing aggregation slot (getSlotSignature()) OK
836836
+ Signing attestation (getAttestationSignature()) OK
837+
+ Signing payload attestation message (getPayloadAttestationSignature()) OK
837838
+ Signing randao reveal (getEpochSignature()) OK
838839
+ Signing validator registration (getBuilderSignature()) OK
839840
+ Signing voluntary exit (getValidatorExitSignature()) OK

beacon_chain/validators/validator_pool.nim

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,3 +799,18 @@ proc getBuilderSignature*(v: AttachedValidator, genesis_fork_version: Version,
799799
of ValidatorKind.Remote:
800800
let request = Web3SignerRequest.init(ZERO_HASH, validatorRegistration)
801801
await v.signData(request)
802+
803+
# https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/gloas/validator.md#constructing-payload_attestations
804+
proc getPayloadAttestationSignature*(v: AttachedValidator, fork: Fork,
805+
genesis_validators_root: Eth2Digest,
806+
message: PayloadAttestationMessage,
807+
): Future[SignatureResult]
808+
{.async: (raises: [CancelledError]).} =
809+
case v.kind
810+
of ValidatorKind.Local:
811+
SignatureResult.ok(
812+
get_payload_attestation_message_signature(
813+
fork, genesis_validators_root, message,
814+
v.data.privateKey).toValidatorSig())
815+
of ValidatorKind.Remote:
816+
return SignatureResult.err("Remote signer lacks payload attestation support")

tests/test_signing_node.nim

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,30 @@ block:
837837
sres2.get() == rres2.get()
838838
sres3.get() == rres3.get()
839839

840+
asyncTest "Signing payload attestation message (getPayloadAttestationSignature())":
841+
let
842+
payloadMessage = PayloadAttestationMessage(
843+
validator_index: 100,
844+
data: PayloadAttestationData(
845+
beacon_block_root: SomeOtherRoot,
846+
slot: Slot(10),
847+
payload_present: true,
848+
blob_data_available: true
849+
),
850+
signature: ValidatorSig.fromHex(SomeSignature).get()
851+
)
852+
sres1 = await validator1.getPayloadAttestationSignature(SigningFork,
853+
GenesisValidatorsRoot, payloadMessage)
854+
sres2 = await validator2.getPayloadAttestationSignature(SigningFork,
855+
GenesisValidatorsRoot, payloadMessage)
856+
sres3 = await validator3.getPayloadAttestationSignature(SigningFork,
857+
GenesisValidatorsRoot, payloadMessage)
858+
859+
check:
860+
sres1.isOk()
861+
sres2.isOk()
862+
sres3.isOk()
863+
840864
asyncTest "Connection timeout test":
841865
let
842866
request = Web3SignerRequest.init(SigningFork, GenesisValidatorsRoot,

0 commit comments

Comments
 (0)