fip | title | status | type | author | created | updated |
---|---|---|---|---|---|---|
20 |
FIO Co-op |
Deferred |
Functionality |
David Gold <[email protected]>, Pawel Mastalerz <[email protected]> |
2020-10-27 |
2020-12-11 |
This FIP proposes FIO Co-op, an on-chain program for creating economic incentives for FIO end-users to adopt the protocol early.
Fee distribution modifications:
Recipient | Before FIP | After FIP |
---|---|---|
Block Producers | 85% | 75% |
FIOP Holders | 0% | 10% |
Token supply modifications:
Token group | Before FIP | After FIP |
---|---|---|
FIOP Holders Bounty | 0 | 10,000,000 |
BP Reserves | 10,000,000 | 30,000,000 |
FIO Address Giveaways | 125,000,000 | 95,000,000 |
Total token supply increase/(decerase): 0
Modified actions:
Contract | Action | Endpoint | Description |
---|---|---|---|
fio.address | regaddress | register_fio_address | Added logic to compute and grant FIOPs. |
fio.address | regdomain | register_fio_domain | Added logic to compute and grant FIOPs. |
fio.address | renewaddress | renew_fio_address | Added logic to grant FIOPs to FIO Addresses registered before program launch. |
fio.address | burnexpired | burn_expired | Added logic to update Total FIOPs in Circulation when NFT is burned. |
* | Any action which collects a fee | Modify fee collection logic to allocate FIOP Rewards to pool |
New actions:
Contract | Action | Endpoint | Description |
---|---|---|---|
fio.address | regaddressnf | register_fio_address_nofiops | Registers FIO Address, but does not grant FIOPs. |
fio.treasury | fiopclaim | pay_fiop_rewards | Computes FIOP rewards and processes FIOP payments. |
The FIO Protocol is subject to the network effect, meaning the more participants adopt it, the more useful it is to all.
To accelerate the adoption, on-chain incentives for integrators in the form of TPID rewards and New User Bounties, as well as for block producers in the form of rewards and reserves are built into the FIO Chain.
Currently, there are no incentives for end-users. When registered early, a FIO Address has limited use until more participants integrate it into their products and more end-users join the network. Yet early adopters add significant value to the network by helping it grow and therefore should be incentivized.
Key objective for FIO Co-op:
- Encourage early adoption of the FIO Protocol by end-users
- Cause users to seek FIO-integrated applications
- Entice users to spread the word about FIO to others
Register a FIO Address/Domain and you get a lifetime residual portion of all the future income to the FIO Protocol. The earlier you do so, the greater your share will be. If you register now, you'll get an X% greater allocation than a year from now.
FIO Co-op is an on-chain incentive program in which end-users who register FIO Address or FIO Domain are granted FIO Points (FIOPs). The earlier the registration is performed, the higher the amount of FIOPs granted. Any time a fee is paid on FIO Chain, a percentage is allocated to holders of FIOPs pro-rata.
FIOPs are granted when a FIO Address or FIO Domain is registered and are permanently attached to the Non-fungible Token (NFT) being created, irrespective of which FIO Public Key is indicated as the owner of the NFT. FIOPs are not granted on renewals or bundle transaction purchases or any other activity associated with that NFT.
Optionally, the account paying for the FIO Address registration may choose not to grant FIOPs to the NFT being created. This may be used by any entity which pays for FIO Addresses for its users and does not want to increase a risk of a sybil attack.
Amount of FIOPs (P) granted is determined by this formula:
P = (F/f)(1 - r)x
where:
- f - Current register_fio_address fee
- F - Fee paid for FIO Address or FIO Domain Registration
- r - Percent decay per second: 0.000002%
- x - Seconds since program launch
FIO Addresses and FIO Domains which were registered before the program launch have their FIOPs computed as if they were registered zero seconds since program launch. The FIOPs are further increased by:
When registered | Increase |
---|---|
At Mainnet | 20% |
After Mainnet but before program start | 15% |
FIO Address registered before program launch do not have their FIOPs granted until the FIO Address is renewed after the program starts. Meaning a FIO Address registered before program launched does not earn FIOP rewards until after it has been renewed.
FIO Domains registered before program launch have their FIOPs granted immediately after the program starts.
FIOPs are only granted in the first 3 years after program launch. After that time FIOP Holders continue to receive the FIOP Rewards, but no new FIOPs are granted.
- FIOPs never expire and are permanently attached to the NFT.
- When the FIO Address/Domain NFT is burned, attached FIOPs are permanently destroyed.
- FIOPs cannot be transferred. However, when the FIO Address/Domain NFT is transferred to a new owner, attached FIOPs get transferred as well.
On-chain fee distribution is modified as follows:
Recipient | Share before FIP | Share after FIP |
---|---|---|
Block Producers | 85% | 75% |
Entity facilitating transaction (TPID) or, if not provided, Block Producers. | 10% | 10% |
Foundation | 5% | 5% |
FIOP Holders | 0% | 10% |
FIOP Rewards accumulate in the FIOP Rewards pool for a period of 30 days before they become eligible for distribution. If a distribution to a single NFT is less that register_fio_address fee, the amount is not transferred, but rather attached to the NFT and is added to the next distribution.
To further incentivize end users, FIOP Reward pool is increased before distribution by minting new tokens akin to New User Bounties. New tokens minted are capped at 10,000,000 and increase the FIOP Rewards based on the following schedule:
Time since program launch | Increase in FIOP Rewards |
---|---|
30 days | 100% |
60 days | 95% |
90 days | 90% |
120 days | 85% |
150 days | 80% |
180 days | 75% |
210 days | 70% |
240 days | 65% |
270 days | 60% |
300 days | 55% |
330 days | 50% |
360 days | 45% |
390 days | 40% |
420 days | 35% |
450 days | 30% |
480 days | 25% |
510 days | 20% |
540 days | 15% |
570 days | 10% |
600 days | 5% |
In order to keep the cap on tokens minted at 1,000,000,000, the Foundation is reducing the FIO Address Giveaways pool from 125,000,000 to 115,000,000 FIO Tokens.
In order to mitigate the impact of reduced Block Producer rewards and to extend the time when those rewards are guaranteed, the Block Producer Reserves pool is increased from 10,000,000 to 30,000,000 FIO Tokens.
In order to keep the cap on tokens minted at 1,000,000,000, the Foundation is further reducing the FIO Address Giveaways pool from 115,000,000 to 95,000,000 FIO Tokens.
Added logic to compute and grant FIOPs.
No changes
- If program sill active, FIOPs are computed based on FIOP grants and are granted to the NFT and Total FIOPs in Circulation is updated.
No changes
No changes
Added logic to compute and grant FIOPs.
No changes
- If program sill active, FIOPs are computed based on FIOP grants and are granted to the NFT and Total FIOPs in Circulation is updated.
No changes
No changes
Added logic to grant FIOPs to FIO Addresses registered before program launch.
No changes
- If NFT has no granted FIOPs, program is sill active and FIOPs were computed, computed FIOPs are granted to the NFT.
No changes
No changes
Added logic to update Total FIOPs in Circulation when NFT is burned.
No changes
- Reduce Total FIOPs in Circulation by amount attached to burned NFTs.
No changes
No changes
Modify fee collection logic to allocate FIOP Rewards to pool:
- Determine if pool is current, meaning time from pool creation is less than Distribution period
- If pool is current, add FIOP Holders% of fee being collected to the pool. Entire fee continues to be transferred to treasury.
- If pool is not current:
- Attach Total FIOP Circulating Supply to the pool
- Create a new pool
Registers FIO Address, but does not grant FIOPs.
Same as regaddress.
Same as regaddress except that FIOPs are not computed or granted to the NFT.
Same as regaddress.
Same as regaddress.
Computes FIOP rewards and processes FIOP payments.
None
- Identify first unpaid FIOP Reward pool.
- If none return 400:No work to perform.
- Mint new FIOP Holders Bounty tokens and increase the Pool FIO amount at close.
- Identify first NFT (FIO Address/Domain) which has not been paid for that pool. NFT is eligible to be paid for that pool if it exists (even if after expiration and before burning) was created before that reward pool was started.
- Compute FIOP Reward.
- FIOP Reward is: NFT's FIOP balance / circulating FIOPs at pool close * Pool FIO amount at close.
- If FIOP carry-over is present, add it to FIOP Reward.
- Track FIO paid from pool.
- If FIOP Reward >= register_fio_address amount, transfer FIO tokens without fee to account which owns the NFT.
- Annotate NFT as paid for current pool.
- If FIOP Reward < register_fio_address amount, incerement FIOP carry-over and do not transfer FIO tokens.
- Continue processing until as many NFTs as can safely be processed in single transaction.
- Once all NFTs for a specific pool have been processed and FIO paid from pool is > 0 (this can happen when NFTs get burned or if pre-launch FIO Addresses have not yet been renewed), add that amount to the current open pool.
Error condition | Trigger | Type | fields:name | fields:value | Error message |
---|---|---|---|---|---|
No work to perform | No work to perform | 400 | "No work to perform" |
Parameter | Format | Definition |
---|---|---|
status | String | OK if successful |
nfts_paid | Int | Number of NFTs which were paid |
{
"status": "OK",
"nfts_paid": 100
}
When designing an end-user incentive program, the following was considered:
- Must be sybil attack proof
- Should provide greater economic benefits the early the user participates
- Payouts should be based on the future economic inputs to the FIO Protocol
- Should not add friction to the process of adopting the FIO Protocol
- Should enable permanent residual income as long as the user continues to participate
The following features were considered, but were not made part of this FIP as it was determined that they would add too much complexity at this stage:
- Continue to award FIOPs after the initial grant based on on-chain activity
- Award FIOPs for locking tokens.
- The following variables should be defined in contract:
- Percent decay per second
- Program duration
- Distribution period
- FIOP Holders Bounty cap
- Deployment dependency:
- Foundation will transfer 25,000,000 FIO Tokens from FIO Address Giveaways to eosio for the purpose of retiring (burning).
- Deployment considerations:
- 25,000,000 FIO Tokens held by eosio are retired.
- Allocate FIOPs to addresses registered before program launch.
- For FIO Addresses, FIOPs are computed and recorded but not granted. Those FIOPs are reflected in Total FIOPs in Circulation.
- Create first pool as part of deployment.
No impact on existing functionality.
May be considered in the future:
- Continue to award FIOPs after the initial grant based on on-chain activity
- Award FIOPs for locking tokens.
https://fioprotocol.atlassian.net/wiki/spaces/WP/pages/16252931/FIO+Co-op