@@ -24,6 +24,7 @@ import (
2424 "sort"
2525 "sync/atomic"
2626
27+ "github.com/XinFinOrg/XDPoSChain/common"
2728 "github.com/XinFinOrg/XDPoSChain/consensus/misc"
2829 "github.com/XinFinOrg/XDPoSChain/core/types"
2930 "github.com/XinFinOrg/XDPoSChain/log"
@@ -48,7 +49,7 @@ const (
4849// blockFees represents a single block for processing
4950type 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.
@@ -198,20 +199,20 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.Block
198199//
199200// Note: baseFee includes the next block after the newest of the returned range, because this
200201// value can be derived from the newest block.
201- func (oracle * Oracle ) FeeHistory (ctx context.Context , blocks int , lastBlock rpc.BlockNumber , rewardPercentiles []float64 ) (rpc. BlockNumber , [][]* big.Int , []* big.Int , []float64 , error ) {
202+ func (oracle * Oracle ) FeeHistory (ctx context.Context , blocks int , unresolvedLastBlock rpc.BlockNumber , rewardPercentiles []float64 ) (* big. Int , [][]* big.Int , []* big.Int , []float64 , error ) {
202203 if blocks < 1 {
203- return 0 , nil , nil , nil , nil // returning with no data and no error means there are no retrievable blocks
204+ return common . Big0 , nil , nil , nil , nil // returning with no data and no error means there are no retrievable blocks
204205 }
205206 if blocks > maxFeeHistory {
206207 log .Warn ("Sanitizing fee history length" , "requested" , blocks , "truncated" , maxFeeHistory )
207208 blocks = maxFeeHistory
208209 }
209210 for i , p := range rewardPercentiles {
210211 if p < 0 || p > 100 {
211- return 0 , nil , nil , nil , fmt .Errorf ("%w: %f" , errInvalidPercentile , p )
212+ return common . Big0 , nil , nil , nil , fmt .Errorf ("%w: %f" , errInvalidPercentile , p )
212213 }
213214 if i > 0 && p < rewardPercentiles [i - 1 ] {
214- return 0 , nil , nil , nil , fmt .Errorf ("%w: #%d:%f > #%d:%f" , errInvalidPercentile , i - 1 , rewardPercentiles [i - 1 ], i , p )
215+ return common . Big0 , nil , nil , nil , fmt .Errorf ("%w: #%d:%f > #%d:%f" , errInvalidPercentile , i - 1 , rewardPercentiles [i - 1 ], i , p )
215216 }
216217 }
217218 // Only process blocks if reward percentiles were requested
@@ -224,36 +225,36 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
224225 pendingReceipts []* types.Receipt
225226 err error
226227 )
227- pendingBlock , pendingReceipts , lastBlock , blocks , err = oracle .resolveBlockRange (ctx , lastBlock , blocks , maxHistory )
228+ pendingBlock , pendingReceipts , lastBlock , blocks , err : = oracle .resolveBlockRange (ctx , unresolvedLastBlock , blocks , maxHistory )
228229 if err != nil || blocks == 0 {
229- return 0 , nil , nil , nil , err
230+ return common . Big0 , nil , nil , nil , err
230231 }
231- oldestBlock := lastBlock + 1 - rpc . BlockNumber (blocks )
232+ oldestBlock := lastBlock + 1 - uint64 (blocks )
232233
233234 var (
234- next = int64 ( oldestBlock )
235+ next = oldestBlock
235236 results = make (chan * blockFees , blocks )
236237 )
237238 for i := 0 ; i < maxBlockFetchers && i < blocks ; i ++ {
238239 go func () {
239240 for {
240241 // Retrieve the next block number to fetch with this goroutine
241- blockNumber := rpc . BlockNumber ( atomic .AddInt64 (& next , 1 ) - 1 )
242+ blockNumber := atomic .AddUint64 (& next , 1 ) - 1
242243 if blockNumber > lastBlock {
243244 return
244245 }
245246
246247 fees := & blockFees {blockNumber : blockNumber }
247- if pendingBlock != nil && blockNumber >= rpc . BlockNumber ( pendingBlock .NumberU64 () ) {
248+ if pendingBlock != nil && blockNumber >= pendingBlock .NumberU64 () {
248249 fees .block , fees .receipts = pendingBlock , pendingReceipts
249250 } else {
250251 if len (rewardPercentiles ) != 0 {
251- fees .block , fees .err = oracle .backend .BlockByNumber (ctx , blockNumber )
252+ fees .block , fees .err = oracle .backend .BlockByNumber (ctx , rpc . BlockNumber ( blockNumber ) )
252253 if fees .block != nil && fees .err == nil {
253254 fees .receipts , fees .err = oracle .backend .GetReceipts (ctx , fees .block .Hash ())
254255 }
255256 } else {
256- fees .header , fees .err = oracle .backend .HeaderByNumber (ctx , blockNumber )
257+ fees .header , fees .err = oracle .backend .HeaderByNumber (ctx , rpc . BlockNumber ( blockNumber ) )
257258 }
258259 }
259260 if fees .block != nil {
@@ -276,7 +277,7 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
276277 for ; blocks > 0 ; blocks -- {
277278 fees := <- results
278279 if fees .err != nil {
279- return 0 , nil , nil , nil , fees .err
280+ return common . Big0 , nil , nil , nil , fees .err
280281 }
281282 i := int (fees .blockNumber - oldestBlock )
282283 if fees .header != nil {
@@ -289,13 +290,13 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
289290 }
290291 }
291292 if firstMissing == 0 {
292- return 0 , nil , nil , nil , nil
293+ return common . Big0 , nil , nil , nil , nil
293294 }
294295 if len (rewardPercentiles ) != 0 {
295296 reward = reward [:firstMissing ]
296297 } else {
297298 reward = nil
298299 }
299300 baseFee , gasUsedRatio = baseFee [:firstMissing + 1 ], gasUsedRatio [:firstMissing ]
300- return oldestBlock , reward , baseFee , gasUsedRatio , nil
301+ return new (big. Int ). SetUint64 ( oldestBlock ) , reward , baseFee , gasUsedRatio , nil
301302}
0 commit comments