# 合约参考

## IEuler

Euler系统的主存储合约

### moduleIdToImplementation

查找模块的当前实现合约

```
function moduleIdToImplementation(uint moduleId) external view returns (address);
```

参数：

* **moduleId**：引用模块类型的固定常量（即 MODULEID\_\_ETOKEN）

返回：

* 内部地址指定模块的实现代码

### moduleIdToProxy

查找可用于与模块交互的代理（仅对单代理模块有效）

```
function moduleIdToProxy(uint moduleId) external view returns (address);
```

参数：

* **moduleId**：引用模块类型的固定常量（即 MODULEID\_\_MARKETS）

返回：

* 应转换为适当模块接口的地址，即 IEulerMarkets(moduleIdToProxy(2))

### AssetConfig

Euler相关资产的配置

```
struct AssetConfig {
    address eTokenAddress;
    bool borrowIsolated;
    uint32 collateralFactor;
    uint32 borrowFactor;
    uint24 twapWindow;
}
```

## IEulerMarkets

激活和查询市场，维护进入的市场列表

### activateMarket

创建Euler池和关联的 EToken 和 DToken 地址。

```
function activateMarket(address underlying) external returns (address);
```

参数：

* **underlying**：符合 ERC20 标准的代币的地址。基础/参考资产对必须有一个初始化的 uniswap3 池。

返回：

* 创建的 EToken，或现有的 EToken（如果已激活）。

### activatePToken

创建一个 pToken 并在 Euler 上激活它。 pTokens 不能借入的，受保护资产的包装器。

```
function activatePToken(address underlying) external returns (address);
```

* **underlying**：符合 ERC20 标准的代币的地址。该标的(underlying)物必须在 Euler 上已经存在一个激活的市场，并且它必须具有非零抵押因子。

返回：

* 创建的 pToken，如果已经激活，则为现有的。

### underlyingToEToken

给定一个标的(underlying)资产，查找相关的 EToken

```
function underlyingToEToken(address underlying) external view returns (address);
```

参数：

* **underlying**：代币地址

返回：

* EToken 地址，如果未激活，则为地址 (0)

### underlyingToDToken

给定一个标的(underlying)资产，查找相关的 DToken

```
function underlyingToDToken(address underlying) external view returns (address);
```

参数：

* **underlying**：代币地址

返回：

* DToken 地址，如果未激活，则为地址 (0)

### underlyingToPToken

给定一个标的(underlying)资产，查找相关的 PToken

```
function underlyingToPToken(address underlying) external view returns (address);
```

参数：

* **underlying**：代币地址

返回：

* PToken 地址，如果不存在，则为 address(0)

### underlyingToAssetConfig

查找代币的Euler相关配置，并将所有默认值占位符解析为其当前配置的值。

```
function underlyingToAssetConfig(address underlying) external view returns (IEuler.AssetConfig memory);
```

参数：

* **underlying**：代币地址

返回：

* 配置结构

### underlyingToAssetConfigUnresolved

查找代币的 Euler 相关配置，并返回未解析内容（使用默认值占位符）

```
function underlyingToAssetConfigUnresolved(address underlying) external view returns (IEuler.AssetConfig memory config);
```

参数：

* **underlying**：代币地址

返回：

* **config**：配置结构

### eTokenToUnderlying

给定一个 EToken 地址，查找相关的标的(underlying)

```
function eTokenToUnderlying(address eToken) external view returns (address underlying);
```

参数：

* **eToken**：EToken 地址

返回：

* **underlying**：代币地址

### eTokenToDToken

给定一个 EToken 地址，查找关联的 DToken

```
function eTokenToDToken(address eToken) external view returns (address dTokenAddr);
```

参数：

* **eToken**：EToken 地址

返回：

* **dTokenAddr**：DToken 地址

### interestRateModel

查找资产当前配置的利率模型

```
function interestRateModel(address underlying) external view returns (uint);
```

参数：

* **underlying**：代币地址

返回：

* 代表利率模型 (IRM) 的模块 ID

### interestRate

检索资产的当前利率

```
function interestRate(address underlying) external view returns (int96);
```

参数：

* **underlying**：代币地址

返回：

* 以每秒收益率为单位的利率，按 10^27 比例缩放

### interestAccumulator

检索资产的当前利率累加器

```
function interestAccumulator(address underlying) external view returns (uint);
```

参数：

* **underlying**：代币地址

返回：

* 一个模糊的累加器，随着利息的增加而增加

### reserveFee

检索对资产有效的准备金费用

```
function reserveFee(address underlying) external view returns (uint32);
```

参数：

* **underlying**：代币地址

返回：

* 被重定向到储备金的利息金额，作为由 RESERVE\_FEE\_SCALE (4e9) 缩放的分数

### getPricingConfig

检索资产的定价配置

```
function getPricingConfig(address underlying) external view returns (uint16 pricingType, uint32 pricingParameters, address pricingForwarded);
```

参数：

* **underlying**：代币地址

返回：

* **pricingType**：（1=挂钩，2=uniswap3，3=转发）
* **pricingParameters**：如果为 uniswap3 定价类型，则表示使用的 uniswap 池费用，否则未使用
* **pricingForwarded**：如果转发定价类型，那么这是价格转发到的地址，否则地址为（0）

### getEnteredMarkets

检索账户的进入市场列表（启用抵押或借贷的资产）

```
function getEnteredMarkets(address account) external view returns (address[] memory);
```

参数：

* **amount**：用户帐户

返回：

* 标的(underlying)代币地址列表

### 帐户

将资产添加到输入的市场列表，如果已经输入，则不执行任何操作

```
function enterMarket(uint subAccountId, address newMarket) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **newMarket**：标的(underlying)代币地址

### exitMarket

从输入的市场列表中删除资产，如果不存在则不执行任何操作

```
function exitMarket(uint subAccountId, address oldMarket) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **oldMarket**：标的(underlying)代币地址

## IEulerExec

批量执行、流动性检查延期以及获取价格和账户流动性的接口

### LiquidityStatus

账户的流动性状态，无论是整体还是特定资产

```
struct LiquidityStatus {
    uint collateralValue;
    uint liabilityValue;
    uint numBorrows;
    bool borrowIsolated;
}
```

### AssetLiquidity

用于报告账户详细（按资产）流动性的聚合结构

```
struct AssetLiquidity {
    address underlying;
    LiquidityStatus status;
}
```

### EulerBatchItem

批量请求中的单个项目

```
struct EulerBatchItem {
    bool allowError;
    address proxyAddr;
    bytes data;
}
```

### EulerBatchItemResponse

Single item in a batch response 批处理响应中的单个项目

```
struct EulerBatchItemResponse {
    bool success;
    bytes result;
}
```

### liquidity

计算账户的总流动性

```
function liquidity(address account) external view returns (LiquidityStatus memory status);
```

参数：

* **amount**：用户地址

返回：

* **status**：总流动性（所有输入资产的总和）

### detailedLiquidity

计算账户的详细流动性，按资产细分

```
function detailedLiquidity(address account) external view returns (AssetLiquidity[] memory assets);
```

Parameters:

参数：

* **amount**：用户地址

返回：

* **assets**：用户输入的资产列表和每个资产对应的流动性

### getPrice

检索Euler对资产价格的看法

```
function getPrice(address underlying) external view returns (uint twap, uint twapPeriod);
```

参数：

* **underlying**：代币地址

返回：

* **twap**：时间加权平均价格
* **twapPeriod**：TWAP 持续时间，AssetConfig 中的 twapWindow 值，或者如果持续时间不可用，则更少

### getPriceFull

检索 Euler 对资产价格的看法，以及 uniswap 上的当前边际价格

```
function getPriceFull(address underlying) external view returns (uint twap, uint twapPeriod, uint currPrice);
```

参数：

* **underlying**：代币地址

返回：

* **twap**：时间加权平均价格
* **twapPeriod**：TWAP 持续时间，AssetConfig 中的 twapWindow 值，或者如果持续时间不可用，则更少
* **currPrice**：uniswap3 上的当前边际价格（仅参考：未在Euler协议中的任何地方使用）

### deferLiquidityCheck

推迟对账户的流动性检查，以执行再平衡、闪电贷等。msg.sender 必须实现 IDeferredLiquidity检查。

```
function deferLiquidityCheck(address account, bytes memory data) external;
```

参数：

* **account**：延迟流动性的账户。通常地址（this），尽管并非总是如此
* **data**：传递给 onDeferredLiquidityCheck() 回调，因此合约不需要在存储中存储瞬态数据

### 批量调度

在单个交易中执行多个操作

```
function batchDispatch(EulerBatchItem[] calldata items, address[] calldata deferLiquidityChecks) external returns (EulerBatchItemResponse[] memory);
```

参数：

* **items**：要执行的操作列表
* **deferLiquidityChecks**：推迟流动性检查的用户帐户列表

返回：

* 操作结果列表

### EulerBatchExtra

batchDispatch 的结果，但带有额外信息

```
struct EulerBatchExtra {
    EulerBatchItemResponse[] responses;
    uint gasUsed;
    AssetLiquidity[][] liquidities;
}
```

### batchDispatchExtra

调用 batchDispatch，但返回额外信息。仅打算与 callStatic 一起使用。

```
function batchDispatchExtra(EulerBatchItem[] calldata items, address[] calldata deferLiquidityChecks, address[] calldata queryLiquidity) external returns (EulerBatchExtra memory output);
```

参数：

* **items**：要执行的操作列表
* **deferLiquidityChecks**：推迟流动性检查的用户帐户列表
* **queryLiquidity**：返回详细流动性信息的用户帐户列表

返回：

* **output**：带有额外信息的结构

### trackAverageLiquidity

为您的账户启用平均流动性跟踪。操作会花费更多的gas，但在执行清算时你可能会获得额外的好处

```
function trackAverageLiquidity(uint subAccountId, address delegate, bool onlyDelegate) external;
```

参数：

* **subAccountId**：subAccountId 0 表示主账户，1-255 表示子账户。
* **delegate**：您允许使用您的账户平均流动性的好处的另一个账户的地址（如果您不关心，请使用空地址）。另一个地址也必须对应委托给您的帐户。
* **onlyDelegate**：设置此标志以跳过跟踪平均流动性并仅设置委托。

### unTrackAverageLiquidity

为您的账户禁用平均流动性跟踪并移除委托

```
function unTrackAverageLiquidity(uint subAccountId) external;
```

参数：

* **subAccountId**：subAccountId 0 表示主账户，1-255 表示子账户

### getAverageLiquidity

检索账户的平均流动性

```
function getAverageLiquidity(address account) external returns (uint);
```

参数：

* **account**：用户帐户（在 subAccountId 中异或，如果适用）

返回：

* 根据参考资产和风险调整后的平均流动性

### getAverageLiquidityWithDelegate

检索账户或委托账户的平均流动性（如果已设置）

```
function getAverageLiquidityWithDelegate(address account) external returns (uint);
```

参数：

* **account**：用户帐户（在 subAccountId 中，如果适用）

返回：

* 根据参考资产和风险调整后的平均流动性

### getAverageLiquidityDelegateAccount

检索代表账户平均流动性的账户（如果已设置）

```
function getAverageLiquidityDelegateAccount(address account) external view returns (address);
```

参数：

* **account**：用户帐户（在 subAccountId 中异或，如果适用）

返回：

* 平均流动性委托账户

### pTokenWrap

将标的(underlying)代币从发件人的钱包转移到 pToken 包装器中。应为Euler地址设置余量。

```
function pTokenWrap(address underlying, uint amount) external;
```

参数：

* **underlying**：代币地址
* **amount**：以标的单位包装的金额

### pTokenUnWrap

将标的(underlying)代币从 pToken 包装器转移到发送者的钱包。

```
function pTokenUnWrap(address underlying, uint amount) external;
```

参数：

* **underlying**：代币地址
* **amount**：以标的单位展开的金额

### usePermit

将 EIP2612 签名许可，应用于从发送方到Euler合约的目标代币

```
function usePermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
```

参数：

* **token**：代币地址
* **value**：余量值
* **deadline**：许可到期时间戳
* **v**: secp256k1 签名 v
* **r**: secp256k1 签名 r
* **s**: secp256k1 签名 s

### usePermitAllowed

从发送方到Euler合约的目标代币上，应用 DAI 类似（允许的）签名许可

```
function usePermitAllowed(address token, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external;
```

参数：

* **token**：代币地址
* **nonce**：发件人 nonce
* **expiry**：允许到期时间戳
* **allowed**：如果为真，则设置无限制限额，否则设置零限额
* **v**: secp256k1 签名 v
* **r**: secp256k1 签名 r
* **s**: secp256k1 签名 s

### usePermitPacked

将津贴应用于会将签名打包在单个字节参数中的代币

```
function usePermitPacked(address token, uint256 value, uint256 deadline, bytes calldata signature) external;
```

参数：

* **token**：代币地址
* **value**：余量值
* **deadline**：许可到期时间戳
* **signature**：secp256k1 签名编码为 rsv

### doStaticCall

使用任意有效负载对任意地址执行静态调用。

```
function doStaticCall(address contractAddress, bytes memory payload) external view returns (bytes memory);
```

参数：

* **contractAddress**：要调用的合约地址
* **payload**：编码的调用负载

返回：

* **result**：编码返回数据

## IEulerEToken

资产的代币化表示

### name

池名称，即“Euerl池：DAI”

```
function name() external view returns (string memory);
```

### symbol

池符号，即“eDAI”

```
function symbol() external view returns (string memory);
```

### decimals

小数，总是标准化为 18。

```
function decimals() external pure returns (uint8);
```

### underlyingAsset

标的资产地址

```
function underlyingAsset() external view returns (address);
```

### totalSupply

所有余额的总和，用内部记账单位表示（不会增加）

```
function totalSupply() external view returns (uint);
```

### totalSupplyUnderlying

所有余额的总和，以标的单位计（随着利息归集而增加）

```
function totalSupplyUnderlying() external view returns (uint);
```

### balanceOf

特定账户的余额，用内部记账单位表示（不会增加）

```
function balanceOf(address account) external view returns (uint);
```

### balanceOfUnderlying

特定账户的余额，以标的单位计（随着利息归集而增加）

```
function balanceOfUnderlying(address account) external view returns (uint);
```

### reserveBalance

准备金余额，用内部记账单位表示（不会增加）

```
function reserveBalance() external view returns (uint);
```

### reserveBalanceUnderlying

准备金余额，以标的单位计（随着利息归集而增加）

```
function reserveBalanceUnderlying() external view returns (uint);
```

### convertBalanceToUnderlying

考虑当前汇率的情况下，将 eToken 余额转换为标的金额

```
function convertBalanceToUnderlying(uint balance) external view returns (uint);
```

参数：

* **balance**：电子代币余额，以内部记账单位（18 位小数）

返回：

* 标的单位金额（与标的代币相同的小数）

### convertUnderlyingToBalance

考虑当前汇率的情况下，将标的金额转换为 eToken 余额

```
function convertUnderlyingToBalance(uint underlyingAmount) external view returns (uint);
```

参数：

* **underlyingAmount**：标的单位金额（与标的代币相同的小数）

返回：

* **eToken**：余额，以内部记账单位（18 位小数）

### touch

更新利息累加器和总借款、信用准备金、重新设定利率目标并记录资产状态

```
function touch() external;
```

### deposit

将标的代币从发送方转移到Euler池，增加账户的eTokens

```
function deposit(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位为单位（使用 max uint256 获取全部标的代币余额）

### withdraw

将标的代币从 Euler 池转移到发送者，并减少账户的 eToken

```
function withdraw(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位（使用最大 uint256 获得全部池余额）

### mint

铸造 eToken 和相应数量的 dToken（“自借”）

```
function mint(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位计

### burn

使用 eToken 偿还 dToken 债务（“自我偿还”）

```
function burn(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位（使用最大 uint256 全额偿还债务或不超过可用标的余额）

### approve

允许消费者在子账户 0 中访问您一定数量的 eToken

```
function approve(address spender, uint amount) external returns (bool);
```

参数：

* **spender**：受信任的地址
* **amount**：使用最大 uint256 获得“无限”津贴

### approveSubAccount

允许消费者在特定子账户中访问您的一定数量的 eToken

```
function approveSubAccount(uint subAccountId, address spender, uint amount) external returns (bool);
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **spender**：受信任的地址
* **amount**：使用最大 uint256 获得“无限”津贴

### allowance

检索当前津贴

```
function allowance(address holder, address spender) external view returns (uint);
```

参数：

* **holder**：与所需的子账户 ID 异或（如果适用）
* **spender**：受信任的地址

### transfer

将 eToken 转移到另一个地址（从子账户 0）

```
function transfer(address to, uint amount) external returns (bool);
```

参数：

* **to**：与所需的子账户 ID 异或（如果适用）
* **amount**：以内部记账单位（从 balanceOf 返回）。

### transferFromMax

将一个地址的全部 eToken 余额转移到另一个地址

```
function transferFromMax(address from, address to) external returns (bool);
```

* **from**：此地址必须已批准收件人地址，或者是 msg.sender 的子帐户
* **to**：与所需的子账户 ID 异或（如果适用）

### transferFrom

将 eToken 从一个地址转移到另一个地址

```
function transferFrom(address from, address to, uint amount) external returns (bool);
```

参数：

* **from**：此地址必须已批准收件人地址，或者是 msg.sender 的子帐户
* **to**：与所需的子账户 ID 异或（如果适用）
* **amount**：以内部记账单位（从 balanceOf 返回）。

## IEulerDToken

债务的代币化表示

### name

债务代币名称，即“Euler Debt: DAI”

```
function name() external view returns (string memory);
```

### symbol

债务代币符号，即“dDAI”

```
function symbol() external view returns (string memory);
```

### decimals

标的资产的小数

```
function decimals() external view returns (uint8);
```

### underlyingAsset

标的资产地址

```
function underlyingAsset() external view returns (address);
```

### totalSupply

所有未偿债务的总和，以标的单位计（随着利息的归集而增加）

```
function totalSupply() external view returns (uint);
```

### totalSupplyExact

所有未偿债务的总和，以标的单位标准化为小数点后 27 位（随着利息的归集加而增加）

```
function totalSupplyExact() external view returns (uint);
```

### balanceOf

特定账户所欠债务，以标的单位计

```
function balanceOf(address account) external view returns (uint);
```

### balanceOfExact

特定账户所欠债务，以标的单位标准化为小数点后 27 位

```
function balanceOfExact(address account) external view returns (uint);
```

### borrow

将底层代币从 Euler 池中转移给发送者，并增加发送者的 dToken

```
function borrow(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位（所有可用代币使用最大 uint256）

### repay

将底层代币从发送者转移到Euler池，并减少发送者的 dToken

```
function repay(uint subAccountId, uint amount) external;
```

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **amount**：以标的单位计（使用最大 uint256 计算所欠的全部债务）

### approveDebt

允许消费者向特定子账户发送一定数量的 dToken

```
function approveDebt(uint subAccountId, address spender, uint amount) external returns (bool);
```

复制！

参数：

* **subAccountId**：0 表示主账户，1-255 表示子账户
* **spender**：受信任的地址
* **amount**：以标的单位（使用最大 uint256 表示“无限”限额）

### debtAllowance

检索当前的债务津贴

```
function debtAllowance(address holder, address spender) external view returns (uint);
```

参数：

* **holder**：与所需的子账户 ID 异或（如果适用）
* **spender**：受信任的地址

### transfer

将 dToken 转移到另一个地址（从子账户 0）

```
function transfer(address to, uint amount) external returns (bool);
```

参数：

* **to**：与所需的子账户 ID 异或（如果适用）
* **amount**：以标的单位为单位。使用 max uint256 进行完全平衡。

### transferFrom

将 dToken 从一个地址转移到另一个地址

```
function transferFrom(address from, address to, uint amount) external returns (bool);
```

参数：

* **from**：与所需的子账户 ID 异或（如果适用）
* **to**：这个地址必须已经批准了发件人地址，或者是msg.sender的子账号
* **amount**：以标的单位为单位。使用 max uint256 进行完全平衡。
*

## IEulerLiquidation

清算抵押品违约的用户来保护出借方。

### LiquidationOpportunity

有关潜在清算机会的信息

```
struct LiquidationOpportunity {
    uint repay;
    uint yield;
    uint healthScore;

    // Only populated if repay > 0:
    uint baseDiscount;
    uint discount;
    uint conversionRate;
}
```

### checkLiquidation

检查清算是否有利可图，而无需实际执行任何操作

```
function checkLiquidation(address liquidator, address violator, address underlying, address collateral) external returns (LiquidationOpportunity memory liqOpp);
```

参数：

* **liquidator**：将启动清算的地址
* **violator**：可能存在违约的地址
* **underlying**：要偿还的代币
* **collateral**：将被没收的代币

返回：

* **liqOpp**：关于清算机会的详细信息

### liquidate

尝试进行清算

```
function liquidate(address violator, address underlying, address collateral, uint repay, uint minYield) external;
```

参数：

* **violator**：可能附带违规的地址
* **underlying**：要偿还的代币
* **collateral**：将被没收的代币
* **repay**：从违规者转移到发送者的底层 DToken 数量，以底层为单位
* **minYield**：以抵押品为单位，从违约者(violator)转移到发送者的最低可接受的抵押品 EToken 数量

## IEulerSwap

在 Uniswap V3 和 1Inch V4 DEX 上交易资产

### SwapUniExactInputSingleParams

Uniswap V3 单个池上精确输入交易的参数

```
struct SwapUniExactInputSingleParams {
    uint subAccountIdIn;
    uint subAccountIdOut;
    address underlyingIn;
    address underlyingOut;
    uint amountIn;
    uint amountOutMinimum;
    uint deadline;
    uint24 fee;
    uint160 sqrtPriceLimitX96;
}
```

参数：

* **subAccountIdIn**：交易的子账户ID
* **subAccountIdOut**：交易的子账户ID
* **underlyingIn**：出售的代币地址
* **underlyingOut**：购买代币地址
* **amountIn**：要出售的代币数量
* **amountOutMinimum**：购买代币的最低数量
* **deadline**：交易必须在此时间戳之前完成
* **fee**：uniswap 池使用费
* **sqrtPriceLimitX96**：最高可接受价格

### SwapUniExactInputParams

通过多个池路由，Uniswap V3 精确输入交易的参数

```
struct SwapUniExactInputParams {
    uint subAccountIdIn;
    uint subAccountIdOut;
    uint amountIn;
    uint amountOutMinimum;
    uint deadline;
    bytes path; // list of pools to hop - constructed with uni SDK 
}
```

参数：

* **subAccountIdIn**：交易的子账户ID
* **subAccountIdOut**：交易的子账户ID
* **underlyingIn**：出售的代币地址
* **underlyingOut**：购买代币地址
* **amountIn**：要出售的代币数量
* **amountOutMinimum**：购买代币的最低数量
* **deadline**：交易必须在此时间戳之前完成
* **path**：用于交易的池列表

### SwapUniExactOutputSingleParams

Uniswap V3 的参数在单个池上精确输出交易

```
struct SwapUniExactOutputSingleParams {
    uint subAccountIdIn;
    uint subAccountIdOut;
    address underlyingIn;
    address underlyingOut;
    uint amountOut;
    uint amountInMaximum;
    uint deadline;
    uint24 fee;
    uint160 sqrtPriceLimitX96;
}
```

参数：

* **subAccountIdIn**：交易的子账户ID
* **subAccountIdOut**：交易的子账户ID
* **underlyingIn**：出售的代币地址
* **underlyingOut**：购买代币地址
* **amountOut**：要购买的代币数量
* **amountInMaximum**：已售代币的最大数量
* **deadline**：交易必须在此时间戳之前完成
* **fee**：uniswap 池使用费
* **sqrtPriceLimitX96**：最高可接受价格

### SwapUniExactOutputParams

经过多个池路由，Uniswap V3 精确输出交易的参数

```
struct SwapUniExactOutputParams {
    uint subAccountIdIn;
    uint subAccountIdOut;
    uint amountOut;
    uint amountInMaximum;
    uint deadline;
    bytes path;
}
```

参数：

* **subAccountIdIn**：交易的子账户ID
* **subAccountIdOut**：交易的子账户ID
* **underlyingIn**：出售的代币地址
* **underlyingOut**：购买代币地址
* **amountOut**：要购买的代币数量
* **amountInMaximum**：已售代币的最大数量
* **deadline**：交易必须在此时间戳之前完成
* **path**：用于交易的池列表

### Swap1InchParams

1inch交易的参数

```
struct Swap1InchParams {
    uint subAccountIdIn;
    uint subAccountIdOut;
    address underlyingIn;
    address underlyingOut;
    uint amount;
    uint amountOutMinimum;
    bytes payload;
}
```

参数：

* **subAccountIdIn**：交易的子账户ID
* **subAccountIdOut**：交易的子账户ID
* **underlyingIn**：出售的代币地址
* **underlyingOut**：购买代币地址
* **amount**：要出售的代币数量
* **amountOutMinimum**：购买代币的最低数量
* **payload**：调用数据传递给 1Inch 合约

### swapUniExactInputSingle

在单个池上执行 Uniswap V3 精确输入交易

```
function swapUniExactInputSingle(SwapUniExactInputSingleParams memory params) external;
```

参数：

* **params**：定义交易参数的结构

### swapUniExactInput

执行通过多个池路由的 Uniswap V3 精确输入交易

```
function swapUniExactInput(SwapUniExactInputParams memory params) external;
```

参数：

* **params**：定义交易参数的结构

### swapUniExactOutputSingle

在单个池上执行 Uniswap V3 精确输出交易

```
function swapUniExactOutputSingle(SwapUniExactOutputSingleParams memory params) external;
```

参数：

* **params**：定义交易参数的结构

### swapUniExactOutput

执行通过多个池路由的， Uniswap V3 精确输出交易

```
function swapUniExactOutput(SwapUniExactOutputParams memory params) external;
```

参数：

* **params**：定义交易参数的结构

### swapAndRepayUniSingle

在 Uniswap V3 单一池上交易并用购买的资产偿还债务

```
function swapAndRepayUniSingle(SwapUniExactOutputSingleParams memory params, uint targetDebt) external;
```

参数：

* **params**：定义交易参数的结构（amountOut 被忽略）
* **targetDebt**：交易和偿还后预计剩余的债务金额（0 表示偿还全部债务）

### swapAndRepayUni

通过多个池在 Uniswap V3 上进行交易并用购买的资产偿还债务

```
function swapAndRepayUni(SwapUniExactOutputParams memory params, uint targetDebt) external;
```

参数：

* **params**：定义交易参数的结构（amountOut 被忽略）
* **targetDebt**：交易和偿还后预计剩余的债务金额（0 表示偿还全部债务）

### swap1Inch

执行1InchV4交易

```
function swap1Inch(Swap1InchParams memory params) external;
```

参数：

* **params**：定义交易参数的结构

## IEulerPToken

受保护的代币是代币的简单封装/包装器，允许您将代币用作抵押品而无需批准(立即)借款

### name

PToken 名称，即“Euler Protected DAI”

```
function name() external view returns (string memory);
```

### symbol

PToken 符号，即“pDAI”

```
function symbol() external view returns (string memory);
```

### decimals

小数位数，与标的资产相同

```
function decimals() external view returns (uint8);
```

### underlying

标的资产地址

```
function underlying() external view returns (address);
```

### balanceOf

账户封装的代币余额

```
function balanceOf(address who) external view returns (uint);
```

### totalSupply

所有封装代币余额的总和

```
function totalSupply() external view returns (uint);
```

### allowance

```
function allowance(address holder, address spender) external view returns (uint);
```

参数：

* **holder**：允许访问代币的地址
* **spender**：受信任的地址

### transfer

将您自己的 pToken 转移到另一个地址

1

```
function transfer(address recipient, uint amount) external returns (bool);
```

* **recipient**：收件人地址
* **amount**：要转移的打包代币数量

### transferFrom

将 pToken 从一个地址转移到另一个地址。Euler地址自动获得批准。

```
function transferFrom(address from, address recipient, uint amount) external returns (bool);
```

参数：

* **from**：此地址必须已批准收件人地址
* **recipient**：收件人地址
* **amount**：转账金额

### approve

允许spender访问您的一定数量的 pToken。不需要批准Euler地址。

```
function approve(address spender, uint amount) external returns (bool);
```

参数：

* **spender**：受信任的地址
* **amount**：使用最大 uint256 获得“无限”限额

### wrap

将底层代币转换为 pToken

```
function wrap(uint amount) external;
```

参数：

* **amount**：以标的单位（相当于 pToken 单位）

### unwrap

将 pToken 转换为标的代币

```
function unwrap(uint amount) external;
```

参数：

* **amount**：以 pToken 为单位（相当于标的单位）

### claimSurplus

索取 PToken 合约持有的任何剩余代币。这只能由合约使用。

```
function claimSurplus(address who) external;
```

* **who**：将获得剩余代币金额的受益人

## IEulerEulDistributor

### claim

申领已分发代币

```
function claim(address account, address token, uint claimable, bytes32[] calldata proof, address stake) external;
```

参数：

* **account**：应该接收代币的地址
* **token**：被认领的代币地址（即EUL）
* **proof**：验证此声明的 Merkle 证明
* **stake**：如果非零，则自动质押代币的地址，而不是认领

## IEulerEulStakes

### staked

检索当前质押金额

```
function staked(address account, address underlying) external view returns (uint);
```

参数：

* **account**：用户地址
* **underlying**：抵押的代币

返回：

* 质押的 EUL 代币数量

### StakeOp

质押操作项目。正数意味着增加这个标的资产的质押，负数意味着减少。

```
struct StakeOp {
    address underlying;
    int amount;
}
```

### stake

修改一系列标的资产的权益。如果所有金额的总和为正数，则此金额的 EUL 将从sender的钱包中转入。如果为负，则会转出。

```
function stake(StakeOp[] memory ops) external;
```

* **ops**：要执行的操作数组

### stakeGift

增加标的资产的质押，并将该质押转让给受益人

```
function stakeGift(address beneficiary, address underlying, uint amount) external;
```

参数：

* **beneficiary**：谁获得了这个质押的 EUL
* **underlying**：要质押的标的代币
* **amount**：要质押多少 EUL

### stakePermit

将 permit() 签名应用于 EUL，然后应用一系列抵押操作

```
function stakePermit(StakeOp[] memory ops, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
```

参数：

* **ops**：要执行的操作数组
* **value**：许可消息的值字段
* **deadline**：许可消息的截止日期字段
* **v**：签名字段
* **r**：签名字段
* **s**：签名字段
