mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 23:18:15 -05:00
* created new converstions_execution files moving the from and to consensus functions for execution related items, also created a placeholder for block_execution with the intent of adding execution types there * moving execution types from block.go to block_execution.go * migrating more types and logic * adding all the to consensus functions for payloads * changelog * linting * updating unit tests for conversions * fixing linting * forgot to fix test * updating name based on feedback
506 lines
20 KiB
Go
506 lines
20 KiB
Go
package structs
|
|
|
|
import "encoding/json"
|
|
|
|
// MessageJsoner describes a signed consensus type wrapper that can return the `.Message` field in a json envelope
|
|
// encoded as a []byte, for use as a json.RawMessage value when encoding the outer envelope.
|
|
type MessageJsoner interface {
|
|
MessageRawJson() ([]byte, error)
|
|
}
|
|
|
|
// SignedMessageJsoner embeds MessageJsoner and adds a method to also retrieve the Signature field as a string.
|
|
type SignedMessageJsoner interface {
|
|
MessageJsoner
|
|
SigString() string
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Phase 0
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlock struct {
|
|
Message *BeaconBlock `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlock{}
|
|
|
|
func (s *SignedBeaconBlock) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlock) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlock struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBody `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBody struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
}
|
|
|
|
type SignedBeaconBlockHeaderContainer struct {
|
|
Header *SignedBeaconBlockHeader `json:"header"`
|
|
Root string `json:"root"`
|
|
Canonical bool `json:"canonical"`
|
|
}
|
|
|
|
type SignedBeaconBlockHeader struct {
|
|
Message *BeaconBlockHeader `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
type BeaconBlockHeader struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
BodyRoot string `json:"body_root"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Altair
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockAltair struct {
|
|
Message *BeaconBlockAltair `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockAltair{}
|
|
|
|
func (s *SignedBeaconBlockAltair) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockAltair) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlockAltair struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBodyAltair `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBodyAltair struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Bellatrix
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockBellatrix struct {
|
|
Message *BeaconBlockBellatrix `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockBellatrix{}
|
|
|
|
func (s *SignedBeaconBlockBellatrix) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockBellatrix) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlockBellatrix struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBodyBellatrix `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBodyBellatrix struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayload *ExecutionPayload `json:"execution_payload"`
|
|
}
|
|
|
|
type SignedBlindedBeaconBlockBellatrix struct {
|
|
Message *BlindedBeaconBlockBellatrix `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBlindedBeaconBlockBellatrix{}
|
|
|
|
func (s *SignedBlindedBeaconBlockBellatrix) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBlindedBeaconBlockBellatrix) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BlindedBeaconBlockBellatrix struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BlindedBeaconBlockBodyBellatrix `json:"body"`
|
|
}
|
|
|
|
type BlindedBeaconBlockBodyBellatrix struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayloadHeader *ExecutionPayloadHeader `json:"execution_payload_header"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Capella
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockCapella struct {
|
|
Message *BeaconBlockCapella `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockCapella{}
|
|
|
|
func (s *SignedBeaconBlockCapella) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockCapella) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlockCapella struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBodyCapella `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBodyCapella struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayload *ExecutionPayloadCapella `json:"execution_payload"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
}
|
|
|
|
type SignedBlindedBeaconBlockCapella struct {
|
|
Message *BlindedBeaconBlockCapella `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBlindedBeaconBlockCapella{}
|
|
|
|
func (s *SignedBlindedBeaconBlockCapella) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBlindedBeaconBlockCapella) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BlindedBeaconBlockCapella struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BlindedBeaconBlockBodyCapella `json:"body"`
|
|
}
|
|
|
|
type BlindedBeaconBlockBodyCapella struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayloadHeader *ExecutionPayloadHeaderCapella `json:"execution_payload_header"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Deneb
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockContentsDeneb struct {
|
|
SignedBlock *SignedBeaconBlockDeneb `json:"signed_block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type BeaconBlockContentsDeneb struct {
|
|
Block *BeaconBlockDeneb `json:"block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type SignedBeaconBlockDeneb struct {
|
|
Message *BeaconBlockDeneb `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockDeneb{}
|
|
|
|
func (s *SignedBeaconBlockDeneb) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockDeneb) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlockDeneb struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBodyDeneb `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBodyDeneb struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayload *ExecutionPayloadDeneb `json:"execution_payload"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
BlobKzgCommitments []string `json:"blob_kzg_commitments"`
|
|
}
|
|
|
|
type BlindedBeaconBlockDeneb struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BlindedBeaconBlockBodyDeneb `json:"body"`
|
|
}
|
|
|
|
type SignedBlindedBeaconBlockDeneb struct {
|
|
Message *BlindedBeaconBlockDeneb `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBlindedBeaconBlockDeneb{}
|
|
|
|
func (s *SignedBlindedBeaconBlockDeneb) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBlindedBeaconBlockDeneb) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BlindedBeaconBlockBodyDeneb struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashing `json:"attester_slashings"`
|
|
Attestations []*Attestation `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayloadHeader *ExecutionPayloadHeaderDeneb `json:"execution_payload_header"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
BlobKzgCommitments []string `json:"blob_kzg_commitments"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Electra
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockContentsElectra struct {
|
|
SignedBlock *SignedBeaconBlockElectra `json:"signed_block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type BeaconBlockContentsElectra struct {
|
|
Block *BeaconBlockElectra `json:"block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type SignedBeaconBlockElectra struct {
|
|
Message *BeaconBlockElectra `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockElectra{}
|
|
|
|
func (s *SignedBeaconBlockElectra) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockElectra) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BeaconBlockElectra struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BeaconBlockBodyElectra `json:"body"`
|
|
}
|
|
|
|
type BeaconBlockBodyElectra struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashingElectra `json:"attester_slashings"`
|
|
Attestations []*AttestationElectra `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayload *ExecutionPayloadDeneb `json:"execution_payload"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
BlobKzgCommitments []string `json:"blob_kzg_commitments"`
|
|
ExecutionRequests *ExecutionRequests `json:"execution_requests"`
|
|
}
|
|
|
|
type BlindedBeaconBlockElectra struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BlindedBeaconBlockBodyElectra `json:"body"`
|
|
}
|
|
|
|
type SignedBlindedBeaconBlockElectra struct {
|
|
Message *BlindedBeaconBlockElectra `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBlindedBeaconBlockElectra{}
|
|
|
|
func (s *SignedBlindedBeaconBlockElectra) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBlindedBeaconBlockElectra) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BlindedBeaconBlockBodyElectra struct {
|
|
RandaoReveal string `json:"randao_reveal"`
|
|
Eth1Data *Eth1Data `json:"eth1_data"`
|
|
Graffiti string `json:"graffiti"`
|
|
ProposerSlashings []*ProposerSlashing `json:"proposer_slashings"`
|
|
AttesterSlashings []*AttesterSlashingElectra `json:"attester_slashings"`
|
|
Attestations []*AttestationElectra `json:"attestations"`
|
|
Deposits []*Deposit `json:"deposits"`
|
|
VoluntaryExits []*SignedVoluntaryExit `json:"voluntary_exits"`
|
|
SyncAggregate *SyncAggregate `json:"sync_aggregate"`
|
|
ExecutionPayloadHeader *ExecutionPayloadHeaderDeneb `json:"execution_payload_header"`
|
|
BLSToExecutionChanges []*SignedBLSToExecutionChange `json:"bls_to_execution_changes"`
|
|
BlobKzgCommitments []string `json:"blob_kzg_commitments"`
|
|
ExecutionRequests *ExecutionRequests `json:"execution_requests"`
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Fulu
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type SignedBeaconBlockContentsFulu struct {
|
|
SignedBlock *SignedBeaconBlockFulu `json:"signed_block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type BeaconBlockContentsFulu struct {
|
|
Block *BeaconBlockElectra `json:"block"`
|
|
KzgProofs []string `json:"kzg_proofs"`
|
|
Blobs []string `json:"blobs"`
|
|
}
|
|
|
|
type SignedBeaconBlockFulu struct {
|
|
Message *BeaconBlockElectra `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBeaconBlockFulu{}
|
|
|
|
func (s *SignedBeaconBlockFulu) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBeaconBlockFulu) SigString() string {
|
|
return s.Signature
|
|
}
|
|
|
|
type BlindedBeaconBlockFulu struct {
|
|
Slot string `json:"slot"`
|
|
ProposerIndex string `json:"proposer_index"`
|
|
ParentRoot string `json:"parent_root"`
|
|
StateRoot string `json:"state_root"`
|
|
Body *BlindedBeaconBlockBodyElectra `json:"body"`
|
|
}
|
|
|
|
type SignedBlindedBeaconBlockFulu struct {
|
|
Message *BlindedBeaconBlockFulu `json:"message"`
|
|
Signature string `json:"signature"`
|
|
}
|
|
|
|
var _ SignedMessageJsoner = &SignedBlindedBeaconBlockFulu{}
|
|
|
|
func (s *SignedBlindedBeaconBlockFulu) MessageRawJson() ([]byte, error) {
|
|
return json.Marshal(s.Message)
|
|
}
|
|
|
|
func (s *SignedBlindedBeaconBlockFulu) SigString() string {
|
|
return s.Signature
|
|
}
|