DeFi API

赎回#

当用户要从 DeFi 协议取回资产(赎回)或偿还借款(还款)时,调用此接口。核心参数:investmentIdaddress关键提示:赎回时务必传入 redeemPercent(如 "1" 表示 100%),否则对于 aToken 等动态余额的代币,链上执行可能因余额变动而 revert。V3 Pool 赎回必须传 tokenId

URL:POST /api/v6/defi/transaction/exit

请求参数#

字段类型必填默认值说明
investmentIdString投资品 ID
addressString用户钱包地址
tokenIdStringV3 Pool 的 NFT position token ID。isV3Pool=true 时赎回必传
redeemPercentString建议传赎回比例,如 "1"=100%, "0.5"=50%。不传时 Zap calldata 的 tokenIn amount 取 userInputList.coinAmount 的精确值;传了则使用 MAX_UINT256 表示全部余额
userInputListArrayFarm 和 v2pool 输入 LP Token信息,其他情况输入目标接收token信息
> tokenAddressString传入 userInputList 时必填;Token 合约地址
> chainIndexString传入 userInputList 时必填;链 ID
> coinAmountString传入 userInputList 时必填;金额(人类可读,如 "0.05")
> tokenSymbolString代币符号
> tokenPrecisionInteger精度
> tokenIdStringNFT token ID(V3 Pool 场景)
slippageString"0.01"交易滑点(adapter/Zap 路由时生效)。"0.01"=1%, "0.1"=10%

关键注意事项#

redeemPercent 必传:当 type="REDEEM" 时,如果不传 redeemPercent,API 生成的 Zap calldata 中 tokenIn.amount 会使用精确数值(如 60009)而非 MAX_UINT256。对于 aToken 等利息动态增长的 token,从 API 返回到上链执行的时间窗口内余额会变化,导致 SafeERC20: low-level call failed。传 redeemPercent: "1" 后 amount 设为 MAX_UINT256,合约会动态获取实际余额。

请求示例#

示例 1: BSC V3 Pool 纯赎回(50%,不带 userInputList)#

投资品: PancakeSwapV3 USDT-RIVER (id=1589649169)

Json
{
    "investmentId": "1589649169",
    "address": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
    "tokenId": "6632738",
    "redeemPercent": "0.5"
}

示例 2: Avalanche Aave V3 赎回(redeemPercent="1")#

投资品: Aave V3 USDC (id=124, chainIndex=43114)

Json
{
    "investmentId": "124",
    "address": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
    "userInputList": [
        {
            "tokenAddress": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
            "chainIndex": "43114",
            "coinAmount": "0.05"
        }
    ],
    "redeemPercent": "1"
}

示例 3: Sui NAVI 赎回#

投资品: NAVI USDC (id=32202, chainIndex=784)

Json
{
    "investmentId": "32202",
    "address": "0x2791c11545a2fef7d8b3188002c80343bf6dc64130a603914238d8660b3bddde",
    "userInputList": [
        {
            "tokenAddress": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "chainIndex": "784",
            "coinAmount": "0.3"
        }
    ]
}

示例 4: Solana Kamino 还款#

投资品: Kamino USDC Borrow (id=29130, chainIndex=501)

Json
{
    "investmentId": "29130",
    "address": "4GK2VMnznuPpg8gG9vqD5MM6889pjJ8WS2HqzktaBfSo",
    "userInputList": [
        {
            "tokenAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
            "chainIndex": "501",
            "coinAmount": "0.05"
        }
    ]
}

响应参数#

字段类型说明
data.dataListArraycalldata 结果列表(按顺序执行)
> callDataTypeString操作类型(授权、申购、赎回、claim)
> fromStringfrom 地址(用户钱包地址)
> toStringto 地址(目标合约地址)
> valueString转账金额(native token 数量)。无需发送原生币时为空字符串或 "0x0"
> serializedDataString序列化交易数据。EVM:hex calldata(0x 前缀);Solana:base58 编码;Sui:base64 编码的 BCS 字节
> originalDataString辅助元数据(JSON 字符串)
> transactionPayloadString交易模板,仅 Aptos 链返回
> signatureDataString签名数据
> gasStringGas 限额,仅 Aptos 等非 EVM 链返回

赎回时常见的 dataList 组合:

  • 单步:[WITHDRAW] — 纯赎回/还款
  • 两步:[APPROVE, WITHDRAW] — 需要先授权 aToken 给 Zap
  • 两步:[WITHDRAW, SWAP] — V3 取出后 swap 回目标 token(实际合并为单个 callDataType=WITHDRAW,SWAP)

响应示例#

EVM 链(Avalanche Aave V3 USDC 赎回,APPROVE + WITHDRAW 两步)

Json
{
    "code": 0,
    "msg": "",
    "data": {
        "dataList": [
            {
                "callDataType": "APPROVE",
                "from": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
                "to": "0x625e7708f30ca75bfd92586e17077590c60eb4cd",
                "value": "0x0",
                "serializedData": "0x095ea7b3000000000000000000000000...ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
                "originalData": "{\"callDataType\":\"APPROVE\",\"methodId\":\"0x095ea7b3\",\"methodDefine\":\"approve(address,uint256)\",...}",
                "signatureData": ""
            },
            {
                "callDataType": "WITHDRAW",
                "from": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
                "to": "0x794a61358d6845594f94dc1db02a252b5b4814ad",
                "value": "0x0",
                "serializedData": "0x69328dec000000000000000000000000...0000000000000000000000001ae68a40b9f903a469aed01574f3a9ab6d45c563",
                "originalData": "{\"callDataType\":\"WITHDRAW\",\"methodId\":\"0x69328dec\",\"methodDefine\":\"withdraw(address,uint256,address)\",...}",
                "signatureData": ""
            }
        ]
    }
}

说明:当 redeemPercent="1" 时,serializedData 中的 amount 参数为 MAX_UINT256,合约会动态获取实际余额进行赎回,避免因 aToken 利息增长导致的余额不足问题。