mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-10 07:58:22 -05:00
* Fulu: Implement params. * KZG tests: Re-implement `getRandBlob` to avoid tests cyclical dependencies. Not ideal, but any better idea welcome. * Fulu testing util: Implement `GenerateCellsAndProofs`. * Create `RODataColumn`. * Implement `MerkleProofKZGCommitments`. * Export `leavesFromCommitments`. * Implement peerDAS core. * Add changelog. * Update beacon-chain/core/peerdas/das_core.go Co-authored-by: terence <terence@prysmaticlabs.com> * Fix Terence's comment: Use `IsNil`. * Fix Terence's comment: Avoid useless `filteredIndices`. * Fix Terence's comment: Simplify odd/even cases. * Fix Terence's comment: Use `IsNil`. * Spectests: Add Fulu networking * Fix Terence's comment: `CustodyGroups`: Stick to the spec by returning a (sorted) slice. * Fix Terence's comment: `CustodyGroups`: Handle correctly the `maxUint256` case. * Update beacon-chain/core/peerdas/das_core.go Co-authored-by: terence <terence@prysmaticlabs.com> * Fix Terence's comment: `ComputeColumnsForCustodyGroup`: Add test if `custodyGroup == numberOfCustodyGroup` * `CustodyGroups`: Test if `custodyGroupCount > numberOfCustodyGroup`. * `CustodyGroups`: Add a shortcut if all custody groups are needed. * `ComputeCystodyGroupForColumn`: Move from `p2p_interface.go` to `das_core.go`. * Fix Terence's comment: Fix `ComputeCustodyGroupForColumn`. * Fix Terence's comment: Remove `constructCellsAndProofs` function. * Fix Terence's comment: `ValidatorsCustodyRequirement`: Use effective balance instead of balance. * `MerkleProofKZGCommitments`: Add tests * Remove peer sampling. * `DataColumnSidecars`: Add missing tests. * Fix Jame's comment. * Fix James' comment. * Fix James' comment. * Fix James' coment. * Fix James' comment. --------- Co-authored-by: terence <terence@prysmaticlabs.com>
80 lines
3.0 KiB
Go
80 lines
3.0 KiB
Go
package blocks
|
|
|
|
import (
|
|
field_params "github.com/OffchainLabs/prysm/v6/config/fieldparams"
|
|
"github.com/OffchainLabs/prysm/v6/consensus-types/interfaces"
|
|
"github.com/OffchainLabs/prysm/v6/consensus-types/primitives"
|
|
enginev1 "github.com/OffchainLabs/prysm/v6/proto/engine/v1"
|
|
eth "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
var (
|
|
_ = interfaces.ReadOnlySignedBeaconBlock(&SignedBeaconBlock{})
|
|
_ = interfaces.ReadOnlyBeaconBlock(&BeaconBlock{})
|
|
_ = interfaces.ReadOnlyBeaconBlockBody(&BeaconBlockBody{})
|
|
)
|
|
|
|
var (
|
|
errPayloadWrongType = errors.New("execution payload has wrong type")
|
|
errPayloadHeaderWrongType = errors.New("execution payload header has wrong type")
|
|
)
|
|
|
|
const (
|
|
incorrectBlockVersion = "incorrect beacon block version"
|
|
incorrectBodyVersion = "incorrect beacon block body version"
|
|
)
|
|
|
|
var (
|
|
// ErrUnsupportedVersion for beacon block methods.
|
|
ErrUnsupportedVersion = errors.New("unsupported beacon block version")
|
|
errNilBlob = errors.New("received nil blob sidecar")
|
|
errNilDataColumn = errors.New("received nil data column sidecar")
|
|
errNilBlock = errors.New("received nil beacon block")
|
|
errNilBlockBody = errors.New("received nil beacon block body")
|
|
errIncorrectBlockVersion = errors.New(incorrectBlockVersion)
|
|
errIncorrectBodyVersion = errors.New(incorrectBodyVersion)
|
|
errNilBlockHeader = errors.New("received nil beacon block header")
|
|
errMissingBlockSignature = errors.New("received nil beacon block signature")
|
|
)
|
|
|
|
// BeaconBlockBody is the main beacon block body structure. It can represent any block type.
|
|
type BeaconBlockBody struct {
|
|
version int
|
|
randaoReveal [field_params.BLSSignatureLength]byte
|
|
eth1Data *eth.Eth1Data
|
|
graffiti [field_params.RootLength]byte
|
|
proposerSlashings []*eth.ProposerSlashing
|
|
attesterSlashings []*eth.AttesterSlashing
|
|
attesterSlashingsElectra []*eth.AttesterSlashingElectra
|
|
attestations []*eth.Attestation
|
|
attestationsElectra []*eth.AttestationElectra
|
|
deposits []*eth.Deposit
|
|
voluntaryExits []*eth.SignedVoluntaryExit
|
|
syncAggregate *eth.SyncAggregate
|
|
executionPayload interfaces.ExecutionData
|
|
executionPayloadHeader interfaces.ExecutionData
|
|
blsToExecutionChanges []*eth.SignedBLSToExecutionChange
|
|
blobKzgCommitments [][]byte
|
|
executionRequests *enginev1.ExecutionRequests
|
|
}
|
|
|
|
var _ interfaces.ReadOnlyBeaconBlockBody = &BeaconBlockBody{}
|
|
|
|
// BeaconBlock is the main beacon block structure. It can represent any block type.
|
|
type BeaconBlock struct {
|
|
version int
|
|
slot primitives.Slot
|
|
proposerIndex primitives.ValidatorIndex
|
|
parentRoot [field_params.RootLength]byte
|
|
stateRoot [field_params.RootLength]byte
|
|
body *BeaconBlockBody
|
|
}
|
|
|
|
// SignedBeaconBlock is the main signed beacon block structure. It can represent any block type.
|
|
type SignedBeaconBlock struct {
|
|
version int
|
|
block *BeaconBlock
|
|
signature [field_params.BLSSignatureLength]byte
|
|
}
|