mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-17 10:20:44 +00:00
eth/gasprice: add generic LRU implementation (#26162)
This commit is contained in:
parent
179185438f
commit
f9e431888e
2 changed files with 12 additions and 9 deletions
|
|
@ -56,7 +56,12 @@ type blockFees struct {
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
// processedFees contains the results of a processed block and is also used for caching
|
type cacheKey struct {
|
||||||
|
number uint64
|
||||||
|
percentiles string
|
||||||
|
}
|
||||||
|
|
||||||
|
// processedFees contains the results of a processed block.
|
||||||
type processedFees struct {
|
type processedFees struct {
|
||||||
reward []*big.Int
|
reward []*big.Int
|
||||||
baseFee, nextBaseFee *big.Int
|
baseFee, nextBaseFee *big.Int
|
||||||
|
|
@ -268,13 +273,10 @@ func (oracle *Oracle) FeeHistory(ctx context.Context, blocks uint64, unresolvedL
|
||||||
oracle.processBlock(fees, rewardPercentiles)
|
oracle.processBlock(fees, rewardPercentiles)
|
||||||
results <- fees
|
results <- fees
|
||||||
} else {
|
} else {
|
||||||
cacheKey := struct {
|
cacheKey := cacheKey{number: blockNumber, percentiles: string(percentileKey)}
|
||||||
number uint64
|
|
||||||
percentiles string
|
|
||||||
}{blockNumber, string(percentileKey)}
|
|
||||||
|
|
||||||
if p, ok := oracle.historyCache.Get(cacheKey); ok {
|
if p, ok := oracle.historyCache.Get(cacheKey); ok {
|
||||||
fees.results = p.(processedFees)
|
fees.results = p
|
||||||
results <- fees
|
results <- fees
|
||||||
} else {
|
} else {
|
||||||
if len(rewardPercentiles) != 0 {
|
if len(rewardPercentiles) != 0 {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import (
|
||||||
"github.com/XinFinOrg/XDPoSChain/log"
|
"github.com/XinFinOrg/XDPoSChain/log"
|
||||||
"github.com/XinFinOrg/XDPoSChain/params"
|
"github.com/XinFinOrg/XDPoSChain/params"
|
||||||
"github.com/XinFinOrg/XDPoSChain/rpc"
|
"github.com/XinFinOrg/XDPoSChain/rpc"
|
||||||
lru "github.com/hashicorp/golang-lru"
|
"github.com/XinFinOrg/XDPoSChain/common/lru"
|
||||||
)
|
)
|
||||||
|
|
||||||
const sampleNumber = 3 // Number of transactions sampled in a block
|
const sampleNumber = 3 // Number of transactions sampled in a block
|
||||||
|
|
@ -72,7 +72,8 @@ type Oracle struct {
|
||||||
|
|
||||||
checkBlocks, percentile int
|
checkBlocks, percentile int
|
||||||
maxHeaderHistory, maxBlockHistory uint64
|
maxHeaderHistory, maxBlockHistory uint64
|
||||||
historyCache *lru.Cache
|
|
||||||
|
historyCache *lru.Cache[cacheKey, processedFees]
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewOracle returns a new gasprice oracle which can recommend suitable
|
// NewOracle returns a new gasprice oracle which can recommend suitable
|
||||||
|
|
@ -114,7 +115,7 @@ func NewOracle(backend OracleBackend, params Config) *Oracle {
|
||||||
log.Warn("Sanitizing invalid gasprice oracle max block history", "provided", params.MaxBlockHistory, "updated", maxBlockHistory)
|
log.Warn("Sanitizing invalid gasprice oracle max block history", "provided", params.MaxBlockHistory, "updated", maxBlockHistory)
|
||||||
}
|
}
|
||||||
|
|
||||||
cache, _ := lru.New(2048)
|
cache := lru.NewCache[cacheKey, processedFees](2048)
|
||||||
headEvent := make(chan core.ChainHeadEvent, 1)
|
headEvent := make(chan core.ChainHeadEvent, 1)
|
||||||
backend.SubscribeChainHeadEvent(headEvent)
|
backend.SubscribeChainHeadEvent(headEvent)
|
||||||
go func() {
|
go func() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue