neutrond tx gov submit-proposal proposal.json \ --from validator \ --chain-id neutron-1 \ --gas auto \ --gas-adjustment 1.5 \ --fees 1000untrn
{ "title": "Update Global Fee Parameters", "description": "Adjust minimum gas prices and bypass message types", "messages": [ { "@type": "/gaia.globalfee.v1beta1.MsgUpdateParams", "authority": "neutron10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", "params": { "minimum_gas_prices": [ { "denom": "untrn", "amount": "0.025" }, { "denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", "amount": "0.001" } ], "bypass_min_fee_msg_types": [ "/ibc.core.channel.v1.MsgRecvPacket", "/ibc.core.channel.v1.MsgAcknowledgement", "/ibc.core.client.v1.MsgUpdateClient", "/ibc.core.channel.v1.MsgTimeout", "/ibc.core.channel.v1.MsgTimeoutOnClose" ], "max_total_bypass_min_fee_msg_gas_usage": 1000000 } } ], "deposit": "10000000untrn" }
{ "title": "Add IBC Transfer to Fee Bypass", "description": "Allow IBC transfers to bypass minimum fee requirements", "messages": [ { "@type": "/gaia.globalfee.v1beta1.MsgUpdateParams", "authority": "neutron10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", "params": { "minimum_gas_prices": [ { "denom": "untrn", "amount": "0.025" } ], "bypass_min_fee_msg_types": [ "/ibc.core.channel.v1.MsgRecvPacket", "/ibc.core.channel.v1.MsgAcknowledgement", "/ibc.core.client.v1.MsgUpdateClient", "/ibc.core.channel.v1.MsgTimeout", "/ibc.core.channel.v1.MsgTimeoutOnClose", "/ibc.applications.transfer.v1.MsgTransfer" ], "max_total_bypass_min_fee_msg_gas_usage": 1000000 } } ] }
{ "title": "Update Minimum Gas Prices", "description": "Adjust minimum gas prices for network security", "messages": [ { "@type": "/gaia.globalfee.v1beta1.MsgUpdateParams", "authority": "neutron10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", "params": { "minimum_gas_prices": [ { "denom": "untrn", "amount": "0.050" } ], "bypass_min_fee_msg_types": [ "/ibc.core.channel.v1.MsgRecvPacket", "/ibc.core.channel.v1.MsgAcknowledgement", "/ibc.core.client.v1.MsgUpdateClient", "/ibc.core.channel.v1.MsgTimeout", "/ibc.core.channel.v1.MsgTimeoutOnClose" ], "max_total_bypass_min_fee_msg_gas_usage": 1000000 } } ] }
import ( "github.com/neutron-org/neutron/v6/x/globalfee/keeper" "github.com/neutron-org/neutron/v6/x/globalfee/types" ) func (app *App) checkGlobalFee(ctx sdk.Context, tx sdk.Tx) error { params := app.GlobalFeeKeeper.GetParams(ctx) // Check if transaction meets minimum fee requirements if !meetsMinimumFee(tx, params.MinimumGasPrices) { return types.ErrInsufficientFee } return nil }
func calculateRequiredFee(gasUsed uint64, minGasPrices sdk.DecCoins) sdk.Coins { requiredFees := make(sdk.Coins, len(minGasPrices)) for i, gp := range minGasPrices { fee := gp.Amount.MulInt64(int64(gasUsed)).Ceil().TruncateInt() if fee.IsPositive() { requiredFees[i] = sdk.NewCoin(gp.Denom, fee) } } return requiredFees }
const client = await SigningCosmWasmClient.connectWithSigner(rpcUrl, signer); const params = await client.queryContractSmart( "neutron1...", // Global fee module address { params: {} } ); console.log("Minimum gas prices:", params.minimum_gas_prices); console.log("Bypass message types:", params.bypass_min_fee_msg_types);
function calculateMinimumFee(gasEstimate, minGasPrices) { return minGasPrices.map(price => ({ denom: price.denom, amount: Math.ceil(gasEstimate * parseFloat(price.amount)).toString() })); } // Usage const gasEstimate = 200000; const minFee = calculateMinimumFee(gasEstimate, params.minimum_gas_prices);
# Monitor bypass message types in transactions neutrond query txs --events 'message.action=/ibc.core.channel.v1.MsgRecvPacket' \ --page 1 --limit 100
# Check total gas usage for bypass transactions neutrond query block [height] | jq '.block.data.txs[] | select(.body.messages[].type_url | contains("MsgRecvPacket"))'
# Subscribe to parameter change events neutrond query txs --events 'message.action=/gaia.globalfee.v1beta1.MsgUpdateParams'
Error: insufficient fee: got 1000untrn, required 2500untrn
Error: message type not in bypass list
bypass_min_fee_msg_types
Error: total gas usage 1500000 exceeds bypass limit 1000000