Part 3: Annotated Specification
Containers
Signed envelopes
The following are just wrappers for more basic types, with an added signature.
SignedVoluntaryExit
class SignedVoluntaryExit(Container):
message: VoluntaryExit
signature: BLSSignature
A voluntary exit is currently signed with the validator's online signing key.
There has been some discussion about changing this to also allow signing of a voluntary exit with the validator's offline withdrawal key. The introduction of multiple types of withdrawal credential makes this more complex, however, and it is no longer likely to be practical.
SignedBeaconBlock
class SignedBeaconBlock(Container):
message: BeaconBlock
signature: BLSSignature
BeaconBlock
s are signed by the block proposer and unwrapped for block processing.
This signature is what makes proposing a block "accountable". If two correctly signed conflicting blocks turn up, the signatures guarantee that the same proposer produced them both, and is thus subject to being slashed. This is also why stakers need to closely guard their signing keys.
SignedBeaconBlockHeader
class SignedBeaconBlockHeader(Container):
message: BeaconBlockHeader
signature: BLSSignature
This is used only when reporting proposer slashing, within a ProposerSlashing
object.
Through the magic of SSZ hash tree roots, a valid signature for a SignedBeaconBlock
is also a valid signature for a SignedBeaconBlockHeader
. Proposer slashing makes use of this to save space in slashing reports.