// Package keeper — EVM Gas 费覆盖逻辑 // // Genex Chain 的 Gas 策略: // - 当前阶段:平台全额补贴,min_gas_price = 0 // - Gas 参数可通过 Governance 合约动态调整(无需硬分叉) // - 后期可开启 EIP-1559 费用市场或固定 Gas 费 package keeper import ( "math/big" ) // GasConfig 定义 Gas 费配置 type GasConfig struct { // MinGasPrice 最低 Gas 价格(当前为 0,平台补贴) MinGasPrice *big.Int `json:"min_gas_price"` // MaxGasPerBlock 每区块最大 Gas MaxGasPerBlock uint64 `json:"max_gas_per_block"` // EnableEIP1559 是否启用 EIP-1559 动态费用 EnableEIP1559 bool `json:"enable_eip1559"` // BaseFeeChangeDenominator EIP-1559 基础费变化分母 BaseFeeChangeDenominator uint64 `json:"base_fee_change_denominator"` // ElasticityMultiplier 弹性乘数 ElasticityMultiplier uint64 `json:"elasticity_multiplier"` } // DefaultGasConfig 返回默认 Gas 配置(平台全额补贴) func DefaultGasConfig() GasConfig { return GasConfig{ MinGasPrice: big.NewInt(0), // 免费 Gas MaxGasPerBlock: 100_000_000, // 1 亿 Gas 上限 EnableEIP1559: false, // 当前不启用 EIP-1559 BaseFeeChangeDenominator: 8, ElasticityMultiplier: 2, } } // EVMKeeper 管理 EVM 模块状态,包含 Gas 费逻辑 type EVMKeeper struct { gasConfig GasConfig } // NewEVMKeeper 创建 EVMKeeper 实例 func NewEVMKeeper(config GasConfig) *EVMKeeper { return &EVMKeeper{ gasConfig: config, } } // GetBaseFee 返回当前基础 Gas 费 // 当前阶段:返回 0(平台全额补贴,用户无需支付 Gas) // 后期可通过 Governance 合约调整 MinGasPrice 参数开启收费 func (k *EVMKeeper) GetBaseFee() *big.Int { if k.gasConfig.MinGasPrice == nil || k.gasConfig.MinGasPrice.Sign() == 0 { return big.NewInt(0) // 免费 Gas } if k.gasConfig.EnableEIP1559 { return k.calculateEIP1559BaseFee() } return new(big.Int).Set(k.gasConfig.MinGasPrice) } // GetMinGasPrice 获取最低 Gas 价格 func (k *EVMKeeper) GetMinGasPrice() *big.Int { if k.gasConfig.MinGasPrice == nil { return big.NewInt(0) } return new(big.Int).Set(k.gasConfig.MinGasPrice) } // SetMinGasPrice 设置最低 Gas 价格(由 Governance 合约通过提案调用) func (k *EVMKeeper) SetMinGasPrice(price *big.Int) { k.gasConfig.MinGasPrice = new(big.Int).Set(price) } // IsGasFree 检查当前是否为免费 Gas 模式 func (k *EVMKeeper) IsGasFree() bool { return k.gasConfig.MinGasPrice == nil || k.gasConfig.MinGasPrice.Sign() == 0 } // GetMaxGasPerBlock 获取每区块最大 Gas 限制 func (k *EVMKeeper) GetMaxGasPerBlock() uint64 { return k.gasConfig.MaxGasPerBlock } // SetMaxGasPerBlock 设置每区块最大 Gas(由 Governance 调整) func (k *EVMKeeper) SetMaxGasPerBlock(maxGas uint64) { k.gasConfig.MaxGasPerBlock = maxGas } // EnableEIP1559 启用/禁用 EIP-1559(由 Governance 控制) func (k *EVMKeeper) EnableEIP1559(enable bool) { k.gasConfig.EnableEIP1559 = enable } // calculateEIP1559BaseFee 计算 EIP-1559 动态基础费 // 预留接口,当前阶段不启用 func (k *EVMKeeper) calculateEIP1559BaseFee() *big.Int { // EIP-1559 基础费计算逻辑 // 生产环境中应根据上一区块的 Gas 使用率动态调整 // 当前返回最低价格 return new(big.Int).Set(k.gasConfig.MinGasPrice) } // GetGasConfig 获取当前 Gas 配置(用于 API 查询) func (k *EVMKeeper) GetGasConfig() GasConfig { return k.gasConfig } // EstimateGasCost 估算交易 Gas 费用 // 当前阶段始终返回 0(平台补贴) func (k *EVMKeeper) EstimateGasCost(gasUsed uint64) *big.Int { baseFee := k.GetBaseFee() return new(big.Int).Mul(baseFee, new(big.Int).SetUint64(gasUsed)) }