Icewater is a decentralized stablecoin protocol. It does not rely on any external oracle, or peg to any external asset to ensure stability. The current version of Icewater is a collateralized stablecoin that essentially creates a stable asset (the H2O token) from a volatile collateral token (e.g., ETH). This is accomplished using two auxiliary tokens: ICE is a bond-like token that is used to determine the inflation rate of H2O; and STM (steam) is an equity-like token that carries the volatility that is removed from H2O.
H2O
H2O is a basic ERC20 token with no special qualities aside from the fact that the Icewater controller contract manipulates the supply of H2O to achieve a stable value.
ETH
The protocol relies on ETH to provide the underlying value of H2O. ETH and H2O can be freely exchanged in an internal AMM. Under some conditions, the AMM is frozen and H2O can be exchanged for ETH at a fixed price. The current conditions are that the prices of both ICE and H2O are falling (and ICE is falling faster than H2O).
ICE
ICE is also an ERC20 token, but it emits a constant stream of H2O over time. ICE also has a restriction on liquidity. Namely, everytime someone transfers ICE they incur a 2% penalty.
An internal H2O/ICE market is used as an oracle for measuring the inflation rate of H2O. That is, ICE is a perpetuity that emits 2% of the ICE balance in H2O, forever. The value of ICE is determined by a combination of the real interest rate and the inflation rate. The Icewater protocol pegs the value of H2O to the value of ICE. By doing so, the inflation rate is capped at 2% (even lower if the real interest rate is high).
The H2O/ICE pool is similar to a traditional AMM (e.g., Uniswap v2) except that the pool size is determined internally. Since the controller can mint and burn both tokens, the pools are actually “virtual” in that the tokens aren’t actually minted until they are emitted from the pool.
Since the H2O/ICE pool is virtual, the size of the pool is determined dynamically. If the pool is too big, the protocol loses too much value to arbitrage. If the pool is too small, the price of ICE is too easily manipulated, which can hinder proper functioning of the protocol.
Currently, the size of the H2O/ICE pool is set to encourage the supply of ICE to be 10% of the supply of H2O. This is accomplished by increasing the pool size in the direction of desired trades (i.e., if there isn’t enough ICE, the pool gets bigger when people buy ICE).
STM
STM is a volatile ERC20 token that is used to ensure the stability of H2O. Like ICE, STM holders receive a constant emission of H2O. Unlike ICE, the rate at which STM emits H2O changes over time (updated each month). If inflation is too high (as indicated by the H2O/ICE market) the emission rate is reduced and if inflation is too low the emission rate is increased.
In addition to receiving H2O based on a changing emission rate, STM holders also must maintain a certain amount of collateral in the system, determined monthly based on the amount of collateral in the system, the price of H2O relative to ETH, and the total supply of STM.
If a STM holder does not maintain the required collateral, anyone can take some of their STM in exchange for providing the missing collateral. The amount of STM that they take increases with time (measured from the last collateral update) until all of a person’s STM is at risk.
STM can be purchased in exchange for ETH (the collateral token). Unlike the H2O/ICE pool, the size of the STM/ETH pool never changes.
Icewater Controller
To achieve all of the functions described above, the Icewater controller has the following primary functions:
- swapH2OForICE: swap H2O for ICE using the virtual H2O/ICE AMM.
- swapICEForH2O: swapICE for H2O using the virtual H2O/ICE AMM.
- swapH2OForETH: swap H2O for ETH using the virtual H2O/ETH AMM.
- swapETHForH2O: swap ETH for H2O using the virtual H2O/ETH AMM.
- swapSTMForETH: swap STM for ETH using the virtual STM/ETH AMM.
- swapETHForSTM: swap ETH for STM using the virtual STM/ETH AMM.
- claimICERewards: receive constant H2O rewards for owning ICE.
- claimSTMRewards: receive variable H2O rewards for owning STM.
- addCollateral: add collateral to a STM account.
- removeCollateral: take collateral from a STM account.
- takeSTM: take STM from an undercollateralized STM account (by paying the missing collateral)