Sompi
The base unit of Kaspa is the sompi (named for Yonatan Sompolinsky). All protocol-level amounts - transaction outputs, fees, RPC values, SDK APIs - are integers denominated in sompi.
1 KAS = 100,000,000 sompi (10^8) | Amount | In KAS |
|---|---|
| 1 sompi | 0.00000001 KAS |
| 100 sompi | 0.000001 KAS |
| 10,000 sompi | 0.0001 KAS |
| 1,000,000 sompi | 0.01 KAS |
| 100,000,000 sompi | 1 KAS |
| 10,000,000,000 sompi | 100 KAS |
“KAS” is purely a display convention - the protocol never deals in fractional values. When writing software against a node or SDK, always work in sompi and convert to KAS only at the UI edge.
Mass (grams)
Transaction size/cost is measured in mass, denominated in grams. A transaction is constrained along three mass dimensions - compute mass, storage mass, and transient mass - with blocks capped at 500,000 grams per dimension (the transient dimension was raised to 1,000,000 in the June 2026 Toccata hardfork). See Network Parameters.
Fees
Fees are paid implicitly, UTXO-style: fee = sum(inputs) - sum(outputs), in sompi.
The expected fee for a transaction is its fee rate × mass, where fee rate is in sompi per gram. Nodes suggest fee rate buckets (priority / normal / low) via the GetFeeEstimate RPC. The minimum relay fee rate is 100 sompi per gram (raised from 1 at the Toccata hardfork), so a typical ~2,000-3,000 gram payment transaction costs a few hundred thousand sompi (~0.002-0.003 KAS) - still a tiny fraction of a cent.
Which mass? Not the sum of the three. The mempool normalizes the dimensions against each other and prices the largest one, so your fee is set by your worst dimension and the other two are free. A transaction that is heavy on storage mass but light on compute pays for the storage; padding it with extra compute up to that same level costs nothing more. The relay-fee floor above is narrower still - it applies only to compute and transient mass, on the grounds that storage growth is already bounded by the block limits.