mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -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>
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package peerdas
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/OffchainLabs/prysm/v6/beacon-chain/blockchain/kzg"
|
|
"github.com/OffchainLabs/prysm/v6/config/params"
|
|
"github.com/OffchainLabs/prysm/v6/consensus-types/interfaces"
|
|
ethpb "github.com/OffchainLabs/prysm/v6/proto/prysm/v1alpha1"
|
|
"github.com/OffchainLabs/prysm/v6/runtime/version"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// ConstructDataColumnSidecars constructs data column sidecars from a block, blobs and their cell proofs.
|
|
// This is a convenience method as blob and cell proofs are common inputs.
|
|
func ConstructDataColumnSidecars(block interfaces.SignedBeaconBlock, blobs [][]byte, cellProofs [][]byte) ([]*ethpb.DataColumnSidecar, error) {
|
|
// Check if the block is at least a Fulu block.
|
|
if block.Version() < version.Fulu {
|
|
return nil, nil
|
|
}
|
|
|
|
numberOfColumns := params.BeaconConfig().NumberOfColumns
|
|
if uint64(len(blobs))*numberOfColumns != uint64(len(cellProofs)) {
|
|
return nil, fmt.Errorf("number of blobs and cell proofs do not match: %d * %d != %d", len(blobs), numberOfColumns, len(cellProofs))
|
|
}
|
|
|
|
cellsAndProofs := make([]kzg.CellsAndProofs, 0, len(blobs))
|
|
|
|
for i, blob := range blobs {
|
|
var b kzg.Blob
|
|
copy(b[:], blob)
|
|
cells, err := kzg.ComputeCells(&b)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var proofs []kzg.Proof
|
|
for idx := uint64(i) * numberOfColumns; idx < (uint64(i)+1)*numberOfColumns; idx++ {
|
|
proofs = append(proofs, kzg.Proof(cellProofs[idx]))
|
|
}
|
|
|
|
cellsAndProofs = append(cellsAndProofs, kzg.CellsAndProofs{
|
|
Cells: cells,
|
|
Proofs: proofs,
|
|
})
|
|
}
|
|
|
|
dataColumnSidecars, err := DataColumnSidecars(block, cellsAndProofs)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "data column sidcars")
|
|
}
|
|
|
|
return dataColumnSidecars, nil
|
|
}
|