Gas and transaction fees

Transactions on the IOV Name Service require the payment of a fee, at least of an anti-spam fee. Here is how it works.

Unit

In the IOV Name Service and all Cosmos SDK based applications, the unit of fees is the micro token. The token of the IOV Name Service is the IOV token, the unit is a micro IOV = 1 uIOV. The testnet of the IOV Name Service uses the VOI token and the uvoi is the unit.

A micro token is 0.000001 token, or also 1e-6 token.

Gas

The IOV Name Service is built using Cosmos SDK. It inherits the gas design from this SDK, the documentation can be found here: https://docs.cosmos.network/master/basics/gas-fees.html. The gas fees are to be thought of as anti-spam fees: they are designed to be very small to avoid spamming the IOV Name Service with irrelevant transactions.

It means that:

  1. The gas parameter is calculated dynamically by the Cosmos SDK. It depends on the transaction size and other network parameters.

  2. Each validator on the IOV Name Service chain can set their own gas-prices.

  3. The user sets the --fees flag in the command to declare how much they are willing to spend for the gas fees. This amount needs to be equal or more than the required gas fees = gas * gas-prices.

For exemple, by default in the IOV Name Service, gas-prices = 10uvoi which makes a gas-fees =~70k uvoi = ~0.07 voi for a send transaction.

If the specified --fees is not enough, the transaction is rejected.

Transaction fees

In addition to gas fees, there are transaction fees for the operations of the IOV Name Service. These fees are typically more important, like the fee to purchase a domain for example.

The user does NOT need to specify this transaction fee in the command. If the user has enough IOV token in their account for the transaction, the token are taken and the transaction is processed.

The transaction fees are taken AUTOMATICALLY on top of the gas fees. The user is advised to check with the command below the current blockchain fee parameters before submitting a transaction.

The transaction fees can be seen by the command configuration get-fees

iovnscli query configuration get-fees | jq
{
"fees": {
"fee_coin_denom": "uvoi",
"fee_coin_price": "0.000000100000000000",
"fee_default": "0.500000000000000000",
"register_account_closed": "0.500000000000000000",
"register_account_open": "0.500000000000000000",
"transfer_account_closed": "0.500000000000000000",
"transfer_account_open": "10.000000000000000000",
"replace_account_targets": "1.000000000000000000",
"add_account_certificate": "50.000000000000000000",
"del_account_certificate": "10.000000000000000000",
"set_account_metadata": "15.000000000000000000",
"register_domain_1": "1000.000000000000000000",
"register_domain_2": "500.000000000000000000",
"register_domain_3": "200.000000000000000000",
"register_domain_4": "100.000000000000000000",
"register_domain_5": "50.000000000000000000",
"register_domain_default": "25.000000000000000000",
"register_open_domain_multiplier": "10.000000000000000000",
"transfer_domain_closed": "12.500000000000000000",
"transfer_domain_open": "125.000000000000000000",
"renew_domain_open": "12345.000000000000000000"
}
}

The transaction fees that is taken with a transaction is equal to the transaction fee calculated here divided by fee_coin_price.

The way to think about it is:

  • the fee_coin_denomis the unit of the transaction fees. It is the uvoi

  • the transaction fees of the services are represented in "stable" value. The intent is that the fee of a transaction is stable vs a stable coin and might fluctuate in IOV token as the IOV value evolves.

  • the fee_coin_price is the value of a uIOV (or uVOI on the testnet) vs the stable coin.

For exemple, considering EUR as a reference stable coin, register_domain_default=25 (EUR), fee_coin_price= 0.000 000 1 (EUR) means that 1uIOV = 0.000 000 1 EUR (or 1 IOV = 0.1 EUR), and the transaction fee is 25/0.000 000 1 = 250 000 000 uIOV.

Where do fees go?

The IOV Name Service is a fully decentralised name service. The fees paid to the service are distributed to the stakeholders of the service.

The IOV Name Service is built on Cosmos SDK and uses the Cosmos staking module. All details about staking commands are described here: https://docs.cosmos.network/master/modules/staking/‚Äč

All the gas fees and transactions fees go to the same reward pool which is then distributed to all stakers of IOV Token in proportion of their stake in IOV Token.