DevelopersSeptember 14, 2026by
EmpoorioChain Core
EmpoorioChain Core

Fees That Stay Low Under Load: EmpoorioChain's Fee Model

Low fees are easy to promise and hard to keep. Every chain is cheap when empty. The question is what happens when the state grows for three years and a bot decides to spam the network. EmpoorioChain's fee model is built around that question, and its strategy is explicitly not to subsidise fees with inflation.

Weight, not gas

A native transaction pays according to its weight, which has two dimensions: reference time (how long it takes to execute on the reference machine) and proof size (how many bytes of state proof it touches). Both are measured by benchmarks per dispatchable and stored in the runtime. Fees = base fee + weight fee + length fee + optional tip, all in DMS, collected by ChargeTransactionPayment.

EVM transactions pay through Frontier's EIP-1559-compatible base fee and dynamic fee, so MetaMask users see exactly the fee model they expect.

Three pillars that keep the curve flat

1. State rent. pallet-state-rent charges accounts that hold storage while inactive and reclaims it. Without something like this, the trie grows monotonically, nodes get more expensive, and the only way to stay solvent is to raise the per-byte fee for everyone. Rent lets the per-byte price stay constant.

2. Account abstraction and paymasters. pallet-account-abstraction and pallet-paymaster allow sponsored, gasless operations for onboarding and for Creator Studio flows. The PaymasterValidator checks the sponsor's policy — account whitelists, per-operation limits, allowed pallets — before a user operation is processed, so sponsorship cannot become a spam vector. Sponsor funds are custodied in the pallet's account, which also removes redundant transfers.

3. Reputation discounts. Through pallet-creator-studio-fees, an account that carries a proof-of-unique-humanity or reputation credential (issued through KryptoOS, verified without revealing identity) can receive up to a 50 % fee discount. Humans get cheaper; bots do not.

Batch and lazy minting

For creators, two patterns cut costs further. mint_track_batch consolidates many NFT mints into one physical extrinsic, amortising the signature and inclusion overhead. claim_lazy_track lets a creator sign a metadata commitment off chain; the on-chain mint and its storage deposit happen only when the first buyer claims — moving the cost to the point of sale.

What it costs on the testnet

Measured with scripts/fee_snapshot.py against the testnet and recorded in artifacts/fees/testnet/fee_snapshot.json:

OperationExtrinsicFee (DMS)
DMS transferbalances.transfer_allow_death0.000025
Mint one NFTmusicNft.mint_track0.000075
Batch mint, 10 itemsmusicNft.mint_track_batch0.000280
Batch mint, 100 itemsmusicNft.mint_track_batch0.002200
Lazy-mint claimmusicNft.claim_lazy_track0.000110
Create collectionuniques.create0.000120
DEX swapdex.swap0.000180
Lending depositlending.deposit0.000150
Blob submit, 1 MBblobStorage.submit_blob0.000095
AI inference result (ZK-verified)aiServing.submit_inference_result0.003500

At the public-sale price of $0.65 per DMS, a transfer is a few thousandths of a cent and a ZK-verified AI inference is about a quarter of a cent. These are testnet snapshots with two validators and light load; they show the shape of the model, and they will be re-measured under the mixed-load benchmark before anything is called a mainnet number.

The circuit breaker

What stops a spam attack from making the chain unusable is not a special mechanism but the combination above: fees scale with the weight actually consumed; state rent makes holding junk expensive; paymasters cannot be drained past their policy; and block weight limits bound what any single block can absorb. The elasticity is in the weight system itself — an expensive operation pays for what it costs, and an attacker paying real DMS for real weight is just a customer.

Based on FEE_MODEL_AND_LOW_COST_STRATEGY.md. Fees are testnet measurements; the DMS price used for conversion is the public-sale price in TOKENOMICS.json.

Share this article