@@ -32,7 +32,6 @@ import (
3232 "math/big"
3333
3434 "github.com/ava-labs/coreth/core"
35- "github.com/ava-labs/coreth/plugin/evm/customtypes"
3635 "github.com/ava-labs/coreth/rpc"
3736 "github.com/ava-labs/libevm/core/types"
3837 lru "github.com/hashicorp/golang-lru"
@@ -44,26 +43,23 @@ import (
4443const feeCacheExtraSlots = 5
4544
4645type feeInfoProvider struct {
47- cache * lru.Cache
48- backend OracleBackend
49- // [minGasUsed] ensures we don't recommend users pay non-zero tips when other
50- // users are paying a tip to unnecessarily expedite block production.
51- minGasUsed uint64
46+ cache * lru.Cache
47+ backend OracleBackend
5248 newHeaderAdded func () // callback used in tests
5349}
5450
5551// feeInfo is the type of data stored in feeInfoProvider's cache.
5652type feeInfo struct {
57- baseFee , tip * big.Int // baseFee and min. suggested tip for tx to be included in the block
58- timestamp uint64 // timestamp of the block header
53+ baseFee * big.Int // base fee of the block
54+ tips []* big.Int // tips for txs to be included in the block
55+ timestamp uint64 // timestamp of the block header
5956}
6057
6158// newFeeInfoProvider returns a bounded buffer with [size] slots to
6259// store [*feeInfo] for the most recently accepted blocks.
63- func newFeeInfoProvider (backend OracleBackend , minGasUsed uint64 , size int ) (* feeInfoProvider , error ) {
60+ func newFeeInfoProvider (backend OracleBackend , size int ) (* feeInfoProvider , error ) {
6461 fc := & feeInfoProvider {
65- backend : backend ,
66- minGasUsed : minGasUsed ,
62+ backend : backend ,
6763 }
6864 if size == 0 {
6965 // if size is zero, we return early as there is no
@@ -79,7 +75,7 @@ func newFeeInfoProvider(backend OracleBackend, minGasUsed uint64, size int) (*fe
7975 backend .SubscribeChainAcceptedEvent (acceptedEvent )
8076 go func () {
8177 for ev := range acceptedEvent {
82- fc .addHeader (context .Background (), ev .Block .Header ())
78+ fc .addHeader (context .Background (), ev .Block .Header (), ev . Block . Transactions () )
8379 if fc .newHeaderAdded != nil {
8480 fc .newHeaderAdded ()
8581 }
@@ -89,35 +85,23 @@ func newFeeInfoProvider(backend OracleBackend, minGasUsed uint64, size int) (*fe
8985}
9086
9187// addHeader processes header into a feeInfo struct and caches the result.
92- func (f * feeInfoProvider ) addHeader (ctx context.Context , header * types.Header ) (* feeInfo , error ) {
88+ func (f * feeInfoProvider ) addHeader (ctx context.Context , header * types.Header , txs []* types.Transaction ) (* feeInfo , error ) {
89+ tips := make ([]* big.Int , 0 , len (txs ))
90+ for _ , tx := range txs {
91+ tip , err := tx .EffectiveGasTip (header .BaseFee )
92+ if err != nil {
93+ return nil , err
94+ }
95+ tips = append (tips , tip )
96+ }
97+
9398 feeInfo := & feeInfo {
9499 timestamp : header .Time ,
95100 baseFee : header .BaseFee ,
101+ tips : tips ,
96102 }
97-
98- totalGasUsed := new (big.Int ).SetUint64 (header .GasUsed )
99- if used := customtypes .GetHeaderExtra (header ).ExtDataGasUsed ; used != nil {
100- totalGasUsed .Add (totalGasUsed , used )
101- }
102- minGasUsed := new (big.Int ).SetUint64 (f .minGasUsed )
103-
104- // Don't bias the estimate with blocks containing a limited number of transactions paying to
105- // expedite block production.
106- var err error
107- if minGasUsed .Cmp (totalGasUsed ) <= 0 {
108- // Compute minimum required tip to be included in previous block
109- //
110- // NOTE: Using this approach, we will never recommend that the caller
111- // provides a non-zero tip unless some block is produced faster than the
112- // target rate (which could only occur if some set of callers manually override the
113- // suggested tip). In the future, we may wish to start suggesting a non-zero
114- // tip when most blocks are full otherwise callers may observe an unexpected
115- // delay in transaction inclusion.
116- feeInfo .tip , err = f .backend .MinRequiredTip (ctx , header )
117- }
118-
119103 f .cache .Add (header .Number .Uint64 (), feeInfo )
120- return feeInfo , err
104+ return feeInfo , nil
121105}
122106
123107// get returns the feeInfo for block with [number] if present in the cache
@@ -141,11 +125,11 @@ func (f *feeInfoProvider) populateCache(size int) error {
141125 }
142126
143127 for i := lowerBlockNumber ; i <= lastAccepted ; i ++ {
144- header , err := f .backend .HeaderByNumber (context .Background (), rpc .BlockNumber (i ))
128+ block , err := f .backend .BlockByNumber (context .Background (), rpc .BlockNumber (i ))
145129 if err != nil {
146130 return err
147131 }
148- _ , err = f .addHeader (context .Background (), header )
132+ _ , err = f .addHeader (context .Background (), block . Header (), block . Transactions () )
149133 if err != nil {
150134 return err
151135 }
0 commit comments