Skip to content

Commit bbfa648

Browse files
Use hexutil.Uint for blockCount parameter in feeHistory method (ethereum#23239)
* internal/ethapi/api: use hexutil.uint for blockCount parameter instead of int for feeHistory * return hex value for oldestBlock instead of number * return uint64 from oracle.resolveBlockRange * eth/gasprice: fixed test Co-authored-by: Zsolt Felfoldi <[email protected]>
1 parent a1f16bc commit bbfa648

File tree

6 files changed

+28
-27
lines changed

6 files changed

+28
-27
lines changed

eth/api_backend.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ func (b *EthAPIBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error)
287287
return b.gpo.SuggestTipCap(ctx)
288288
}
289289

290-
func (b *EthAPIBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock rpc.BlockNumber, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) {
290+
func (b *EthAPIBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) {
291291
return b.gpo.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles)
292292
}
293293

eth/gasprice/feehistory.go

+19-18
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"sort"
2525
"sync/atomic"
2626

27+
"github.com/ethereum/go-ethereum/common"
2728
"github.com/ethereum/go-ethereum/consensus/misc"
2829
"github.com/ethereum/go-ethereum/core/types"
2930
"github.com/ethereum/go-ethereum/log"
@@ -48,7 +49,7 @@ const (
4849
// blockFees represents a single block for processing
4950
type blockFees struct {
5051
// set by the caller
51-
blockNumber rpc.BlockNumber
52+
blockNumber uint64
5253
header *types.Header
5354
block *types.Block // only set if reward percentiles are requested
5455
receipts types.Receipts
@@ -133,7 +134,7 @@ func (oracle *Oracle) processBlock(bf *blockFees, percentiles []float64) {
133134
// also returned if requested and available.
134135
// Note: an error is only returned if retrieving the head header has failed. If there are no
135136
// retrievable blocks in the specified range then zero block count is returned with no error.
136-
func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.BlockNumber, blocks, maxHistory int) (*types.Block, []*types.Receipt, rpc.BlockNumber, int, error) {
137+
func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.BlockNumber, blocks, maxHistory int) (*types.Block, []*types.Receipt, uint64, int, error) {
137138
var (
138139
headBlock rpc.BlockNumber
139140
pendingBlock *types.Block
@@ -181,7 +182,7 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.Block
181182
if rpc.BlockNumber(blocks) > lastBlock+1 {
182183
blocks = int(lastBlock + 1)
183184
}
184-
return pendingBlock, pendingReceipts, lastBlock, blocks, nil
185+
return pendingBlock, pendingReceipts, uint64(lastBlock), blocks, nil
185186
}
186187

187188
// FeeHistory returns data relevant for fee estimation based on the specified range of blocks.
@@ -197,20 +198,20 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.Block
197198
// - gasUsedRatio: gasUsed/gasLimit in the given block
198199
// Note: baseFee includes the next block after the newest of the returned range, because this
199200
// value can be derived from the newest block.
200-
func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (rpc.BlockNumber, [][]*big.Int, []*big.Int, []float64, error) {
201+
func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, unresolvedLastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) {
201202
if blocks < 1 {
202-
return 0, nil, nil, nil, nil // returning with no data and no error means there are no retrievable blocks
203+
return common.Big0, nil, nil, nil, nil // returning with no data and no error means there are no retrievable blocks
203204
}
204205
if blocks > maxFeeHistory {
205206
log.Warn("Sanitizing fee history length", "requested", blocks, "truncated", maxFeeHistory)
206207
blocks = maxFeeHistory
207208
}
208209
for i, p := range rewardPercentiles {
209210
if p < 0 || p > 100 {
210-
return 0, nil, nil, nil, fmt.Errorf("%w: %f", errInvalidPercentile, p)
211+
return common.Big0, nil, nil, nil, fmt.Errorf("%w: %f", errInvalidPercentile, p)
211212
}
212213
if i > 0 && p < rewardPercentiles[i-1] {
213-
return 0, nil, nil, nil, fmt.Errorf("%w: #%d:%f > #%d:%f", errInvalidPercentile, i-1, rewardPercentiles[i-1], i, p)
214+
return common.Big0, nil, nil, nil, fmt.Errorf("%w: #%d:%f > #%d:%f", errInvalidPercentile, i-1, rewardPercentiles[i-1], i, p)
214215
}
215216
}
216217
// Only process blocks if reward percentiles were requested
@@ -223,36 +224,36 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
223224
pendingReceipts []*types.Receipt
224225
err error
225226
)
226-
pendingBlock, pendingReceipts, lastBlock, blocks, err = oracle.resolveBlockRange(ctx, lastBlock, blocks, maxHistory)
227+
pendingBlock, pendingReceipts, lastBlock, blocks, err := oracle.resolveBlockRange(ctx, unresolvedLastBlock, blocks, maxHistory)
227228
if err != nil || blocks == 0 {
228-
return 0, nil, nil, nil, err
229+
return common.Big0, nil, nil, nil, err
229230
}
230-
oldestBlock := lastBlock + 1 - rpc.BlockNumber(blocks)
231+
oldestBlock := lastBlock + 1 - uint64(blocks)
231232

232233
var (
233-
next = int64(oldestBlock)
234+
next = oldestBlock
234235
results = make(chan *blockFees, blocks)
235236
)
236237
for i := 0; i < maxBlockFetchers && i < blocks; i++ {
237238
go func() {
238239
for {
239240
// Retrieve the next block number to fetch with this goroutine
240-
blockNumber := rpc.BlockNumber(atomic.AddInt64(&next, 1) - 1)
241+
blockNumber := atomic.AddUint64(&next, 1) - 1
241242
if blockNumber > lastBlock {
242243
return
243244
}
244245

245246
fees := &blockFees{blockNumber: blockNumber}
246-
if pendingBlock != nil && blockNumber >= rpc.BlockNumber(pendingBlock.NumberU64()) {
247+
if pendingBlock != nil && blockNumber >= pendingBlock.NumberU64() {
247248
fees.block, fees.receipts = pendingBlock, pendingReceipts
248249
} else {
249250
if len(rewardPercentiles) != 0 {
250-
fees.block, fees.err = oracle.backend.BlockByNumber(ctx, blockNumber)
251+
fees.block, fees.err = oracle.backend.BlockByNumber(ctx, rpc.BlockNumber(blockNumber))
251252
if fees.block != nil && fees.err == nil {
252253
fees.receipts, fees.err = oracle.backend.GetReceipts(ctx, fees.block.Hash())
253254
}
254255
} else {
255-
fees.header, fees.err = oracle.backend.HeaderByNumber(ctx, blockNumber)
256+
fees.header, fees.err = oracle.backend.HeaderByNumber(ctx, rpc.BlockNumber(blockNumber))
256257
}
257258
}
258259
if fees.block != nil {
@@ -275,7 +276,7 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
275276
for ; blocks > 0; blocks-- {
276277
fees := <-results
277278
if fees.err != nil {
278-
return 0, nil, nil, nil, fees.err
279+
return common.Big0, nil, nil, nil, fees.err
279280
}
280281
i := int(fees.blockNumber - oldestBlock)
281282
if fees.header != nil {
@@ -288,13 +289,13 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
288289
}
289290
}
290291
if firstMissing == 0 {
291-
return 0, nil, nil, nil, nil
292+
return common.Big0, nil, nil, nil, nil
292293
}
293294
if len(rewardPercentiles) != 0 {
294295
reward = reward[:firstMissing]
295296
} else {
296297
reward = nil
297298
}
298299
baseFee, gasUsedRatio = baseFee[:firstMissing+1], gasUsedRatio[:firstMissing]
299-
return oldestBlock, reward, baseFee, gasUsedRatio, nil
300+
return new(big.Int).SetUint64(oldestBlock), reward, baseFee, gasUsedRatio, nil
300301
}

eth/gasprice/feehistory_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestFeeHistory(t *testing.T) {
3232
count int
3333
last rpc.BlockNumber
3434
percent []float64
35-
expFirst rpc.BlockNumber
35+
expFirst uint64
3636
expCount int
3737
expErr error
3838
}{
@@ -70,7 +70,7 @@ func TestFeeHistory(t *testing.T) {
7070
expBaseFee++
7171
}
7272

73-
if first != c.expFirst {
73+
if first.Uint64() != c.expFirst {
7474
t.Fatalf("Test case %d: first block mismatch, want %d, got %d", i, c.expFirst, first)
7575
}
7676
if len(reward) != expReward {

internal/ethapi/api.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,19 @@ func (s *PublicEthereumAPI) MaxPriorityFeePerGas(ctx context.Context) (*hexutil.
8181
}
8282

8383
type feeHistoryResult struct {
84-
OldestBlock rpc.BlockNumber `json:"oldestBlock"`
84+
OldestBlock *hexutil.Big `json:"oldestBlock"`
8585
Reward [][]*hexutil.Big `json:"reward,omitempty"`
8686
BaseFee []*hexutil.Big `json:"baseFeePerGas,omitempty"`
8787
GasUsedRatio []float64 `json:"gasUsedRatio"`
8888
}
8989

90-
func (s *PublicEthereumAPI) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*feeHistoryResult, error) {
91-
oldest, reward, baseFee, gasUsed, err := s.b.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles)
90+
func (s *PublicEthereumAPI) FeeHistory(ctx context.Context, blockCount hexutil.Uint, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*feeHistoryResult, error) {
91+
oldest, reward, baseFee, gasUsed, err := s.b.FeeHistory(ctx, int(blockCount), lastBlock, rewardPercentiles)
9292
if err != nil {
9393
return nil, err
9494
}
9595
results := &feeHistoryResult{
96-
OldestBlock: oldest,
96+
OldestBlock: (*hexutil.Big)(oldest),
9797
GasUsedRatio: gasUsed,
9898
}
9999
if reward != nil {

internal/ethapi/backend.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type Backend interface {
4242
// General Ethereum API
4343
Downloader() *downloader.Downloader
4444
SuggestGasTipCap(ctx context.Context) (*big.Int, error)
45-
FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (rpc.BlockNumber, [][]*big.Int, []*big.Int, []float64, error)
45+
FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error)
4646
ChainDb() ethdb.Database
4747
AccountManager() *accounts.Manager
4848
ExtRPCEnabled() bool

les/api_backend.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ func (b *LesApiBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error)
269269
return b.gpo.SuggestTipCap(ctx)
270270
}
271271

272-
func (b *LesApiBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock rpc.BlockNumber, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) {
272+
func (b *LesApiBackend) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) {
273273
return b.gpo.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles)
274274
}
275275

0 commit comments

Comments
 (0)