mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
Add RecoverCells, which returns all CellsPerBlob cells per blob from a sufficient subset. RecoverBlobs only exposes recovered blobs; serving or persisting the extension cells of a sparse-blobpool transaction needs the full 128-cell set. Add RecoverCells, which returns all CellsPerBlob cells per blob from a sufficient subset. When the full data domain (cell indices 0..DataPerBlob-1) is present (the common case for pooled transactions) the blobs are a free concatenation of the data cells and every cell follows from a systematic extension via ComputeCells (~2-6ms/blob), skipping the KZG erasure solve. Otherwise it falls back to the erasure recovery path (~15-20ms/blob), which now surfaces the library's full extended cell set instead of discarding it down to blobs as RecoverBlobs does. Both paths return byte-identical cells in canonical order. Cells only; cell proofs are never recomputed (callers retain the proofs shipped with the transaction). Tested on both the gokzg and ckzg backends, fast and slow paths, against the original cells. Note: the same fast-path optimization could also be pushed down to gokzg and ckzg. There are both arguments for (the primitive becomes faster in some cases, same for the rest of cases) and against (it is not the role of the crypto lib to be intelligent here), so I went with the wrapper for now.
91 lines
3.3 KiB
Go
91 lines
3.3 KiB
Go
// Copyright 2023 The go-ethereum Authors
|
|
// This file is part of the go-ethereum library.
|
|
//
|
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//go:build !ckzg || nacl || js || wasip1 || !cgo || gofuzz
|
|
|
|
package kzg4844
|
|
|
|
import "sync"
|
|
|
|
// ckzgAvailable signals whether the library was compiled into Geth.
|
|
const ckzgAvailable = false
|
|
|
|
// ckzgIniter ensures that we initialize the KZG library once before using it.
|
|
var ckzgIniter sync.Once
|
|
|
|
// ckzgInit initializes the KZG library with the provided trusted setup.
|
|
func ckzgInit() {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgBlobToCommitment creates a small commitment out of a data blob.
|
|
func ckzgBlobToCommitment(blob *Blob) (Commitment, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgComputeProof computes the KZG proof at the given point for the polynomial
|
|
// represented by the blob.
|
|
func ckzgComputeProof(blob *Blob, point Point) (Proof, Claim, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgVerifyProof verifies the KZG proof that the polynomial represented by the blob
|
|
// evaluated at the given point is the claimed value.
|
|
func ckzgVerifyProof(commitment Commitment, point Point, claim Claim, proof Proof) error {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgComputeBlobProof returns the KZG proof that is used to verify the blob against
|
|
// the commitment.
|
|
//
|
|
// This method does not verify that the commitment is correct with respect to blob.
|
|
func ckzgComputeBlobProof(blob *Blob, commitment Commitment) (Proof, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgVerifyBlobProof verifies that the blob data corresponds to the provided commitment.
|
|
func ckzgVerifyBlobProof(blob *Blob, commitment Commitment, proof Proof) error {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgVerifyCellProofBatch verifies that the blob data corresponds to the provided commitment.
|
|
func ckzgVerifyCellProofBatch(blobs []Blob, commitments []Commitment, proof []Proof) error {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
// ckzgComputeCellProofs returns the KZG cell proofs that are used to verify the blob against
|
|
// the commitment.
|
|
//
|
|
// This method does not verify that the commitment is correct with respect to blob.
|
|
func ckzgComputeCellProofs(blob *Blob) ([]Proof, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
func ckzgVerifyCells(cells []Cell, commitments []Commitment, cellProofs []Proof, cellIndices []uint64) error {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
func ckzgComputeCells(blobs []Blob) ([]Cell, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
func ckzgRecoverBlobs(cells []Cell, cellIndices []uint64) ([]Blob, error) {
|
|
panic("unsupported platform")
|
|
}
|
|
|
|
func ckzgRecoverCells(cells []Cell, cellIndices []uint64) ([]Cell, error) {
|
|
panic("unsupported platform")
|
|
}
|