Transaction Fees
This section describes fee distribution.
Constants
FEE= 0.03 $TNK base fee.
Operations (excluding TRANSFER and TX)
AddAdmin
Admin, 0
One-time during initialization
0%
n/a (free)
BalanceInitialization
Admin (sender), 0
While initialization flag is enabled
0%
n/a (free)
AppendWhitelist
Admin, FEE
Only if initialization flag is disabled
0%
100% burned (deducted from admin)
AddWriter
Writer candidate, FEE
Always charged
75%
25% burned
RemoveWriter
Writer being removed, FEE
Always charged
75%
25% burned
AdminRecovery
Admin, FEE
Always charged
75%
25% burned
AddIndexer
Admin, FEE
Always charged
0%
100% burned
RemoveIndexer
Admin, FEE
Always charged
0%
100% burned
BanValidator
Admin, FEE
Always charged
0%
100% burned
BootstrapDeployment
Deployment initiator, FEE
Always charged
75%
25% burned
Transfer
Requester, FEE
Always charged
75%
25% burned
TX
Requester, FEE
Always charged
depends on subnet owner (see TX cases)
depends on subnet owner (see TX cases)
Operation details
AddAdmin
Payer: admin (network creator), amount: free.
Effect: admin receives initial balance
1000 $TNKand initial staked balance0.3 $TNK; admin is set as indexer+validator+whitelisted and admin entry is created. Runs exactly once during bootstrap.
AddWriter
Payer: writer candidate, amount:
FEE.Split: validator 75%, burned 25%.
Effect: role set to writer, staking updated, key registered.
RemoveWriter
Payer: writer being removed, amount:
FEE.Split: validator 75%, burned 25%.
Effect: role set to whitelisted, stake released, writer key unregistered.
AdminRecovery
Payer: admin rotating writer key, amount:
FEE.Split: validator 75%, burned 25%.
Effect: admin writer key swapped, indexer entry updated to the new key.
BootstrapDeployment
Payer: deployment initiator, amount:
FEE.Split: validator 75%, burned 25%.
Effect: deployment entry stored for the bootstrap.
Transfer (OperationType.TRANSFER)
Payer: requester (sender).
Fee:
FEE(always charged, in self-transfer only the fee is deducted).Basics:
Amount deducted from sender:
transferAmount + FEE. In self-transfer only the fee is deducted.If the sender lacks full funds for the deduction, the operation is ignored (state unchanged).
Fee split: validator 75%, burned 25%.
Transfer amount to recipient:
Recipient is not a validator: recipient gets
transferAmount(can be 0). A new recipient is initialized as READER with that balance.Recipient is the validator: validator gets
transferAmountplus its fee share (75% ofFEE).Self-transfer: recipient equals sender. Recipient balance is unchanged. Fee still goes 75% to validator, 25% burned.
Subnetwork TX (OperationType.TX)
Payer: requester.
Fee:
FEE.Fee split depends on who deployed the subnet (
bootstrapDeployer):bootstrapDeployer = requester, validator is different:Validator: 50%
Bootstrap deployer: 0% (no discount for owning the subnet)
Burned: 50%
bootstrapDeployer = validator, requester is different:Validator (and deployer): 75% (50% as validator + 25% as deployer)
Burned: 25%
Requester: 0%
bootstrapDeployeris neither requester nor validator:Validator: 50%
Bootstrap deployer: 25%
Burned: 25%
Requester: 0%
The fee is deducted from the requester before distribution. Others receive only the shares above.
Zero-fee operations
ADD_ADMIN(one-time bootstrap, assigns1000 $TNKliquid +0.3 $TNKstaked to admin).BALANCE_INITIALIZATION(sender -> recipient top-up) is free while initialization is enabled.DISABLE_INITIALIZATIONis free, can be used exactly once to turn off balance initialization.AppendWhitelist before initialization is disabled is free (fee appears only after the flag is turned off).
Validator penalties
For a batch with invalid operations or an oversized batch:
penalty = FEE * invalidOperations.The penalty is taken from staked balance, not distributed, and the validator is downgraded to whitelisted. Remaining stake after the penalty returns to the normal balance, so part of the penalty is effectively burned.
Each failed operation in a batch (validation errors, unmet conditions, invalid payload) increases the invalid counter and triggers at least one
FEEworth of penalty.
Note on the bs field in TX
bs field in TXbsidentifies the subnet bootstrap, mapped in MSB to the subnet creator address.A TX is valid only if
bspoints to a registered bootstrap.The subnet owner (address tied to
bs) receives a share of the TX fee only when they are not the requester. If requester or validator is the creator, the creator’s share is folded into their respective percentage as described above.
Last updated