合约集成指南
找到如何开始在Euler智能合约上工作
模块
Euler协议是通过模块系统连接在一起的智能合约的集合。每个模块处理协议的特定区域,因此根据您想要做什么,您将与几个不同的合约地址进行交互。
一些模块是全局的,例如:
markets:激活市场,进入/退出市场,查询各种市场相关信息。
exec:批量请求、流动性延期(即闪电贷款)
liquidation:扣押违规用户的资产
其他模块是特定用于资产的:
Deposit and withdraw
为了投资资产以赚取利息,您需要“存入”eToken。
// Approve the main euler contract to pull your tokens:
IERC20(underlying).approve(EULER_MAINNET, type(uint).max);
// Use the markets module:
IEulerMarkets markets = IEulerMarkets(EULER_MAINNET_MARKETS);
// Get the eToken address using the markets module:
IEulerEToken eToken = IEulerEToken(markets.underlyingToEToken(underlying));
// Deposit 5.25 underlying tokens (assuming 18 decimal places)
// The "0" argument refers to the sub-account you are depositing to.
eToken.deposit(0, 5.25e18);
eToken.balanceOf(address(this));
// -> internal book-keeping value that doesn't increase over time
eToken.balanceOfUnderlying(address(this));
// -> 5.25e18
// ... but check back next block to see it go up (assuming there are borrowers)
// Later on, withdraw your initial deposit and all earned interest:
eToken.withdraw(0, type(uint).max);借入和赎回
如果您想借入一项资产,您必须有足够的抵押品,并“进入”抵押品市场。
闪电贷
Euler 将闪电贷内置,作为协议的一个组成部分。有两种方法可以进行闪电贷,一种是低级 Euler 特定的方式,另一种是使用 EIP-3156 兼容的闪电贷适配器。
低级闪电贷
进行闪电贷的低级方法是推迟对您账户进行流动性检查。 Euler 合约将回调到您的合约,您可以在其中执行 borrow() 之类的操作,而不必担心违反流动性。只要您的回调使账户处于非违规状态,交易就会成功完成。
由于Euler仅在持有非零时间的贷款时才收取利息,这导致了无费用的快速贷款。
这是一个示例合约,可以证明这一点:
encodedData 是一个传递参数,可让您将数据传输到回调,而无需存储写入。
EIP-3156 闪电贷
还有一个适配器智能合约,将 Euler 的闪贷功能公开为 EIP-3156 兼容的 API。
如何使用适配器的示例可以在 EIP 文档以及 [Euler 测试套件](https://github.com/euler-xyz/euler-contracts/blob/master/contracts/test/FlashLoanAdaptorTest .sol)。费用值始终为 0。
Last updated