diff --git a/app/app.go b/app/app.go index 36495977..0dc2b6cf 100644 --- a/app/app.go +++ b/app/app.go @@ -163,6 +163,8 @@ import ( "github.com/evmos/evmos/v12/x/ibc/transfer" transferkeeper "github.com/evmos/evmos/v12/x/ibc/transfer/keeper" + v2 "github.com/evmos/evmos/v12/app/upgrades/v2" + // Force-load the tracer engines to trigger registration due to Go-Ethereum v1.10.15 changes "github.com/ethereum/go-ethereum/core/vm" _ "github.com/ethereum/go-ethereum/eth/tracers/js" @@ -1077,7 +1079,7 @@ func (app *Evmos) EvmPrecompiled() { // distribution precompile precompiled[precompilesdistribution.GetAddress()] = func(ctx sdk.Context) vm.PrecompiledContract { - return precompilesdistribution.NewPrecompiledContract(ctx, app.DistrKeeper) + return precompilesdistribution.NewPrecompiledContract(ctx, app.DistrKeeper, app.EvmKeeper) } // gov precompile @@ -1110,6 +1112,14 @@ func (app *Evmos) EvmPrecompiled() { } func (app *Evmos) setupUpgradeHandlers() { + // v2.0.0 upgrade handler + app.UpgradeKeeper.SetUpgradeHandler( + v2.UpgradeName, + v2.CreateUpgradeHandler( + app.mm, app.configurator, app.EvmKeeper, + ), + ) + // When a planned update height is reached, the old binary will panic // writing on disk the height and name of the update that triggered it // This will read that value, and execute the preparations for the upgrade. @@ -1125,6 +1135,9 @@ func (app *Evmos) setupUpgradeHandlers() { var storeUpgrades *storetypes.StoreUpgrades switch upgradeInfo.Name { + case v2.UpgradeName: + // v2.0.0: No store upgrades needed. + // Gas fee distribution statistics use new key prefixes in existing EVM store. } if storeUpgrades != nil { diff --git a/app/upgrades/v2/upgrades.go b/app/upgrades/v2/upgrades.go new file mode 100644 index 00000000..f8b93937 --- /dev/null +++ b/app/upgrades/v2/upgrades.go @@ -0,0 +1,44 @@ +package v2 + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + evmkeeper "github.com/evmos/evmos/v12/x/evm/keeper" +) + +const ( + // UpgradeName is the shared upgrade plan name for mainnet + UpgradeName = "v2.0.0" + // UpgradeInfo defines the binaries that will be used for the upgrade + UpgradeInfo = `'{"binaries":{"darwin/arm64":"https://github.com/mud-chain/mud/releases/download/v2.0.0/mud_2.0.0_darwin_arm64.tar.gz","darwin/amd64":"https://github.com/mud-chain/mud/releases/download/v2.0.0/mud_2.0.0_darwin_amd64.tar.gz","linux/arm64":"https://github.com/mud-chain/mud/releases/download/v2.0.0/mud_2.0.0_linux_arm64.tar.gz","linux/amd64":"https://github.com/mud-chain/mud/releases/download/v2.0.0/mud_2.0.0_linux_amd64.tar.gz","windows/x86_64":"https://github.com/mud-chain/mud/releases/download/v2.0.0/mud_2.0.0_windows_x86_64.zip"}}'` +) + +// CreateUpgradeHandler creates an SDK upgrade handler for v2.0.0 +// +// This upgrade introduces gas fee distribution mechanism: +// - 40% of gas fees are burned (sent to zero address) +// - 40% distributed to validators +// - 20% sent to core team address +// +// The upgrade initializes gas fee statistics tracking for these distributions. +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + evmKeeper *evmkeeper.Keeper, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + logger := ctx.Logger().With("upgrade", UpgradeName) + + // Initialize gas fee statistics + logger.Info("initializing gas fee distribution statistics") + evmKeeper.SetTotalBurnedFee(ctx, sdkmath.ZeroInt()) + evmKeeper.SetTotalCoreTeamFee(ctx, sdkmath.ZeroInt()) + evmKeeper.SetTotalValidatorFee(ctx, sdkmath.ZeroInt()) + + // Leave modules as-is to avoid running InitGenesis. + logger.Debug("running module migrations ...") + return mm.RunMigrations(ctx, configurator, vm) + } +} diff --git a/proto/ethermint/evm/v1/query.proto b/proto/ethermint/evm/v1/query.proto index 6cf3db52..abad55c8 100644 --- a/proto/ethermint/evm/v1/query.proto +++ b/proto/ethermint/evm/v1/query.proto @@ -74,6 +74,11 @@ service Query { rpc BaseFee(QueryBaseFeeRequest) returns (QueryBaseFeeResponse) { option (google.api.http).get = "/evmos/evm/v1/base_fee"; } + + // GasFeeStatistics queries the gas fee distribution statistics (total burned and project fees). + rpc GasFeeStatistics(QueryGasFeeStatisticsRequest) returns (QueryGasFeeStatisticsResponse) { + option (google.api.http).get = "/evmos/evm/v1/gas_fee_statistics"; + } } // QueryAccountRequest is the request type for the Query/Account RPC method. @@ -296,3 +301,17 @@ message QueryBaseFeeResponse { // base_fee is the EIP1559 base fee string base_fee = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int"]; } + +// QueryGasFeeStatisticsRequest defines the request type for querying gas fee +// distribution statistics. +message QueryGasFeeStatisticsRequest {} + +// QueryGasFeeStatisticsResponse returns the gas fee distribution statistics. +message QueryGasFeeStatisticsResponse { + // total_burned_fee is the total amount of gas fees that have been burned + string total_burned_fee = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + // total_core_team_fee is the total amount of gas fees sent to the core team address + string total_core_team_fee = 2 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; + // total_validator_fee is the total amount of gas fees distributed to validators + string total_validator_fee = 3 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false]; +} diff --git a/solidity/contracts/distribution/IDistribution.sol b/solidity/contracts/distribution/IDistribution.sol index b6534358..8a09869f 100644 --- a/solidity/contracts/distribution/IDistribution.sol +++ b/solidity/contracts/distribution/IDistribution.sol @@ -12,6 +12,15 @@ struct DelegationDelegatorReward { DecCoin[] rewards; } +/** + * @dev GasFeeStatistics represents the gas fee distribution statistics + */ +struct GasFeeStatistics { + uint256 totalBurnedFee; + uint256 totalCoreTeamFee; + uint256 totalValidatorFee; +} + /** * @dev Params defines the set of params for the distribution module. @@ -147,6 +156,12 @@ interface IDistribution { address delegatorAddress ) external view returns (address withdrawAddress); + /** + * @dev gasFeeStatistics queries the gas fee distribution statistics. + * Returns total burned fees, total core team fees, and total validator fees. + */ + function gasFeeStatistics() external view returns (GasFeeStatistics memory statistics); + /** * @dev SetWithdrawAddress defines an Event emitted when a user change the withdraw address */ diff --git a/x/evm/keeper/gas_distribution.go b/x/evm/keeper/gas_distribution.go new file mode 100644 index 00000000..9956ba24 --- /dev/null +++ b/x/evm/keeper/gas_distribution.go @@ -0,0 +1,109 @@ +package keeper + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/core" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +const ( + // Gas fee distribution ratios (in percentage) + BurnRatio = 40 // 40% burn (send to zero address) + ValidatorRatio = 40 // 40% to validators (kept in FeeCollector) + CoreTeamRatio = 20 // 20% to core team + + // Zero address for burning tokens + BurnAddress = "mud1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq4sx9vz" + + // Core team address (hardcoded) + CoreTeamAddress = "mud1d58wfeq0re6awm7t3qynu6dz5cwk787phgl0f9" +) + +// DistributeGasFee distributes the gas fee according to the configured ratios: +// - 40% sent to zero address (burn) +// - 40% to validators (kept in FeeCollector for distribution module) +// - 20% to core team address +func (k *Keeper) DistributeGasFee(ctx sdk.Context, msg core.Message, gasUsed uint64, denom string) error { + // Calculate the actual gas fee consumed + gasFee := new(big.Int).Mul(new(big.Int).SetUint64(gasUsed), msg.GasPrice()) + + // If gas fee is zero, nothing to distribute + if gasFee.Sign() <= 0 { + return nil + } + + totalFee := sdkmath.NewIntFromBigInt(gasFee) + + // Calculate distribution amounts + // burnAmount = totalFee * 40 / 100 + burnAmount := totalFee.Mul(sdkmath.NewInt(BurnRatio)).Quo(sdkmath.NewInt(100)) + // coreTeamAmount = totalFee * 20 / 100 + coreTeamAmount := totalFee.Mul(sdkmath.NewInt(CoreTeamRatio)).Quo(sdkmath.NewInt(100)) + // validatorAmount = totalFee - burnAmount - coreTeamAmount (remaining goes to validators) + validatorAmount := totalFee.Sub(burnAmount).Sub(coreTeamAmount) + + // 1. Send 40% to zero address (burn) + if burnAmount.IsPositive() { + burnAddr, err := sdk.AccAddressFromBech32(BurnAddress) + if err != nil { + k.Logger(ctx).Error("invalid burn address", "address", BurnAddress, "error", err) + } else { + burnCoins := sdk.NewCoins(sdk.NewCoin(denom, burnAmount)) + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, authtypes.FeeCollectorName, burnAddr, burnCoins); err != nil { + return errorsmod.Wrapf(err, "failed to send gas fee to burn address: %s", burnCoins.String()) + } + + // Update burn statistics + k.AddTotalBurnedFee(ctx, burnAmount) + + k.Logger(ctx).Debug("sent gas fee to burn address", "amount", burnAmount.String(), "denom", denom, "address", BurnAddress) + } + } + + // 2. Send 20% to core team address + if coreTeamAmount.IsPositive() { + coreTeamAddr, err := sdk.AccAddressFromBech32(CoreTeamAddress) + if err != nil { + // If core team address is invalid, log error but don't fail the transaction + // The core team amount will remain in FeeCollector + k.Logger(ctx).Error("invalid core team address", "address", CoreTeamAddress, "error", err) + } else { + coreTeamCoins := sdk.NewCoins(sdk.NewCoin(denom, coreTeamAmount)) + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, authtypes.FeeCollectorName, coreTeamAddr, coreTeamCoins); err != nil { + return errorsmod.Wrapf(err, "failed to send gas fee to core team: %s", coreTeamCoins.String()) + } + + // Update core team fee statistics + k.AddTotalCoreTeamFee(ctx, coreTeamAmount) + + k.Logger(ctx).Debug("sent gas fee to core team", "amount", coreTeamAmount.String(), "denom", denom, "address", CoreTeamAddress) + } + } + + // 3. The remaining 40% stays in FeeCollector and will be distributed to validators + // by the distribution module at the end of each block + // Update validator fee statistics + if validatorAmount.IsPositive() { + k.AddTotalValidatorFee(ctx, validatorAmount) + } + + // Emit event for gas fee distribution + ctx.EventManager().EmitEvent( + sdk.NewEvent( + "gas_fee_distribution", + sdk.NewAttribute("gas_used", sdkmath.NewIntFromUint64(gasUsed).String()), + sdk.NewAttribute("total_fee", totalFee.String()), + sdk.NewAttribute("burned", burnAmount.String()), + sdk.NewAttribute("core_team", coreTeamAmount.String()), + sdk.NewAttribute("validator", validatorAmount.String()), + sdk.NewAttribute("denom", denom), + ), + ) + + return nil +} diff --git a/x/evm/keeper/gas_distribution_test.go b/x/evm/keeper/gas_distribution_test.go new file mode 100644 index 00000000..85999b82 --- /dev/null +++ b/x/evm/keeper/gas_distribution_test.go @@ -0,0 +1,179 @@ +package keeper_test + +import ( + "math/big" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/ethereum/go-ethereum/common" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/evmos/evmos/v12/x/evm/keeper" + evmtypes "github.com/evmos/evmos/v12/x/evm/types" +) + +func (suite *KeeperTestSuite) TestDistributeGasFee() { + testCases := []struct { + name string + gasUsed uint64 + gasPrice *big.Int + setupFunc func() + expectError bool + }{ + { + name: "zero gas used", + gasUsed: 0, + gasPrice: big.NewInt(1000000000), // 1 gwei + expectError: false, + }, + { + name: "zero gas price", + gasUsed: 21000, + gasPrice: big.NewInt(0), + expectError: false, + }, + { + name: "normal gas fee distribution", + gasUsed: 21000, + gasPrice: big.NewInt(1000000000), // 1 gwei + setupFunc: func() { + // Mint coins to fee collector to simulate collected gas fees + totalFee := new(big.Int).Mul(big.NewInt(21000), big.NewInt(1000000000)) + coins := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewIntFromBigInt(totalFee))) + err := suite.app.BankKeeper.MintCoins(suite.ctx, evmtypes.ModuleName, coins) + suite.Require().NoError(err) + err = suite.app.BankKeeper.SendCoinsFromModuleToModule(suite.ctx, evmtypes.ModuleName, authtypes.FeeCollectorName, coins) + suite.Require().NoError(err) + }, + expectError: false, + }, + { + name: "large gas fee distribution", + gasUsed: 1000000, // 1M gas + gasPrice: big.NewInt(100000000000), // 100 gwei + setupFunc: func() { + // Mint coins to fee collector + totalFee := new(big.Int).Mul(big.NewInt(1000000), big.NewInt(100000000000)) + coins := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewIntFromBigInt(totalFee))) + err := suite.app.BankKeeper.MintCoins(suite.ctx, evmtypes.ModuleName, coins) + suite.Require().NoError(err) + err = suite.app.BankKeeper.SendCoinsFromModuleToModule(suite.ctx, evmtypes.ModuleName, authtypes.FeeCollectorName, coins) + suite.Require().NoError(err) + }, + expectError: false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() + + if tc.setupFunc != nil { + tc.setupFunc() + } + + // Create a mock message + msg := ethtypes.NewMessage( + suite.address, + &common.Address{}, + 0, + big.NewInt(0), + tc.gasUsed, + tc.gasPrice, + tc.gasPrice, + big.NewInt(0), + nil, + nil, + false, + ) + + // Get initial statistics + initialStats := suite.app.EvmKeeper.GetGasFeeStatistics(suite.ctx) + + // Call DistributeGasFee + err := suite.app.EvmKeeper.DistributeGasFee(suite.ctx, msg, tc.gasUsed, evmtypes.DefaultEVMDenom) + + if tc.expectError { + suite.Require().Error(err) + } else { + suite.Require().NoError(err) + + // Verify statistics were updated + if tc.gasUsed > 0 && tc.gasPrice.Sign() > 0 { + stats := suite.app.EvmKeeper.GetGasFeeStatistics(suite.ctx) + totalFee := new(big.Int).Mul(big.NewInt(int64(tc.gasUsed)), tc.gasPrice) + expectedBurn := new(big.Int).Mul(totalFee, big.NewInt(keeper.BurnRatio)) + expectedBurn = expectedBurn.Div(expectedBurn, big.NewInt(100)) + expectedCoreTeam := new(big.Int).Mul(totalFee, big.NewInt(keeper.CoreTeamRatio)) + expectedCoreTeam = expectedCoreTeam.Div(expectedCoreTeam, big.NewInt(100)) + + // Check that burned amount increased + burnedDiff := stats.TotalBurnedFee.Sub(initialStats.TotalBurnedFee) + suite.Require().Equal(sdkmath.NewIntFromBigInt(expectedBurn), burnedDiff) + + // Check that core team amount increased + coreTeamDiff := stats.TotalCoreTeamFee.Sub(initialStats.TotalCoreTeamFee) + suite.Require().Equal(sdkmath.NewIntFromBigInt(expectedCoreTeam), coreTeamDiff) + } + } + }) + } +} + +func (suite *KeeperTestSuite) TestDistributeGasFeeRatios() { + suite.SetupTest() + + // Setup: Mint 100 tokens to fee collector + totalFee := sdkmath.NewInt(100000000000000000) // 0.1 token + coins := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, totalFee)) + err := suite.app.BankKeeper.MintCoins(suite.ctx, evmtypes.ModuleName, coins) + suite.Require().NoError(err) + err = suite.app.BankKeeper.SendCoinsFromModuleToModule(suite.ctx, evmtypes.ModuleName, authtypes.FeeCollectorName, coins) + suite.Require().NoError(err) + + // Calculate expected amounts + expectedBurn := totalFee.Mul(sdkmath.NewInt(keeper.BurnRatio)).Quo(sdkmath.NewInt(100)) + expectedCoreTeam := totalFee.Mul(sdkmath.NewInt(keeper.CoreTeamRatio)).Quo(sdkmath.NewInt(100)) + expectedValidator := totalFee.Sub(expectedBurn).Sub(expectedCoreTeam) + + // Get initial balances + feeCollectorAddr := suite.app.AccountKeeper.GetModuleAddress(authtypes.FeeCollectorName) + initialFeeCollectorBalance := suite.app.BankKeeper.GetBalance(suite.ctx, feeCollectorAddr, evmtypes.DefaultEVMDenom) + + // Create message with gas that results in totalFee + gasUsed := uint64(100000) + gasPrice := new(big.Int).Div(totalFee.BigInt(), big.NewInt(int64(gasUsed))) + + msg := ethtypes.NewMessage( + suite.address, + &common.Address{}, + 0, + big.NewInt(0), + gasUsed, + gasPrice, + gasPrice, + big.NewInt(0), + nil, + nil, + false, + ) + + // Distribute gas fee + err = suite.app.EvmKeeper.DistributeGasFee(suite.ctx, msg, gasUsed, evmtypes.DefaultEVMDenom) + suite.Require().NoError(err) + + // Verify fee collector balance (should have validator portion remaining) + finalFeeCollectorBalance := suite.app.BankKeeper.GetBalance(suite.ctx, feeCollectorAddr, evmtypes.DefaultEVMDenom) + balanceChange := initialFeeCollectorBalance.Amount.Sub(finalFeeCollectorBalance.Amount) + + // Balance change should be burn + core team (what was taken out) + suite.Require().Equal(expectedBurn.Add(expectedCoreTeam), balanceChange) + + // Verify statistics + stats := suite.app.EvmKeeper.GetGasFeeStatistics(suite.ctx) + suite.Require().Equal(expectedBurn, stats.TotalBurnedFee) + suite.Require().Equal(expectedCoreTeam, stats.TotalCoreTeamFee) + + // Verify validator portion remains in fee collector + suite.Require().Equal(expectedValidator, finalFeeCollectorBalance.Amount) +} diff --git a/x/evm/keeper/gas_statistics.go b/x/evm/keeper/gas_statistics.go new file mode 100644 index 00000000..6942608a --- /dev/null +++ b/x/evm/keeper/gas_statistics.go @@ -0,0 +1,126 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/evmos/evmos/v12/x/evm/types" +) + +// GetTotalBurnedFee returns the total amount of gas fees that have been burned +func (k Keeper) GetTotalBurnedFee(ctx sdk.Context) sdkmath.Int { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.KeyPrefixTotalBurnedFee) + if bz == nil { + return sdkmath.ZeroInt() + } + + var amount sdkmath.Int + if err := amount.Unmarshal(bz); err != nil { + k.Logger(ctx).Error("failed to unmarshal total burned fee", "error", err) + return sdkmath.ZeroInt() + } + + return amount +} + +// SetTotalBurnedFee sets the total amount of gas fees that have been burned +func (k Keeper) SetTotalBurnedFee(ctx sdk.Context, amount sdkmath.Int) { + store := ctx.KVStore(k.storeKey) + bz, err := amount.Marshal() + if err != nil { + k.Logger(ctx).Error("failed to marshal total burned fee", "error", err) + return + } + store.Set(types.KeyPrefixTotalBurnedFee, bz) +} + +// AddTotalBurnedFee adds the given amount to the total burned fee +func (k Keeper) AddTotalBurnedFee(ctx sdk.Context, amount sdkmath.Int) { + current := k.GetTotalBurnedFee(ctx) + k.SetTotalBurnedFee(ctx, current.Add(amount)) +} + +// GetTotalCoreTeamFee returns the total amount of gas fees sent to the core team address +func (k Keeper) GetTotalCoreTeamFee(ctx sdk.Context) sdkmath.Int { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.KeyPrefixTotalCoreTeamFee) + if bz == nil { + return sdkmath.ZeroInt() + } + + var amount sdkmath.Int + if err := amount.Unmarshal(bz); err != nil { + k.Logger(ctx).Error("failed to unmarshal total core team fee", "error", err) + return sdkmath.ZeroInt() + } + + return amount +} + +// SetTotalCoreTeamFee sets the total amount of gas fees sent to the core team address +func (k Keeper) SetTotalCoreTeamFee(ctx sdk.Context, amount sdkmath.Int) { + store := ctx.KVStore(k.storeKey) + bz, err := amount.Marshal() + if err != nil { + k.Logger(ctx).Error("failed to marshal total core team fee", "error", err) + return + } + store.Set(types.KeyPrefixTotalCoreTeamFee, bz) +} + +// AddTotalCoreTeamFee adds the given amount to the total core team fee +func (k Keeper) AddTotalCoreTeamFee(ctx sdk.Context, amount sdkmath.Int) { + current := k.GetTotalCoreTeamFee(ctx) + k.SetTotalCoreTeamFee(ctx, current.Add(amount)) +} + +// GetTotalValidatorFee returns the total amount of gas fees distributed to validators +func (k Keeper) GetTotalValidatorFee(ctx sdk.Context) sdkmath.Int { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.KeyPrefixTotalValidatorFee) + if bz == nil { + return sdkmath.ZeroInt() + } + + var amount sdkmath.Int + if err := amount.Unmarshal(bz); err != nil { + k.Logger(ctx).Error("failed to unmarshal total validator fee", "error", err) + return sdkmath.ZeroInt() + } + + return amount +} + +// SetTotalValidatorFee sets the total amount of gas fees distributed to validators +func (k Keeper) SetTotalValidatorFee(ctx sdk.Context, amount sdkmath.Int) { + store := ctx.KVStore(k.storeKey) + bz, err := amount.Marshal() + if err != nil { + k.Logger(ctx).Error("failed to marshal total validator fee", "error", err) + return + } + store.Set(types.KeyPrefixTotalValidatorFee, bz) +} + +// AddTotalValidatorFee adds the given amount to the total validator fee +func (k Keeper) AddTotalValidatorFee(ctx sdk.Context, amount sdkmath.Int) { + current := k.GetTotalValidatorFee(ctx) + k.SetTotalValidatorFee(ctx, current.Add(amount)) +} + +// GasFeeStatistics holds the gas fee distribution statistics +type GasFeeStatistics struct { + TotalBurnedFee sdkmath.Int `json:"total_burned_fee"` + TotalCoreTeamFee sdkmath.Int `json:"total_core_team_fee"` + TotalValidatorFee sdkmath.Int `json:"total_validator_fee"` +} + +// GetGasFeeStatistics returns the gas fee distribution statistics +func (k Keeper) GetGasFeeStatistics(ctx sdk.Context) GasFeeStatistics { + return GasFeeStatistics{ + TotalBurnedFee: k.GetTotalBurnedFee(ctx), + TotalCoreTeamFee: k.GetTotalCoreTeamFee(ctx), + TotalValidatorFee: k.GetTotalValidatorFee(ctx), + } +} diff --git a/x/evm/keeper/gas_statistics_test.go b/x/evm/keeper/gas_statistics_test.go new file mode 100644 index 00000000..a15560f9 --- /dev/null +++ b/x/evm/keeper/gas_statistics_test.go @@ -0,0 +1,178 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" +) + +func (suite *KeeperTestSuite) TestGetSetTotalBurnedFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Set a value + testAmount := sdkmath.NewInt(1000000000000000000) // 1 token + suite.app.EvmKeeper.SetTotalBurnedFee(suite.ctx, testAmount) + + // Get and verify + retrievedAmount := suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(testAmount, retrievedAmount) + + // Update with new value + newAmount := sdkmath.NewInt(2000000000000000000) // 2 tokens + suite.app.EvmKeeper.SetTotalBurnedFee(suite.ctx, newAmount) + retrievedAmount = suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(newAmount, retrievedAmount) +} + +func (suite *KeeperTestSuite) TestAddTotalBurnedFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Add first amount + firstAdd := sdkmath.NewInt(500000000000000000) // 0.5 token + suite.app.EvmKeeper.AddTotalBurnedFee(suite.ctx, firstAdd) + currentAmount := suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(firstAdd, currentAmount) + + // Add second amount + secondAdd := sdkmath.NewInt(300000000000000000) // 0.3 token + suite.app.EvmKeeper.AddTotalBurnedFee(suite.ctx, secondAdd) + currentAmount = suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(firstAdd.Add(secondAdd), currentAmount) + + // Add third amount + thirdAdd := sdkmath.NewInt(200000000000000000) // 0.2 token + suite.app.EvmKeeper.AddTotalBurnedFee(suite.ctx, thirdAdd) + currentAmount = suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(sdkmath.NewInt(1000000000000000000), currentAmount) // Total 1 token +} + +func (suite *KeeperTestSuite) TestGetSetTotalCoreTeamFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Set a value + testAmount := sdkmath.NewInt(1500000000000000000) // 1.5 tokens + suite.app.EvmKeeper.SetTotalCoreTeamFee(suite.ctx, testAmount) + + // Get and verify + retrievedAmount := suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(testAmount, retrievedAmount) + + // Update with new value + newAmount := sdkmath.NewInt(3000000000000000000) // 3 tokens + suite.app.EvmKeeper.SetTotalCoreTeamFee(suite.ctx, newAmount) + retrievedAmount = suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(newAmount, retrievedAmount) +} + +func (suite *KeeperTestSuite) TestAddTotalCoreTeamFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Add first amount + firstAdd := sdkmath.NewInt(100000000000000000) // 0.1 token + suite.app.EvmKeeper.AddTotalCoreTeamFee(suite.ctx, firstAdd) + currentAmount := suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(firstAdd, currentAmount) + + // Add second amount + secondAdd := sdkmath.NewInt(200000000000000000) // 0.2 token + suite.app.EvmKeeper.AddTotalCoreTeamFee(suite.ctx, secondAdd) + currentAmount = suite.app.EvmKeeper.GetTotalCoreTeamFee(suite.ctx) + suite.Require().Equal(firstAdd.Add(secondAdd), currentAmount) +} + +func (suite *KeeperTestSuite) TestGetSetTotalValidatorFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Set a value + testAmount := sdkmath.NewInt(2000000000000000000) // 2 tokens + suite.app.EvmKeeper.SetTotalValidatorFee(suite.ctx, testAmount) + + // Get and verify + retrievedAmount := suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(testAmount, retrievedAmount) + + // Update with new value + newAmount := sdkmath.NewInt(4000000000000000000) // 4 tokens + suite.app.EvmKeeper.SetTotalValidatorFee(suite.ctx, newAmount) + retrievedAmount = suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(newAmount, retrievedAmount) +} + +func (suite *KeeperTestSuite) TestAddTotalValidatorFee() { + suite.SetupTest() + + // Initial value should be zero + initialAmount := suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), initialAmount) + + // Add first amount + firstAdd := sdkmath.NewInt(400000000000000000) // 0.4 token + suite.app.EvmKeeper.AddTotalValidatorFee(suite.ctx, firstAdd) + currentAmount := suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(firstAdd, currentAmount) + + // Add second amount + secondAdd := sdkmath.NewInt(600000000000000000) // 0.6 token + suite.app.EvmKeeper.AddTotalValidatorFee(suite.ctx, secondAdd) + currentAmount = suite.app.EvmKeeper.GetTotalValidatorFee(suite.ctx) + suite.Require().Equal(firstAdd.Add(secondAdd), currentAmount) +} + +func (suite *KeeperTestSuite) TestGetGasFeeStatistics() { + suite.SetupTest() + + // Initial statistics should be zero + stats := suite.app.EvmKeeper.GetGasFeeStatistics(suite.ctx) + suite.Require().Equal(sdkmath.ZeroInt(), stats.TotalBurnedFee) + suite.Require().Equal(sdkmath.ZeroInt(), stats.TotalCoreTeamFee) + suite.Require().Equal(sdkmath.ZeroInt(), stats.TotalValidatorFee) + + // Set some values + burnedAmount := sdkmath.NewInt(1000000000000000000) // 1 token + coreTeamAmount := sdkmath.NewInt(500000000000000000) // 0.5 token + validatorAmount := sdkmath.NewInt(800000000000000000) // 0.8 token + + suite.app.EvmKeeper.SetTotalBurnedFee(suite.ctx, burnedAmount) + suite.app.EvmKeeper.SetTotalCoreTeamFee(suite.ctx, coreTeamAmount) + suite.app.EvmKeeper.SetTotalValidatorFee(suite.ctx, validatorAmount) + + // Get statistics + stats = suite.app.EvmKeeper.GetGasFeeStatistics(suite.ctx) + suite.Require().Equal(burnedAmount, stats.TotalBurnedFee) + suite.Require().Equal(coreTeamAmount, stats.TotalCoreTeamFee) + suite.Require().Equal(validatorAmount, stats.TotalValidatorFee) +} + +func (suite *KeeperTestSuite) TestLargeAmounts() { + suite.SetupTest() + + // Test with very large amounts (simulating high network activity) + largeAmount := sdkmath.NewInt(1).Mul(sdkmath.NewInt(10).Power(24)) // 1 million tokens + + suite.app.EvmKeeper.SetTotalBurnedFee(suite.ctx, largeAmount) + retrievedAmount := suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(largeAmount, retrievedAmount) + + // Add more large amounts + suite.app.EvmKeeper.AddTotalBurnedFee(suite.ctx, largeAmount) + retrievedAmount = suite.app.EvmKeeper.GetTotalBurnedFee(suite.ctx) + suite.Require().Equal(largeAmount.Mul(sdkmath.NewInt(2)), retrievedAmount) +} diff --git a/x/evm/keeper/grpc_query.go b/x/evm/keeper/grpc_query.go index d3e58b4a..fa9babaf 100644 --- a/x/evm/keeper/grpc_query.go +++ b/x/evm/keeper/grpc_query.go @@ -641,3 +641,18 @@ func getChainID(ctx sdk.Context, chainID int64) (*big.Int, error) { } return big.NewInt(chainID), nil } + +// GasFeeStatistics implements the Query/GasFeeStatistics gRPC method +func (k Keeper) GasFeeStatistics(c context.Context, _ *types.QueryGasFeeStatisticsRequest) (*types.QueryGasFeeStatisticsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + totalBurnedFee := k.GetTotalBurnedFee(ctx) + totalCoreTeamFee := k.GetTotalCoreTeamFee(ctx) + totalValidatorFee := k.GetTotalValidatorFee(ctx) + + return &types.QueryGasFeeStatisticsResponse{ + TotalBurnedFee: totalBurnedFee, + TotalCoreTeamFee: totalCoreTeamFee, + TotalValidatorFee: totalValidatorFee, + }, nil +} diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index 7072b3af..9107cf1b 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -237,6 +237,11 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t } } + // Distribute gas fee: 40% burn, 40% to validators, 20% to core team + if err = k.DistributeGasFee(ctx, msg, res.GasUsed, cfg.Params.EvmDenom); err != nil { + return nil, errorsmod.Wrapf(err, "failed to distribute gas fee") + } + // refund gas in order to match the Ethereum gas consumption instead of the default SDK one. if err = k.RefundGas(ctx, msg, msg.Gas()-res.GasUsed, cfg.Params.EvmDenom); err != nil { return nil, errorsmod.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From()) diff --git a/x/evm/precompiles/distribution/IDistribution.go b/x/evm/precompiles/distribution/IDistribution.go index 4f570e8d..74176c84 100644 --- a/x/evm/precompiles/distribution/IDistribution.go +++ b/x/evm/precompiles/distribution/IDistribution.go @@ -48,6 +48,13 @@ type DelegationDelegatorReward struct { Rewards []DecCoin } +// GasFeeStatistics is an auto generated low-level Go binding around an user-defined struct. +type GasFeeStatistics struct { + TotalBurnedFee *big.Int + TotalCoreTeamFee *big.Int + TotalValidatorFee *big.Int +} + // PageRequest is an auto generated low-level Go binding around an user-defined struct. type PageRequest struct { Key []byte @@ -79,7 +86,7 @@ type ValidatorSlashEvent struct { // IDistributionMetaData contains all meta data concerning the IDistribution contract. var IDistributionMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"FundCommunityPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"SetWithdrawAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"WithdrawDelegatorReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"WithdrawValidatorCommission\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"communityPool\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"pool\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"delegationRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegationTotalRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"internalType\":\"structDelegationDelegatorReward[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"total\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegatorValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegatorWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"name\":\"fundCommunityPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"communityTax\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseProposerReward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bonusProposerReward\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"withdrawAddrEnabled\",\"type\":\"bool\"}],\"internalType\":\"structParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"setWithdrawAddress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorCommission\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"commission\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorDistributionInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"selfBondRewards\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"commission\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorOutstandingRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"startingHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endingHeight\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"key\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"countTotal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"reverse\",\"type\":\"bool\"}],\"internalType\":\"structPageRequest\",\"name\":\"pagination\",\"type\":\"tuple\"}],\"name\":\"validatorSlashes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fraction\",\"type\":\"uint256\"}],\"internalType\":\"structValidatorSlashEvent[]\",\"name\":\"validatorSlashEvents\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nextKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"total\",\"type\":\"uint64\"}],\"internalType\":\"structPageResponse\",\"name\":\"pageResponse\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"withdrawDelegatorReward\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawValidatorCommission\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"FundCommunityPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"SetWithdrawAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"WithdrawDelegatorReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"amount\",\"type\":\"string\"}],\"name\":\"WithdrawValidatorCommission\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"communityPool\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"pool\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"delegationRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegationTotalRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"internalType\":\"structDelegationDelegatorReward[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"total\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegatorValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"}],\"name\":\"delegatorWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"name\":\"fundCommunityPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasFeeStatistics\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalBurnedFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCoreTeamFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalValidatorFee\",\"type\":\"uint256\"}],\"internalType\":\"structGasFeeStatistics\",\"name\":\"statistics\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"communityTax\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseProposerReward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bonusProposerReward\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"withdrawAddrEnabled\",\"type\":\"bool\"}],\"internalType\":\"structParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"setWithdrawAddress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorCommission\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"commission\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorDistributionInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"selfBondRewards\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"commission\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"validatorOutstandingRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"}],\"internalType\":\"structDecCoin[]\",\"name\":\"rewards\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"startingHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endingHeight\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"key\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"countTotal\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"reverse\",\"type\":\"bool\"}],\"internalType\":\"structPageRequest\",\"name\":\"pagination\",\"type\":\"tuple\"}],\"name\":\"validatorSlashes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorPeriod\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fraction\",\"type\":\"uint256\"}],\"internalType\":\"structValidatorSlashEvent[]\",\"name\":\"validatorSlashEvents\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nextKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"total\",\"type\":\"uint64\"}],\"internalType\":\"structPageResponse\",\"name\":\"pageResponse\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"withdrawDelegatorReward\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawValidatorCommission\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structCoin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IDistributionABI is the input ABI used to generate the binding from. @@ -397,6 +404,37 @@ func (_IDistribution *IDistributionCallerSession) DelegatorWithdrawAddress(deleg return _IDistribution.Contract.DelegatorWithdrawAddress(&_IDistribution.CallOpts, delegatorAddress) } +// GasFeeStatistics is a free data retrieval call binding the contract method 0xd95a6d08. +// +// Solidity: function gasFeeStatistics() view returns((uint256,uint256,uint256) statistics) +func (_IDistribution *IDistributionCaller) GasFeeStatistics(opts *bind.CallOpts) (GasFeeStatistics, error) { + var out []interface{} + err := _IDistribution.contract.Call(opts, &out, "gasFeeStatistics") + + if err != nil { + return *new(GasFeeStatistics), err + } + + out0 := *abi.ConvertType(out[0], new(GasFeeStatistics)).(*GasFeeStatistics) + + return out0, err + +} + +// GasFeeStatistics is a free data retrieval call binding the contract method 0xd95a6d08. +// +// Solidity: function gasFeeStatistics() view returns((uint256,uint256,uint256) statistics) +func (_IDistribution *IDistributionSession) GasFeeStatistics() (GasFeeStatistics, error) { + return _IDistribution.Contract.GasFeeStatistics(&_IDistribution.CallOpts) +} + +// GasFeeStatistics is a free data retrieval call binding the contract method 0xd95a6d08. +// +// Solidity: function gasFeeStatistics() view returns((uint256,uint256,uint256) statistics) +func (_IDistribution *IDistributionCallerSession) GasFeeStatistics() (GasFeeStatistics, error) { + return _IDistribution.Contract.GasFeeStatistics(&_IDistribution.CallOpts) +} + // Params is a free data retrieval call binding the contract method 0xcff0ab96. // // Solidity: function params() view returns((uint256,uint256,uint256,bool) params) diff --git a/x/evm/precompiles/distribution/contract.go b/x/evm/precompiles/distribution/contract.go index b81ead3f..a6e675cd 100644 --- a/x/evm/precompiles/distribution/contract.go +++ b/x/evm/precompiles/distribution/contract.go @@ -1,6 +1,7 @@ package distribution import ( + sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" @@ -12,15 +13,24 @@ import ( "github.com/evmos/evmos/v12/x/evm/types" ) +// EVMKeeperStatistics is the interface for EVM keeper gas fee statistics +type EVMKeeperStatistics interface { + GetTotalBurnedFee(ctx sdk.Context) sdkmath.Int + GetTotalCoreTeamFee(ctx sdk.Context) sdkmath.Int + GetTotalValidatorFee(ctx sdk.Context) sdkmath.Int +} + type Contract struct { ctx sdk.Context distributionKeeper distributionkeeper.Keeper + evmKeeper EVMKeeperStatistics } -func NewPrecompiledContract(ctx sdk.Context, distributionKeeper distributionkeeper.Keeper) *Contract { +func NewPrecompiledContract(ctx sdk.Context, distributionKeeper distributionkeeper.Keeper, evmKeeper EVMKeeperStatistics) *Contract { return &Contract{ ctx: ctx, distributionKeeper: distributionKeeper, + evmKeeper: evmKeeper, } } @@ -63,6 +73,8 @@ func (c *Contract) RequiredGas(input []byte) uint64 { return DelegatorValidatorsGas case delegatorWithdrawAddressMethodName: return delegatorWithdrawAddressGas + case GasFeeStatisticsMethodName: + return GasFeeStatisticsGas default: return 0 } @@ -108,6 +120,8 @@ func (c *Contract) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) (ret [ ret, err = c.DelegatorValidators(ctx, evm, contract, readonly) case delegatorWithdrawAddressMethodName: ret, err = c.DelegatorWithdrawAddress(ctx, evm, contract, readonly) + case GasFeeStatisticsMethodName: + ret, err = c.GasFeeStatistics(ctx, evm, contract, readonly) } } diff --git a/x/evm/precompiles/distribution/query.go b/x/evm/precompiles/distribution/query.go index 62035019..9b233e51 100644 --- a/x/evm/precompiles/distribution/query.go +++ b/x/evm/precompiles/distribution/query.go @@ -23,6 +23,7 @@ const ( ValidatorSlashesGas = 30_000 DelegatorValidatorsGas = 30_000 delegatorWithdrawAddressGas = 30_000 + GasFeeStatisticsGas = 10_000 ValidatorDistributionInfoMethodName = "validatorDistributionInfo" ValidatorOutstandingRewardsMethodName = "validatorOutstandingRewards" @@ -34,6 +35,7 @@ const ( ValidatorSlashesMethodName = "validatorSlashes" DelegatorValidatorsMethodName = "delegatorValidators" delegatorWithdrawAddressMethodName = "delegatorWithdrawAddress" + GasFeeStatisticsMethodName = "gasFeeStatistics" ) // ValidatorDistributionInfo queries validator commision and self-delegation rewards for validator @@ -349,3 +351,22 @@ func (c *Contract) DelegatorWithdrawAddress(ctx sdk.Context, _ *vm.EVM, contract return method.Outputs.Pack(withdrawAddress) } + +// GasFeeStatistics queries gas fee distribution statistics (total burned, core team and validator fees) +func (c *Contract) GasFeeStatistics(ctx sdk.Context, _ *vm.EVM, _ *vm.Contract, _ bool) ([]byte, error) { + method := MustMethod(GasFeeStatisticsMethodName) + + // Get statistics from EVM keeper + totalBurnedFee := c.evmKeeper.GetTotalBurnedFee(ctx) + totalCoreTeamFee := c.evmKeeper.GetTotalCoreTeamFee(ctx) + totalValidatorFee := c.evmKeeper.GetTotalValidatorFee(ctx) + + // Pack the result as GasFeeStatistics struct + statistics := GasFeeStatistics{ + TotalBurnedFee: totalBurnedFee.BigInt(), + TotalCoreTeamFee: totalCoreTeamFee.BigInt(), + TotalValidatorFee: totalValidatorFee.BigInt(), + } + + return method.Outputs.Pack(statistics) +} diff --git a/x/evm/types/key.go b/x/evm/types/key.go index 36cb86b5..5f729691 100644 --- a/x/evm/types/key.go +++ b/x/evm/types/key.go @@ -41,6 +41,9 @@ const ( prefixCode = iota + 1 prefixStorage prefixParams + prefixTotalBurnedFee + prefixTotalCoreTeamFee + prefixTotalValidatorFee ) // prefix bytes for the EVM transient store @@ -56,6 +59,10 @@ var ( KeyPrefixCode = []byte{prefixCode} KeyPrefixStorage = []byte{prefixStorage} KeyPrefixParams = []byte{prefixParams} + // Gas fee distribution statistics + KeyPrefixTotalBurnedFee = []byte{prefixTotalBurnedFee} + KeyPrefixTotalCoreTeamFee = []byte{prefixTotalCoreTeamFee} + KeyPrefixTotalValidatorFee = []byte{prefixTotalValidatorFee} ) // Transient Store key prefixes diff --git a/x/evm/types/query.pb.go b/x/evm/types/query.pb.go index b54f13bb..54724767 100644 --- a/x/evm/types/query.pb.go +++ b/x/evm/types/query.pb.go @@ -6,31 +6,28 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - time "time" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. -var ( - _ = proto.Marshal - _ = fmt.Errorf - _ = math.Inf - _ = time.Kitchen -) +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -50,11 +47,9 @@ func (*QueryAccountRequest) ProtoMessage() {} func (*QueryAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{0} } - func (m *QueryAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryAccountRequest.Marshal(b, m, deterministic) @@ -67,15 +62,12 @@ func (m *QueryAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryAccountRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryAccountRequest.Merge(m, src) } - func (m *QueryAccountRequest) XXX_Size() int { return m.Size() } - func (m *QueryAccountRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryAccountRequest.DiscardUnknown(m) } @@ -98,11 +90,9 @@ func (*QueryAccountResponse) ProtoMessage() {} func (*QueryAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{1} } - func (m *QueryAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryAccountResponse.Marshal(b, m, deterministic) @@ -115,15 +105,12 @@ func (m *QueryAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *QueryAccountResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryAccountResponse.Merge(m, src) } - func (m *QueryAccountResponse) XXX_Size() int { return m.Size() } - func (m *QueryAccountResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryAccountResponse.DiscardUnknown(m) } @@ -164,11 +151,9 @@ func (*QueryCosmosAccountRequest) ProtoMessage() {} func (*QueryCosmosAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{2} } - func (m *QueryCosmosAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCosmosAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCosmosAccountRequest.Marshal(b, m, deterministic) @@ -181,15 +166,12 @@ func (m *QueryCosmosAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([ return b[:n], nil } } - func (m *QueryCosmosAccountRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCosmosAccountRequest.Merge(m, src) } - func (m *QueryCosmosAccountRequest) XXX_Size() int { return m.Size() } - func (m *QueryCosmosAccountRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryCosmosAccountRequest.DiscardUnknown(m) } @@ -213,11 +195,9 @@ func (*QueryCosmosAccountResponse) ProtoMessage() {} func (*QueryCosmosAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{3} } - func (m *QueryCosmosAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCosmosAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCosmosAccountResponse.Marshal(b, m, deterministic) @@ -230,15 +210,12 @@ func (m *QueryCosmosAccountResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } - func (m *QueryCosmosAccountResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCosmosAccountResponse.Merge(m, src) } - func (m *QueryCosmosAccountResponse) XXX_Size() int { return m.Size() } - func (m *QueryCosmosAccountResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryCosmosAccountResponse.DiscardUnknown(m) } @@ -279,11 +256,9 @@ func (*QueryValidatorAccountRequest) ProtoMessage() {} func (*QueryValidatorAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{4} } - func (m *QueryValidatorAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryValidatorAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryValidatorAccountRequest.Marshal(b, m, deterministic) @@ -296,15 +271,12 @@ func (m *QueryValidatorAccountRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } - func (m *QueryValidatorAccountRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryValidatorAccountRequest.Merge(m, src) } - func (m *QueryValidatorAccountRequest) XXX_Size() int { return m.Size() } - func (m *QueryValidatorAccountRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryValidatorAccountRequest.DiscardUnknown(m) } @@ -328,11 +300,9 @@ func (*QueryValidatorAccountResponse) ProtoMessage() {} func (*QueryValidatorAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{5} } - func (m *QueryValidatorAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryValidatorAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryValidatorAccountResponse.Marshal(b, m, deterministic) @@ -345,15 +315,12 @@ func (m *QueryValidatorAccountResponse) XXX_Marshal(b []byte, deterministic bool return b[:n], nil } } - func (m *QueryValidatorAccountResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryValidatorAccountResponse.Merge(m, src) } - func (m *QueryValidatorAccountResponse) XXX_Size() int { return m.Size() } - func (m *QueryValidatorAccountResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryValidatorAccountResponse.DiscardUnknown(m) } @@ -393,11 +360,9 @@ func (*QueryBalanceRequest) ProtoMessage() {} func (*QueryBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{6} } - func (m *QueryBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryBalanceRequest.Marshal(b, m, deterministic) @@ -410,15 +375,12 @@ func (m *QueryBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryBalanceRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryBalanceRequest.Merge(m, src) } - func (m *QueryBalanceRequest) XXX_Size() int { return m.Size() } - func (m *QueryBalanceRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryBalanceRequest.DiscardUnknown(m) } @@ -437,11 +399,9 @@ func (*QueryBalanceResponse) ProtoMessage() {} func (*QueryBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{7} } - func (m *QueryBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryBalanceResponse.Marshal(b, m, deterministic) @@ -454,15 +414,12 @@ func (m *QueryBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *QueryBalanceResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryBalanceResponse.Merge(m, src) } - func (m *QueryBalanceResponse) XXX_Size() int { return m.Size() } - func (m *QueryBalanceResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryBalanceResponse.DiscardUnknown(m) } @@ -490,11 +447,9 @@ func (*QueryStorageRequest) ProtoMessage() {} func (*QueryStorageRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{8} } - func (m *QueryStorageRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryStorageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryStorageRequest.Marshal(b, m, deterministic) @@ -507,15 +462,12 @@ func (m *QueryStorageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryStorageRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryStorageRequest.Merge(m, src) } - func (m *QueryStorageRequest) XXX_Size() int { return m.Size() } - func (m *QueryStorageRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryStorageRequest.DiscardUnknown(m) } @@ -535,11 +487,9 @@ func (*QueryStorageResponse) ProtoMessage() {} func (*QueryStorageResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{9} } - func (m *QueryStorageResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryStorageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryStorageResponse.Marshal(b, m, deterministic) @@ -552,15 +502,12 @@ func (m *QueryStorageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *QueryStorageResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryStorageResponse.Merge(m, src) } - func (m *QueryStorageResponse) XXX_Size() int { return m.Size() } - func (m *QueryStorageResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryStorageResponse.DiscardUnknown(m) } @@ -586,11 +533,9 @@ func (*QueryCodeRequest) ProtoMessage() {} func (*QueryCodeRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{10} } - func (m *QueryCodeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodeRequest.Marshal(b, m, deterministic) @@ -603,15 +548,12 @@ func (m *QueryCodeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } - func (m *QueryCodeRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodeRequest.Merge(m, src) } - func (m *QueryCodeRequest) XXX_Size() int { return m.Size() } - func (m *QueryCodeRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodeRequest.DiscardUnknown(m) } @@ -631,11 +573,9 @@ func (*QueryCodeResponse) ProtoMessage() {} func (*QueryCodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{11} } - func (m *QueryCodeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryCodeResponse.Marshal(b, m, deterministic) @@ -648,15 +588,12 @@ func (m *QueryCodeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } - func (m *QueryCodeResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryCodeResponse.Merge(m, src) } - func (m *QueryCodeResponse) XXX_Size() int { return m.Size() } - func (m *QueryCodeResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryCodeResponse.DiscardUnknown(m) } @@ -684,11 +621,9 @@ func (*QueryTxLogsRequest) ProtoMessage() {} func (*QueryTxLogsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{12} } - func (m *QueryTxLogsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTxLogsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTxLogsRequest.Marshal(b, m, deterministic) @@ -701,15 +636,12 @@ func (m *QueryTxLogsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryTxLogsRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTxLogsRequest.Merge(m, src) } - func (m *QueryTxLogsRequest) XXX_Size() int { return m.Size() } - func (m *QueryTxLogsRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryTxLogsRequest.DiscardUnknown(m) } @@ -730,11 +662,9 @@ func (*QueryTxLogsResponse) ProtoMessage() {} func (*QueryTxLogsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{13} } - func (m *QueryTxLogsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTxLogsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTxLogsResponse.Marshal(b, m, deterministic) @@ -747,15 +677,12 @@ func (m *QueryTxLogsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryTxLogsResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTxLogsResponse.Merge(m, src) } - func (m *QueryTxLogsResponse) XXX_Size() int { return m.Size() } - func (m *QueryTxLogsResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryTxLogsResponse.DiscardUnknown(m) } @@ -777,7 +704,8 @@ func (m *QueryTxLogsResponse) GetPagination() *query.PageResponse { } // QueryParamsRequest defines the request type for querying x/evm parameters. -type QueryParamsRequest struct{} +type QueryParamsRequest struct { +} func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } @@ -785,11 +713,9 @@ func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{14} } - func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) @@ -802,15 +728,12 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryParamsRequest.Merge(m, src) } - func (m *QueryParamsRequest) XXX_Size() int { return m.Size() } - func (m *QueryParamsRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) } @@ -829,11 +752,9 @@ func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{15} } - func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) @@ -846,15 +767,12 @@ func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryParamsResponse.Merge(m, src) } - func (m *QueryParamsResponse) XXX_Size() int { return m.Size() } - func (m *QueryParamsResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) } @@ -886,11 +804,9 @@ func (*EthCallRequest) ProtoMessage() {} func (*EthCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{16} } - func (m *EthCallRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *EthCallRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_EthCallRequest.Marshal(b, m, deterministic) @@ -903,15 +819,12 @@ func (m *EthCallRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro return b[:n], nil } } - func (m *EthCallRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_EthCallRequest.Merge(m, src) } - func (m *EthCallRequest) XXX_Size() int { return m.Size() } - func (m *EthCallRequest) XXX_DiscardUnknown() { xxx_messageInfo_EthCallRequest.DiscardUnknown(m) } @@ -958,11 +871,9 @@ func (*EstimateGasResponse) ProtoMessage() {} func (*EstimateGasResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{17} } - func (m *EstimateGasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *EstimateGasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_EstimateGasResponse.Marshal(b, m, deterministic) @@ -975,15 +886,12 @@ func (m *EstimateGasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *EstimateGasResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_EstimateGasResponse.Merge(m, src) } - func (m *EstimateGasResponse) XXX_Size() int { return m.Size() } - func (m *EstimateGasResponse) XXX_DiscardUnknown() { xxx_messageInfo_EstimateGasResponse.DiscardUnknown(m) } @@ -1024,11 +932,9 @@ func (*QueryTraceTxRequest) ProtoMessage() {} func (*QueryTraceTxRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{18} } - func (m *QueryTraceTxRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTraceTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTraceTxRequest.Marshal(b, m, deterministic) @@ -1041,15 +947,12 @@ func (m *QueryTraceTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryTraceTxRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTraceTxRequest.Merge(m, src) } - func (m *QueryTraceTxRequest) XXX_Size() int { return m.Size() } - func (m *QueryTraceTxRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryTraceTxRequest.DiscardUnknown(m) } @@ -1124,11 +1027,9 @@ func (*QueryTraceTxResponse) ProtoMessage() {} func (*QueryTraceTxResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{19} } - func (m *QueryTraceTxResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTraceTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTraceTxResponse.Marshal(b, m, deterministic) @@ -1141,15 +1042,12 @@ func (m *QueryTraceTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *QueryTraceTxResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTraceTxResponse.Merge(m, src) } - func (m *QueryTraceTxResponse) XXX_Size() int { return m.Size() } - func (m *QueryTraceTxResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryTraceTxResponse.DiscardUnknown(m) } @@ -1187,11 +1085,9 @@ func (*QueryTraceBlockRequest) ProtoMessage() {} func (*QueryTraceBlockRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{20} } - func (m *QueryTraceBlockRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTraceBlockRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTraceBlockRequest.Marshal(b, m, deterministic) @@ -1204,15 +1100,12 @@ func (m *QueryTraceBlockRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } - func (m *QueryTraceBlockRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTraceBlockRequest.Merge(m, src) } - func (m *QueryTraceBlockRequest) XXX_Size() int { return m.Size() } - func (m *QueryTraceBlockRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryTraceBlockRequest.DiscardUnknown(m) } @@ -1280,11 +1173,9 @@ func (*QueryTraceBlockResponse) ProtoMessage() {} func (*QueryTraceBlockResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{21} } - func (m *QueryTraceBlockResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryTraceBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryTraceBlockResponse.Marshal(b, m, deterministic) @@ -1297,15 +1188,12 @@ func (m *QueryTraceBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } - func (m *QueryTraceBlockResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryTraceBlockResponse.Merge(m, src) } - func (m *QueryTraceBlockResponse) XXX_Size() int { return m.Size() } - func (m *QueryTraceBlockResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryTraceBlockResponse.DiscardUnknown(m) } @@ -1321,7 +1209,8 @@ func (m *QueryTraceBlockResponse) GetData() []byte { // QueryBaseFeeRequest defines the request type for querying the EIP1559 base // fee. -type QueryBaseFeeRequest struct{} +type QueryBaseFeeRequest struct { +} func (m *QueryBaseFeeRequest) Reset() { *m = QueryBaseFeeRequest{} } func (m *QueryBaseFeeRequest) String() string { return proto.CompactTextString(m) } @@ -1329,11 +1218,9 @@ func (*QueryBaseFeeRequest) ProtoMessage() {} func (*QueryBaseFeeRequest) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{22} } - func (m *QueryBaseFeeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryBaseFeeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryBaseFeeRequest.Marshal(b, m, deterministic) @@ -1346,15 +1233,12 @@ func (m *QueryBaseFeeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } - func (m *QueryBaseFeeRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryBaseFeeRequest.Merge(m, src) } - func (m *QueryBaseFeeRequest) XXX_Size() int { return m.Size() } - func (m *QueryBaseFeeRequest) XXX_DiscardUnknown() { xxx_messageInfo_QueryBaseFeeRequest.DiscardUnknown(m) } @@ -1373,11 +1257,9 @@ func (*QueryBaseFeeResponse) ProtoMessage() {} func (*QueryBaseFeeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e15a877459347994, []int{23} } - func (m *QueryBaseFeeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } - func (m *QueryBaseFeeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_QueryBaseFeeResponse.Marshal(b, m, deterministic) @@ -1390,21 +1272,99 @@ func (m *QueryBaseFeeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } - func (m *QueryBaseFeeResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_QueryBaseFeeResponse.Merge(m, src) } - func (m *QueryBaseFeeResponse) XXX_Size() int { return m.Size() } - func (m *QueryBaseFeeResponse) XXX_DiscardUnknown() { xxx_messageInfo_QueryBaseFeeResponse.DiscardUnknown(m) } var xxx_messageInfo_QueryBaseFeeResponse proto.InternalMessageInfo +// QueryGasFeeStatisticsRequest defines the request type for querying gas fee +// distribution statistics. +type QueryGasFeeStatisticsRequest struct { +} + +func (m *QueryGasFeeStatisticsRequest) Reset() { *m = QueryGasFeeStatisticsRequest{} } +func (m *QueryGasFeeStatisticsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGasFeeStatisticsRequest) ProtoMessage() {} +func (*QueryGasFeeStatisticsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e15a877459347994, []int{24} +} +func (m *QueryGasFeeStatisticsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGasFeeStatisticsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGasFeeStatisticsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGasFeeStatisticsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGasFeeStatisticsRequest.Merge(m, src) +} +func (m *QueryGasFeeStatisticsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGasFeeStatisticsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGasFeeStatisticsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGasFeeStatisticsRequest proto.InternalMessageInfo + +// QueryGasFeeStatisticsResponse returns the gas fee distribution statistics. +type QueryGasFeeStatisticsResponse struct { + // total_burned_fee is the total amount of gas fees that have been burned + TotalBurnedFee github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=total_burned_fee,json=totalBurnedFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"total_burned_fee"` + // total_core_team_fee is the total amount of gas fees sent to the core team address + TotalCoreTeamFee github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=total_core_team_fee,json=totalCoreTeamFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"total_core_team_fee"` + // total_validator_fee is the total amount of gas fees distributed to validators + TotalValidatorFee github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=total_validator_fee,json=totalValidatorFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"total_validator_fee"` +} + +func (m *QueryGasFeeStatisticsResponse) Reset() { *m = QueryGasFeeStatisticsResponse{} } +func (m *QueryGasFeeStatisticsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGasFeeStatisticsResponse) ProtoMessage() {} +func (*QueryGasFeeStatisticsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e15a877459347994, []int{25} +} +func (m *QueryGasFeeStatisticsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGasFeeStatisticsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGasFeeStatisticsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGasFeeStatisticsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGasFeeStatisticsResponse.Merge(m, src) +} +func (m *QueryGasFeeStatisticsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGasFeeStatisticsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGasFeeStatisticsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGasFeeStatisticsResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*QueryAccountRequest)(nil), "ethermint.evm.v1.QueryAccountRequest") proto.RegisterType((*QueryAccountResponse)(nil), "ethermint.evm.v1.QueryAccountResponse") @@ -1430,109 +1390,117 @@ func init() { proto.RegisterType((*QueryTraceBlockResponse)(nil), "ethermint.evm.v1.QueryTraceBlockResponse") proto.RegisterType((*QueryBaseFeeRequest)(nil), "ethermint.evm.v1.QueryBaseFeeRequest") proto.RegisterType((*QueryBaseFeeResponse)(nil), "ethermint.evm.v1.QueryBaseFeeResponse") + proto.RegisterType((*QueryGasFeeStatisticsRequest)(nil), "ethermint.evm.v1.QueryGasFeeStatisticsRequest") + proto.RegisterType((*QueryGasFeeStatisticsResponse)(nil), "ethermint.evm.v1.QueryGasFeeStatisticsResponse") } func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) } var fileDescriptor_e15a877459347994 = []byte{ - // 1437 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x56, 0xcf, 0x6f, 0x13, 0xc7, - 0x17, 0xcf, 0xc6, 0x4e, 0xec, 0x8c, 0x03, 0xf8, 0x3b, 0x04, 0x70, 0x96, 0xc4, 0x0e, 0xfb, 0x6d, - 0x62, 0x43, 0x61, 0x17, 0xa7, 0x12, 0x52, 0x7b, 0x29, 0xd8, 0x0a, 0x94, 0x02, 0x15, 0x75, 0xa3, - 0x1e, 0x2a, 0x21, 0x6b, 0xbc, 0x1e, 0xd6, 0x56, 0xec, 0x1d, 0xb3, 0x33, 0xb6, 0x1c, 0x10, 0x87, - 0xa2, 0xaa, 0x3f, 0x54, 0xa9, 0x42, 0xea, 0xad, 0x27, 0xee, 0xfd, 0x03, 0x7a, 0xec, 0x95, 0x23, - 0x52, 0x2f, 0x55, 0x0f, 0x14, 0x41, 0x0f, 0xfd, 0x1b, 0x7a, 0xaa, 0xe6, 0x97, 0xed, 0xb5, 0xbd, - 0x71, 0xa8, 0xe8, 0xa9, 0xa7, 0xdd, 0x99, 0x79, 0xf3, 0x3e, 0x9f, 0x79, 0xef, 0xcd, 0xbc, 0x0f, - 0x58, 0xc3, 0xac, 0x81, 0x83, 0x76, 0xd3, 0x67, 0x0e, 0xee, 0xb5, 0x9d, 0x5e, 0xd1, 0xb9, 0xd7, - 0xc5, 0xc1, 0xbe, 0xdd, 0x09, 0x08, 0x23, 0x30, 0x3d, 0x58, 0xb5, 0x71, 0xaf, 0x6d, 0xf7, 0x8a, - 0xe6, 0x39, 0x97, 0xd0, 0x36, 0xa1, 0x4e, 0x0d, 0x51, 0x2c, 0x4d, 0x9d, 0x5e, 0xb1, 0x86, 0x19, - 0x2a, 0x3a, 0x1d, 0xe4, 0x35, 0x7d, 0xc4, 0x9a, 0xc4, 0x97, 0xbb, 0x4d, 0x73, 0xc2, 0x37, 0x77, - 0x22, 0xd7, 0x56, 0x27, 0xd6, 0x58, 0x5f, 0x2d, 0xad, 0x78, 0xc4, 0x23, 0xe2, 0xd7, 0xe1, 0x7f, - 0x6a, 0x76, 0xcd, 0x23, 0xc4, 0x6b, 0x61, 0x07, 0x75, 0x9a, 0x0e, 0xf2, 0x7d, 0xc2, 0x04, 0x12, - 0x55, 0xab, 0x39, 0xb5, 0x2a, 0x46, 0xb5, 0xee, 0x5d, 0x87, 0x35, 0xdb, 0x98, 0x32, 0xd4, 0xee, - 0x48, 0x03, 0xeb, 0x5d, 0x70, 0xfc, 0x63, 0xce, 0xf6, 0x8a, 0xeb, 0x92, 0xae, 0xcf, 0x2a, 0xf8, - 0x5e, 0x17, 0x53, 0x06, 0x33, 0x20, 0x81, 0xea, 0xf5, 0x00, 0x53, 0x9a, 0x31, 0x36, 0x8c, 0xc2, - 0x52, 0x45, 0x0f, 0xdf, 0x4b, 0x7e, 0xfd, 0x24, 0x37, 0xf7, 0xe7, 0x93, 0xdc, 0x9c, 0xe5, 0x82, - 0x95, 0xf0, 0x56, 0xda, 0x21, 0x3e, 0xc5, 0x7c, 0x6f, 0x0d, 0xb5, 0x90, 0xef, 0x62, 0xbd, 0x57, - 0x0d, 0xe1, 0x69, 0xb0, 0xe4, 0x92, 0x3a, 0xae, 0x36, 0x10, 0x6d, 0x64, 0xe6, 0xc5, 0x5a, 0x92, - 0x4f, 0x7c, 0x80, 0x68, 0x03, 0xae, 0x80, 0x05, 0x9f, 0xf0, 0x4d, 0xb1, 0x0d, 0xa3, 0x10, 0xaf, - 0xc8, 0x81, 0xf5, 0x3e, 0x58, 0x15, 0x20, 0x65, 0x11, 0xde, 0x7f, 0xc0, 0xf2, 0x4b, 0x03, 0x98, - 0xd3, 0x3c, 0x28, 0xb2, 0x9b, 0xe0, 0xa8, 0xcc, 0x5c, 0x35, 0xec, 0xe9, 0x88, 0x9c, 0xbd, 0x22, - 0x27, 0xa1, 0x09, 0x92, 0x94, 0x83, 0x72, 0x7e, 0xf3, 0x82, 0xdf, 0x60, 0xcc, 0x5d, 0x20, 0xe9, - 0xb5, 0xea, 0x77, 0xdb, 0x35, 0x1c, 0xa8, 0x13, 0x1c, 0x51, 0xb3, 0x1f, 0x89, 0x49, 0xeb, 0x06, - 0x58, 0x13, 0x3c, 0x3e, 0x45, 0xad, 0x66, 0x1d, 0x31, 0x12, 0x8c, 0x1d, 0xe6, 0x0c, 0x58, 0x76, - 0x89, 0x3f, 0xce, 0x23, 0xc5, 0xe7, 0xae, 0x4c, 0x9c, 0xea, 0x5b, 0x03, 0xac, 0x47, 0x78, 0x53, - 0x07, 0xcb, 0x83, 0x63, 0x9a, 0x55, 0xd8, 0xa3, 0x26, 0xfb, 0x06, 0x8f, 0xa6, 0x8b, 0xa8, 0x24, - 0xf3, 0xfc, 0x3a, 0xe9, 0xb9, 0xa8, 0x8a, 0x68, 0xb0, 0x75, 0x56, 0x11, 0x59, 0x37, 0x14, 0xd8, - 0x27, 0x8c, 0x04, 0xc8, 0x9b, 0x0d, 0x06, 0xd3, 0x20, 0xb6, 0x87, 0xf7, 0x55, 0xbd, 0xf1, 0xdf, - 0x11, 0xf8, 0xf3, 0x0a, 0x7e, 0xe0, 0x4c, 0xc1, 0xaf, 0x80, 0x85, 0x1e, 0x6a, 0x75, 0x35, 0xb8, - 0x1c, 0x58, 0x97, 0x40, 0x5a, 0x95, 0x52, 0xfd, 0xb5, 0x0e, 0x99, 0x07, 0xff, 0x1b, 0xd9, 0xa7, - 0x20, 0x20, 0x88, 0xf3, 0xda, 0x17, 0xbb, 0x96, 0x2b, 0xe2, 0xdf, 0xba, 0x0f, 0xa0, 0x30, 0xdc, - 0xed, 0xdf, 0x24, 0x1e, 0xd5, 0x10, 0x10, 0xc4, 0xc5, 0x8d, 0x91, 0xfe, 0xc5, 0x3f, 0xbc, 0x0a, - 0xc0, 0xf0, 0x5d, 0x11, 0x67, 0x4b, 0x6d, 0x6f, 0xd9, 0xb2, 0x68, 0x6d, 0xfe, 0x08, 0xd9, 0xf2, - 0xbd, 0x52, 0x8f, 0x90, 0x7d, 0x7b, 0x18, 0xaa, 0xca, 0xc8, 0xce, 0x11, 0x92, 0xdf, 0x18, 0x2a, - 0xb0, 0x1a, 0x5c, 0xf1, 0x3c, 0x0b, 0xe2, 0x2d, 0xe2, 0xf1, 0xd3, 0xc5, 0x0a, 0xa9, 0xed, 0x13, - 0xf6, 0xf8, 0xd3, 0x67, 0xdf, 0x24, 0x5e, 0x45, 0x98, 0xc0, 0x6b, 0x53, 0x48, 0xe5, 0x67, 0x92, - 0x92, 0x38, 0xa3, 0xac, 0xac, 0x15, 0x15, 0x87, 0xdb, 0x28, 0x40, 0x6d, 0x1d, 0x07, 0xeb, 0x96, - 0x22, 0xa8, 0x67, 0x15, 0xc1, 0x4b, 0x60, 0xb1, 0x23, 0x66, 0x44, 0x80, 0x52, 0xdb, 0x99, 0x49, - 0x8a, 0x72, 0x47, 0x29, 0xfe, 0xf4, 0x79, 0x6e, 0xae, 0xa2, 0xac, 0xad, 0x9f, 0x0c, 0x70, 0x74, - 0x87, 0x35, 0xca, 0xa8, 0xd5, 0x1a, 0x89, 0x34, 0x0a, 0x3c, 0xaa, 0x73, 0xc2, 0xff, 0xe1, 0x29, - 0x90, 0xf0, 0x10, 0xad, 0xba, 0xa8, 0xa3, 0xae, 0xc7, 0xa2, 0x87, 0x68, 0x19, 0x75, 0xe0, 0x1d, - 0x90, 0xee, 0x04, 0xa4, 0x43, 0x28, 0x0e, 0x06, 0x57, 0x8c, 0x5f, 0x8f, 0xe5, 0xd2, 0xf6, 0x5f, - 0xcf, 0x73, 0xb6, 0xd7, 0x64, 0x8d, 0x6e, 0xcd, 0x76, 0x49, 0xdb, 0x51, 0xbd, 0x41, 0x7e, 0x2e, - 0xd0, 0xfa, 0x9e, 0xc3, 0xf6, 0x3b, 0x98, 0xda, 0xe5, 0xe1, 0xdd, 0xae, 0x1c, 0xd3, 0xbe, 0xf4, - 0xbd, 0x5c, 0x05, 0x49, 0xb7, 0x81, 0x9a, 0x7e, 0xb5, 0x59, 0xcf, 0xc4, 0x37, 0x8c, 0x42, 0xac, - 0x92, 0x10, 0xe3, 0xeb, 0x75, 0x2b, 0x0f, 0x8e, 0xef, 0x50, 0xd6, 0x6c, 0x23, 0x86, 0xaf, 0xa1, - 0x61, 0x20, 0xd2, 0x20, 0xe6, 0x21, 0x49, 0x3e, 0x5e, 0xe1, 0xbf, 0xd6, 0x8b, 0x98, 0xce, 0x69, - 0x80, 0x5c, 0xbc, 0xdb, 0xd7, 0xe7, 0x2c, 0x82, 0x58, 0x9b, 0x7a, 0x2a, 0x5e, 0xb9, 0xc9, 0x78, - 0xdd, 0xa2, 0xde, 0x0e, 0x9f, 0xc3, 0xdd, 0xf6, 0x6e, 0xbf, 0xc2, 0x6d, 0xe1, 0x65, 0xb0, 0xcc, - 0xb8, 0x93, 0xaa, 0x4b, 0xfc, 0xbb, 0x4d, 0x4f, 0x9c, 0x34, 0xb5, 0xbd, 0x3e, 0xb9, 0x57, 0x40, - 0x95, 0x85, 0x51, 0x25, 0xc5, 0x86, 0x03, 0x58, 0x06, 0xcb, 0x9d, 0x00, 0xd7, 0xb1, 0x8b, 0x29, - 0x25, 0x01, 0xcd, 0xc4, 0x45, 0x41, 0xcd, 0x44, 0x0f, 0x6d, 0xe2, 0xaf, 0x64, 0xad, 0x45, 0xdc, - 0x3d, 0xfd, 0x1e, 0x2d, 0x88, 0xc8, 0xa4, 0xc4, 0x9c, 0x7c, 0x8d, 0xe0, 0x3a, 0x00, 0xd2, 0x44, - 0x5c, 0x9a, 0x45, 0x71, 0x69, 0x96, 0xc4, 0x8c, 0xe8, 0x33, 0x65, 0xbd, 0xcc, 0x5b, 0x61, 0x26, - 0x21, 0x8e, 0x61, 0xda, 0xb2, 0x4f, 0xda, 0xba, 0x4f, 0xda, 0xbb, 0xba, 0x4f, 0x96, 0x92, 0xbc, - 0x68, 0x1e, 0xff, 0x9e, 0x33, 0x94, 0x13, 0xbe, 0x32, 0x35, 0xf7, 0xc9, 0x7f, 0x27, 0xf7, 0x4b, - 0xa1, 0xdc, 0x7f, 0x18, 0x4f, 0xce, 0xa7, 0x63, 0x95, 0x24, 0xeb, 0x57, 0x9b, 0x7e, 0x1d, 0xf7, - 0xad, 0x73, 0xea, 0x05, 0x1b, 0x64, 0x78, 0xf8, 0xbc, 0xd4, 0x11, 0x43, 0xba, 0x94, 0xf9, 0xbf, - 0xf5, 0x5d, 0x0c, 0x9c, 0x1c, 0x1a, 0x97, 0xf8, 0x69, 0x46, 0x2a, 0x82, 0xf5, 0xf5, 0x25, 0x9f, - 0x5d, 0x11, 0xac, 0x4f, 0xdf, 0x40, 0x45, 0xfc, 0xd7, 0x93, 0x69, 0x5d, 0x00, 0xa7, 0x26, 0xf2, - 0x71, 0x40, 0xfe, 0x4e, 0x0c, 0xfa, 0x2c, 0xc5, 0x57, 0xb1, 0x7e, 0xcf, 0xad, 0x3b, 0x83, 0x1e, - 0xaa, 0xa6, 0x95, 0x8b, 0x1d, 0x90, 0xe4, 0x8f, 0x6e, 0xf5, 0x2e, 0x56, 0x7d, 0xac, 0x74, 0xee, - 0xb7, 0xe7, 0xb9, 0xad, 0x43, 0x9c, 0xe7, 0xba, 0xcf, 0x78, 0xc3, 0x15, 0xee, 0xb6, 0x7f, 0x5e, - 0x06, 0x0b, 0xc2, 0x3f, 0xfc, 0xdc, 0x00, 0x09, 0xa5, 0x33, 0xe0, 0xe6, 0x64, 0x9e, 0xa7, 0x08, - 0x49, 0x73, 0x6b, 0x96, 0x99, 0xe4, 0x6a, 0xe5, 0x1f, 0xfd, 0xf2, 0xc7, 0xf7, 0xf3, 0x67, 0x60, - 0x8e, 0xcb, 0x5e, 0x42, 0xb5, 0xf8, 0x55, 0x3a, 0xc3, 0x79, 0xa0, 0xf2, 0xf2, 0x10, 0xfe, 0x60, - 0x80, 0x23, 0x21, 0x29, 0x07, 0xdf, 0x8e, 0x80, 0x98, 0x26, 0x19, 0xcd, 0xf3, 0x87, 0x33, 0x56, - 0xac, 0x6c, 0xc1, 0xaa, 0x00, 0xb7, 0xc2, 0xac, 0xb4, 0x62, 0x9c, 0x20, 0xf7, 0xa3, 0x01, 0xd2, - 0xe3, 0x8a, 0x0c, 0xda, 0x11, 0x90, 0x11, 0x42, 0xd0, 0x74, 0x0e, 0x6d, 0xaf, 0x58, 0x5e, 0x12, - 0x2c, 0x2f, 0x42, 0x3b, 0xcc, 0xb2, 0xa7, 0xed, 0x87, 0x44, 0x47, 0x05, 0xe6, 0x43, 0xf8, 0xc8, - 0x00, 0x09, 0xa5, 0xbb, 0x22, 0xd3, 0x19, 0x96, 0x74, 0x91, 0xe9, 0x1c, 0x93, 0x6f, 0x56, 0x41, - 0x50, 0xb2, 0xe0, 0x46, 0x98, 0x92, 0xd2, 0x70, 0x74, 0x24, 0x64, 0x5f, 0x19, 0x20, 0xa1, 0xd4, - 0x57, 0x24, 0x89, 0xb0, 0xd4, 0x8b, 0x24, 0x31, 0x26, 0xe2, 0xac, 0x0b, 0x82, 0x44, 0x1e, 0x6e, - 0x86, 0x49, 0x50, 0x69, 0x36, 0xe4, 0xe0, 0x3c, 0xd8, 0xc3, 0xfb, 0x0f, 0x61, 0x0f, 0xc4, 0xb9, - 0x40, 0x83, 0x56, 0x64, 0x89, 0x0c, 0x54, 0x9f, 0xf9, 0xff, 0x03, 0x6d, 0x14, 0xfe, 0xa6, 0xc0, - 0xcf, 0xc1, 0xf5, 0xf1, 0xea, 0xa9, 0x87, 0x22, 0x40, 0xc1, 0xa2, 0xd4, 0x27, 0xf0, 0xad, 0x08, - 0xaf, 0x21, 0x19, 0x64, 0x6e, 0xce, 0xb0, 0x52, 0xe8, 0x6b, 0x02, 0xfd, 0x24, 0x5c, 0x09, 0xa3, - 0x4b, 0xf1, 0x03, 0x19, 0x48, 0x28, 0xed, 0x03, 0x37, 0x26, 0xfd, 0x85, 0x65, 0x91, 0x99, 0x9f, - 0xd5, 0x0f, 0x34, 0x66, 0x56, 0x60, 0x66, 0xe0, 0xc9, 0x30, 0x26, 0x66, 0x8d, 0xaa, 0xcb, 0xa1, - 0xee, 0x83, 0xd4, 0x88, 0x70, 0x39, 0x04, 0xf2, 0x94, 0xb3, 0x4e, 0x51, 0x3e, 0x96, 0x25, 0x70, - 0xd7, 0xa0, 0x39, 0x86, 0xab, 0x4c, 0xab, 0x1e, 0xa2, 0xb0, 0x0f, 0x12, 0xaa, 0x47, 0x46, 0xd6, - 0x59, 0x58, 0x25, 0x45, 0xd6, 0xd9, 0x58, 0xab, 0x8d, 0x3a, 0xb5, 0x6c, 0x8e, 0xac, 0x0f, 0xbf, - 0x30, 0x00, 0x18, 0xbe, 0xf0, 0xb0, 0x70, 0x90, 0xdb, 0xd1, 0xa6, 0x6c, 0x9e, 0x3d, 0x84, 0xa5, - 0xe2, 0x70, 0x46, 0x70, 0x38, 0x0d, 0x57, 0xa7, 0x71, 0x10, 0xad, 0x8e, 0x07, 0x40, 0x75, 0x88, - 0x03, 0x6e, 0xfb, 0x68, 0x63, 0x39, 0xe0, 0xb6, 0x87, 0x1a, 0x4d, 0x54, 0x00, 0x74, 0xf3, 0x29, - 0x5d, 0x7e, 0xfa, 0x32, 0x6b, 0x3c, 0x7b, 0x99, 0x35, 0x5e, 0xbc, 0xcc, 0x1a, 0x8f, 0x5f, 0x65, - 0xe7, 0x9e, 0xbd, 0xca, 0xce, 0xfd, 0xfa, 0x2a, 0x3b, 0xf7, 0xd9, 0x68, 0x33, 0x1a, 0xec, 0x25, - 0xd4, 0xe9, 0x15, 0x8b, 0x4e, 0x5f, 0xf8, 0x11, 0x0d, 0xa9, 0xb6, 0x28, 0x7a, 0xf9, 0x3b, 0x7f, - 0x07, 0x00, 0x00, 0xff, 0xff, 0x63, 0x92, 0x44, 0x58, 0x97, 0x11, 0x00, 0x00, + // 1567 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xcd, 0x6f, 0x13, 0x47, + 0x1b, 0xcf, 0xc6, 0x4e, 0xec, 0x8c, 0x13, 0x30, 0x43, 0x00, 0xc7, 0x24, 0x76, 0xd8, 0xf7, 0xcd, + 0x07, 0xbc, 0xb0, 0x4b, 0xf2, 0x4a, 0x48, 0xed, 0xa5, 0x60, 0x2b, 0xa1, 0x14, 0xa8, 0xa8, 0x89, + 0xaa, 0xaa, 0x12, 0xb5, 0xc6, 0xeb, 0xc9, 0xda, 0x8a, 0xbd, 0x63, 0x76, 0xc6, 0x96, 0x03, 0xe2, + 0x50, 0x54, 0xf5, 0x43, 0x95, 0x2a, 0xa4, 0xde, 0x2a, 0x55, 0xe2, 0xde, 0x3f, 0xa0, 0xfd, 0x13, + 0x38, 0x22, 0xf5, 0x52, 0xf5, 0x00, 0x08, 0x7a, 0xe8, 0xdf, 0xd0, 0x53, 0x35, 0x5f, 0xf6, 0xae, + 0xed, 0x8d, 0x03, 0xa2, 0xa7, 0x9e, 0xbc, 0x33, 0xf3, 0xcc, 0xf3, 0xfc, 0x9e, 0x8f, 0x79, 0x9e, + 0x9f, 0xc1, 0x22, 0x66, 0x35, 0xec, 0x37, 0xeb, 0x1e, 0xb3, 0x71, 0xa7, 0x69, 0x77, 0x36, 0xec, + 0xbb, 0x6d, 0xec, 0xef, 0x5b, 0x2d, 0x9f, 0x30, 0x02, 0xd3, 0xbd, 0x53, 0x0b, 0x77, 0x9a, 0x56, + 0x67, 0x23, 0x7b, 0xce, 0x21, 0xb4, 0x49, 0xa8, 0x5d, 0x41, 0x14, 0x4b, 0x51, 0xbb, 0xb3, 0x51, + 0xc1, 0x0c, 0x6d, 0xd8, 0x2d, 0xe4, 0xd6, 0x3d, 0xc4, 0xea, 0xc4, 0x93, 0xb7, 0xb3, 0xd9, 0x21, + 0xdd, 0x5c, 0x89, 0x3c, 0x5b, 0x18, 0x3a, 0x63, 0x5d, 0x75, 0x34, 0xef, 0x12, 0x97, 0x88, 0x4f, + 0x9b, 0x7f, 0xa9, 0xdd, 0x45, 0x97, 0x10, 0xb7, 0x81, 0x6d, 0xd4, 0xaa, 0xdb, 0xc8, 0xf3, 0x08, + 0x13, 0x96, 0xa8, 0x3a, 0xcd, 0xab, 0x53, 0xb1, 0xaa, 0xb4, 0x77, 0x6d, 0x56, 0x6f, 0x62, 0xca, + 0x50, 0xb3, 0x25, 0x05, 0xcc, 0x77, 0xc0, 0xf1, 0x8f, 0x38, 0xda, 0x2b, 0x8e, 0x43, 0xda, 0x1e, + 0x2b, 0xe1, 0xbb, 0x6d, 0x4c, 0x19, 0xcc, 0x80, 0x04, 0xaa, 0x56, 0x7d, 0x4c, 0x69, 0xc6, 0x58, + 0x36, 0xd6, 0x67, 0x4a, 0x7a, 0xf9, 0x6e, 0xf2, 0xeb, 0xc7, 0xf9, 0x89, 0x3f, 0x1f, 0xe7, 0x27, + 0x4c, 0x07, 0xcc, 0x87, 0xaf, 0xd2, 0x16, 0xf1, 0x28, 0xe6, 0x77, 0x2b, 0xa8, 0x81, 0x3c, 0x07, + 0xeb, 0xbb, 0x6a, 0x09, 0x4f, 0x83, 0x19, 0x87, 0x54, 0x71, 0xb9, 0x86, 0x68, 0x2d, 0x33, 0x29, + 0xce, 0x92, 0x7c, 0xe3, 0x7d, 0x44, 0x6b, 0x70, 0x1e, 0x4c, 0x79, 0x84, 0x5f, 0x8a, 0x2d, 0x1b, + 0xeb, 0xf1, 0x92, 0x5c, 0x98, 0xef, 0x81, 0x05, 0x61, 0xa4, 0x28, 0xc2, 0xfb, 0x06, 0x28, 0xbf, + 0x34, 0x40, 0x76, 0x94, 0x06, 0x05, 0x76, 0x05, 0x1c, 0x91, 0x99, 0x2b, 0x87, 0x35, 0xcd, 0xc9, + 0xdd, 0x2b, 0x72, 0x13, 0x66, 0x41, 0x92, 0x72, 0xa3, 0x1c, 0xdf, 0xa4, 0xc0, 0xd7, 0x5b, 0x73, + 0x15, 0x48, 0x6a, 0x2d, 0x7b, 0xed, 0x66, 0x05, 0xfb, 0xca, 0x83, 0x39, 0xb5, 0xfb, 0xa1, 0xd8, + 0x34, 0xaf, 0x83, 0x45, 0x81, 0xe3, 0x63, 0xd4, 0xa8, 0x57, 0x11, 0x23, 0xfe, 0x80, 0x33, 0x67, + 0xc0, 0xac, 0x43, 0xbc, 0x41, 0x1c, 0x29, 0xbe, 0x77, 0x65, 0xc8, 0xab, 0x6f, 0x0d, 0xb0, 0x14, + 0xa1, 0x4d, 0x39, 0xb6, 0x06, 0x8e, 0x6a, 0x54, 0x61, 0x8d, 0x1a, 0xec, 0x5b, 0x74, 0x4d, 0x17, + 0x51, 0x41, 0xe6, 0xf9, 0x75, 0xd2, 0x73, 0x51, 0x15, 0x51, 0xef, 0xea, 0xb8, 0x22, 0x32, 0xaf, + 0x2b, 0x63, 0xb7, 0x19, 0xf1, 0x91, 0x3b, 0xde, 0x18, 0x4c, 0x83, 0xd8, 0x1e, 0xde, 0x57, 0xf5, + 0xc6, 0x3f, 0x03, 0xe6, 0xcf, 0x2b, 0xf3, 0x3d, 0x65, 0xca, 0xfc, 0x3c, 0x98, 0xea, 0xa0, 0x46, + 0x5b, 0x1b, 0x97, 0x0b, 0xf3, 0x12, 0x48, 0xab, 0x52, 0xaa, 0xbe, 0x96, 0x93, 0x6b, 0xe0, 0x58, + 0xe0, 0x9e, 0x32, 0x01, 0x41, 0x9c, 0xd7, 0xbe, 0xb8, 0x35, 0x5b, 0x12, 0xdf, 0xe6, 0x3d, 0x00, + 0x85, 0xe0, 0x4e, 0xf7, 0x06, 0x71, 0xa9, 0x36, 0x01, 0x41, 0x5c, 0xbc, 0x18, 0xa9, 0x5f, 0x7c, + 0xc3, 0x6d, 0x00, 0xfa, 0x7d, 0x45, 0xf8, 0x96, 0xda, 0x5c, 0xb5, 0x64, 0xd1, 0x5a, 0xbc, 0x09, + 0x59, 0xb2, 0x5f, 0xa9, 0x26, 0x64, 0xdd, 0xea, 0x87, 0xaa, 0x14, 0xb8, 0x19, 0x00, 0xf9, 0x8d, + 0xa1, 0x02, 0xab, 0x8d, 0x2b, 0x9c, 0x67, 0x41, 0xbc, 0x41, 0x5c, 0xee, 0x5d, 0x6c, 0x3d, 0xb5, + 0x79, 0xc2, 0x1a, 0x6c, 0x7d, 0xd6, 0x0d, 0xe2, 0x96, 0x84, 0x08, 0xbc, 0x3a, 0x02, 0xd4, 0xda, + 0x58, 0x50, 0xd2, 0x4e, 0x10, 0x95, 0x39, 0xaf, 0xe2, 0x70, 0x0b, 0xf9, 0xa8, 0xa9, 0xe3, 0x60, + 0xde, 0x54, 0x00, 0xf5, 0xae, 0x02, 0x78, 0x09, 0x4c, 0xb7, 0xc4, 0x8e, 0x08, 0x50, 0x6a, 0x33, + 0x33, 0x0c, 0x51, 0xde, 0x28, 0xc4, 0x9f, 0x3c, 0xcb, 0x4f, 0x94, 0x94, 0xb4, 0xf9, 0xb3, 0x01, + 0x8e, 0x6c, 0xb1, 0x5a, 0x11, 0x35, 0x1a, 0x81, 0x48, 0x23, 0xdf, 0xa5, 0x3a, 0x27, 0xfc, 0x1b, + 0x9e, 0x02, 0x09, 0x17, 0xd1, 0xb2, 0x83, 0x5a, 0xea, 0x79, 0x4c, 0xbb, 0x88, 0x16, 0x51, 0x0b, + 0xde, 0x01, 0xe9, 0x96, 0x4f, 0x5a, 0x84, 0x62, 0xbf, 0xf7, 0xc4, 0xf8, 0xf3, 0x98, 0x2d, 0x6c, + 0xfe, 0xf5, 0x2c, 0x6f, 0xb9, 0x75, 0x56, 0x6b, 0x57, 0x2c, 0x87, 0x34, 0x6d, 0x35, 0x1b, 0xe4, + 0xcf, 0x05, 0x5a, 0xdd, 0xb3, 0xd9, 0x7e, 0x0b, 0x53, 0xab, 0xd8, 0x7f, 0xdb, 0xa5, 0xa3, 0x5a, + 0x97, 0x7e, 0x97, 0x0b, 0x20, 0xe9, 0xd4, 0x50, 0xdd, 0x2b, 0xd7, 0xab, 0x99, 0xf8, 0xb2, 0xb1, + 0x1e, 0x2b, 0x25, 0xc4, 0xfa, 0x5a, 0xd5, 0x5c, 0x03, 0xc7, 0xb7, 0x28, 0xab, 0x37, 0x11, 0xc3, + 0x57, 0x51, 0x3f, 0x10, 0x69, 0x10, 0x73, 0x91, 0x04, 0x1f, 0x2f, 0xf1, 0x4f, 0xf3, 0x45, 0x4c, + 0xe7, 0xd4, 0x47, 0x0e, 0xde, 0xe9, 0x6a, 0x3f, 0x37, 0x40, 0xac, 0x49, 0x5d, 0x15, 0xaf, 0xfc, + 0x70, 0xbc, 0x6e, 0x52, 0x77, 0x8b, 0xef, 0xe1, 0x76, 0x73, 0xa7, 0x5b, 0xe2, 0xb2, 0xf0, 0x32, + 0x98, 0x65, 0x5c, 0x49, 0xd9, 0x21, 0xde, 0x6e, 0xdd, 0x15, 0x9e, 0xa6, 0x36, 0x97, 0x86, 0xef, + 0x0a, 0x53, 0x45, 0x21, 0x54, 0x4a, 0xb1, 0xfe, 0x02, 0x16, 0xc1, 0x6c, 0xcb, 0xc7, 0x55, 0xec, + 0x60, 0x4a, 0x89, 0x4f, 0x33, 0x71, 0x51, 0x50, 0x63, 0xad, 0x87, 0x2e, 0xf1, 0x2e, 0x59, 0x69, + 0x10, 0x67, 0x4f, 0xf7, 0xa3, 0x29, 0x11, 0x99, 0x94, 0xd8, 0x93, 0xdd, 0x08, 0x2e, 0x01, 0x20, + 0x45, 0xc4, 0xa3, 0x99, 0x16, 0x8f, 0x66, 0x46, 0xec, 0x88, 0x39, 0x53, 0xd4, 0xc7, 0x7c, 0x14, + 0x66, 0x12, 0xc2, 0x8d, 0xac, 0x25, 0xe7, 0xa4, 0xa5, 0xe7, 0xa4, 0xb5, 0xa3, 0xe7, 0x64, 0x21, + 0xc9, 0x8b, 0xe6, 0xd1, 0xf3, 0xbc, 0xa1, 0x94, 0xf0, 0x93, 0x91, 0xb9, 0x4f, 0xfe, 0x33, 0xb9, + 0x9f, 0x09, 0xe5, 0xfe, 0x83, 0x78, 0x72, 0x32, 0x1d, 0x2b, 0x25, 0x59, 0xb7, 0x5c, 0xf7, 0xaa, + 0xb8, 0x6b, 0x9e, 0x53, 0x1d, 0xac, 0x97, 0xe1, 0x7e, 0x7b, 0xa9, 0x22, 0x86, 0x74, 0x29, 0xf3, + 0x6f, 0xf3, 0xbb, 0x18, 0x38, 0xd9, 0x17, 0x2e, 0x70, 0x6f, 0x02, 0x15, 0xc1, 0xba, 0xfa, 0x91, + 0x8f, 0xaf, 0x08, 0xd6, 0xa5, 0x6f, 0xa1, 0x22, 0xfe, 0xed, 0xc9, 0x34, 0x2f, 0x80, 0x53, 0x43, + 0xf9, 0x38, 0x20, 0x7f, 0x27, 0x7a, 0x73, 0x96, 0xe2, 0x6d, 0xac, 0xfb, 0xb9, 0x79, 0xa7, 0x37, + 0x43, 0xd5, 0xb6, 0x52, 0xb1, 0x05, 0x92, 0xbc, 0xe9, 0x96, 0x77, 0xb1, 0x9a, 0x63, 0x85, 0x73, + 0xbf, 0x3f, 0xcb, 0xaf, 0x1e, 0xc2, 0x9f, 0x6b, 0x1e, 0xe3, 0x03, 0x57, 0xa8, 0x33, 0x73, 0x8a, + 0xb8, 0x5c, 0x45, 0x74, 0x1b, 0xe3, 0xdb, 0x9c, 0x60, 0x52, 0x56, 0x77, 0x7a, 0x6d, 0xf9, 0x97, + 0x49, 0xc5, 0x45, 0x86, 0x05, 0x14, 0x90, 0x4f, 0x40, 0x9a, 0x11, 0x86, 0x1a, 0xe5, 0x4a, 0xdb, + 0xf7, 0x70, 0x35, 0x00, 0xc8, 0xe2, 0xf9, 0x78, 0x0d, 0x50, 0x47, 0x84, 0x9e, 0x82, 0x50, 0xb3, + 0x8d, 0x79, 0xea, 0x8e, 0x4b, 0xcd, 0x0e, 0xf1, 0x71, 0x99, 0x61, 0xd4, 0x14, 0xca, 0x27, 0xdf, + 0x48, 0xb9, 0x04, 0x59, 0x24, 0x3e, 0xde, 0xc1, 0xa8, 0xc9, 0xd5, 0x7f, 0xa6, 0xd5, 0x77, 0x34, + 0xcd, 0x12, 0xea, 0x63, 0x6f, 0xa4, 0xfe, 0x98, 0x50, 0xd5, 0x23, 0x6c, 0xdb, 0x18, 0x6f, 0x3e, + 0x9f, 0x03, 0x53, 0x22, 0x74, 0xf0, 0x73, 0x03, 0x24, 0x14, 0x85, 0x83, 0x2b, 0xc3, 0x4f, 0x68, + 0x04, 0x47, 0xcf, 0xae, 0x8e, 0x13, 0x93, 0xd1, 0x37, 0xd7, 0x1e, 0xfe, 0xfa, 0xc7, 0xf7, 0x93, + 0x67, 0x60, 0x9e, 0xff, 0xa3, 0x20, 0x54, 0xff, 0xaf, 0x50, 0x14, 0xce, 0xbe, 0xaf, 0x4a, 0xfe, + 0x01, 0xfc, 0xc1, 0x00, 0x73, 0x21, 0x96, 0x0c, 0xff, 0x17, 0x61, 0x62, 0x14, 0x1b, 0xcf, 0x9e, + 0x3f, 0x9c, 0xb0, 0x42, 0x65, 0x09, 0x54, 0xeb, 0x70, 0x35, 0x8c, 0x4a, 0x93, 0xf1, 0x21, 0x70, + 0x3f, 0x19, 0x20, 0x3d, 0x48, 0x76, 0xa1, 0x15, 0x61, 0x32, 0x82, 0x63, 0x67, 0xed, 0x43, 0xcb, + 0x2b, 0x94, 0x97, 0x04, 0xca, 0x8b, 0xd0, 0x0a, 0xa3, 0xec, 0x97, 0x43, 0x0f, 0x68, 0x90, 0xbb, + 0x3f, 0x80, 0x0f, 0x0d, 0x90, 0x50, 0x94, 0x36, 0x32, 0x9d, 0x61, 0xb6, 0x1c, 0x99, 0xce, 0x01, + 0x66, 0x6c, 0xae, 0x0b, 0x48, 0x26, 0x5c, 0x0e, 0x43, 0x52, 0xf4, 0x98, 0x06, 0x42, 0xf6, 0x95, + 0x01, 0x12, 0x8a, 0xd8, 0x46, 0x82, 0x08, 0xb3, 0xe8, 0x48, 0x10, 0x03, 0xfc, 0xd8, 0xbc, 0x20, + 0x40, 0xac, 0xc1, 0x95, 0x30, 0x08, 0x2a, 0xc5, 0xfa, 0x18, 0xec, 0xfb, 0x7b, 0x78, 0xff, 0x01, + 0xec, 0x80, 0x38, 0xe7, 0xbe, 0xd0, 0x8c, 0x2c, 0x91, 0x1e, 0xa1, 0xce, 0xfe, 0xe7, 0x40, 0x19, + 0x65, 0x7f, 0x45, 0xd8, 0xcf, 0xc3, 0xa5, 0xc1, 0xea, 0xa9, 0x86, 0x22, 0x40, 0xc1, 0xb4, 0xa4, + 0x7e, 0xf0, 0xbf, 0x11, 0x5a, 0x43, 0x0c, 0x33, 0xbb, 0x32, 0x46, 0x4a, 0x59, 0x5f, 0x14, 0xd6, + 0x4f, 0xc2, 0xf9, 0xb0, 0x75, 0xc9, 0x2b, 0x21, 0x03, 0x09, 0x45, 0x2b, 0xe1, 0xf2, 0xb0, 0xbe, + 0x30, 0xe3, 0xcc, 0xae, 0x8d, 0x1b, 0xb5, 0xda, 0x66, 0x4e, 0xd8, 0xcc, 0xc0, 0x93, 0x61, 0x9b, + 0x98, 0xd5, 0xca, 0x0e, 0x37, 0x75, 0x0f, 0xa4, 0x02, 0x9c, 0xf0, 0x10, 0x96, 0x47, 0xf8, 0x3a, + 0x82, 0x54, 0x9a, 0xa6, 0xb0, 0xbb, 0x08, 0xb3, 0x03, 0x76, 0x95, 0x68, 0xd9, 0x45, 0x14, 0x76, + 0x41, 0x42, 0xd1, 0x8f, 0xc8, 0x3a, 0x0b, 0x13, 0xd0, 0xc8, 0x3a, 0x1b, 0x60, 0x31, 0x51, 0x5e, + 0x4b, 0xde, 0xc1, 0xba, 0xf0, 0x0b, 0x03, 0x80, 0xfe, 0xf0, 0x84, 0xeb, 0x07, 0xa9, 0x0d, 0xf2, + 0x9d, 0xec, 0xd9, 0x43, 0x48, 0x2a, 0x0c, 0x67, 0x04, 0x86, 0xd3, 0x70, 0x61, 0x14, 0x06, 0xc1, + 0x22, 0x78, 0x00, 0xd4, 0xf0, 0x3d, 0xe0, 0xb5, 0x07, 0x67, 0xf6, 0x01, 0xaf, 0x3d, 0x34, 0xc3, + 0xa3, 0x02, 0xa0, 0xe7, 0x3a, 0xfc, 0xd1, 0x00, 0xe9, 0xc1, 0xb9, 0x1b, 0xd9, 0x16, 0x23, 0x26, + 0x78, 0x64, 0x5b, 0x8c, 0x1a, 0xe8, 0x51, 0x3d, 0x88, 0xff, 0x4f, 0xda, 0xc5, 0xb8, 0x4c, 0x7b, + 0x37, 0x0a, 0x97, 0x9f, 0xbc, 0xcc, 0x19, 0x4f, 0x5f, 0xe6, 0x8c, 0x17, 0x2f, 0x73, 0xc6, 0xa3, + 0x57, 0xb9, 0x89, 0xa7, 0xaf, 0x72, 0x13, 0xbf, 0xbd, 0xca, 0x4d, 0x7c, 0x1a, 0x1c, 0x9b, 0x3d, + 0x2d, 0x84, 0xda, 0x9d, 0x8d, 0x4d, 0xbb, 0x2b, 0x34, 0x8a, 0xd1, 0x59, 0x99, 0x16, 0x34, 0xee, + 0xff, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x99, 0xca, 0x59, 0x92, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. -var ( - _ context.Context - _ grpc.ClientConn -) +var _ context.Context +var _ grpc.ClientConn // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. @@ -1569,6 +1537,8 @@ type QueryClient interface { // BaseFee queries the base fee of the parent block of the current block, // it's similar to feemarket module's method, but also checks london hardfork status. BaseFee(ctx context.Context, in *QueryBaseFeeRequest, opts ...grpc.CallOption) (*QueryBaseFeeResponse, error) + // GasFeeStatistics queries the gas fee distribution statistics (total burned and project fees). + GasFeeStatistics(ctx context.Context, in *QueryGasFeeStatisticsRequest, opts ...grpc.CallOption) (*QueryGasFeeStatisticsResponse, error) } type queryClient struct { @@ -1687,6 +1657,15 @@ func (c *queryClient) BaseFee(ctx context.Context, in *QueryBaseFeeRequest, opts return out, nil } +func (c *queryClient) GasFeeStatistics(ctx context.Context, in *QueryGasFeeStatisticsRequest, opts ...grpc.CallOption) (*QueryGasFeeStatisticsResponse, error) { + out := new(QueryGasFeeStatisticsResponse) + err := c.cc.Invoke(ctx, "/ethermint.evm.v1.Query/GasFeeStatistics", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Account queries an Ethereum account. @@ -1716,58 +1695,53 @@ type QueryServer interface { // BaseFee queries the base fee of the parent block of the current block, // it's similar to feemarket module's method, but also checks london hardfork status. BaseFee(context.Context, *QueryBaseFeeRequest) (*QueryBaseFeeResponse, error) + // GasFeeStatistics queries the gas fee distribution statistics (total burned and project fees). + GasFeeStatistics(context.Context, *QueryGasFeeStatisticsRequest) (*QueryGasFeeStatisticsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct{} +type UnimplementedQueryServer struct { +} func (*UnimplementedQueryServer) Account(ctx context.Context, req *QueryAccountRequest) (*QueryAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Account not implemented") } - func (*UnimplementedQueryServer) CosmosAccount(ctx context.Context, req *QueryCosmosAccountRequest) (*QueryCosmosAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CosmosAccount not implemented") } - func (*UnimplementedQueryServer) ValidatorAccount(ctx context.Context, req *QueryValidatorAccountRequest) (*QueryValidatorAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ValidatorAccount not implemented") } - func (*UnimplementedQueryServer) Balance(ctx context.Context, req *QueryBalanceRequest) (*QueryBalanceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Balance not implemented") } - func (*UnimplementedQueryServer) Storage(ctx context.Context, req *QueryStorageRequest) (*QueryStorageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Storage not implemented") } - func (*UnimplementedQueryServer) Code(ctx context.Context, req *QueryCodeRequest) (*QueryCodeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Code not implemented") } - func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } - func (*UnimplementedQueryServer) EthCall(ctx context.Context, req *EthCallRequest) (*MsgEthereumTxResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EthCall not implemented") } - func (*UnimplementedQueryServer) EstimateGas(ctx context.Context, req *EthCallRequest) (*EstimateGasResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EstimateGas not implemented") } - func (*UnimplementedQueryServer) TraceTx(ctx context.Context, req *QueryTraceTxRequest) (*QueryTraceTxResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TraceTx not implemented") } - func (*UnimplementedQueryServer) TraceBlock(ctx context.Context, req *QueryTraceBlockRequest) (*QueryTraceBlockResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TraceBlock not implemented") } - func (*UnimplementedQueryServer) BaseFee(ctx context.Context, req *QueryBaseFeeRequest) (*QueryBaseFeeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BaseFee not implemented") } +func (*UnimplementedQueryServer) GasFeeStatistics(ctx context.Context, req *QueryGasFeeStatisticsRequest) (*QueryGasFeeStatisticsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GasFeeStatistics not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -1989,6 +1963,24 @@ func _Query_BaseFee_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } +func _Query_GasFeeStatistics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGasFeeStatisticsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).GasFeeStatistics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ethermint.evm.v1.Query/GasFeeStatistics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GasFeeStatistics(ctx, req.(*QueryGasFeeStatisticsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "ethermint.evm.v1.Query", HandlerType: (*QueryServer)(nil), @@ -2041,6 +2033,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "BaseFee", Handler: _Query_BaseFee_Handler, }, + { + MethodName: "GasFeeStatistics", + Handler: _Query_GasFeeStatistics_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "ethermint/evm/v1/query.proto", @@ -2699,7 +2695,7 @@ func (m *QueryTraceTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x42 } - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n4, err4 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err4 != nil { return 0, err4 } @@ -2822,7 +2818,7 @@ func (m *QueryTraceBlockRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x42 } - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):]) + n7, err7 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime):]) if err7 != nil { return 0, err7 } @@ -2959,6 +2955,82 @@ func (m *QueryBaseFeeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *QueryGasFeeStatisticsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGasFeeStatisticsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGasFeeStatisticsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryGasFeeStatisticsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGasFeeStatisticsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGasFeeStatisticsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TotalValidatorFee.Size() + i -= size + if _, err := m.TotalValidatorFee.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.TotalCoreTeamFee.Size() + i -= size + if _, err := m.TotalCoreTeamFee.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.TotalBurnedFee.Size() + i -= size + if _, err := m.TotalBurnedFee.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -2970,7 +3042,6 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } - func (m *QueryAccountRequest) Size() (n int) { if m == nil { return 0 @@ -3268,7 +3339,7 @@ func (m *QueryTraceTxRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 1 + l + sovQuery(uint64(l)) l = len(m.ProposerAddress) if l > 0 { @@ -3316,7 +3387,7 @@ func (m *QueryTraceBlockRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.BlockTime) n += 1 + l + sovQuery(uint64(l)) l = len(m.ProposerAddress) if l > 0 { @@ -3363,14 +3434,36 @@ func (m *QueryBaseFeeResponse) Size() (n int) { return n } +func (m *QueryGasFeeStatisticsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryGasFeeStatisticsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TotalBurnedFee.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.TotalCoreTeamFee.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.TotalValidatorFee.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } - func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } - func (m *QueryAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3453,7 +3546,6 @@ func (m *QueryAccountRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3587,7 +3679,6 @@ func (m *QueryAccountResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCosmosAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3670,7 +3761,6 @@ func (m *QueryCosmosAccountRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCosmosAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3791,7 +3881,6 @@ func (m *QueryCosmosAccountResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryValidatorAccountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3874,7 +3963,6 @@ func (m *QueryValidatorAccountRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryValidatorAccountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3995,7 +4083,6 @@ func (m *QueryValidatorAccountResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryBalanceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4078,7 +4165,6 @@ func (m *QueryBalanceRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryBalanceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4161,7 +4247,6 @@ func (m *QueryBalanceResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryStorageRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4276,7 +4361,6 @@ func (m *QueryStorageRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryStorageResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4359,7 +4443,6 @@ func (m *QueryStorageResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4442,7 +4525,6 @@ func (m *QueryCodeRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryCodeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4527,7 +4609,6 @@ func (m *QueryCodeResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTxLogsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4646,7 +4727,6 @@ func (m *QueryTxLogsRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTxLogsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4767,7 +4847,6 @@ func (m *QueryTxLogsResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4818,7 +4897,6 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4902,7 +4980,6 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *EthCallRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5059,7 +5136,6 @@ func (m *EthCallRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *EstimateGasResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5129,7 +5205,6 @@ func (m *EstimateGasResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTraceTxRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5345,7 +5420,7 @@ func (m *QueryTraceTxRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5423,7 +5498,6 @@ func (m *QueryTraceTxRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTraceTxResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5508,7 +5582,6 @@ func (m *QueryTraceTxResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTraceBlockRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5688,7 +5761,7 @@ func (m *QueryTraceBlockRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.BlockTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5766,7 +5839,6 @@ func (m *QueryTraceBlockRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryTraceBlockResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5851,7 +5923,6 @@ func (m *QueryTraceBlockResponse) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryBaseFeeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5902,7 +5973,6 @@ func (m *QueryBaseFeeRequest) Unmarshal(dAtA []byte) error { } return nil } - func (m *QueryBaseFeeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5989,7 +6059,208 @@ func (m *QueryBaseFeeResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryGasFeeStatisticsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGasFeeStatisticsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGasFeeStatisticsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGasFeeStatisticsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGasFeeStatisticsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGasFeeStatisticsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalBurnedFee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalBurnedFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalCoreTeamFee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalCoreTeamFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalValidatorFee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalValidatorFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/evm/types/query.pb.gw.go b/x/evm/types/query.pb.gw.go index 2132d3ea..1478e63a 100644 --- a/x/evm/types/query.pb.gw.go +++ b/x/evm/types/query.pb.gw.go @@ -25,15 +25,13 @@ import ( ) // Suppress "imported and not used" errors -var ( - _ codes.Code - _ io.Reader - _ status.Status - _ = runtime.String - _ = utilities.NewDoubleArray - _ = descriptor.ForMessage - _ = metadata.Join -) +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join func request_Query_Account_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAccountRequest @@ -59,6 +57,7 @@ func request_Query_Account_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.Account(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Account_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -85,6 +84,7 @@ func local_request_Query_Account_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.Account(ctx, &protoReq) return msg, metadata, err + } func request_Query_CosmosAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -111,6 +111,7 @@ func request_Query_CosmosAccount_0(ctx context.Context, marshaler runtime.Marsha msg, err := client.CosmosAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_CosmosAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -137,6 +138,7 @@ func local_request_Query_CosmosAccount_0(ctx context.Context, marshaler runtime. msg, err := server.CosmosAccount(ctx, &protoReq) return msg, metadata, err + } func request_Query_ValidatorAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -163,6 +165,7 @@ func request_Query_ValidatorAccount_0(ctx context.Context, marshaler runtime.Mar msg, err := client.ValidatorAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_ValidatorAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -189,6 +192,7 @@ func local_request_Query_ValidatorAccount_0(ctx context.Context, marshaler runti msg, err := server.ValidatorAccount(ctx, &protoReq) return msg, metadata, err + } func request_Query_Balance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -215,6 +219,7 @@ func request_Query_Balance_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.Balance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Balance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -241,6 +246,7 @@ func local_request_Query_Balance_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.Balance(ctx, &protoReq) return msg, metadata, err + } func request_Query_Storage_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -278,6 +284,7 @@ func request_Query_Storage_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.Storage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Storage_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -315,6 +322,7 @@ func local_request_Query_Storage_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.Storage(ctx, &protoReq) return msg, metadata, err + } func request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -341,6 +349,7 @@ func request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, clie msg, err := client.Code(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -367,6 +376,7 @@ func local_request_Query_Code_0(ctx context.Context, marshaler runtime.Marshaler msg, err := server.Code(ctx, &protoReq) return msg, metadata, err + } func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -375,6 +385,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -383,9 +394,12 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal msg, err := server.Params(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_EthCall_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_EthCall_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_EthCall_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq EthCallRequest @@ -400,6 +414,7 @@ func request_Query_EthCall_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.EthCall(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_EthCall_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -415,9 +430,12 @@ func local_request_Query_EthCall_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.EthCall(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_EstimateGas_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_EstimateGas_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_EstimateGas_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq EthCallRequest @@ -432,6 +450,7 @@ func request_Query_EstimateGas_0(ctx context.Context, marshaler runtime.Marshale msg, err := client.EstimateGas(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_EstimateGas_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -447,9 +466,12 @@ func local_request_Query_EstimateGas_0(ctx context.Context, marshaler runtime.Ma msg, err := server.EstimateGas(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_TraceTx_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_TraceTx_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryTraceTxRequest @@ -464,6 +486,7 @@ func request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.TraceTx(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -479,9 +502,12 @@ func local_request_Query_TraceTx_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.TraceTx(ctx, &protoReq) return msg, metadata, err + } -var filter_Query_TraceBlock_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +var ( + filter_Query_TraceBlock_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) func request_Query_TraceBlock_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryTraceBlockRequest @@ -496,6 +522,7 @@ func request_Query_TraceBlock_0(ctx context.Context, marshaler runtime.Marshaler msg, err := client.TraceBlock(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_TraceBlock_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -511,6 +538,7 @@ func local_request_Query_TraceBlock_0(ctx context.Context, marshaler runtime.Mar msg, err := server.TraceBlock(ctx, &protoReq) return msg, metadata, err + } func request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -519,6 +547,7 @@ func request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, c msg, err := client.BaseFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err + } func local_request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -527,6 +556,25 @@ func local_request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marsha msg, err := server.BaseFee(ctx, &protoReq) return msg, metadata, err + +} + +func request_Query_GasFeeStatistics_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGasFeeStatisticsRequest + var metadata runtime.ServerMetadata + + msg, err := client.GasFeeStatistics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_GasFeeStatistics_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGasFeeStatisticsRequest + var metadata runtime.ServerMetadata + + msg, err := server.GasFeeStatistics(ctx, &protoReq) + return msg, metadata, err + } // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". @@ -534,6 +582,7 @@ func local_request_Query_BaseFee_0(ctx context.Context, marshaler runtime.Marsha // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + mux.Handle("GET", pattern_Query_Account_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -554,6 +603,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Account_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_CosmosAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -576,6 +626,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_CosmosAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ValidatorAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -598,6 +649,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_ValidatorAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Balance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -620,6 +672,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Balance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Storage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -642,6 +695,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Storage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -664,6 +718,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Code_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -686,6 +741,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_EthCall_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -708,6 +764,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_EthCall_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_EstimateGas_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -730,6 +787,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_EstimateGas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_TraceTx_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -752,6 +810,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_TraceTx_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_TraceBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -774,6 +833,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_TraceBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_BaseFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -796,6 +856,30 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv } forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_GasFeeStatistics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_GasFeeStatistics_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_GasFeeStatistics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil @@ -838,6 +922,7 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + mux.Handle("GET", pattern_Query_Account_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -855,6 +940,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Account_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_CosmosAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -874,6 +960,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_CosmosAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_ValidatorAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -893,6 +980,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_ValidatorAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Balance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -912,6 +1000,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Balance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Storage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -931,6 +1020,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Storage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -950,6 +1040,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Code_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -969,6 +1060,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_EthCall_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -988,6 +1080,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_EthCall_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_EstimateGas_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1007,6 +1100,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_EstimateGas_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_TraceTx_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1026,6 +1120,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_TraceTx_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_TraceBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1045,6 +1140,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_TraceBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle("GET", pattern_Query_BaseFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1064,6 +1160,27 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } forward_Query_BaseFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_GasFeeStatistics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_GasFeeStatistics_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_GasFeeStatistics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil @@ -1093,6 +1210,8 @@ var ( pattern_Query_TraceBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"evmos", "evm", "v1", "trace_block"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_BaseFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"evmos", "evm", "v1", "base_fee"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_GasFeeStatistics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"evmos", "evm", "v1", "gas_fee_statistics"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -1119,4 +1238,6 @@ var ( forward_Query_TraceBlock_0 = runtime.ForwardResponseMessage forward_Query_BaseFee_0 = runtime.ForwardResponseMessage + + forward_Query_GasFeeStatistics_0 = runtime.ForwardResponseMessage )