From 54888db8d4e8b17d37509dbb1d8a1513cad3bd06 Mon Sep 17 00:00:00 2001 From: johnliu-dexon <42129254+johnliu-dexon@users.noreply.github.com> Date: Tue, 27 Nov 2018 17:13:22 +0800 Subject: internal/ethapi: add getBlockReceiptsByHash (#56) * dex: add getBlockReceiptsByHash add rpc method for performance acceleration * Update internal/ethapi/api.go Co-Authored-By: johnliu-dexon <42129254+johnliu-dexon@users.noreply.github.com> --- internal/ethapi/api.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'internal/ethapi') diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index a0b79329c..2226bebb1 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -673,6 +673,41 @@ func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.A return res[:], state.Error() } +// GetBlockReceiptsByNumber returns the requested block receipts. +func (s *PublicBlockChainAPI) GetBlockReceiptsByHash(ctx context.Context, blockHash common.Hash) ([]map[string]interface{}, error) { + receipts, err := s.b.GetReceipts(ctx, blockHash) + if err != nil { + return nil, err + } + + resp := make([]map[string]interface{}, 0, len(receipts)) + for _, receipt := range receipts { + fields := map[string]interface{}{ + "gasUsed": hexutil.Uint64(receipt.GasUsed), + "cumulativeGasUsed": hexutil.Uint64(receipt.CumulativeGasUsed), + "contractAddress": nil, + "logs": receipt.Logs, + "logsBloom": receipt.Bloom, + } + + // Assign receipt status or post state. + if len(receipt.PostState) > 0 { + fields["root"] = hexutil.Bytes(receipt.PostState) + } else { + fields["status"] = hexutil.Uint(receipt.Status) + } + if receipt.Logs == nil { + fields["logs"] = [][]*types.Log{} + } + // If the ContractAddress is 20 0x0 bytes, assume it is not a contract creation + if receipt.ContractAddress != (common.Address{}) { + fields["contractAddress"] = receipt.ContractAddress + } + resp = append(resp, fields) + } + return resp, nil +} + // CallArgs represents the arguments for a call. type CallArgs struct { From common.Address `json:"from"` -- cgit