From 940a68359e54be334fb55e7a9116324fbbe3dade Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Thu, 18 Sep 2025 15:20:45 +0200 Subject: [PATCH] core/txpool/blobpool: do not expect conversion in GetBlobs test Signed-off-by: Csaba Kiraly --- core/txpool/blobpool/blobpool.go | 60 ++++++++++++++------------- core/txpool/blobpool/blobpool_test.go | 16 +++---- eth/catalyst/api.go | 4 +- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 6a2bae14fe..c30c63ca4f 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -1379,45 +1379,49 @@ func (p *BlobPool) GetBlobs(vhashes []common.Hash, version byte, convert bool) ( } // Traverse the blobs in the transaction for i, hash := range tx.BlobHashes() { + skip := false // if true, skip using null, but proceed list, ok := indices[hash] if !ok { continue // non-interesting blob } var pf []kzg4844.Proof if !convert && sidecar.Version != version { - return nil, nil, nil, fmt.Errorf("blob sidecar version mismatch: want %d, have %d", version, sidecar.Version) - } - switch version { - case types.BlobSidecarVersion0: - if sidecar.Version == types.BlobSidecarVersion0 { - pf = []kzg4844.Proof{sidecar.Proofs[i]} - } else { - proof, err := kzg4844.ComputeBlobProof(&sidecar.Blobs[i], sidecar.Commitments[i]) - if err != nil { - return nil, nil, nil, err + skip = true // blob sidecar version mismatch, skip but proceed + } else { + switch version { + case types.BlobSidecarVersion0: + if sidecar.Version == types.BlobSidecarVersion0 { + pf = []kzg4844.Proof{sidecar.Proofs[i]} + } else { + proof, err := kzg4844.ComputeBlobProof(&sidecar.Blobs[i], sidecar.Commitments[i]) + if err != nil { + return nil, nil, nil, err + } + pf = []kzg4844.Proof{proof} + } + case types.BlobSidecarVersion1: + if sidecar.Version == types.BlobSidecarVersion0 { + cellProofs, err := kzg4844.ComputeCellProofs(&sidecar.Blobs[i]) + if err != nil { + return nil, nil, nil, err + } + pf = cellProofs + } else { + cellProofs, err := sidecar.CellProofsAt(i) + if err != nil { + return nil, nil, nil, err + } + pf = cellProofs } - pf = []kzg4844.Proof{proof} } - case types.BlobSidecarVersion1: - if sidecar.Version == types.BlobSidecarVersion0 { - cellProofs, err := kzg4844.ComputeCellProofs(&sidecar.Blobs[i]) - if err != nil { - return nil, nil, nil, err + if !skip { + for _, index := range list { + blobs[index] = &sidecar.Blobs[i] + commitments[index] = sidecar.Commitments[i] + proofs[index] = pf } - pf = cellProofs - } else { - cellProofs, err := sidecar.CellProofsAt(i) - if err != nil { - return nil, nil, nil, err - } - pf = cellProofs } } - for _, index := range list { - blobs[index] = &sidecar.Blobs[i] - commitments[index] = sidecar.Commitments[i] - proofs[index] = pf - } filled[hash] = struct{}{} } } diff --git a/core/txpool/blobpool/blobpool_test.go b/core/txpool/blobpool/blobpool_test.go index b189d6395f..5005b26fcf 100644 --- a/core/txpool/blobpool/blobpool_test.go +++ b/core/txpool/blobpool/blobpool_test.go @@ -423,11 +423,11 @@ func verifyBlobRetrievals(t *testing.T, pool *BlobPool) { hashes = append(hashes, tx.vhashes...) } } - blobs1, _, proofs1, err := pool.GetBlobs(hashes, types.BlobSidecarVersion0, true) + blobs1, _, proofs1, err := pool.GetBlobs(hashes, types.BlobSidecarVersion0, false) if err != nil { t.Fatal(err) } - blobs2, _, proofs2, err := pool.GetBlobs(hashes, types.BlobSidecarVersion1, true) + blobs2, _, proofs2, err := pool.GetBlobs(hashes, types.BlobSidecarVersion1, false) if err != nil { t.Fatal(err) } @@ -441,22 +441,18 @@ func verifyBlobRetrievals(t *testing.T, pool *BlobPool) { return } for i, hash := range hashes { - // If an item is missing, but shouldn't, error - if blobs1[i] == nil || proofs1[i] == nil { - t.Errorf("tracked blob retrieval failed: item %d, hash %x", i, hash) - continue - } - if blobs2[i] == nil || proofs2[i] == nil { + // If an item is missing from both, but shouldn't, error + if (blobs1[i] == nil || proofs1[i] == nil) && (blobs2[i] == nil || proofs2[i] == nil) { t.Errorf("tracked blob retrieval failed: item %d, hash %x", i, hash) continue } // Item retrieved, make sure it matches the expectation index := testBlobIndices[hash] - if *blobs1[i] != *testBlobs[index] || proofs1[i][0] != testBlobProofs[index] { + if blobs1[i] != nil && (*blobs1[i] != *testBlobs[index] || proofs1[i][0] != testBlobProofs[index]) { t.Errorf("retrieved blob or proof mismatch: item %d, hash %x", i, hash) continue } - if *blobs2[i] != *testBlobs[index] || !slices.Equal(proofs2[i], testBlobCellProofs[index]) { + if blobs2[i] != nil && (*blobs2[i] != *testBlobs[index] || !slices.Equal(proofs2[i], testBlobCellProofs[index])) { t.Errorf("retrieved blob or proof mismatch: item %d, hash %x", i, hash) continue } diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 8030410fc1..df57e9036f 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -482,7 +482,7 @@ func (api *ConsensusAPI) GetBlobsV1(hashes []common.Hash) ([]*engine.BlobAndProo if len(hashes) > 128 { return nil, engine.TooLargeRequest.With(fmt.Errorf("requested blob count too large: %v", len(hashes))) } - blobs, _, proofs, err := api.eth.BlobTxPool().GetBlobs(hashes, types.BlobSidecarVersion0, true) + blobs, _, proofs, err := api.eth.BlobTxPool().GetBlobs(hashes, types.BlobSidecarVersion0, false) if err != nil { return nil, engine.InvalidParams.With(err) } @@ -542,7 +542,7 @@ func (api *ConsensusAPI) GetBlobsV2(hashes []common.Hash) ([]*engine.BlobAndProo return nil, nil } - blobs, _, proofs, err := api.eth.BlobTxPool().GetBlobs(hashes, types.BlobSidecarVersion1, true) + blobs, _, proofs, err := api.eth.BlobTxPool().GetBlobs(hashes, types.BlobSidecarVersion1, false) if err != nil { return nil, engine.InvalidParams.With(err) }