|
|
|
@ -126,15 +126,48 @@ func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint |
|
|
|
|
// GetBlockReceipts retrieves the receipts generated by the transactions included
|
|
|
|
|
// in a block given by its hash.
|
|
|
|
|
func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (types.Receipts, error) { |
|
|
|
|
// Retrieve the potentially incomplete receipts from disk or network
|
|
|
|
|
receipts := core.GetBlockReceipts(odr.Database(), hash, number) |
|
|
|
|
if receipts != nil { |
|
|
|
|
return receipts, nil |
|
|
|
|
if receipts == nil { |
|
|
|
|
r := &ReceiptsRequest{Hash: hash, Number: number} |
|
|
|
|
if err := odr.Retrieve(ctx, r); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
receipts = r.Receipts |
|
|
|
|
} |
|
|
|
|
r := &ReceiptsRequest{Hash: hash, Number: number} |
|
|
|
|
if err := odr.Retrieve(ctx, r); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
// If the receipts are incomplete, fill the derived fields
|
|
|
|
|
if len(receipts) > 0 && receipts[0].TxHash == (common.Hash{}) { |
|
|
|
|
block, err := GetBlock(ctx, odr, hash, number) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
genesis := core.GetCanonicalHash(odr.Database(), 0) |
|
|
|
|
config, _ := core.GetChainConfig(odr.Database(), genesis) |
|
|
|
|
|
|
|
|
|
core.SetReceiptsData(config, block, receipts) |
|
|
|
|
core.WriteBlockReceipts(odr.Database(), hash, number, receipts) |
|
|
|
|
} |
|
|
|
|
return receipts, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetBlockLogs retrieves the logs generated by the transactions included in a
|
|
|
|
|
// block given by its hash.
|
|
|
|
|
func GetBlockLogs(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) ([][]*types.Log, error) { |
|
|
|
|
// Retrieve the potentially incomplete receipts from disk or network
|
|
|
|
|
receipts := core.GetBlockReceipts(odr.Database(), hash, number) |
|
|
|
|
if receipts == nil { |
|
|
|
|
r := &ReceiptsRequest{Hash: hash, Number: number} |
|
|
|
|
if err := odr.Retrieve(ctx, r); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
receipts = r.Receipts |
|
|
|
|
} |
|
|
|
|
// Return the logs without deriving any computed fields on the receipts
|
|
|
|
|
logs := make([][]*types.Log, len(receipts)) |
|
|
|
|
for i, receipt := range receipts { |
|
|
|
|
logs[i] = receipt.Logs |
|
|
|
|
} |
|
|
|
|
return r.Receipts, nil |
|
|
|
|
return logs, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetBloomBits retrieves a batch of compressed bloomBits vectors belonging to the given bit index and section indexes
|
|
|
|
|