eth/gasprice: implement feeHistory API (#23033)
* eth/gasprice: implement feeHistory API * eth/gasprice: factored out resolveBlockRange * eth/gasprice: add sanity check for missing block * eth/gasprice: fetch actual gas used from receipts * miner, eth/gasprice: add PendingBlockAndReceipts * internal/ethapi: use hexutil.Big * eth/gasprice: return error when requesting beyond head block * eth/gasprice: fixed tests and return errors correctly * eth/gasprice: rename receiver name * eth/gasprice: return directly if blockCount == 0 Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
This commit is contained in:
@ -80,6 +80,40 @@ func (s *PublicEthereumAPI) MaxPriorityFeePerGas(ctx context.Context) (*hexutil.
|
||||
return (*hexutil.Big)(tipcap), err
|
||||
}
|
||||
|
||||
type feeHistoryResults struct {
|
||||
FirstBlock rpc.BlockNumber
|
||||
Reward [][]*hexutil.Big
|
||||
BaseFee []*hexutil.Big
|
||||
GasUsedRatio []float64
|
||||
}
|
||||
|
||||
func (s *PublicEthereumAPI) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (feeHistoryResults, error) {
|
||||
firstBlock, reward, baseFee, gasUsedRatio, err := s.b.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles)
|
||||
if err != nil {
|
||||
return feeHistoryResults{}, err
|
||||
}
|
||||
results := feeHistoryResults{
|
||||
FirstBlock: firstBlock,
|
||||
GasUsedRatio: gasUsedRatio,
|
||||
}
|
||||
if reward != nil {
|
||||
results.Reward = make([][]*hexutil.Big, len(reward))
|
||||
for j, w := range reward {
|
||||
results.Reward[j] = make([]*hexutil.Big, len(w))
|
||||
for i, v := range w {
|
||||
results.Reward[j][i] = (*hexutil.Big)(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
if baseFee != nil {
|
||||
results.BaseFee = make([]*hexutil.Big, len(baseFee))
|
||||
for i, v := range baseFee {
|
||||
results.BaseFee[i] = (*hexutil.Big)(v)
|
||||
}
|
||||
}
|
||||
return results, nil
|
||||
}
|
||||
|
||||
// Syncing returns false in case the node is currently not syncing with the network. It can be up to date or has not
|
||||
// yet received the latest block headers from its pears. In case it is synchronizing:
|
||||
// - startingBlock: block number this node started to synchronise from
|
||||
|
@ -42,6 +42,7 @@ type Backend interface {
|
||||
// General Ethereum API
|
||||
Downloader() *downloader.Downloader
|
||||
SuggestGasTipCap(ctx context.Context) (*big.Int, error)
|
||||
FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (rpc.BlockNumber, [][]*big.Int, []*big.Int, []float64, error)
|
||||
ChainDb() ethdb.Database
|
||||
AccountManager() *accounts.Manager
|
||||
ExtRPCEnabled() bool
|
||||
|
Reference in New Issue
Block a user