diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index d33629365f..a9f457c144 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -1696,15 +1696,15 @@ func (p *BlobPool) GetBlobs(vhashes []common.Hash, version byte) ([]*kzg4844.Blo } // AvailableBlobs returns the number of blobs that are available in the subpool. -func (p *BlobPool) AvailableBlobs(vhashes []common.Hash) int { - available := 0 - for _, vhash := range vhashes { +func (p *BlobPool) AvailableBlobs(vhashes []common.Hash) []bool { + available := make([]bool, len(vhashes)) + for i, vhash := range vhashes { // Retrieve the datastore item (in a short lock) p.lock.RLock() _, exists := p.lookup.storeidOfBlob(vhash) p.lock.RUnlock() if exists { - available++ + available[i] = true } } return available diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index b31185a40f..a412a3784f 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -630,7 +630,7 @@ func (api *ConsensusAPI) getBlobs(hashes []common.Hash, v2 bool) (engine.BlobAnd if len(hashes) > 128 { return nil, engine.TooLargeRequest.With(fmt.Errorf("requested blob count too large: %v", len(hashes))) } - available := api.eth.BlobTxPool().AvailableBlobs(hashes) + available := len(api.eth.BlobTxPool().AvailableBlobs(hashes)) getBlobsRequestedCounter.Inc(int64(len(hashes))) getBlobsAvailableCounter.Inc(int64(available)) @@ -679,6 +679,10 @@ func (api *ConsensusAPI) getBlobs(hashes []common.Hash, v2 bool) (engine.BlobAnd return res, nil } +func (api *ConsensusAPI) HasBlobs(hashes []common.Hash) ([]bool, error) { + return api.eth.BlobTxPool().AvailableBlobs(hashes), nil +} + // Helper for NewPayload* methods. var invalidStatus = engine.PayloadStatusV1{Status: engine.INVALID}