158 lines
3.9 KiB
Go
158 lines
3.9 KiB
Go
package keeper
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
func TestDefaultGasConfig_IsGasFree(t *testing.T) {
|
|
config := DefaultGasConfig()
|
|
keeper := NewEVMKeeper(config)
|
|
|
|
if !keeper.IsGasFree() {
|
|
t.Fatal("default config should be gas-free (platform subsidy)")
|
|
}
|
|
}
|
|
|
|
func TestGetBaseFee_ReturnsZeroWhenFree(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
fee := keeper.GetBaseFee()
|
|
|
|
if fee.Sign() != 0 {
|
|
t.Fatalf("base fee should be 0, got %s", fee.String())
|
|
}
|
|
}
|
|
|
|
func TestGetBaseFee_ReturnsMinGasPriceWhenSet(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMinGasPrice(big.NewInt(1000))
|
|
|
|
fee := keeper.GetBaseFee()
|
|
if fee.Cmp(big.NewInt(1000)) != 0 {
|
|
t.Fatalf("expected 1000, got %s", fee.String())
|
|
}
|
|
}
|
|
|
|
func TestGetBaseFee_EIP1559Mode(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMinGasPrice(big.NewInt(500))
|
|
keeper.EnableEIP1559(true)
|
|
|
|
fee := keeper.GetBaseFee()
|
|
// In current implementation, EIP-1559 returns min gas price
|
|
if fee.Cmp(big.NewInt(500)) != 0 {
|
|
t.Fatalf("EIP-1559 base fee should be min gas price, got %s", fee.String())
|
|
}
|
|
}
|
|
|
|
func TestSetMinGasPrice(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
|
|
keeper.SetMinGasPrice(big.NewInt(2000))
|
|
|
|
price := keeper.GetMinGasPrice()
|
|
if price.Cmp(big.NewInt(2000)) != 0 {
|
|
t.Fatalf("expected 2000, got %s", price.String())
|
|
}
|
|
if keeper.IsGasFree() {
|
|
t.Fatal("should not be gas-free after setting min gas price")
|
|
}
|
|
}
|
|
|
|
func TestSetMinGasPriceBackToZero(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMinGasPrice(big.NewInt(1000))
|
|
keeper.SetMinGasPrice(big.NewInt(0))
|
|
|
|
if !keeper.IsGasFree() {
|
|
t.Fatal("should be gas-free after setting price back to 0")
|
|
}
|
|
}
|
|
|
|
func TestGetMaxGasPerBlock(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
|
|
maxGas := keeper.GetMaxGasPerBlock()
|
|
if maxGas != 100_000_000 {
|
|
t.Fatalf("expected 100M, got %d", maxGas)
|
|
}
|
|
}
|
|
|
|
func TestSetMaxGasPerBlock(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMaxGasPerBlock(200_000_000)
|
|
|
|
if keeper.GetMaxGasPerBlock() != 200_000_000 {
|
|
t.Fatalf("expected 200M, got %d", keeper.GetMaxGasPerBlock())
|
|
}
|
|
}
|
|
|
|
func TestEstimateGasCost_FreeMode(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
|
|
cost := keeper.EstimateGasCost(21000) // standard ETH transfer
|
|
if cost.Sign() != 0 {
|
|
t.Fatalf("gas cost should be 0 in free mode, got %s", cost.String())
|
|
}
|
|
}
|
|
|
|
func TestEstimateGasCost_PaidMode(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMinGasPrice(big.NewInt(10)) // 10 wei
|
|
|
|
cost := keeper.EstimateGasCost(21000)
|
|
expected := big.NewInt(210000) // 10 * 21000
|
|
if cost.Cmp(expected) != 0 {
|
|
t.Fatalf("expected %s, got %s", expected.String(), cost.String())
|
|
}
|
|
}
|
|
|
|
func TestGetGasConfig(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
|
|
config := keeper.GetGasConfig()
|
|
if config.MaxGasPerBlock != 100_000_000 {
|
|
t.Fatal("config MaxGasPerBlock mismatch")
|
|
}
|
|
if config.EnableEIP1559 {
|
|
t.Fatal("EIP-1559 should be disabled by default")
|
|
}
|
|
if config.BaseFeeChangeDenominator != 8 {
|
|
t.Fatal("BaseFeeChangeDenominator mismatch")
|
|
}
|
|
if config.ElasticityMultiplier != 2 {
|
|
t.Fatal("ElasticityMultiplier mismatch")
|
|
}
|
|
}
|
|
|
|
func TestEnableEIP1559(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
|
|
keeper.EnableEIP1559(true)
|
|
config := keeper.GetGasConfig()
|
|
if !config.EnableEIP1559 {
|
|
t.Fatal("EIP-1559 should be enabled")
|
|
}
|
|
|
|
keeper.EnableEIP1559(false)
|
|
config = keeper.GetGasConfig()
|
|
if config.EnableEIP1559 {
|
|
t.Fatal("EIP-1559 should be disabled")
|
|
}
|
|
}
|
|
|
|
func TestMinGasPrice_IsolatedCopy(t *testing.T) {
|
|
keeper := NewEVMKeeper(DefaultGasConfig())
|
|
keeper.SetMinGasPrice(big.NewInt(1000))
|
|
|
|
// Get price and modify the returned value
|
|
price := keeper.GetMinGasPrice()
|
|
price.SetInt64(9999)
|
|
|
|
// Original should not be affected
|
|
original := keeper.GetMinGasPrice()
|
|
if original.Cmp(big.NewInt(1000)) != 0 {
|
|
t.Fatal("GetMinGasPrice should return a copy, not a reference")
|
|
}
|
|
}
|