diff --git a/.snyk b/.snyk new file mode 100644 index 0000000..4ddb87a --- /dev/null +++ b/.snyk @@ -0,0 +1,33 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.25.1 +ignore: {} +# patches apply the minimum changes required to fix a vulnerability +patch: + 'npm:hoek:20180212': + - theme > pkghub > npm > node-gyp > request > hawk > hoek: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:hoek:20180212' + path: theme > pkghub > npm > node-gyp > request > hawk > hoek + - theme > pkghub > npm > node-gyp > request > hawk > boom > hoek: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:hoek:20180212' + path: theme > pkghub > npm > node-gyp > request > hawk > boom > hoek + - theme > pkghub > npm > node-gyp > request > hawk > sntp > hoek: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:hoek:20180212' + path: theme > pkghub > npm > node-gyp > request > hawk > sntp > hoek + 'npm:minimatch:20160620': + - theme > pkghub > glob > minimatch: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:minimatch:20160620' + path: theme > pkghub > glob > minimatch + 'npm:tunnel-agent:20170305': + - theme > pkghub > npm > request > tunnel-agent: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:tunnel-agent:20170305' + path: theme > pkghub > npm > request > tunnel-agent + 'npm:uglify-js:20151024': + - theme > pkghub-render > swig > uglify-js: + patched: '2024-02-20T07:21:09.958Z' + id: 'npm:uglify-js:20151024' + path: theme > pkghub-render > swig > uglify-js diff --git a/docs/concepts/benefits.md b/docs/concepts/benefits.md new file mode 100644 index 0000000..ec569ca --- /dev/null +++ b/docs/concepts/benefits.md @@ -0,0 +1,35 @@ +--- +id: benefits +title: Benefits of using Nimbora +sidebar_position: 2 +--- + +# Introduction to Nimbora's Cost-Efficiency + +Nimbora stands out in the blockchain space primarily due to its innovative approach to minimizing transaction costs for its users. The platform achieves this remarkable feat by leveraging the power of Layer 2 (L2) solutions, specifically Starknet, to offer gas fees that are up to seven times lower than those on the Ethereum mainnet. This significant cost reduction opens up new possibilities for users, making decentralized finance (DeFi) interactions more accessible and economical. + +## Understanding Gas Fees Reduction through Layer 2 Solutions + +### The Role of Starknet in Reducing Costs + +Starknet plays a crucial role in Nimbora's ability to offer reduced gas fees. As an advanced Layer 2 solution, Starknet enhances the scalability of the blockchain by processing transactions off the main Ethereum chain. This process not only speeds up transactions but also significantly lowers the cost associated with them. By utilizing Starknet, Nimbora taps into these benefits, passing the savings directly to its users. + +### Batching Mechanism: Pooling Transactions for Efficiency + +Nimbora introduces an innovative batching mechanism that further enhances its cost-efficiency. This mechanism allows users to pool their transactions together, creating a collective action that can interact with DeFi protocols on the Layer 1 (L1) network at a fraction of the usual price. By doing so, Nimbora not only makes transactions more affordable but also fosters a more inclusive and accessible DeFi ecosystem. + +## In-Depth Look at Nimbora's Transaction Processing + +### The L2 Pooling Manager: Accumulating and Batching Requests + +The transaction process begins when the Nimbora L2 Pooling Manager contract receives a request from a user. This contract acts as a collector, gathering individual requests into a new batch. The batching continues until the batch reaches its capacity. At this point, the L2 Pooling Manager packages all the requests into a single bundle and forwards it to the L1 Pooling Manager contract for further processing. + +### L1 Verification and Asset Handling + +Upon receiving the batch from the L2 side, the L1 Pooling Manager contract must wait for the batch to be verified on the Ethereum mainnet. This verification process is subject to network congestion but typically completes within a 12-hour window. Once verified, the L1 Pooling Manager interacts with the Starkgate Bridge to retrieve the necessary assets. These assets are then deposited according to the predetermined strategies. + +### Reporting and Feedback Loop + +The final step in the transaction process involves the L1 Pooling Manager generating a detailed report. This report confirms the successful deposit of assets and is sent back to the L2 Pooling Manager. This feedback loop ensures transparency and trust in the transaction process, allowing users to confidently engage with Nimbora's DeFi ecosystem. + +By adopting these advanced mechanisms and leveraging Layer 2 solutions like Starknet, Nimbora is paving the way for a more affordable and accessible blockchain experience. Its innovative approach to transaction batching and cost reduction not only benefits individual users but also contributes to the broader goal of fostering a more inclusive DeFi ecosystem. \ No newline at end of file diff --git a/docs/concepts/epoch.md b/docs/concepts/epoch.md deleted file mode 100644 index 1e4b885..0000000 --- a/docs/concepts/epoch.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -id: epoch -title: Epoch -sidebar_position: 3 ---- - -# Epoch - -On Nimbora, keeping track of each processed batch is crucial. Since Starknet and Ethereum are asyncronous in their essence, we need a mechanism to syncronize the contracts state between both chains. To achieve that, each processed and closed batch send from L2 to L1 contains an epoch. This way we ensure that: - -- Batches are processed in the correct order. -- No batch can be processed more than once. \ No newline at end of file diff --git a/docs/concepts/overview.md b/docs/concepts/overview.md index 5505c44..5525982 100644 --- a/docs/concepts/overview.md +++ b/docs/concepts/overview.md @@ -1,26 +1,52 @@ --- id: overview -title: Overview +title: About Nimbora sidebar_position: 1 --- # Nimbora Overview -Nimbora is a platform that offers you the opportunity to interact with your favorite Layer 1 (L1) protocols at a fraction of the cost of Layer 2 (L2) solutions. +Nimbora is a 1-click DeFi pooling product, incubated by the [SpaceShard team](https://www.spaceshard.io/). -## L2 vs L1: Benefits of using Nimbora +It is a platform that offers you the opportunity to interact with your favorite Layer 1 (L1) protocols at a fraction of the cost of Layer 2 (L2) solutions. The idea behind it is to scale L1 DeFi through seamless L2 execution, all while maintaining super-low fees. The technology behind Nimbora is Zero-Knowledge Rollups, currently Starknet - a permissionless decentralized ZK-Rollup that operates as an L2 network over Ethereum. To put it simply, Nimbora scales L1 DeFi products completely trustlessly using rollups. -The main benefit of using Nimbora is the decreases in gas fees, up to 7x compared with Ethereum mainnet. This significant reduction in gas fees is achieved through the utilization of innovative Layer 2 solutions. These solutions perform most transactions off-chain, only settling the final state on the Ethereum mainnet. This drastically reduces the number of transactions that need to be processed on the congested Ethereum network, thereby reducing overall gas fees. This makes transactions on Nimbora more affordable and accessible for all users, fostering a more inclusive DeFi ecosystem. +You can learn more about Nimbora by following us on [Medium](https://medium.com/@Nimbora), [Twitter](https://twitter.com/nimbora_io), or by joining our [Discord group](https://discord.gg/feJJnkmYzc). + +You can also check out our founder's talk from ETHDenver about the [experience of building Nimbora: a Cross-Chain Yield DEX on Starknet](https://twitter.com/i/status/1762609002435727749) + +## Starknet + +Starknet is a Layer-2 network that utilizes zk-STARKs technology to enhance Ethereum transactions. It aims to make transactions faster, cheaper, and more secure. Official Starknet token is [STRK](https://www.starknet.io/en/content/claiming-your-strk), launched on Feb 20, 2024. + +:::note +Key features: +- Low costs +- Developer-friendly +- Speed and efficiency +::: + +More info at [Starknet website](https://www.starknet.io/en) or check [Spaceshard's blog](https://www.spaceshard.io/blog/learning-starknet-community-edu-resources) to learn about Starknet. ## What wallets can I connect with? At the moment, Nimbora supports compatibility with [Argent X wallet](https://www.argent.xyz/argent-x/) and [Braavos wallet](https://braavos.app/). Argent X is a smart wallet designed to provide a simple and secure way to manage and invest digital assets. On the other hand, Braavos wallet is a decentralized wallet known for its user-friendly interface and high-level security features. The integration of these wallets with Nimbora allows users to conveniently interact with preferred Layer 1 protocols at a significantly reduced cost. Nimbora is committed to enhancing user experience and thus, plans to integrate more wallets in the near future. -## Transaction processing and batching +:::important + +Please be aware that **there is still no official Nimbora token launched,** nor a public sale of Nimbora tokens by any entity! Be alert for scams around any token claims and provisions, including fake links and accounts impersonating Nimbora. Make sure to follow the information in our official channels only: + +[Twitter](https://twitter.com/nimbora_) + +[Discord](https://discord.gg/feJJnkmYzc) + +[Website](https://www.nimbora.io/) + +[Medium](https://medium.com/@Nimbora) -When the Nimbora [L2 Pooling Manager](/docs/contracts/architecture/L2_arch.md#pooling-manager) contract receives a requests, it opens a new batch and accumulates those requests until the batch is full. Once the batch is full, the contract will empack all the requests and send them to the [L1 Pooling Manager](/docs/contracts/architecture/L1_arch.md#pooling-manager) contract. This message will take some time to be verified on L1 depending on the network congestion, but it should not take more than 12h. Once the block is validated on L1, the message is ready to be consumed by the L1 Pooling Contract. +[LinkedIn](https://www.linkedin.com/company/nimbora/) -When consuming the message, the L1 Pooling Manager will get the assets to be handled from the Starkgate Bridge and deposit them within the strategies. Finally, the L1 Pooling Manager will generate a report to inform the L2 Pooling Manager that the deposits were made correctly. +Email subscription: link coming soon +::: ## Where can I get help? diff --git a/docs/concepts/reports.md b/docs/concepts/reports.md deleted file mode 100644 index 9c98604..0000000 --- a/docs/concepts/reports.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: reports -title: Reports -sidebar_position: 2 ---- - -# Reports - -The reports exist within both L1 and L2 Pooling Manager contracts and they are the means of communication between those two contracts. - -## L1 Reports - -From the L1 Pooling Manager perspective, reports represent messages received by the L1 Pooling Manager contract and it contains relevant data regarding the strategy status. -More specifically, contains the L1 strategy address, L1 net asset value (deposited asset's value), the amount to be deposited or withdrawn to/from the strategy and finally the status of the L1 strategy process. - -With this information, the L1 Pooling Manager is able to communicate with the Starkgate bridge in order to fetch and bridge assets to and from L2. and it is also able to target the strategy it needs to interact with. - -## L2 Reports - -From the L2 Pooling Manager perspective, reports represent incoming messages from L1. This data is used to process and update L2 startegies (Token Manager and Token contracts) according to the new L1 strategy status. Once the data integrity is verified, it fetches bridge assets in order to, later, tansfers it to users and updates the strategy data. - -This report is crucial for syncronizing L1 strategies data with the L2 contract state and it ensures only valid data is processed, all while contract's state remains consistent with L1. diff --git a/docs/concepts/risks/01-risk-lusd.md b/docs/concepts/risks/01-risk-lusd.md new file mode 100644 index 0000000..3748b75 --- /dev/null +++ b/docs/concepts/risks/01-risk-lusd.md @@ -0,0 +1,31 @@ +--- +id: liquity_lsud +title: LUSD strategy +sidebar_position: 2 +--- + +# Understanding Risks Associated with Liquity + +[Liquity](https://www.liquity.org/) is a decentralized borrowing protocol that allows users to take out loans against Ethereum collateral without paying interest. These loans are paid out in LUSD, a stablecoin pegged to the USD. While our previous guide covered the basic risks associated with using Liquity, this expanded guide incorporates insights from recent discussions about price stability and addresses concerns within the Liquity ecosystem. + +## Expanded Risks and Features in Liquity + +### Price Stability and the Redemption Mechanism + +- **Redemption Mechanism**: A unique feature of Liquity is its redemption mechanism, allowing LUSD holders to redeem their LUSD for the underlying ETH collateral at face value anytime. This mechanism is crucial for maintaining the price stability of LUSD and ensuring it remains pegged to $1. +- **Impact on Borrowers**: If one Trove (the term for a loan account in Liquity) is redeemed against, you won't experience a net loss but may lose some of your ETH exposure while receiving a lesser debt. To minimize the risk of being affected by redemptions, maintaining a collateral ratio significantly above the minimum requirement (110%) is advisable. A ratio of 150% or higher is generally recommended according to Liquity sources. + +### Strategic Considerations for Trove Owners + +- **Monitoring and Adjusting**: Nimbora Troves are monitored to stay out of the "line of fire" of redemptions. This proactive approach can help maintain a desired level of ETH exposure while managing your debt in LUSD. + +### Liquity's Funding and Development + +- **Series A Funding**: Liquity has secured $6 million in Series A funding, led by Pantera Capital and supported by other notable investors. This investment underscores the confidence in Liquity's potential and its role in the DeFi ecosystem. +- **Ongoing Development**: Liquity is built on experimental technology that is still under active development. The team's commitment to security, evidenced by regular audits and a significant bug bounty program, aims to minimize risks related to smart contract vulnerabilities. + +## Conclusion + +Liquity's innovative approach to decentralized borrowing, characterized by its no-interest loans, low collateral requirements, and unique redemption mechanism, offers significant opportunities for users. However, understanding the associated risks, especially those related to price stability and the redemption mechanism, is crucial for informed participation in the Liquity ecosystem. By staying informed and strategically managing your loan, you can navigate these risks while taking advantage of what Liquity has to offer. + +Remember, informed decision-making is key to navigating the complexities of decentralized finance (DeFi). diff --git a/docs/concepts/risks/02-risk-sdai.md b/docs/concepts/risks/02-risk-sdai.md new file mode 100644 index 0000000..de8c301 --- /dev/null +++ b/docs/concepts/risks/02-risk-sdai.md @@ -0,0 +1,32 @@ +--- +id: sdai +title: sDAI strategy +sidebar_position: 3 +--- + +# Understanding Risks Associated with sDAI + +When considering the use of [sDAI](https://spark.fi/) through Nimbora, it's crucial for users, especially those who are not deeply technical, to understand the associated risks. This guide aims to simplify the primary risk related to using sDAI in an accessible manner. + +## No Yield Generation + +### What Does This Mean? + +- **Yield Generation**: In the context of decentralized finance (DeFi), yield refers to the earnings generated over time by your cryptocurrency investments. It's akin to earning interest in a traditional savings account but within the DeFi ecosystem. +- **Risk with sDAI**: The sole risk associated with sDAI is the potential for your deposit not to generate any yield. This means that, despite your investment, there could be periods where you do not earn additional sDAI or other returns on your deposited DAI. + +### Why Might This Happen? + +The yield in DeFi platforms, including those involving sDAI, is influenced by various factors such as market demand, the platform's protocol mechanics, and broader economic conditions. There may be times when these factors align in such a way that yield generation is temporarily halted or significantly reduced. + +### What Should You Consider? + +- **Investment Goals**: Understand your investment timeline and goals. If generating immediate yield is crucial for your strategy, consider how the risk of no yield with sDAI aligns with your objectives. +- **Market Research**: Stay informed about the market conditions and factors that could influence yield generation. This knowledge can help you make more informed decisions. +- **Diversification**: Consider diversifying your DeFi investments to mitigate the risk of no yield on a specific asset like sDAI. + +## Conclusion + +While sDAI offers a novel way to potentially earn yield on your DAI deposits within the DeFi ecosystem, it's important to be aware of the risk that your investment may not generate yield. By understanding this risk and considering your investment strategy carefully, you can better navigate the DeFi space and make choices that align with your financial goals. + +Remember, informed decision-making is key to managing risks and capitalizing on opportunities in the world of decentralized finance. diff --git a/docs/concepts/risks/03-risk-lStaking.md b/docs/concepts/risks/03-risk-lStaking.md new file mode 100644 index 0000000..ddef30c --- /dev/null +++ b/docs/concepts/risks/03-risk-lStaking.md @@ -0,0 +1,37 @@ +--- +id: liquid_stake +title: wstETH Strategy +sidebar_position: 4 +--- + +# Understanding Risks Associated with LIDO and Liquid Staking + +[LIDO](https://lido.fi/) and its approach to liquid staking on Ethereum's Beacon Chain present an innovative way for users to earn staking rewards without locking up their assets. However, as with any investment, there are inherent risks involved. This guide aims to break down these risks in simple terms. + +## Key Risks in LIDO and Liquid Staking + +### Smart Contract Security Risk + +- **What It Means**: Like any program, LIDO's smart contracts (the code that runs its operations) could have vulnerabilities or bugs. +- **Mitigation Efforts**: LIDO's code is open-source, meaning anyone can review it, and it undergoes regular audits to identify and fix potential vulnerabilities. Additionally, LIDO has a substantial bug bounty program with Immunefi to encourage the discovery and reporting of any issues. + +### Beacon Chain: Technical Risk + +- **What It Means**: LIDO operates on the Beacon Chain, part of Ethereum's upgrade to a more efficient system. This technology is still experimental and under development, which means it could have undiscovered errors. +- **Mitigation Efforts**: While LIDO cannot directly control the Beacon Chain's development, it continuously monitors and adapts to changes and updates within the ecosystem. + +### Slashing Risk + +- **What It Means**: Validators (the entities that confirm transactions on the Beacon Chain) face penalties, known as slashing, if they fail in their duties. This can affect up to 100% of the staked funds. +- **Mitigation Efforts**: LIDO diversifies its staking across multiple reputable node operators to spread out this risk. It also has self-coverage mechanisms in place to mitigate potential losses from slashing. + +### wstETH Price Risk + +- **What It Means**: The exchange price of wstETH (the token you get for staking ETH through LIDO) could be lower than its actual value. This discrepancy is partly because withdrawals from LIDO are restricted, making it difficult to arbitrage or make risk-free profits. +- **Mitigation Efforts**: The LIDO DAO (decentralized autonomous organization) actively works to minimize these risks and aims to eliminate them as much as possible. + +## Conclusion + +While LIDO offers a compelling solution for earning staking rewards without locking up assets, it's essential to be aware of the associated risks. These include smart contract vulnerabilities, technical risks related to the Beacon Chain, slashing risks for validators, and wstETH price fluctuations. By understanding these risks and the efforts made to mitigate them, users can make more informed decisions about liquid staking with LIDO. + +Remember, informed decision-making is crucial in navigating the evolving landscape of decentralized finance (DeFi). diff --git a/docs/concepts/risks/_category_.json b/docs/concepts/risks/_category_.json new file mode 100644 index 0000000..8c59799 --- /dev/null +++ b/docs/concepts/risks/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Risks", + "position": 4, + "collapsed": false +} \ No newline at end of file diff --git a/docs/concepts/risks/starknet.md b/docs/concepts/risks/starknet.md new file mode 100644 index 0000000..28c73ab --- /dev/null +++ b/docs/concepts/risks/starknet.md @@ -0,0 +1,38 @@ +--- +id: starknet +title: Starknet +sidebar_position: 1 +--- + +# Understanding Risks Associated with Starknet + +[Starknet](https://www.starknet.io/en/explore-starknet), a Layer 2 scaling solution for Ethereum, offers significant benefits in terms of transaction speed and cost. However, like any technology, it comes with its own set of risks. Here, we break down some of these risks in simple terms. + +## State Validation: Ensuring Correctness with ZK Proofs + +- **What It Means**: Starknet uses a technology called zkSTARKs (zero-knowledge Scalable Transparent ARguments of Knowledge) to make sure that all transactions and states (basically, the current information and balance of your account) on the network are correct and valid. +- **Why It Matters**: This technology is crucial for maintaining the integrity and trustworthiness of the network, ensuring that your transactions are accurately recorded. + +## Data Availability: Keeping Information Accessible + +- **What It Means**: All the necessary data (referred to as state diffs or SD) for constructing proofs of transactions are published and stored directly on the blockchain. +- **Why It Matters**: This practice ensures transparency and allows for the verification of transactions by anyone at any time, contributing to the security and reliability of the network. + +## Exit Window: The Challenge of Instant Upgrades + +- **What It Means**: Starknet allows for contracts to be upgraded instantly, but it doesn't provide a specific window for users to exit or withdraw their funds if they disagree with an upgrade. +- **Why It Matters**: This could potentially leave users with less control over their assets in the event of a controversial or unwanted network upgrade. + +## Sequencer Failure: A Single Point of Failure + +- **What It Means**: Starknet relies on a component called a sequencer to process transactions. If the sequencer fails or starts censoring transactions, there's no alternative mechanism in place to include those transactions in the network. +- **Why It Matters**: This could lead to delays or the inability to execute transactions, impacting the network's reliability. + +## Proposer Failure: Limited Withdrawal Options + +- **What It Means**: Only certain approved participants (whitelisted proposers) can submit state updates to the Ethereum mainnet. If these proposers fail, users cannot withdraw their funds. +- **Why It Matters**: This limitation could freeze users' assets on the network, preventing access when needed. + +--- + +While Starknet presents a promising solution to Ethereum's scalability challenges, it's important for users to be aware of these potential risks. Understanding these aspects can help users make informed decisions when interacting with the network. \ No newline at end of file diff --git a/docs/concepts/strategies/01-statregy-lusd.md b/docs/concepts/strategies/01-statregy-lusd.md index 8dfb26e..06c6ab0 100644 --- a/docs/concepts/strategies/01-statregy-lusd.md +++ b/docs/concepts/strategies/01-statregy-lusd.md @@ -1,67 +1,60 @@ --- id: lusd -title: Borrow LUSD -sidebar_position: 2 +title: LUSD Strategy +sidebar_position: 3 --- -# **Unlocking Quick LUSD Minting: A Step-by-Step Guide for Liquity Users** +**This strategy allows users to borrow LUSD**, a stablecoin pegged to the U.S. dollar, using their collateral. The process begins by depositing collateral into the Nimbora platform. Once the collateral is deposited and locked, users can borrow against it according to the platform's loan-to-value ratio. This strategy is beneficial for users who want to leverage their assets without selling them. However, users must monitor their collateral value to avoid liquidation. If the value of the collateral falls below certain thresholds, the system may automatically liquidate the assets to repay the loan. -![Group 145.png](/content/strategy_lusd/Group_145.png) - -### LUSD Strategy +To get started, make sure you have a Starknet-compatible wallet, such as Argent X or Braavos. If you plan to bridge your assets to use as collateral, ensure you have an Ethereum-compatible wallet e.g. Metamask. -This strategy allows users to borrow LUSD, a stablecoin pegged to the U.S. dollar, using their collateral. The process begins by depositing collateral into the Nimbora platform. Once the collateral is deposited and locked, users can borrow against it according to the platform's loan-to-value ratio. This strategy is beneficial for users who want to leverage their assets without selling them. However, users must monitor their collateral value to avoid liquidation. If the value of the collateral falls below certain thresholds, the system may automatically liquidate the assets to repay the loan. +### What is Liquity? -To get started, make sure you have a Starknet-compatible wallet, such as Argent X or Braavos. If you plan to bridge your assets to use as collateral, ensure you have an Ethereum-compatible wallet e.g. Metamask. + - Liquity offers decentralized, interest-free loans in LUSD against Ether collateral, requiring a minimum 110% collateral ratio. -### How to interact + - Loan security is enhanced by a Stability Pool with LUSD and collective backing from borrowers as ultimate guarantors. -**Step 1: Visit Nimbora's Front End** -Visit Nimbora's front end at [https://www.nimbora.io/](https://www.nimbora.io/) to connect Starknet to Ethereum, reducing gas costs for your interactions with Ethereum. + - The protocol is non-custodial, immutable, and operates without governance. -![Cookies.png](/content/strategy_lusd/Cookies.png) + - It is highly secure, has several audits, and tops Defi Safety’s security list. -Feel free to explore the platform, but now let's head straight to the ‘Integrations’ page, and scroll down the integration list to find Liquity. + - Additional resources about Liquity: + - [Website](https://www.liquity.org/) + - [Docs](https://docs.liquity.org/) + - [Analytics](https://dune.com/liquity/liquity) + - [Liquity on Twittter](https://twitter.com/LiquityProtocol) -![Screenshot 2023-11-02 at 11.02.24.png](/content/strategy_lusd/Screenshot_2023-11-02_at_11.02.24.png) -Click on “ABOUT THIS COLLAB” and you will be directed to [https://www.nimbora.io/liquity](https://www.nimbora.io/liquity) +### What is LUSD? -**Step 2: Explore Liquity Integration** -Before proceeding, we recommend reading the extensive FAQ section to understand what you're getting into. + - LUSD, a stablecoin pegged to the USD, serves as the payment medium for loans in the Liquity protocol, offering redemption against collateral at face value. -![Screenshot 2023-11-02 at 11.05.56.png](/content/strategy_lusd/Screenshot_2023-11-02_at_11.05.56.png) + - LUSD can be only minted against ETH, making it very resilient and independent of any centralized parties. Due to this it is a very popular treasury asset, but also across protocols and LP pools on mainnet and many L2’s. -Once you're well-informed, it's time to connect your wallet. + - Additional resources about [LUSD](https://docs.liquity.org/faq/general#what-are-lusd-and-lqty) -**Step 3: Connect Your Wallet** -If your wallet isn't already connected, click "Connect Wallet" and select your preferred option. We've chosen Argent for this demonstration (see detailed steps in the video below) -**Step 4: Bridge Assets to Starknet** -Before borrowing, you may want to bridge some assets from Starknet to Ethereum. We recommend using [Starkgate](https://starkgate.starknet.io/) for this purpose. Connect both your Ethereum and Starknet wallets and bridge your assets conveniently. The exact steps are shown in the video below. +### What is the LUSD contract on Starknet? -**Step 5: Start Borrowing** -Now, let's dive into the borrowing process. Please note that the collateral ratio and the assets you can borrow are predetermined. Currently, the ratios are 453 and 300, but they may change with the fluctuating ETH price. If you find yourself asking more questions, please return to FAQs section. + - LUSD contract on Starknet is: 0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac -**Step 6: Select Your Asset and Borrow** -Pick your desired asset, such as ETH, and choose your borrowing amount. Keep in mind that the LUSD amount you receive is tied to the amount of ETH you input, following the predetermined collateral ratio. The gas fees are relatively lower on Starknet, making the borrowing process more cost-effective. + - All official Liquity contracts can be found [here](https://docs.liquity.org/documentation/resources#contract-addresses). -**Step 7: Confirm and Wait** -After selecting your asset and borrowing amount, click "Borrow." Your Starknet wallet will appear, and once the calculations are complete, click "Confirm." The transaction is now pending, and your LUSD is on its way. However, it's essential to understand that it might take some time due to the batching and Starknet finality process, which usually takes between 8 to 12 hours. -**Step 8: Be Patient and Stay Informed** -While your transaction is pending, we recommend reading the FAQ section and seeking answers to your questions. If you have technical questions about this integration or Starknet in general, you can join [Nimbora Alpha Testers](https://t.me/+606MBKpVsdthYTU0) Telegram group. If you have questions about borrowing or Liquity in general please join the [Liquity Discord](https://discord.com/invite/2up5U32). +### How much LUSD can I borrow? -To report any issue, please click on "FEEDBACK" button directly on [https://app.nimbora.io/](https://app.nimbora.io/) (see image below) + - The maximum is currently capped at 1.75 ETH, but this will change over time. -![https://assets-global.website-files.com/650947fe4f71ddba91014897/653f7d4def71d885d387e46c_1.png](https://assets-global.website-files.com/650947fe4f71ddba91014897/653f7d4def71d885d387e46c_1.png) +### Do I really pay no interests on Liquity? -‍ + - Yes, really! Liquity charges no interest, ever. -Have fun navigating DeFi with Nimbora and enjoy the efficiency of the Starknet integration! + - You pay only a one-off fee when opening the loan. This fee is almost always 0.50% but can go slightly higher at times. Read more about it [here](https://docs.liquity.org/faq/borrowing). -Stay patient while your transaction processes, and in no time, your LUSD will be in your wallet. +### I don't have enough LUSD to pay my debt, what can I do? -HERE’S A DETAILED STEP-BY-STEP VIDEO TUTORIAL👇👇👇 + - If you don’t have enough LUSD in your account you can use the [Starkgate](https://starkgate.starknet.io/) bridge to bridge the LUSD amount required to pay your debt and get back your collateral. -[![VIDEO TUTORIAL](https://img.youtube.com/vi/DluxuqM4XHo&t/0.jpg)](https://www.youtube.com/watch?v=DluxuqM4XHo&t=1s&ab_channel=LiquityProtocol) \ No newline at end of file +:::tip +[Here](https://medium.com/@Nimbora/unlocking-quick-lusd-minting-a-step-by-step-guide-for-nimbora-users-1dc0b876a122) you can find a step-by-step guide for borrowing LUSD. +::: diff --git a/docs/concepts/strategies/02-strategy-sdai.md b/docs/concepts/strategies/02-strategy-sdai.md index db3eadc..247c017 100644 --- a/docs/concepts/strategies/02-strategy-sdai.md +++ b/docs/concepts/strategies/02-strategy-sdai.md @@ -1,7 +1,99 @@ --- id: sdai -title: Deposit sDAI +title: sDAI Strategy sidebar_position: 3 --- -# How does depositing DAI works \ No newline at end of file +**This strategy allows users to leverage their DAI holdings** by depositing them into an sDAI vault, which is a specialized financial vehicle. This depositing action allows their DAI to be put to work, generating potential profits over time. The approach combines the security of DAI, a stablecoin, with the revenue-generating power of DeFi strategies. This mechanism is designed to provide users with a more effective way to maximize the potential return on their DAI investments. + +### What is sDAI + + - sDAI is a special version of the DAI cryptocurrency that lets you earn extra money (yield) through the Maker protocol, while still being able to use your DAI as usual. + + - You can easily convert your DAI to sDAI and back without needing to use a cryptocurrency exchange, by simply depositing or withdrawing from a specific feature called the Dai Savings Rate (DSR) module. + + - With sDAI, you can do all the things you normally do with DAI, like transferring it to others, staking it to earn rewards, lending it, and more. + + - To use sDAI and take advantage of its benefits, you can go to the SparkLend website and interact with it directly from there. + + - More about [sDAI](https://docs.spark.fi/defi-infrastructure/sdai-overview/dsr-and-sdai#what-is-sdai): + +### What is DSR + + - The Dai Savings Rate (DSR) is a feature within the Maker Protocol that enables Dai holders to earn savings by actively engaging with the DSR contract. + + - To earn savings, users must manually transfer Dai from their wallet to the Maker Protocol, with the assurance that Dai can be instantly redeemed without liquidity constraints, but only back to the original depositing account. + + - Integration of DSR functionality by custodians, decentralized exchanges, wallets, or dapps is advantageous as it allows any user to earn savings on their Dai holdings. + + - More about [DSR](https://docs.spark.fi/defi-infrastructure/sdai-overview/dsr-and-sdai#what-is-dsr): + +### What is Spark + + - Spark aims to enhance the DAI ecosystem as part of the MakerDAO community, positioning itself as a next-generation DeFi infrastructure. + + - It introduces SparkLend, a DAI-focused money market protocol that integrates liquidity from Maker and other top DeFi protocols. + + - sDAI, a yield-bearing stablecoin within Spark, represents DAI in the Dai Savings Rate (DSR) module, funneling revenue from the Maker protocol back to DAI holders. + + - Spark features SparkConduits, enabling direct liquidity transfer from Maker to various protocols. It operates under the governance of SparkDAO, a subDAO of Maker Allocator, scheduled to launch its governance in May 2024. + + - More about Spark: + - [Website](https://spark.fi/) + - [Docs](https://docs.spark.fi/) + - [Analytics](https://dune.com/facundol2/spark-protocol) + - [Spark on Twitter](https://twitter.com/sparkdotfi) + +### What is MakerDAO + + - MakerDAO aims to stabilize the crypto economy using a dual-token system: Dai for stability and MKR token for governance, emphasizing the necessity of a decentralized stablecoin for digital financial benefits. + + - It champions decentralized finance (DeFi) accessibility, striving for economic empowerment and equal access to the global financial market for all. + + - The Multi Collateral Dai (MCD) update expands collateral options to include various Ethereum-based assets, contingent on approval by MKR holders. + + - This enhancement introduces new features to the protocol, promoting broader asset acceptance and flexibility. + + - More about Maker: + - [Website](https://makerdao.com/en/) + - [Docs](https://docs.makerdao.com/) + - [MakerDAO on Twitter](https://twitter.com/MakerDAO) + + +## How to deposit + +To interact with the sDAI strategy, you'll first need to connect to Nimbora. You can do this through available wallets such as Argent or Braavos. Ensure you have some DAI tokens in your wallet. + +![alt](/content/wallet_connect.jpeg) + +After connecting to Nimbora, find and select the sDAI strategy. Here, you'll see various metrics like Annual Percentage Rate (APR) and Total Value Locked (TVL). On the same screen, you'll find a place to enter the type and amount of tokens you want to deposit into the sDAI strategy. It will also display the amount of sDAI tokens you'll get once the transaction is completed. + +![alt](/content/sdai_strategy/sdai_return.jpeg) + +Finally, when you've selected the token amount to deposit, click on "deposit" and follow the prompts on your wallet (Argent or Braavos) to complete the transaction. + +Upon completing the transaction, users can track the status of their transaction under the wallet view. + +![alt](/content/sdai_strategy/deposit_tx.jpeg) + +## How to request a withdrawal + +If you've been using the sDAI strategy and decided that you want to take your assets back, you can do that. It's important to note though, Nimbora won't be able to process this withdrawal request for you. You'll have to do it yourself, but don't worry, the steps are simple. + +First, you need to decide on the amount you want to withdraw. This could be all or a portion of your assets. Once you've made up your mind, locate and click on the 'withdraw' button. + +![alt](/content/sdai_strategy/sdai_request_withdrawal.jpeg) + +When you click 'withdraw', your Wallet will guide you through the next steps. Just follow the instructions provided there to complete the transaction. + +Remember, when you withdraw, you won't receive your assets in the form they were when you deposited them. Instead, you'll get them in the form of DAI, which is the underlying asset used in the sDAI strategy. This means that no matter what type of asset you initially deposited, what you get when you withdraw will always be DAI. + +## How to claim a withdrawal + +After you have decided to withdraw your assets and made a request, Nimbora takes over the task of processing this request. This involves preparing your assets in order to be transferred back to your Wallet, a process that is handled entirely behind the scenes to ensure a smooth and efficient operation. + +In a process that is akin to preparing a parcel for shipment, Nimbora packages your assets and makes them ready for delivery back to you, the owner. During this phase, you don't have to worry about doing anything - Nimbora takes care of all the technical aspects involved. + +Once the processing and preparation phase is finished, a claim button will appear on your screen. This button is your signal that the withdrawal process has reached its final stage and that your assets are ready to be claimed. + +Think of the claim button as a notification that your parcel (in this case, your assets) has arrived at its destination and is ready for pickup. Once you see the claim button, simply click on it to receive your DAI tokens, completing the withdrawal process. \ No newline at end of file diff --git a/docs/concepts/strategies/03- strategy-lStaking.md b/docs/concepts/strategies/03- strategy-lStaking.md index 6c4278b..31b6b51 100644 --- a/docs/concepts/strategies/03- strategy-lStaking.md +++ b/docs/concepts/strategies/03- strategy-lStaking.md @@ -1,7 +1,77 @@ --- id: liquidStaking -title: Liquid Staking -sidebar_position: 4 +title: wstETH Strategy +sidebar_position: 3 --- -# How does liquid straking works \ No newline at end of file +**This startegy provides an opportunity for users to take advantage of their ETH assets** by staking them to a Liquid Staking vault. Through this depositing process, users can put their ETH to work, receive wstETH in exchange and potentially generate profits as time progresses. This strategy merges the stability of ETH with the income-generating capacity of LIDO. + +### What is wstETH + + - wstETH represents a token you receive when you stake Ethereum (ETH) through the Lido platform, allowing you to earn staking rewards while keeping your assets liquid. + + - It mirrors the value of your staked ETH plus accrued staking rewards, enabling its use in various DeFi applications without locking your assets. + + - wstETH can be traded, used as collateral for loans, or utilized in yield farming, providing flexibility and liquidity not available with traditional ETH staking. + + - More about wstETH: + + - [Liquid Staking Docs](https://docs.lido.fi/#liquid-staking) + + - [wstETH concepts](https://help.lido.fi/en/articles/5231836-what-is-lido-s-wsteth) + +### What is Lido + + - Lido enables earning on digital tokens with liquidity maintained for DeFi application use, through network-specific staking pools. + + - It offers st[token]s for flexible transfer and use in DeFi, diverging from traditional locked staking. + + - Lido is governed by a DAO, which is responsible for managing protocol parameters and selecting node operators. + + - Primarily focusing on Ethereum, Lido's governance is implemented through the ERC20 LDO token, with st[token]s representing users' staked assets and accumulated rewards. + + - More about Lido: + - [Webside](https://lido.fi/) + - [Docs](https://docs.lido.fi/#what-is-lido) + - [Analytics](https://dune.com/lido/lido-dashboards-catalogue) + - [Lido on Twitter](https://twitter.com/lidofinance) + +## How to deposit + +To get started with the Liquid Staking strategy, your first step is to establish a connection with Nimbora. This connection can be facilitated through supported wallets, such as Argent or Braavos. Make sure you have a balance of ETH tokens in your chosen wallet. + +![alt](/content/wallet_connect.jpeg) + +Once you're connected to Nimbora, locate and choose the Liquid Staking strategy. This will show you key metrics such as Annual Percentage Rate (APR) and Total Value Locked (TVL). Also, there will be an option to input the kind and quantity of tokens you wish to contribute to the Liquid Staking strategy. The resulting quantity of wstETH tokens you're expected to receive upon completion of the transaction will be displayed. + +![alt](/content/liquid_strategy/eth_deposit.jpeg) + +The quantity of wstETH tokens you accumulate could fluctuate based on the specific asset you contribute. + +![alt](/content/liquid_strategy/wsteth_return.jpeg) + +Once you've chosen the token type and quantity for deposit, press the "deposit" button and adhere to the steps provided by your wallet (Argent or Braavos) to finalize the transaction. + +![alt](/content/liquid_strategy/wsteth_tx.jpeg) + +## How to request a withdrawal + +If you've been participating in the Liquid Staking strategy and wish to retrieve your assets, it's entirely possible. However, it's crucial to understand that Nimbora can't handle the withdrawal request for you. You'll need to carry out the process yourself, but rest assured, it's straightforward. + +The first step is determining the amount you want to reclaim. This could be the total or a part of your assets. After deciding, find and select the 'withdraw' option. + +![alt](/content/liquid_strategy/wsteth_request_withdrawal.jpeg) + +Upon selecting 'withdraw', your Wallet will direct you through the subsequent stages. Simply adhere to the instructions therein to finalize the transaction. + +Please note, the assets you retrieve won't be in the same form as when you deposited them. You'll receive them as ETH, the fundamental asset used in the Liquid Staking strategy. This implies that regardless of the type of asset you initially deposited, you'll always receive ETH upon withdrawal. + +## How to claim a withdrawal + +After you've requested to withdraw your assets, the responsibility for processing this request shifts to Nimbora. This process entails prepping your assets for transfer back to your Wallet, all of which is managed behind-the-scenes by Nimbora to ensure seamless and efficient operation. + +Think of this process as preparing a package for shipping. Nimbora handles the packaging of your assets and readies them for return to you, the owner. During this stage, you can sit back and relax - Nimbora takes over all the technical intricacies involved. + +Upon completion of the asset processing and preparation phase, a 'claim' button will appear on your screen. This button signals the final stage of the withdrawal process, indicating that your assets are ready for claiming. + +The 'claim' button serves as a notification that your package (in this case, your assets) has reached its final destination and is ready for collection. Once you see the 'claim' button, just click on it to receive your ETH tokens. This action concludes the withdrawal process. \ No newline at end of file diff --git a/docs/concepts/strategies/_category_.json b/docs/concepts/strategies/_category_.json index c4769cc..7940306 100644 --- a/docs/concepts/strategies/_category_.json +++ b/docs/concepts/strategies/_category_.json @@ -1,5 +1,5 @@ { "label": "Strategies", - "position": 4, + "position": 3, "collapsed": false } \ No newline at end of file diff --git a/docs/contracts/architecture/L1_arch.md b/docs/contracts/architecture/L1_arch.md index b49cd18..5d9ed09 100644 --- a/docs/contracts/architecture/L1_arch.md +++ b/docs/contracts/architecture/L1_arch.md @@ -8,12 +8,11 @@ sidebar_position: 2 ### Pooling Manager -The pooling manager plays an intermediate role with L1 strategies and L2 communication. The contract receives L2 user's requests, to deposit or withdraw their assets from the strategies. Also, it generates [reports](/docs/concepts/reports.md) based on the user's actions on the different strategies and sends this information back to the [L2 Pooling Manager](/docs/contracts/architecture/L2_arch.md#pooling-manager). +The pooling manager plays an intermediate role with L1 strategies and L2 communication. The contract receives L2 user's requests, to deposit or withdraw their assets from the strategies. Also, it generates [reports](/docs/contracts/guides/reports) based on the user's actions on the different strategies and sends this information back to the [L2 Pooling Manager](/docs/contracts/architecture/L2_arch.md#pooling-manager). ### Strategy The Strategy contract handles commands from the L1 Pooling Manager and connects it to the targeted strategies. There will be one Strategy Contract addapter for each strategy Nimbora supports. This design enables full scalability regardless of the amount of strategies the platform handles or future integrations. -Nimbora Yield DEX off-chain services allow for the indexing and processing L1 and L2 reports. For more details, please check this link. ![l1_arch](/content/L1_arch.png) \ No newline at end of file diff --git a/docs/contracts/architecture/L2_arch.md b/docs/contracts/architecture/L2_arch.md index 7cf9c2b..b5d5ee6 100644 --- a/docs/contracts/architecture/L2_arch.md +++ b/docs/contracts/architecture/L2_arch.md @@ -8,20 +8,20 @@ sidebar_position: 3 ### Pooling Manager -The pooling manager plays an intermediate role with L2 Token Manager and L1 communication. The idea is to significantly reduce gas costs on L1 transactions by packing user's requests and mutualizing bridge transfer. It is also responsible for registering all available strategies and processes incoming strategy [reports](/docs/concepts/reports.md) from L1. +The pooling manager plays an intermediate role with L2 Token Manager and L1 communication. The idea is to significantly reduce gas costs on L1 transactions by packing user's requests and mutualizing bridge transfer. It is also responsible for registering all available strategies and processes incoming strategy [reports](/docs/contracts/guides/reports) from L1. This design enables isolation between startegies thus, if one strategy report fails, it will not affect other strategies. ### Pooling Factory -The Pooling Factory is a contract able to deploy new Strategies on L2. When it does, it generates two contracts for each strategy. One Token Manager contract and on Token contract. Also, it makes sure that this two newly deployed contracts are linked to the correct strategy on L1, enabling users to interact with it. +The Pooling Factory is a contract able to deploy new Strategies on L2. When it does, it generates two contracts for each strategy. One Token Manager contract and one Token contract. Also, it makes sure that this two newly deployed contracts are linked to the correct strategy on L1, enabling users to interact with it. ### Token Manager -The token manager contains all the logic for strategy accountability. This is achieved through the strategy [reports](/docs/concepts/reports.md). Setting the share price at each epoch and working as an entry point for deposit and withdraw the Token Manager is the principal contract users will interact with in order to use Nimbora. +The Token Manager contains all the logic for strategy accountability. This is achieved through the strategy [reports](/docs/contracts/guides/reports). Setting the share price at each epoch and working as an entry point for deposit and withdraw, the Token Manager is the principal contract users will interact with in order to use Nimbora. ### Token -The Token contract represents users's share of the L1 strategy pool, increasing in value at each epoch. Since the Token contract is based on the ERC20 standard, it can be used in DeFi through the Starknet ecosystem. +The Token contract represents users's share of the L1 strategy pool, increasing in value at each epoch. Since the Token contract is based on the ERC20 standard, it can be used in DeFi through the [Starknet](/docs/concepts/overview#starknet) ecosystem. ![l2_arch](/content/L2_arch.png) \ No newline at end of file diff --git a/docs/contracts/architecture/overview.md b/docs/contracts/architecture/overview.md index f91d991..87360f1 100644 --- a/docs/contracts/architecture/overview.md +++ b/docs/contracts/architecture/overview.md @@ -6,14 +6,31 @@ sidebar_position: 1 # Architecture Overview +## **Introduction** -## Problem +This document aims to delineate the architectural framework of the Nimbora Yield DEX system comprehensively. It employs various architectural perspectives to portray the multifaceted components and interactions within the system. The objective is to furnish stakeholders with an in-depth understanding of the system's structural blueprint. -Users want to interact with DEFI protocols to earn yield and increase their portfolio. Ethereum Mainnet is the most secure and one of the web3 chains that contain the biggest number of DEFI protocols and bigger liquidity in the ecosystem. A famous chain means lots of users, which means higher gas fees. Interacting with a DEFI protocol becomes expensive as the gas unit required to do a simple stake, swap, or withdraw can cost $$ or $$$ depending on the gas price. +## **Problem Statement** -## Solution +A significant challenge encountered by users within the Ethereum Mainnet ecosystem pertains to the elevated gas fees associated with transactions. The Ethereum Mainnet, renowned for its robust security mechanisms, hosts an extensive array of DEFI protocols accompanied by considerable liquidity pools. This ecosystem's popularity invariably leads to escalated transaction costs, rendering operations such as staking, swapping, or withdrawing assets financially burdensome for users. -Nimbora Sync Yield allows users to access L1 yields from L2 without delay, additional gas fees, and liquidity requirements. This is made possible by emitting a share token representing a layer one yield token. Share price is updated at each report, which informs L2 of the yield generated by the L1 strategy. +## **Solution Overview** + +To mitigate the aforementioned issue, the Nimbora Yield DEX system introduces an innovative solution facilitating user access to Layer 1 (L1) yields through a Layer 2 (L2) framework without incurring additional gas fees, facing delays, or meeting extra liquidity prerequisites. This system hinges on the issuance of a proprietary share token that mirrors the value of an L1 yield token. The valuation of the share token is regularly updated based on yield reports from L1 strategies, thereby informing L2 users of the accrued yield in a timely and efficient manner. + +## **Architectural Framework** + +The architectural design of the Nimbora Yield DEX system is fundamentally built around the share token mechanism. This core component serves as the linchpin for the system's operational functionality, enabling seamless integration between L1 yield generation and L2 accessibility. + +### **Architectural Views** + +- **Structural View:** This view focuses on the system's static components, such as the share token and its interactions with both the L1 and L2 networks. +- **Behavioral View:** This perspective outlines the dynamic processes within the system, including the mechanism for updating share token values and the flow of yield information from L1 to L2. +- **Deployment View:** This aspect details the system's infrastructure requirements and deployment strategies, ensuring optimal performance and scalability. + +## **Conclusion** + +The Nimbora Yield DEX system introduces a pioneering approach to circumventing the high transaction fees associated with the Ethereum Mainnet. By bridging L1 yield generation with L2 accessibility, without imposing additional costs or requirements on users, it offers a viable solution for cost-efficient interaction with DEFI protocols. This architectural design document provides a foundational understanding of the system's structure and functionality, serving as a guide for further development and implementation efforts. ## Contact architecture diff --git a/docs/contracts/deployed/mainnet_contracts.md b/docs/contracts/deployed/mainnet_contracts.md index 9886c5f..8266f9f 100644 --- a/docs/contracts/deployed/mainnet_contracts.md +++ b/docs/contracts/deployed/mainnet_contracts.md @@ -6,15 +6,23 @@ sidebar_position: 2 ## L1 Mainnet contracts -Some contracts here +| Contract Name | Class Hash | +|----------------------------------------------------------------------------------------------------|----------------------------------------| +| [Pooling Manager](https://etherscan.io/address/0x56B4518E4053eB3C24f68852899F7a6d57530caF) | Communication between L1-L2 strategies | +| [Saving Dai Strategy](https://etherscan.io/address/0xAFa27423F3bb4c0337946dDcd1802588807571bf) | sDAI strategy | +| [wstETH Strategy](https://etherscan.io/address/0xE5e2134e536fbfD7513094646E27C401bbb03eF6) | Liquid Staking strategy with wstETH | -## L2 Mainnet Class Hash + + +## L2 Mainnet Contracts You can declare a contract only once on each network. So if you don't do any modification into our current contract implementation you may face an error while declaring. Therefore here you can find the current class hash of each contract on Mainnet. -| Contract Name | Class Hash | -|--------------------------------------------------------------------------------------------------------------------------|------------------| -| [Pooling Manager](https://starkscan.co/class/0x05adb7661d0dcb3cc5fbe69380846fb7662c92f1943fcf609c51b756cae7d411) | Register and communication between L1-L2 strategies | -| [Factory](https://starkscan.co/class/0x0581277daf0e409c2537979108b7eb4a5cec3624db552c35f8f6acc9a3ac937b) | Deploy new strategies | -| [Token Manager](https://starkscan.co/class/0x03be98338455134abae1d830802a162cd81b24ddb38a868ec9c6a4341ecd7210) | Strategy accountability | -| [Token](https://starkscan.co/class/0x0720f601c0432ab03e12df99c2b215e7ab9a9c12e1b4d8b0473e18bbb3213bea) | L1 strategy yield-bearing token | \ No newline at end of file +| Contract Name | Class Hash | +|--------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------| +| [Pooling Manager](https://starkscan.co/contracts/0x065a953f89a314a427e960114c4b9bb83e0e4195f801f12c25e4a323a76da0a9) | Register and communication between L1-L2 strategies | +| [Factory](https://starkscan.co/contract/0x04a1436a5b9074d1682b58d368e4c4d5cafccc3f048b8e96c5c815bae7c7d466) | Deploy new strategies | +| [Token Manager sDAI](https://starkscan.co/contract/0x02ab4c62add88f102f1f1f3ff6185e5fc00a3ffccf1b7b85505615f68096feed) | Strategy accountability | +| [Nimbora Token sDAI](https://starkscan.co/contract/0x23309ad3a5d9f7311460d6c65181dca024c4067a1fb68dfd6dae370551f2098) | L1 strategy yield-bearing sDAI token | +| [Token Manager ETH](https://starkscan.co/contract/0x0790370ce248020ee58e413a0d6c82e8250248aa346a90abc293c52d8bef9c1b) | L1 strategy yield-bearing token | +| [Nimbora Token ETH](https://starkscan.co/contract/0xe7cf77a75239f3e704ff11160ac5935971115e5c359a679fc9612900e8ce19) | L1 strategy yield-bearing token | \ No newline at end of file diff --git a/docs/contracts/deployed/testnet_contracts.md b/docs/contracts/deployed/testnet_contracts.md index bcca426..2b28dca 100644 --- a/docs/contracts/deployed/testnet_contracts.md +++ b/docs/contracts/deployed/testnet_contracts.md @@ -4,19 +4,22 @@ title: Testnet sidebar_position: 1 --- -## L1 Goerli Contracts +## L1 Sepolia Contracts -Some contracts here +| Contract Name | Class Hash | +|------------------------------------------------------------------------------------------------------------|----------------------------------------| +| [Pooling Manager](https://sepolia.etherscan.io/address/0xf68f17fCcf5cB9556c303227B26e53445C9975A8) | Communication between L1-L2 strategies | +| [STRK Strategy](https://sepolia.etherscan.io/address/0xAFa27423F3bb4c0337946dDcd1802588807571bf) | STRK strategy | -## L2 Goerli Class Hash + + +## L2 Sepolia Contracts You can declare a contract only once on each network. So if you don't do any modification into our current contract implementation you may face an error while declaring. Therefore here you can find the current class hash of each contract on Goerli. -| Contract Name | Class Hash | -|----------------------------------------------------------------------------------------------------------------------------------|------------------| -| [Pooling Manager](https://testnet.starkscan.co/class/0x05adb7661d0dcb3cc5fbe69380846fb7662c92f1943fcf609c51b756cae7d411) | Register and communication between L1-L2 strategies | -| [Token Manager](https://testnet.starkscan.co/class/0x03be98338455134abae1d830802a162cd81b24ddb38a868ec9c6a4341ecd7210) | Strategy accountability | -| [Token Mock](https://testnet.starkscan.co/class/0x00da57dbb24ceb46a3901f148442e0d591528baba485ee84ed6d4948dedf12e5) | Yield-bearing token for testing purposes | -| [Token](https://testnet.starkscan.co/class/0x0720f601c0432ab03e12df99c2b215e7ab9a9c12e1b4d8b0473e18bbb3213bea) | L1 strategy yield-bearing token | -| [Token Bridge](https://testnet.starkscan.co/class/0x00de6d9bd84775dd221273e833dc44946da586483cf822e0021385de95964700) | L1-L2 Bridge | -| [Factory](https://testnet.starkscan.co/class/0x0581277daf0e409c2537979108b7eb4a5cec3624db552c35f8f6acc9a3ac937b) | Deploy new strategies | +| Contract Name | Class Hash | +|----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------| +| [Pooling Manager](https://sepolia.starkscan.co/contract/0x384ec344325e87627749e26d1c7c4eeaa086e9b61af2cdffd8f8c7ad83656d0) | Register and communication between L1-L2 strategies | +| [Token Manager STRK](https://sepolia.starkscan.co/contract/0x01185df466dcbc2c8875ef5c01323a4e73cf5fd8cd87dbfb29ba090b21f2af6f) | Strategy accountability | +| [Nimbora Token](https://sepolia.starkscan.co/contract/0x04ab68869fc27e129d82ec18383fac7c265e32301274aad398ea793418fcdffd) | L1 strategy yield-bearing token | +| [Factory](https://sepolia.starkscan.co/contract/0xfcce853530b62df10c59b398a60aafc28bf7c9a447b83a89df0ca65bcf4b41) | Deploy new strategies | diff --git a/docs/contracts/guides/epoch.md b/docs/contracts/guides/epoch.md new file mode 100644 index 0000000..b008c28 --- /dev/null +++ b/docs/contracts/guides/epoch.md @@ -0,0 +1,12 @@ +--- +id: epoch +title: Epoch +sidebar_position: 5 +--- + +# Epoch + +On Nimbora, keeping track of each processed batch is crucial. Since [Starknet](/docs/concepts/overview#starknet) and Ethereum are asynchronous in their essence, we need a mechanism to synchronize the contracts state between both chains. To achieve that, each processed and closed batch sent from L2 to L1 contains an epoch. This way we ensure that: + +- Batches are processed in the correct order. +- No batch can be processed more than once. \ No newline at end of file diff --git a/docs/contracts/guides/reports.md b/docs/contracts/guides/reports.md new file mode 100644 index 0000000..0b113f3 --- /dev/null +++ b/docs/contracts/guides/reports.md @@ -0,0 +1,27 @@ +--- +id: reports +title: Reports +sidebar_position: 4 +--- + +# Reports + +The reports exist within both L1 and L2 Pooling Manager contracts and they are the means of communication between those two contracts. + +## L1 Reports + +From the L1 Pooling Manager perspective, reports represent messages received by the L1 Pooling Manager contract and they contain relevant data regarding the strategy status. + +More specifically, they contain the following: +- L1 strategy address. +- L1 net asset value (deposited asset's value). +- The amount to be deposited or withdrawn (to/from the strategy). +- Status of the L1 strategy process. + +With this information, the L1 Pooling Manager can communicate with the Starkgate bridge to fetch and bridge assets to and from L2. Additionally, it can target the strategy it needs to interact with. + +## L2 Reports + +From the L2 Pooling Manager perspective, reports represent incoming messages from L1. This data is used to process and update L2 strategies (Token Manager and Token contracts) according to the new L1 strategy status. Once the L1 data integrity is verified, it enables the contract to fetch bridge assets and later transfer them to users and update the strategy data. + +This report is crucial for synchronizing L1 strategies data with the L2 contract state and it ensures only valid data is processed, all while contract's state remains consistent with L1. diff --git a/docs/sdks/sdk/guides/background.md b/docs/sdks/sdk/guides/background.md index 95c0579..ccb3ca5 100644 --- a/docs/sdks/sdk/guides/background.md +++ b/docs/sdks/sdk/guides/background.md @@ -26,4 +26,4 @@ Each smart contract offers an Application Binary Interface (ABI), enabling other ### Currency -Currently, the Starknet network uses the ERC20 version of Ethereum (ETH) for transaction fees. ERC20 is a standard used for smart contracts on the Ethereum blockchain for implementing tokens. However, Starknet plans to transition to using its own native token, STRK, for transaction costs in the future. This shift will occur to further establish Starknet's ecosystem and potentially bring about new dynamics and utilities within the network. \ No newline at end of file +Currently, the [Starknet](/docs/concepts/overview#starknet) network uses the ERC20 version of Ethereum (ETH) for transaction fees. ERC20 is a standard used for smart contracts on the Ethereum blockchain for implementing tokens. However, Starknet plans to transition to using its own native token, STRK, for transaction costs in the future. This shift will occur to further establish Starknet's ecosystem and potentially bring about new dynamics and utilities within the network. \ No newline at end of file diff --git a/docs/sdks/sdk/guides/withdrawing_strategy.md b/docs/sdks/sdk/guides/withdrawing_strategy.md index cd7a26e..1b98e57 100644 --- a/docs/sdks/sdk/guides/withdrawing_strategy.md +++ b/docs/sdks/sdk/guides/withdrawing_strategy.md @@ -4,12 +4,16 @@ title: Withdrawing from strategy sidebar_position: 4 --- -A withdrawal involves transferring assets from the Layer 2 Token Manager contract on the StarkNet network to the Ethereum mainnet. This is a two-step operation. +A withdrawal involves transferring assets from the Layer 2 Token Manager contract on the [Starknet](/docs/concepts/overview#starknet) network to the Ethereum mainnet. This is a two-step operation. First, you call the `requestWithdrawal` function, specifying the number of shares to be converted back into Ethereum tokens. These shares reflect the balance in the Token Manager contract. After the withdrawal request is processed and finalized on the StarkNet network, you can claim the withdrawal by calling the `claimWithdrawal` function which moves the tokens back to your Ethereum account. +:::info +The **Underlying** asset represent the tokens users will use to deposit within a strategy. For example, the underlying token for the sDAI strategy is DAI. +::: + ### Request Withdrawal To make a withdrawal request from the token manager, users need to invoke the `requestWithdrawal` function. This function requires the user to specify the amount of shares they wish to exchange for the underlying tokens. diff --git a/docs/sdks/sdk/overview.md b/docs/sdks/sdk/overview.md index bb4089c..b141823 100644 --- a/docs/sdks/sdk/overview.md +++ b/docs/sdks/sdk/overview.md @@ -8,10 +8,12 @@ sidebar_position: 1 ## About us -Nimbora is a 1-click DeFi pooling product, incubated by the SpaceShard team. It is a platform that offers you the opportunity to interact with your favorite Layer 1 (L1) protocols at a fraction of the cost of Layer 2 (L2) solutions. The idea behind it is scaling L1 DeFi via L2 execution seamlessly while super-low fees. The technology behind Nimbora is Zero-Knowledge Rollups, currently Starknet - a permissionless decentralized ZK-Rollup that operates as an L2 network over Ethereum. To put it simply, Nimbora scales L1 DeFi products completely trustlessly using rollups. +Nimbora is a 1-click DeFi pooling product, incubated by the SpaceShard team. It is a platform that offers you the opportunity to interact with your favorite Layer 1 (L1) protocols at a fraction of the cost of Layer 2 (L2) solutions. The idea behind is to scale L1 DeFi via L2 execution seamlessly while super-low fees. The technology behind Nimbora is Zero-Knowledge Rollups, currently [Starknet](/docs/concepts/overview#starknet) - a permissionless decentralized ZK-Rollup that operates as an L2 network over Ethereum. To put it simply, Nimbora scales L1 DeFi products completely trustlessly using rollups. You can learn more about Nimbora by following us on [Medium](https://medium.com/@Nimbora), [Twitter](https://twitter.com/nimbora_io), or by joining our [Discord group](https://discord.gg/feJJnkmYzc). +You can also check out our founder's talk from ETHDenver about the [experience of building Nimbora: a Cross-Chain Yield DEX on Starknet](https://twitter.com/i/status/1762609002435727749) + ### About the SDK This SDK helps you integrate with Nimbora YieldDex. diff --git a/docusaurus.config.js b/docusaurus.config.js index 312ae0d..da32822 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -8,7 +8,7 @@ import {themes as prismThemes} from 'prism-react-renderer'; /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'Nimbora Yield Dex', + title: 'Nimbora Docs', tagline: 'Yield Dexing on Starknet', favicon: 'img/Social media icon.png', @@ -70,7 +70,7 @@ const config = { { to: 'docs/concepts/overview', position: 'left', - label: 'Concepts', + label: 'About Nimbora', className: 'V3_active' }, { @@ -86,7 +86,7 @@ const config = { className: 'V3_active' }, { - href: 'https://github.com/0xSpaceShard/nimbora_yields_l2', + href: 'https://github.com/0xSpaceShard/nimbora-yields-l2-public', label: 'GitHub', position: 'right', }, @@ -96,42 +96,79 @@ const config = { style: 'light', links: [ { - title: 'Docs', + title: 'Devs', items: [ - { - to: 'docs/concepts/overview', - label: 'Concepts', - }, { to: 'docs/contracts/architecture/overview', - label: 'Contracts', + label: 'Smart Contracts', }, { to: 'docs/sdks/sdk/overview', label: 'SDK', }, + { + to: 'https://github.com/0xSpaceShard/nimbora-yields-l2-public', + label: 'Github', + }, + { + to: 'http://discord.gg/nimbora', + label: 'Ask questions', + } + ], }, { - title: 'Community', + title: 'About', items: [ { - label: 'Discord', - href: 'https://discord.gg/AaUszuNc', + label: 'What is Nimbora', + href: '/docs/concepts/overview', }, { - label: 'Twitter', - href: 'https://twitter.com/Nimbora_', + label: 'Nimbora Integrations', + href: 'https://www.nimbora.io/integrations', + }, + { + label: 'Blogs', + href: 'https://www.medium.com/@Nimbora', }, + { + label: 'dAPP', + href: 'https://app.nimbora.io/', + }, + { + label: 'Brand Assets', + href: 'https://www.nimbora.io/toolkit', + } ], }, { - title: 'More', + title: 'Community', items: [ { - label: 'GitHub', - href: 'https://github.com/0xSpaceShard', + label: 'Twitter', + href: 'https://twitter.com/Nimbora_', }, + { + label: 'Discord', + href: 'http://discord.gg/nimbora', + }, + { + label: 'LinkedIn', + href: 'https://www.linkedin.com/company/nimbora/', + }, + { + label: 'Starknet Forum', + href: 'https://community.starknet.io/t/nimboras-defi-revolution-enhancing-accessibility-affordability-and-composability/104298' + }, + { + label: 'Zealy', + href: 'https://zealy.io/c/nimbora' + }, + { + label: 'Galxe', + href: 'https://galxe.com/Nimbora' + } ], }, ], diff --git a/package.json b/package.json index 4c55ec2..d3b7216 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "clear": "docusaurus clear", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" + "write-heading-ids": "docusaurus write-heading-ids", + "prepare": "yarn run snyk-protect", + "snyk-protect": "snyk-protect" }, "dependencies": { "@docusaurus/core": "3.1.1", @@ -24,7 +26,8 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "react-feather": "^2.0.10", - "theme": "^0.1.0" + "theme": "^0.1.0", + "@snyk/protect": "latest" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.1.1", @@ -44,5 +47,6 @@ }, "engines": { "node": ">=18.0" - } + }, + "snyk": true } diff --git a/src/css/custom.css b/src/css/custom.css index 1c4d278..b993035 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -39,3 +39,13 @@ body { font-family: 'Nimbora', sans-serif; } +.card-image { + width: 10%; + height: auto; + object-fit: cover; + transition: transform 0s ease-in-out; +} + +.card-image:hover { + transform: scale(1.2); +} diff --git a/src/pages/index.js b/src/pages/index.js index caa82f2..1979dc2 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,12 +1,17 @@ import Link from '@docusaurus/Link'; -import Discord from '@site/static/img/discord.svg' -import GitHub from '@site/static/img/github.svg' +import Discord from '@site/static/img/discord.svg'; +import GitHub from '@site/static/img/github.svg'; +import Medium from '@site/static/img/medium.svg'; +import Bora from '@site/static/img/bora.svg'; +import Nimi from '@site/static/img/nimi.svg'; +import Spacebbit from '@site/static/img/spacebbit.svg'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import styled from '@emotion/styled'; import ThemedImage from '@theme/ThemedImage'; +import '../css/custom.css'; -import { ArrowUpRight as LinkIcon, BookOpen, HelpCircle, Info, MessageCircle } from 'react-feather'; +import { ArrowUpRight as LinkIcon, BookOpen, HelpCircle, Info } from 'react-feather'; export const actions = [ @@ -14,28 +19,26 @@ export const actions = [ title: 'What is Nimbora', icon: HelpCircle, to: '/docs/concepts/overview', - text: 'Learn about Nimbora and how to interact with it L1 and L2 strategies', - }, - { - title: 'Integrate with Nimbora', - icon: BookOpen, - to: '/docs/sdks/sdk/overview', - text: 'Learn how to integrate Nimbora with your application', + text: 'Learn how to interact with L1 & L2 strategies on Nimbora', + image: Spacebbit }, { title: 'Nimbora Smart Contracts', icon: Info, to: '/docs/contracts/architecture/overview', text: 'Learn how to start using Nimbora smart contracts', + image: Bora }, + { + title: 'Integrate with Nimbora', + icon: BookOpen, + to: '/docs/sdks/sdk/overview', + text: 'Learn how to integrate Nimbora with your application', + image: Nimi + } ] export const dAppGuides = [ - { - title: 'Token Manager', - to: '/docs/sdks/sdk/guides/token_manager', - text: 'Learn how to use the Token Manager contract', - }, { title: 'Deposit', to: '/docs/sdks/sdk/guides/deposit', @@ -46,11 +49,16 @@ export const dAppGuides = [ to: '/docs/sdks/sdk/guides/withdraw', text: 'Learn how to withdraw funds from Nimbora smart contracts', }, + { + title: 'Token Manager', + to: '/docs/sdks/sdk/guides/token_manager', + text: 'Learn how to use the Token Manager contract', + }, ] export const strategyGuides = [ { - title: 'Liquity Strategy', + title: 'LUSD Strategy', to: '/docs/concepts/strategies/lusd', text: 'Learn how to borrow LUSD', }, @@ -231,7 +239,7 @@ const StyledIcon = styled.div` export default function Home() { const {siteConfig} = useDocusaurusContext(); return ( - +
+ @@ -317,7 +326,7 @@ export default function Home() {
- +
@@ -326,11 +335,13 @@ export default function Home() {
- + - + + +
-

Forum

+

Medium

Discuss governance and more.

diff --git a/static/content/L1_arch.png b/static/content/L1_arch.png index 60dc865..1dd5c06 100644 Binary files a/static/content/L1_arch.png and b/static/content/L1_arch.png differ diff --git a/static/content/L2_arch.png b/static/content/L2_arch.png index bdf7fd6..84272d7 100644 Binary files a/static/content/L2_arch.png and b/static/content/L2_arch.png differ diff --git a/static/content/liquid_strategy/eth_deposit.jpeg b/static/content/liquid_strategy/eth_deposit.jpeg new file mode 100644 index 0000000..03c7cf2 Binary files /dev/null and b/static/content/liquid_strategy/eth_deposit.jpeg differ diff --git a/static/content/liquid_strategy/wsteth_request_withdrawal.jpeg b/static/content/liquid_strategy/wsteth_request_withdrawal.jpeg new file mode 100644 index 0000000..24f1216 Binary files /dev/null and b/static/content/liquid_strategy/wsteth_request_withdrawal.jpeg differ diff --git a/static/content/liquid_strategy/wsteth_return.jpeg b/static/content/liquid_strategy/wsteth_return.jpeg new file mode 100644 index 0000000..769ac74 Binary files /dev/null and b/static/content/liquid_strategy/wsteth_return.jpeg differ diff --git a/static/content/liquid_strategy/wsteth_tx.jpeg b/static/content/liquid_strategy/wsteth_tx.jpeg new file mode 100644 index 0000000..7515bb9 Binary files /dev/null and b/static/content/liquid_strategy/wsteth_tx.jpeg differ diff --git a/static/content/sdai_strategy/dai_deposit.jpeg b/static/content/sdai_strategy/dai_deposit.jpeg new file mode 100644 index 0000000..c2de4c6 Binary files /dev/null and b/static/content/sdai_strategy/dai_deposit.jpeg differ diff --git a/static/content/sdai_strategy/deposit_tx.jpeg b/static/content/sdai_strategy/deposit_tx.jpeg new file mode 100644 index 0000000..401a9b8 Binary files /dev/null and b/static/content/sdai_strategy/deposit_tx.jpeg differ diff --git a/static/content/sdai_strategy/sdai_request_withdrawal.jpeg b/static/content/sdai_strategy/sdai_request_withdrawal.jpeg new file mode 100644 index 0000000..ff1bcb2 Binary files /dev/null and b/static/content/sdai_strategy/sdai_request_withdrawal.jpeg differ diff --git a/static/content/sdai_strategy/sdai_return.jpeg b/static/content/sdai_strategy/sdai_return.jpeg new file mode 100644 index 0000000..bd7af8d Binary files /dev/null and b/static/content/sdai_strategy/sdai_return.jpeg differ diff --git a/static/content/sdai_strategy/sdai_roi.jpeg b/static/content/sdai_strategy/sdai_roi.jpeg new file mode 100644 index 0000000..0ceaa0a Binary files /dev/null and b/static/content/sdai_strategy/sdai_roi.jpeg differ diff --git a/static/content/sdai_strategy/sdai_strategy.jpeg b/static/content/sdai_strategy/sdai_strategy.jpeg new file mode 100644 index 0000000..cd8b80a Binary files /dev/null and b/static/content/sdai_strategy/sdai_strategy.jpeg differ diff --git a/static/content/sdai_strategy/wallet_access_history.jpeg b/static/content/sdai_strategy/wallet_access_history.jpeg new file mode 100644 index 0000000..458528d Binary files /dev/null and b/static/content/sdai_strategy/wallet_access_history.jpeg differ diff --git a/static/content/wallet_connect.jpeg b/static/content/wallet_connect.jpeg new file mode 100644 index 0000000..1c4b082 Binary files /dev/null and b/static/content/wallet_connect.jpeg differ diff --git a/static/img/bora.svg b/static/img/bora.svg new file mode 100644 index 0000000..01f6400 --- /dev/null +++ b/static/img/bora.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/medium.svg b/static/img/medium.svg new file mode 100644 index 0000000..03a0fa4 --- /dev/null +++ b/static/img/medium.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/static/img/nimi.svg b/static/img/nimi.svg new file mode 100644 index 0000000..3a5f564 --- /dev/null +++ b/static/img/nimi.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/spacebbit.svg b/static/img/spacebbit.svg new file mode 100644 index 0000000..7401347 --- /dev/null +++ b/static/img/spacebbit.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock index f050989..89dca77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1946,6 +1946,11 @@ p-map "^4.0.0" webpack-sources "^3.2.2" +"@snyk/protect@^1.1280.0": + version "1.1280.0" + resolved "https://registry.yarnpkg.com/@snyk/protect/-/protect-1.1280.0.tgz#4353a5d5ef11b1f61e70fd602f4ce60fffac7b88" + integrity sha512-huyztYdA2UzgEG4JGlJBDs8mnQyHisXbH6Onv58nrIjFa2mPhsZx2l0/Ey6HKOKva+ZlpMYM3hz4+iboIlXfNw== + "@svgr/babel-plugin-add-jsx-attribute@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba"