# 合约参考

## 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**：签名字段


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zenofchain.gitbook.io/euler-wen-dang-+-bai-pi-shu/kai-fa-zhe/he-yue-can-kao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
