forked from cerc-io/laconicd-deprecated
rpc, feemarket: store base fee in event (#673)
* store base fee in event * update changelog
This commit is contained in:
@@ -826,22 +826,24 @@ func (e *EVMBackend) BaseFee(height int64) (*big.Int, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
res, err := e.queryClient.FeeMarket.BaseFee(types.ContextWithHeight(height), &feemarkettypes.QueryBaseFeeRequest{})
|
||||
blockRes, err := e.clientCtx.Client.BlockResults(e.ctx, &height)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if res.BaseFee != nil {
|
||||
baseFee := types.BaseFeeFromEvents(blockRes.EndBlockEvents)
|
||||
if baseFee != nil {
|
||||
return baseFee, nil
|
||||
}
|
||||
|
||||
// If we cannot find in events, we tried to get it from the state.
|
||||
// It will return feemarket.baseFee if london is activated but feemarket is not enable
|
||||
res, err := e.queryClient.FeeMarket.BaseFee(types.ContextWithHeight(height), &feemarkettypes.QueryBaseFeeRequest{})
|
||||
if err == nil && res.BaseFee != nil {
|
||||
return res.BaseFee.BigInt(), nil
|
||||
}
|
||||
|
||||
resParams, err := e.queryClient.FeeMarket.Params(types.ContextWithHeight(height), &feemarkettypes.QueryParamsRequest{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
baseFee := big.NewInt(resParams.Params.InitialBaseFee)
|
||||
return baseFee, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// GetFilteredBlocks returns the block height list match the given bloom filters.
|
||||
|
||||
@@ -3,7 +3,6 @@ package filters
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -18,7 +17,6 @@ import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/eth/filters"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
|
||||
evmtypes "github.com/tharsis/ethermint/x/evm/types"
|
||||
@@ -239,9 +237,6 @@ func (api *PublicFilterAPI) NewBlockFilter() rpc.ID {
|
||||
return rpc.ID(fmt.Sprintf("error creating block filter: %s", err.Error()))
|
||||
}
|
||||
|
||||
// TODO: use events to get the base fee amount
|
||||
baseFee := big.NewInt(params.InitialBaseFee)
|
||||
|
||||
api.filters[headerSub.ID()] = &filter{typ: filters.BlocksSubscription, deadline: time.NewTimer(deadline), hashes: []common.Hash{}, s: headerSub}
|
||||
|
||||
go func(headersCh <-chan coretypes.ResultEvent, errCh <-chan error) {
|
||||
@@ -263,6 +258,8 @@ func (api *PublicFilterAPI) NewBlockFilter() rpc.ID {
|
||||
continue
|
||||
}
|
||||
|
||||
baseFee := types.BaseFeeFromEvents(data.ResultEndBlock.Events)
|
||||
|
||||
header := types.EthHeaderFromTendermint(data.Header, baseFee)
|
||||
api.filtersMu.Lock()
|
||||
if f, found := api.filters[headerSub.ID()]; found {
|
||||
@@ -296,9 +293,6 @@ func (api *PublicFilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, er
|
||||
return &rpc.Subscription{}, err
|
||||
}
|
||||
|
||||
// TODO: use events to get the base fee amount
|
||||
baseFee := big.NewInt(params.InitialBaseFee)
|
||||
|
||||
go func(headersCh <-chan coretypes.ResultEvent) {
|
||||
defer cancelSubs()
|
||||
|
||||
@@ -316,6 +310,8 @@ func (api *PublicFilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, er
|
||||
continue
|
||||
}
|
||||
|
||||
baseFee := types.BaseFeeFromEvents(data.ResultEndBlock.Events)
|
||||
|
||||
header := types.EthHeaderFromTendermint(data.Header, baseFee)
|
||||
err = notifier.Notify(rpcSub.ID, header)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
feemarkettypes "github.com/tharsis/ethermint/x/feemarket/types"
|
||||
|
||||
tmbytes "github.com/tendermint/tendermint/libs/bytes"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
||||
@@ -244,3 +248,24 @@ func NewRPCTransaction(
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// BaseFeeFromEvents parses the feemarket basefee from cosmos events
|
||||
func BaseFeeFromEvents(events []abci.Event) *big.Int {
|
||||
for _, event := range events {
|
||||
if event.Type != feemarkettypes.EventTypeFeeMarket {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, attr := range event.Attributes {
|
||||
if bytes.Equal(attr.Key, []byte(feemarkettypes.AttributeKeyBaseFee)) {
|
||||
result, success := new(big.Int).SetString(string(attr.Value), 10)
|
||||
if success {
|
||||
return result
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user