Inception Vault Dev Details
The Inception Protocol is implemented via Inception vault — a vault based on the EIP-4626 standard. The protocol supports several LSTs (Liquid Staking Token) as collateral, and for each token, we created a corresponding Inception vault instance and Inception LRT (Liquid Restaking Token).
The supported LSTs and corresponding LRTs are:
ankrETH -> inankrETH
cbETH -> incbETH
ETHx -> inETHx
lsETH -> inlsETH
mETH -> inmETH
oETH -> inoETH
osETH -> inosETH
rETH -> inrETH
sfrxETH -> insfrxETH
sthETH -> instETH
swETH -> inswETH
wBETH -> inwbETH
The vault functions cover 3 atomic operations:
Deposit
Withdraw
Redeem
Before delving into the details, let's check the requirements and smart contracts powering the protocol!
Requirements
Unstake time — up to 15 days.
Smart Contracts
The involved smart contracts are:
inankrETH:
Inception vault (0x36B429439AB227fAB170A4dFb3321741c8815e55) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xfa2629B9cF3998D52726994E0FcdB750224D8B9D) — a liquid restaking token (LRT) issued for the restaker.
incbETH:
Inception vault (0xfE715358368416E01d3A961D3a037b7359735d5e) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xBf19Eead55a6B100667f04F8FBC5371E03E8ab2E) — a liquid restaking token (LRT) issued for the restaker.
inETHx:
Inception vault (0x90E80E25ABDB6205B08DeBa29a87f7eb039023C2) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x57a5a0567187FF4A8dcC1A9bBa86155E355878F2) — a liquid restaking token (LRT) issued for the restaker.
inlsETH:
Inception vault (0x6E17a8b5D33e6DBdB9fC61d758BF554b6AD93322) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x94B888E11a9E960A9c3B3528EB6aC807B27Ca62E) — a liquid restaking token (LRT) issued for the restaker.
inmETH:
Inception vault (0xd0ee89d82183D7Ddaef14C6b4fC0AA742F426355) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xeCf3672A6d2147E2A77f07069Fb48d8Cf6F6Fbf9) — a liquid restaking token (LRT) issued for the restaker.
inoETH:
Inception vault (0x4878F636A9Aa314B776Ac51A25021C44CAF86bEd) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x9181f633E9B9F15A32d5e37094F4C93b333e0E92) — a liquid restaking token (LRT) issued for the restaker.
inosETH:
Inception vault (0xA9F8c770661BeE8DF2D026edB1Cb6FF763C780FF) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xfD07fD5EBEa6F24888a397997E262179Bf494336) — a liquid restaking token (LRT) issued for the restaker.
inrETH:
Inception vault (0x1Aa53BC4Beb82aDf7f5EDEE9e3bBF3434aD59F12) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x80d69e79258FE9D056c822461c4eb0B4ca8802E2) — a liquid restaking token (LRT) issued for the restaker.
insfrxETH:
Inception vault (0x295234B7E370a5Db2D2447aCA83bc7448f151161) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x668308d77be3533c909a692302Cb4D135Bf8041C) — a liquid restaking token (LRT) issued for the restaker.
instETH:
Inception vault (0x814CC6B8fd2555845541FB843f37418b05977d8d) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0x7FA768E035F956c41d6aeaa3Bd857e7E5141CAd5) — a liquid restaking token (LRT) issued for the restaker.
inswETH:
Inception vault (0xc4181dC7BB31453C4A48689ce0CBe975e495321c) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xC3ADe5aCe1bBb033CcAE8177C12Ecbfa16bD6A9D) — a liquid restaking token (LRT) issued for the restaker.
inwbETH:
Inception vault (0xC0660932C5dCaD4A1409b7975d147203B1e9A2B6) — the corresponding vault instance that implements the Inception Protocol.
Inception token (0xDA9B11Cd701e10C2Ec1a284f80820eDD128c5246) — a liquid restaking token (LRT) issued for the restaker.
Redemption Price
Inception’s Redemption Price gives you access to the most recent valuation dynamics on our platform. It provides up-to-the-minute ratios, allowing you to precisely determine the redemption price of your Liquid Restaking Tokens (LRTs).
This critical formula, as detailed in the following explanation of Redemption Prices, ensures clarity of information so you can make informed decisions about your digital assets.
What is the Redemption Price?
The Redemption Price on Inception is the exact amount of assets that users receive when redeeming their Liquid Restaking Tokens (LRTs) after the applicable unbounding period. It also determines the number of Liquid Restaking Tokens (LRTs) that users receive when they stake their Liquid Staking Tokens (LRTs) on the Inception Dapp.
The formula is:
Liquid Staking Token Calculation:
When a user unstakes their assets, the following formula applies:
This results in the user obtaining more original assets (LSTs), than the number of redeemed Liquid Restaking Tokens (LRTs)
When a user stakes their assets, they use the formula:
This results in the user receiving the correspondent Liquid Restaking Tokens (LRTs), adjusting the value of the original asset (LSTs).
This dynamic occurs because the value of Liquid restaking Tokens appreciate over time relative to the initially staked assets, driven by the formula:
Redemption Price
To get the Redemption price for an LRT, use the following RateProvider contracts:
instETH: 0x343281Bb5029C4b698fE736D800115ac64D5De39
inrETH: 0xD6d553327b16dd6076D69c2DAEc91A50dD1E9F66
inoETH: 0xbd600020f943f7C61a8123fE2720A05434A3B38b
inosETH: 0x1F27848Ae927Ba278eE575e4A55f6c7ED7BFFe8C
inankrETH: 0x8bC73134A736437da780570308d3b37b67174ddb
incbETH: 0xa1Bb72c5915a7e2C85BaeA2C563858eaCB3F7A45
inwbETH: 0x69c59c3DD7566eb12792203f8F832ca81a050eB1
inswETH: 0xebFa0353DFF1801F5c8Ea07448771D6FadD1E721
inETHx: 0xd812bA3543f9aB64b2BCBcE34fb3b00bFF2bA2FC
insfrxETH: 0x07f86901057F392fd3A508b8AbcbaafB08c13B1e
inmETH: 0xA22A7A8c550760574Fd7b722C9f7100902D57707
inlsETH: 0x20f6d8e1e821Bd5B94f7bF725AF304Bc5ef09c36
(All contracts are on the Ethereum Network)
Deposit
The deposit() function allows users to restake a supported asset on EigenLayer.
Users are allowed to deposit a supported asset to the corresponding vault in any amount that is greater than minAmount.
Before sending a deposit transaction, ensure that the vault has sufficient allowances for spending your assets (utilizing the transferFrom() function). A successful deposit transaction results in minting an appropriate amount of the corresponding LRT and a Deposit event:
To determine the minted amount of LRT, use the following formula (amount
– deposited amount of LST):
Code Sample
Let’s say the user wants to restake and decided on a specific amount of the LST and receiverAddress that will be issued the mintedAmount of LRT.
Workflow
User deposits into InceptionVault.
Vault deposits the user amount directly to EigenLayer via
strategyManager::delegateIntoStrategy()
.InceptionVault mints a corresponding amount of the LRT (instETH or inrETH respectively) for the user’s wallet.
See the example transaction on Ethereum Mainnet.
Withdraw
The withdraw() function allows users to unstake from the corresponding vault on EigenLayer, burning the user LRTs to get back the original asset.
During the withdrawal process, the corresponding vault instance stores the pending withdrawal amounts. Let us make the withdrawal process grandma-clear. It may be divided into the following steps:
The vault burns the input amount of an appropriate LRT at the user’s address (no approval needed).
The vault updates the global pending withdrawal state and the user’s pending withdrawal state with the corresponding receiverAddress and asset amount. The amount will be received to the receiverAddress upon the redeeming process.
The vault emits a withdrawal event with the pending amount:
In order to get the pending withdraw amount use the following function in
iVault
:
See the example transaction on Ethereum Mainnet.
Redeem
The redeem() functions is applied at the final step, in which the user receives the pending asset amount that becomes available after the next rebalancing procedure.
Workflow
The user (anyone) calls
iVault::redeem()
with a properreceiverAddress
(that persists in the global state).The Inception vault calls
iVault::isAbleToRedeem()
to ensure that the user is able to claim at least one pending withdrawal.If able to redeem, the vault adds up all the available corresponding withdrawals, transfers the resulting amount to receiverAddress, and updates the global withdrawal state.
See the example transaction on Ethereum Mainnet.
Known Issues
On each transfer, stEth loses 1–2 wei.
Last updated