Sync Proof
Proof as input data for the sync committee transition used by zk. This is a very compact proof mostly taken from the light client update. the proof itself is a merkle proof using the given gindex to verify from the hash of the pubkey all the way down to the signing root.
The following diagram shows the Structure of the Merkle Tree leading to the SigningRoot:

In order to validate, we need to calculate
512 x sha256 for each pubkey
512 x sha256 merkle proof for the pubkeys
2 x sha256 for the SyncCommittee
5 x sha256 for the stateRoot
3 x sha256 for the blockheader hash
1 x for the SigningRoot
So in total, we need to verify 1035 hashes and 1 bls signature.
EthSyncProof
The Type is defined in src/chains/eth/ssz/verify_proof_types.h.
class EthSyncProof(Container):
oldKeys : Vector [blsPubky, 512] # the old keys which produced the signature
newKeys : Vector [blsPubky, 512] # the new keys to be proven
syncCommitteeBits : BitVector [512] # the bits of the validators that signed the block
syncCommitteeSignature : ByteVector [96] # the signature of the sync committee
gidx : Uint64 # the general index from the signing root to the pubkeys of the next_synccommittee
slot : Uint64 # the slot of the block
proposerIndex : Uint64
proof : List [bytes32, 256] # proof merkle proof from the signing root to the pubkeys of the next_synccommittee
Last updated