The Firechain Network is a shared resource. It is a public good that is available to all users. In order to ensure that the network is available to all users, Firechain uses a dynamic resource sharing mechanism called Heat. It's a measure of the amount of demand that an account has placed on the network recently. Accounts generate heat when they interact with the network, and that heat dissipates over time automatically. The easiest way to think about Heat is as a form of congestion control which ensures that the network remains useful to the most inclusive group of users possible by way of limiting the load that any one account can put on the network.
Most blockchains require accounts to pay some sort of fee in order to transact over the network, primarily to prevent spam and misuse of the network's resources. Firechain does not use transaction fees. Instead, we developed the concept of heat which enables the network to operate without economic barriers that can be untenable for a large percentage of the population.
To obtain heat capacity, you can:
Firechain isn't a PoW network, and PoW isn't always an option (i.e. there are limits on how much supplementary heat can be produced via PoW within a given time period, both at the account level and for the network as a whole). It's probably fine if you only intend to send one or two transactions here or there. However, it's recommended to stake rather than rely on PoW—especially if you plan to use the network on a regular basis.
The table below shows the heat consumption of typical actions. You can use this to get a handle on how much heat capacity would be needed for the type of activity you expect to perform.
You'll see us refer to heat in two ways:
Transaction Type | Scovilles | Heat Units (H) | Stake Needed |
---|---|---|---|
Simple asset transfer (no data) | 21000 | 1 | 134 |
Receive a transaction (no response) | 21000 | 1 | 134 |
Deploy a contract | 31000 | 1.4762 | 267 |
New validator registration | 168000 | 8 | 1067 |
Change validator registration | 168000 | 8 | 1067 |
Unregister validator | 126000 | 6 | 534 |
Withdraw pending rewards | 147000 | 7 | 934 |
New governance vote | 84000 | 4 | 534 |
Retract governance vote | 52500 | 2.5 | 400 |
Stake | 105000 | 5 | 667 |
Stake (w/ callback) | 115500 | 5.5 | 800 |
Unstake | 105000 | 5 | 667 |
Unstake (w/ callback) | 115500 | 5.5 | 800 |
Create a new token | 189000 | 9 | 1200 |
Change token owner | 136500 | 6.5 | 934 |
Change token type | 115500 | 5.5 | 800 |
Mint tokens | 126000 | 6 | 800 |
Burn tokens | 115500 | 5.5 | 800 |
Query token (on-chain) | 31500 | 1.5 | 267 |
Heat consumption can be calculated using the following formulas:
is the amount of that an account can use in one second
is amount of that an account can use in 1 epoch (75 global blocks)
An account's heat capacity depends on and . For example, if Alice's account earns via staking and she hasn't sent any transactions in the last 74 blocks, she'd have of usable heat capacity.
However, the usable heat capacity also accounts for any added value. Extending the above example, if Alice provides a PoW solution that grants , she'd have of usable heat capacity.
For all transactions, a global maximum of applies, which means any transaction that would use more than will automatically fail.
For reference, here's a mapping table for determining heat from or :
or | Scovilles | Stake Required (w/o PoW) | PoW Required (w/o stake) | ||
---|---|---|---|---|---|
0.0 | 0 | 0 | 0 | 0 | 0 |
280 | 1/75 | 1 | 134 | 894654 | |
560 | 2/75 | 2 | 267 | 1789307 | |
840 | 3/75 | 3 | 400 | 2683961 | |
1120 | 4/75 | 4 | 534 | 3578615 | |
1400 | 5/75 | 5 | 667 | 4473270 | |
2800 | 10/75 | 10 | 1334 | 8946557 | |
4200 | 15/75 | 15 | 2000 | 13419879 | |
5600 | 20/75 | 20 | 2667 | 17893253 | |
7000 | 25/75 | 25 | 3333 | 22366698 | |
8400 | 30/75 | 30 | 4000 | 26840230 | |
9800 | 35/75 | 35 | 4666 | 31313868 | |
11200 | 40/75 | 40 | 5333 | 35787628 | |
12600 | 45/75 | 45 | 5999 | 40261529 | |
14000 | 50/75 | 50 | 6666 | 44735587 | |
15400 | 55/75 | 55 | 7333 | 49209821 | |
16800 | 60/75 | 60 | 7999 | 53684248 | |
18200 | 65/75 | 65 | 8666 | 58158886 | |
19600 | 70/75 | 70 | 9333 | 62633751 | |
19880 | 71/75 | 71 | 9466 | 63528753 | |
20160 | 72/75 | 72 | 9599 | 64423765 | |
20440 | 73/75 | 73 | 9733 | 65318787 | |
20720 | 74/75 | 74 | 9866 | 66213820 | |
21000 | 1 | 75 | 10000 | 67108863 | |
42000 | 2 | 150 | 20007 | 134276984 | |
63000 | 3 | 225 | 30033 | 201563940 | |
84000 | 4 | 300 | 40085 | 269029937 | |
105000 | 5 | 375 | 50173 | 336736144 | |
210000 | 10 | 750 | 101486 | 681123015 | |
315000 | 15 | 1125 | 155241 | 1041908585 | |
420000 | 20 | 1500 | 213135 | 1430461202 | |
525000 | 25 | 1875 | 277654 | 1863490703 | |
630000 | 30 | 2250 | 352969 | 2368965656 | |
735000 | 35 | 2625 | 447279 | 3001933774 | |
840000 | 40 | 3000 | 581368 | 3901881752 | |
861000 | 41 | 3075 | 617561 | 4144793358 | |
882000 | 42 | 3150 | 659220 | 4424389078 | |
903000 | 43 | 3225 | 708510 | 4755203412 | |
924000 | 44 | 3300 | 769198 | 5162514130 | |
945000 | 45 | 3375 | 848763 | 5696519539 | |
966000 | 46 | 3450 | 965808 | 6482075769 | |
987000 | 47 | 3525 | 1197189 | 8034995932 |
As shown in the table above, ignoring any PoW additions, a stake of 10,000 FIRE entitles the beneficiary to . The minimum stake (134 FIRE) provides just enough capacity to send one simple transfer per epoch (which is equivalent to ).
In order to avoid extreme network congestion, Firechain implements a mechanism whereby the network's total heat usage over past 74 global blocks is used to estimate the current global load and dynamically adjust heat generation rates. As such, the amount of heat capacity required for any given transaction will scale with the network's load.
The following table outlines the required stake to achieve in various congestion scenarios.
Global | Congestion Factor | Stake |
---|---|---|
0-50 | 1 | 134 |
51 | 0.987079620361328125 | 135 |
52 | 0.97399139404296875 | 137 |
53 | 0.960735321044921875 | 139 |
54 | 0.947307586669921875 | 141 |
55 | 0.93370819091796875 | 143 |
60 | 0.8630218505859375 | 155 |
70 | 0.707286834716796875 | 189 |
80 | 0.53022003173828125 | 252 |
90 | 0.328899383544921875 | 407 |
100 | 0.0999999046325683594 | 1339 |
150 | 0.0869164466857910156 | 1541 |
200 | 0.0740036964416503906 | 1810 |
250 | 0.061260223388671875 | 2187 |
300 | 0.0486836433410644531 | 2752 |
350 | 0.0362710952758789062 | 3694 |
400 | 0.0240213871002197266 | 5578 |
410 | 0.0215908288955688477 | 6206 |
420 | 0.0191664695739746094 | 6991 |
430 | 0.0167486667633056641 | 8000 |
440 | 0.0143371224403381348 | 9346 |
450 | 0.0119318962097167969 | 11230 |
460 | 0.00953304767608642578 | 14056 |
470 | 0.0071404874324798584 | 18766 |
480 | 0.00475424528121948242 | 28185 |
490 | 0.00237426161766052246 | 56438 |
491 | 0.00213660299777984619 | 62716 |
492 | 0.00189901143312454224 | 70562 |
493 | 0.00166147947311401367 | 80650 |
494 | 0.00142402201890945435 | 94099 |
495 | 0.00118660926818847656 | 112926 |
496 | 0.000949271023273468018 | 141160 |
497 | 0.000711996108293533325 | 188203 |
498 | 0.000474780797958374023 | 282235 |
499 | 0.000237626954913139343 | 563908 |
The recommended way to obtain heat capacity is through staking.
If necessary, one can also get a transient heat capacity boost by solving a PoW challenge and including the solution when sending a transaction. For example, the difficulty required for a simple transfer (without any staking) is 0x3FFFFFF
.
For example, given a difficulty = 0x3FFFFFF
then target = 0xFFFFFFC000000000
.
Yes. You can specify one beneficiary per staking transaction, so you would simply send one staking transaction per beneficiary address. It's currently not possible to re-assign an existing stake without first unstaking.
Yes. Doing so will produce several independent staking records, each with their own expiration. Heat capacity is calculated using the total of all beneficial stakes.
Yes. Heat capacity is calculated using the total of all beneficial stakes.
No, it's not possible to retrieve your stake prior to the expiration of the lock-up period.
Yes, but only transiently. It'll automatically restore at a rate of 1/75th per global block. In other words, if you exhausted your entire heat capacity right now, you'd get back to 100% in 75 global blocks. Heat is never permanent.
Yes, receiving a transaction generates 21,000 Scovilles.
Because it's not possible for an account to stake before it exists, you'll either need to complete a PoW solution for one-time heat capacity, or have someone stake for your new account's benefit.
Yes, but doing so will generate more heat than normal. Unless it's urgent, we recommend waiting for the load to go down before sending the transaction. Of course this is entirely discretionary, and you are free to send transactions so long as your heat capacity allows.