Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.stablenet.network/llms.txt

Use this file to discover all available pages before exploring further.

StableNet uses EIP-1559-style fees with two key differences: the base fee goes to validators instead of being burned, and the priority fee is set by governance rather than the market.

Fee components

Every transaction pays two components:
ComponentDescriptionSet by
Base feeMinimum fee determined by network utilizationProtocol
Priority fee (gas tip)Additional fee for validatorsGovValidator contract
For standard (non-authorized) accounts, the maxPriorityFeePerGas you specify in a transaction is overridden by the governance-enforced gas tip. You must include a value at or above the minimum — transactions below the threshold are rejected at the mempool level.

Base fee adjustment

StableNet uses a dual-threshold system instead of Ethereum’s ±12.5% adjustment:
Gas utilizationBase fee change
> 20%+2% per block
6% – 20%unchanged
< 6%−2% per block
The base fee does not decrease below a protocol minimum, and increases are capped to prevent sudden spikes. Unlike Ethereum, the base fee is distributed to validators — not burned. This preserves the stablecoin’s 1:1 fiat backing (burning only happens at point of fiat redemption).

Setting fees in your transaction

For EIP-1559 transactions (type 0x02), set both fields:
const tx = await wallet.sendTransaction({
  to: recipient,
  value: ethers.parseEther("1.0"),
  maxPriorityFeePerGas: ethers.parseUnits("27600", "gwei"),
  maxFeePerGas: ethers.parseUnits("80000", "gwei"),
});
For Foundry cast send and forge script, pass --priority-gas-price 27600000000000.
The governance-enforced minimum priority fee is set by the GovValidator contract. Transactions with maxPriorityFeePerGas below this value are rejected before block inclusion.

Fee delegation (type 0x16)

StableNet adds a fee-delegated transaction type (0x16) where a separate account — the fee payer — covers gas costs. The sender’s account only needs to hold the transfer value.
RolePays
SenderTransfer value only
Fee payergasLimit × gasPrice
Unused gas is refunded to the fee payer, not the sender.

Gas estimation

Use eth_estimateGas to get the gas limit for a transaction before sending. The RPC endpoint returns the gas in units; multiply by the effective gas price to get the total fee in WKRC.
const gasEstimate = await provider.estimateGas({
  to: contractAddress,
  data: encodedCalldata,
});

Developer benefits

  • Predictable fees — base fee moves ±2% per block rather than ±12.5%
  • KRW-denominated costs — fee estimates are stable in fiat terms
  • Fee delegation — sponsor gas for users without changing contract logic