Skip to content

Siafunds

Siafunds are a secondary asset on the Sia network that pay dividends proportional to the value of File Contracts. A tax of 4% is applied to each contract, and the accumulated revenue of this tax is tracked in the State. Each unspent siafund output is entitled to a share of this revenue. The SEC ruled in 2019 that siafunds are a security.

The dividend for a given siafund output is equal to the tax revenue accumulated during the output's existence, multiplied by the fraction of the total siafund supply controlled by the output. For example, say you receive an output of 100 siafunds, representing 1% of the total supply. After a month, you decide to "cash out" your dividend earnings by sending the output to yourself. In that month, 100 KS of contracts have been formed, resulting in 4 KS of tax revenue; your dividend is thus 40 SC.

To calculate the tax revenue within a given time period, some bookkeeping is required. When a siafund output is first created, the total tax revenue is recorded within it. Later, when the output is spent, we subtract this value from the new total. This tells us how much revenue has accumulated since the output was created.

In v1

The tax rate in v1 was 3.9%, and was calculated on the contract's Payout field rather than on the sum of the contract outputs. The Payout field, in turn, was required to equal the sum of the outputs plus the tax; in other words, Payout = outputSum + Payout*0.039. Thus, with a bit of algebra, one would expect that the Payout could be directly calculated as outputSum / 0.961. Unfortunately, one would be wrong. The v1 contract tax was rounded down to the nearest multiple of 10,000—the total siafund supply. As rounding destroys information and is thus non-invertible, the equation for v1 contract payouts does not admit an algebraic solution. One was instead forced to make an initial guess, calculate the resulting tax, and then refine the guess accordingly. Needless to say, this scheme was not preserved in v2.

It may seem odd that the tax was rounded down. Rounding was introduced perhaps as a way of ensuring that no siacoins were destroyed. Without pre-rounding, the rounding occurs later, when the dividend outputs are created. Thus, value that could have been kept by the renter is instead destroyed. Here we may make several comments. First, the value destroyed is necessarily no greater than 10,000 H—a vanishingly small sum. If every contract in Sia's history destroyed 10,000 H, the total lost value would be less than half of one siacoin. Wait, I did my math wrong: less than half of one billionth of one millionth of one siacoin. Second, renters who deeply care about this 10,000 H can adjust their contract values such that the tax is an even multiple of 10,000. Third, destroying SC is perfectly acceptable; there is no law that says consensus rules may not destroy SC. Fourth, rounding down is unfair: it means that two 25,000 H taxes pay less than one 50,000 H tax. For these reasons, v2 does not bother rounding down.

The accumulated tax revenue was referred to as the "siafund pool" in v1. This is a misnomer: it does not contain siafunds, and dividends are not paid out by "withdrawing" value from it. Rather, its value monotonically increases, allowing us to calculate the revenue within any given period as the delta of the beginning and ending values. Conceptually, you can model the accumulated revenue as a pool, but this concept does not match the way dividends are actually implemented in code.