@@ -24,6 +24,7 @@ import (
24
24
"sort"
25
25
"sync/atomic"
26
26
27
+ "github.com/XinFinOrg/XDPoSChain/common"
27
28
"github.com/XinFinOrg/XDPoSChain/consensus/misc"
28
29
"github.com/XinFinOrg/XDPoSChain/core/types"
29
30
"github.com/XinFinOrg/XDPoSChain/log"
@@ -48,7 +49,7 @@ const (
48
49
// blockFees represents a single block for processing
49
50
type blockFees struct {
50
51
// set by the caller
51
- blockNumber rpc. BlockNumber
52
+ blockNumber uint64
52
53
header * types.Header
53
54
block * types.Block // only set if reward percentiles are requested
54
55
receipts types.Receipts
@@ -133,7 +134,7 @@ func (oracle *Oracle) processBlock(bf *blockFees, percentiles []float64) {
133
134
// also returned if requested and available.
134
135
// Note: an error is only returned if retrieving the head header has failed. If there are no
135
136
// 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 ) {
137
138
var (
138
139
headBlock rpc.BlockNumber
139
140
pendingBlock * types.Block
@@ -181,7 +182,7 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, lastBlock rpc.Block
181
182
if rpc .BlockNumber (blocks ) > lastBlock + 1 {
182
183
blocks = int (lastBlock + 1 )
183
184
}
184
- return pendingBlock , pendingReceipts , lastBlock , blocks , nil
185
+ return pendingBlock , pendingReceipts , uint64 ( lastBlock ) , blocks , nil
185
186
}
186
187
187
188
// 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
198
199
//
199
200
// Note: baseFee includes the next block after the newest of the returned range, because this
200
201
// 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 ) {
202
203
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
204
205
}
205
206
if blocks > maxFeeHistory {
206
207
log .Warn ("Sanitizing fee history length" , "requested" , blocks , "truncated" , maxFeeHistory )
207
208
blocks = maxFeeHistory
208
209
}
209
210
for i , p := range rewardPercentiles {
210
211
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 )
212
213
}
213
214
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 )
215
216
}
216
217
}
217
218
// Only process blocks if reward percentiles were requested
@@ -224,36 +225,36 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
224
225
pendingReceipts []* types.Receipt
225
226
err error
226
227
)
227
- pendingBlock , pendingReceipts , lastBlock , blocks , err = oracle .resolveBlockRange (ctx , lastBlock , blocks , maxHistory )
228
+ pendingBlock , pendingReceipts , lastBlock , blocks , err : = oracle .resolveBlockRange (ctx , unresolvedLastBlock , blocks , maxHistory )
228
229
if err != nil || blocks == 0 {
229
- return 0 , nil , nil , nil , err
230
+ return common . Big0 , nil , nil , nil , err
230
231
}
231
- oldestBlock := lastBlock + 1 - rpc . BlockNumber (blocks )
232
+ oldestBlock := lastBlock + 1 - uint64 (blocks )
232
233
233
234
var (
234
- next = int64 ( oldestBlock )
235
+ next = oldestBlock
235
236
results = make (chan * blockFees , blocks )
236
237
)
237
238
for i := 0 ; i < maxBlockFetchers && i < blocks ; i ++ {
238
239
go func () {
239
240
for {
240
241
// 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
242
243
if blockNumber > lastBlock {
243
244
return
244
245
}
245
246
246
247
fees := & blockFees {blockNumber : blockNumber }
247
- if pendingBlock != nil && blockNumber >= rpc . BlockNumber ( pendingBlock .NumberU64 () ) {
248
+ if pendingBlock != nil && blockNumber >= pendingBlock .NumberU64 () {
248
249
fees .block , fees .receipts = pendingBlock , pendingReceipts
249
250
} else {
250
251
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 ) )
252
253
if fees .block != nil && fees .err == nil {
253
254
fees .receipts , fees .err = oracle .backend .GetReceipts (ctx , fees .block .Hash ())
254
255
}
255
256
} else {
256
- fees .header , fees .err = oracle .backend .HeaderByNumber (ctx , blockNumber )
257
+ fees .header , fees .err = oracle .backend .HeaderByNumber (ctx , rpc . BlockNumber ( blockNumber ) )
257
258
}
258
259
}
259
260
if fees .block != nil {
@@ -276,7 +277,7 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
276
277
for ; blocks > 0 ; blocks -- {
277
278
fees := <- results
278
279
if fees .err != nil {
279
- return 0 , nil , nil , nil , fees .err
280
+ return common . Big0 , nil , nil , nil , fees .err
280
281
}
281
282
i := int (fees .blockNumber - oldestBlock )
282
283
if fees .header != nil {
@@ -289,13 +290,13 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks int, lastBlock rpc.
289
290
}
290
291
}
291
292
if firstMissing == 0 {
292
- return 0 , nil , nil , nil , nil
293
+ return common . Big0 , nil , nil , nil , nil
293
294
}
294
295
if len (rewardPercentiles ) != 0 {
295
296
reward = reward [:firstMissing ]
296
297
} else {
297
298
reward = nil
298
299
}
299
300
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
301
302
}
0 commit comments