eth2.0-specs/test_libs/pyspec/eth2spec/test/helpers/phase1/attestations.py

41 lines
1.1 KiB
Python
Raw Normal View History

2019-08-01 06:22:01 +00:00
from eth2spec.test.helpers.keys import privkeys
from eth2spec.utils.bls import (
bls_aggregate_signatures,
bls_sign,
)
2019-09-27 04:02:16 +00:00
def sign_shard_attestation(spec, beacon_state, shard_state, block, participants):
2019-08-01 06:22:01 +00:00
signatures = []
2019-09-27 04:02:16 +00:00
message_hash = spec.ShardAttestationData(
slot=block.slot,
parent_root=block.parent_root,
).hash_tree_root()
block_epoch = spec.compute_epoch_of_shard_slot(block.slot)
2019-08-01 06:22:01 +00:00
for validator_index in participants:
privkey = privkeys[validator_index]
signatures.append(
get_attestation_signature(
spec,
beacon_state,
2019-09-27 04:02:16 +00:00
shard_state,
2019-08-01 06:22:01 +00:00
message_hash,
block_epoch,
privkey,
)
)
return bls_aggregate_signatures(signatures)
2019-09-27 04:02:16 +00:00
def get_attestation_signature(spec, beacon_state, shard_state, message_hash, block_epoch, privkey):
2019-08-01 06:22:01 +00:00
return bls_sign(
message_hash=message_hash,
privkey=privkey,
domain=spec.get_domain(
state=beacon_state,
domain_type=spec.DOMAIN_SHARD_ATTESTER,
message_epoch=block_epoch,
)
)