# Block Certificate

# What Is Certificate?

Block certificate holds the proof of commitment for the block.

# Certificate Structure

Each block certificate contains following information:

type Certificate struct {
   BlockHash  Hash      `cbor:"1,keyasint"`
   Round      int       `cbor:"2,keyasint"`
   Committers []int     `cbor:"3,keyasint"`
   Absentees  []int     `cbor:"4,keyasint"`
   Signature  Signature `cbor:"5,keyasint"`
}

# Certificate Verification

For each round validators cast their votes by signing BlockHash | Round. A valid certificate should have signature from validators with more than 2/3 of the stake for that round. If enough votes are collected, the signatures will be aggregated into one single signature. To verify the aggregated signature, from Committers and Absentees the aggregated public key can be formed and therefore Signature can be verified.

# Example

Hers is an example of a certificate data.

000000   A5 01 58 20 0C A1 2E EE  3C 79 1B A4 B7 84 39 44   ¥.X .¡.î<y.¤·.9D
000010   8D 59 A4 B8 17 D1 EA EC  10 AA 09 0E A4 0F 9A F3   .Y¤¸.Ñêì.ª..¤..ó
000020   D4 3E 6E 2B 02 00 03 84  00 01 02 03 04 80 05 58   Ô>n+...........X
000030   30 7B 4D DA EB 45 02 B5  44 79 0F 73 BD 4D 3D E5   0{MÚëE.µDy.s½M=å
000040   1E 70 94 19 2C B3 56 BB  3F 6A C8 98 F4 6A B2 47   .p..,³V»?jÈ.ôj²G
000050   79 49 7C D3 22 6A 60 25  F8 1C 5B 56 47 4A 5C BD   yI|Ó"j`%ø.[VGJ\½
000060   84                                                .

Which can be interpreted in CBOR (opens new window) format:

{
  1: h'0CA12EEE3C791BA4B78439448D59A4B817D1EAEC10AA090EA40F9AF3D43E6E2B',
  2: 0,
  3: [0, 1, 2, 3],
  4: [],
  5: h'7B4DDAEB4502B544790F73BD4D3DE51E7094192CB356BB3F6AC898F46AB24779497CD3226A6025F81C5B56474A5CBD84'
}

Certificate hash is the hash of the certificate in binary format. For this example, the certificate hash is:

0x74fabc0be964b5373800026923b1bb66bf4042d6856396511aebe083c773ee9a