gm PUNKs, 0xDEADBEEF here ☕️
I want to extend a huge thank you to everyone who has supported us throughout this journey to launching mainnet and to everyone who has joined us along to way as we grow.
In this post, I wanted to introduce the protocol — we will breakdown the following:
- What a synthetics protocol is
- How Fabric works
- Initial synthetics and supported collateral
- What fUSD is
- Minting fUSD and the risks involved
- What a C-ratio is, what debt shares are and how they relate to debt
- Reward distribution (including what a reward epoch is)
- Fees and fee distribution
- Audit progress
- What’s next
A worked example is available at the bottom of this post.
What is a synthetics protocol?
A synthetics protocol is a decentralized program for issuing and trading synthetic assets.
A synthetic asset (or synth) is a native token that tracks an external asset with a supply controlled by the protocol.
Each synthetic is underpinned by an on-chain oracle. For example, fBTC tracks the price of Bitcoin in USD, fXAU tracks the price of Gold in USD, etc. Within the protocol, each synthetic is valued at the price provided by the oracle.
How does Fabric work?
Fabric’s core feature — the synthetics protocol (built on Solana) — requires users to deposit FAB in order to mint fUSD at a given collateral ratio. By minting fUSD, users enter the global debt pool which bears a risk.
The collateral ratio for FAB at launch is 1000% — meaning users are required to deposit $10 for every $1 of fUSD minted.
Minted fUSD can be traded for other synthetics, staked in our fUSD-3Pool for rewards, or simply held.
So, we can divide the protocol into the following functionalities:
- Users can deposit their FAB in the protocol.
- Users can mint fUSD, a synthetic censorship-resistant US dollar.
- Users can swap one synthetic for another synthetic at oracle price with virtually unlimited liquidity and 0 slippage.
- Users can earn rewards in FAB for minting fUSD and participating in the global debt pool.
- Users can earn rewards in FAB and MER by staking fUSD in our fUSD-3Pool.
- Users can run a liquidator to ensure network health.
Collateral and synthetics supported at launch
At launch, the protocol only supports native FAB tokens as collateral and the following synthetics:
- fUSD — US dollar synthetic
- fBTC — Bitcoin synthetic
- fXAU — Gold synthetic
- fGBP — British Pound synthetic, a 1st on Solana
- fEUR — Euro, another 1st on Solana
- fJPY — Japanese Yen, another 1st on Solana
To learn more about how new synthetics and collateral can be added the protocol, please read the Governance section below.
- fUSD is a censorship-resistant, decentralized stablecoin.
- fUSD can only be minted with overcollateralized FAB within the protocol.
- fUSD is always valued at $1 within the protocol.
- fUSD can be swapped to any other synthetic with virtually unlimited liquidity and 0% slippage using Fabric.
- fUSD, along with USDC or USDT, can be staked in our fUSD-3Pool in collaboration with Mercurial to earn rewards. Outside of the protocol, the price of fUSD is derived from this liquidity pool.
- fUSD can be swapped using Jupiter’s aggregator.
- fUSD is a regular SPL token so can be transferred or swapped like any other SPL token.
Minting fUSD and the risks involved
Once a user has staked FAB as collateral, they can mint fUSD based on the amount of collateral staked. A user has a maximum allowed amount to mint — we will call this the “maximum spend”— this is equal to the sum of the user’s collateral value in USD divided by the collateral ratio.
Example: If a user has 1000 USD of FAB staked with a 1000% collateral ratio (i.e. 10), the user will have (1000 / 10) = 100 USD max spend.
Each user incurs a proportion of global “debt” when they mint fUSD, this proportion is represented as “shares of total debt” — we call this “joining the debt pool”. This comes with a risk as the global debt can increase, meaning you can owe more than you minted.
We’ll walk through a worked example in this post explaining the relationship between minting, debt, and debt shares — see the below sections and worked example at the end.
Collateral ratio (c-ratio)
Let’s start by defining:
- User’s c-ratio — the ratio of collateral to debt for a specific user
- Collateral’s c-ratio — the ratio of collateral required to mint 1 fUSD
- Protocol’s c-ratio — the ratio of collateral to debt for the entire protocol
FAB is the only collateral supported and it has a collateral ratio of 1000%. As mentioned earlier, this means for every $1 of fUSD minted, there is $10 of FAB collateralizing it when minted.
Why do I say when minted? As the price fluctuates for collateral and synthetics, so does the collateral ratio for each user and the entire protocol. This means after minting, your collateral ratio can change.
Now we understand what the collateral ratio is, let’s dig into why and how it changes.
Debt and debt shares
Let’s define the global debt of the protocol as the sum of every synthetic’s market cap.
Each user has debt shares associated with their account once they have minted fUSD. Let’s look at the effect of minting and burning on debt shares:
- When a user mints 1 fUSD, their user account is updated to increase by 1000 debt shares.
- When a user burns 1 fUSD, their user account is updated to decrease by 1000 debt shares.
A user’s debt can be calculated as:
(user debt shares / total number of debt shares in protocol) * global debt
NOTE: this is different from what people may think where user debt is simply the sum of their own synths.
To see debt and debt shares in action, see the worked example at the bottom of this post.
Epochs and rewards
An epoch is a period of time, currently defined as 216,000 slots which, in optimal conditions, of~400ms confirmation time, is roughly 24 hours. If the network is running any slower than 100%, the epoch time duration will be longer — which right now is typical. Epochs are lasting closer to 36–40 hours.
To be eligible for rewards, a user must maintain their debt shares for an entire epoch at least before earning rewards. This means if a user mints in Epoch 1, they earn rewards in Epoch 2 but cannot claim them until Epoch 3 begins.
The protocol has been designed with gentle, partial liquidations.
Once a user’s collateral ratio is below the minimum (currently 1000%), there is roughly a 15-minute window before a partial liquidation of 10% of the total debt takes place.
The liquidator must burn fUSD in order to reduce the user’s collateral ratio. When this occurs, the user’s collateral is liquidated and transferred to the liquidator.
The user is liquidated 12% of their collateral where 11% goes to the liquidator (10% based on fUSD burnt + 1% fee) and 1% of the collateral is transferred to a protocol-owned account — how these fees are used can be voted on by the DAO.
Our liquidator program, along with our SDK, will be officially released later this week — keep any eye out 👀
The protocol is governed and ultimately controlled by the Fabric DAO. This includes but is not limited to the following actions:
- Adding a new synthetic
- Adding a new supported collateral
- Updating the swap fee for a collateral
- Updating the base swap fee
- Updating the duration of an epoch (reward cycle)
- Updating the number of rewards emitted per epoch
- Updating the duration of a liquidation cycle
- Updating the grace period before liquidations take place
- Updating the liquidation rate (% of debt liquidated each liquidation cycle)
- Updating an asset’s price feed or oracle type (i.e. switch between Pyth and Switchboard oracles)
- Updating the liquidation fee paid to the protocol
- Updating the liquidation fee paid to the liquidator
- Updating the maximum supply for a synthetic
- Withdrawing accrued fees to DAO
- Halting and unhalting the protocol
To learn how to vote in the DAO, see https://docs.fsynth.io/governance.
Proposal ideas must be discussed in the Discord #governance-discussion channel before being made into a proposal.
Fees and fee distribution
The protocol only deducts a fee when a user swaps from one synthetic to another. Depositing, minting, burning, and withdrawing have NO fee.
The fee for a single swap/trade is made of three components:
- Base fee
- Synthetic A fee
- Synthetic B fee
where the total fee = (base fee + synthetic A fee + synthetic B fee).
The base fee is a standard fee applied to all swaps set at the protocol level. This is set to 0.01% at launch.
Each synthetic has its own fee component — this means if I trade fUSD to fBTC where fUSD has a fee component of 0.05% and fBTC has a fee component of 0.1%, the total fee charged is 0.01%+ 0.05% + 0.1% = 0.16%.
You can see what the fees are set for each synthetic in our documentation space at https://docs.fsynth.io/synthetics-protocol/supported-assets-and-fees
We contracted Kudelski Security, a top-tier cyber security firm, to audit the protocol. There were no critical issues found and all reported issues were rectified.
Kudelski is in the process of quality assurance and handover of the final report. Once the final report is received, we will publish it and update the message shown in the dApp.
While we’ve just started a long journey, we’re extremely excited about our upcoming updates and features.
We are working on a revamped dApp UI based on community feedback throughout testing. We are also working on a trader-focussed platform (think Coinbase Pro-esque) aimed primarily at users who wish to trade (not stake) on the protocol.
The next iteration of the protocol, v2, will include:
- Support for shorting of synthetics
- Limit order support
- Trade history support
- Chainlink oracle support
- Swap fee discount for FAB holders
To learn more about what we have planned, see our roadmap!
I also want to thank the Fabric team and every single member of the community that has ever stood by us ❤️
Synthetics dApp: https://app.fsynth.io/
SDK (easter egg 😉): https://www.npmjs.com/package/@fabric-foundation/sdk
- 1 fUSD = 1 debt share.
- fUSD supply = $1000.
- No other synths in supply.
- The collateral price is constant.
- User 1 mints $10 of fUSD:
— There is now $1010 of synths in total = $1010 global debt
— User 1 is issued 10 debt shares
— There is now 1010 total debt shares
— User 1’s debt is 10/1010 of global debt = 10/1010 * 1010 = $10
Sticking with the assumption fUSD is the only synthetic in supply, the value of all synthetics is static and the global debt is static.
2. User 1 swaps their $10 of fUSD to fBTC, they still have $10 of synths — there is no change in the value of all synthetics or in the global debt.
3. Now, let’s assume the value of Bitcoin goes up 10%:
— User 1 now has $11 of fBTC
— There is now $1011 of synths in total (global debt)
— User 1 owes 10/1010 of global debt = 10/1010 * 1011 = $10.009901
— User 1 could convert $10.009901 of fBTC to fUSD and burn off all their debt, profiting roughly $0.990099 in fUSD
4. Now let’s also assume another user, User 2, had $10 of fUSD before User 1 minted and held onto it:
— User 2 still has $10 of fUSD after User 1 swaps
— User 2 owes 10/1010 of global debt = 10/1010 * 1011 = $10.009901
— User 2 needs to buy and burn $0.009901 of fUSD to reduce their owed debt back to the initial $10 they owed — to be clear, User 2 only minted 10 fUSD but they owe $10.009901 of debt — this is the main risk when staking and minting fUSD.
This should give an idea of how changes in collateral and global debt can affect your own debt owed and collateral ratio.