DeFi API

申购#

当用户要向 DeFi 协议存入资产(存款)或借出资产(借款)时,调用此接口。核心参数:investmentId(投资品 ID)、address(用户钱包地址)、userInputList(投入的代币地址、链 ID、金额)。返回的 dataList 中包含按顺序执行的交易步骤(如先 APPROVE 再 DEPOSIT),需依次签名广播上链。对于 V3 Pool 还需传入 tickLowertickUpper 等参数。

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

请求参数#

enter 和 exit 共用同一个请求模型,部分字段仅在特定操作下有效。

字段类型必填默认值说明
investmentIdString投资品 ID
addressString用户钱包地址
tickLowerStringV3 tick 下限。仅投资 Dex Pool 类型且新建仓位时需要
tickUpperStringV3 tick 上限。仅投资 Dex Pool 类型且新建仓位时需要
tokenIdStringV3 Pool 的 NFT position token ID。isV3Pool=true 时:添加流动性必传(向已有仓位追加);赎回必传
userInputListArray投入币种和数量。申购时为投入的 token或token列表信息。
> tokenAddressString传入 userInputList 时必填;Token 合约地址
> chainIndexString传入 userInputList 时必填;链 ID
> coinAmountString传入 userInputList 时必填;金额(人类可读,如 "0.2")
> tokenSymbolString代币符号
> tokenPrecisionInteger精度
slippageString"0.01"交易滑点(adapter/Zap 路由时生效)。"0.01"=1%, "0.1"=10%

请求示例#

示例 1: BSC V3 Pool 申购#

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

Json
{
    "investmentId": "1589649169",
    "address": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
    "tickLower": "-32150",
    "tickUpper": "-31350",
    "userInputList": [
        {
            "tokenAddress": "0x55d398326f99059fF775485246999027B3197955",
            "chainIndex": "56",
            "coinAmount": "0.2"
        }
    ],
    "slippage": "0.1"
}

示例 2: Avalanche Aave V3 存款(Single Earn)#

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

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

示例 3: Avalanche Aave V3 借款#

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

Json
{
    "investmentId": "33901",
    "address": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
    "userInputList": [
        {
            "tokenAddress": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
            "chainIndex": "43114",
            "coinAmount": "0.01"
        }
    ]
}

示例 4: Sui NAVI 借款#

投资品: NAVI SUI Borrow (id=40047, chainIndex=784)

Json
{
    "investmentId": "40047",
    "address": "0x2791c11545a2fef7d8b3188002c80343bf6dc64130a603914238d8660b3bddde",
    "userInputList": [
        {
            "tokenAddress": "0x2::sui::SUI",
            "chainIndex": "784",
            "coinAmount": "0.02"
        }
    ]
}

示例 5: Solana Kamino 借款#

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

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

响应参数#

字段类型说明
codeString"0"=成功,非"0"=失败
msgString错误信息
data.dataListArraycalldata 结果列表(按顺序执行,如 APPROVE → DEPOSIT)
> callDataTypeString操作类型(授权、申购、赎回、claim),见下方枚举表
> fromStringfrom 地址(用户钱包地址)
> toStringto 地址(目标合约地址)。根据产品类型和操作不同,可能是 Zap 合约或协议合约直连
> valueString转账金额(native token 数量)。无需发送原生币时为空字符串或 "0x0"
> serializedDataString序列化交易数据。EVM:hex calldata(0x 前缀);Solana:base58 编码;Sui:base64 编码的 BCS 字节
> originalDataString辅助元数据(JSON 字符串)。EVM 链包含函数 ABI(methodId/methodDefine/methodParams);Aptos 链包含模块 ABI JSON
> transactionPayloadString交易模板,仅 Aptos 链返回。包含 payload JSON,客户端需补充 sequence_number 后通过 SDK 构建完整交易
> signatureDataString签名数据。EVM 链为 Zap 合约的 permit 签名;非 EVM 链为服务端签名凭证
> gasStringGas 限额,仅 Aptos 等非 EVM 链返回。EVM 链需客户端自行估算或使用固定值

callDataType 枚举值#

说明
APPROVEERC20 授权(approve spender)
DEPOSIT存入协议
SWAP,DEPOSIT先兑换再存入(V3 Pool 场景,单币入双币池)
WITHDRAW从协议取出
WITHDRAW,SWAP取出后兑换回目标 token(V3 Pool 场景)

注意:Aave Borrow 返回 callDataType=WITHDRAW,Aave Repay 返回 callDataType=DEPOSIT。这是 Aave 协议内部方法语义(borrow=从池子 withdraw 资产,repay=向池子 deposit 资产),不影响实际业务操作。

各链 serializedData 处理方式#

编码客户端处理流程
EVM (BSC/AVAX/ETH)Hex (0x 前缀)直接作为 tx.data 发送,to 作为目标地址
SuiBase64 BCSbase64 解码 → 前置 intent [0,0,0] → blake2b-256 哈希 → Ed25519 签名 → 提交 sui_executeTransactionBlock
SolanaBase58bs58 解码 → 跳过前 65 字节签名占位 → VersionedMessage.deserialize() → 签名 → 立即发送(blockhash ~60s 过期)
Aptos使用 transactionPayload 字段的 payload JSON,通过 SDK build.simple() 构建交易 → 签名 → 提交

响应示例#

EVM 链(BSC V3 Enter,APPROVE + SWAP,DEPOSIT 两步)

Json
{
    "code": 0,
    "msg": "",
    "data": {
        "dataList": [
            {
                "callDataType": "APPROVE",
                "from": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
                "to": "0xda7ad9dea9397cffddae2f8a052b82f1484252b3",
                "value": "0x0",
                "serializedData": "0x095ea7b3000000000000000000000000...ffffffff",
                "originalData": "{\"callDataType\":\"APPROVE\",\"methodId\":\"0x095ea7b3\",\"methodDefine\":\"approve(address,uint256)\",...}",
                "signatureData": "..."
            },
            {
                "callDataType": "SWAP,DEPOSIT",
                "from": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
                "to": "0x7251FEbEABB01eC9dE53ECe7a96f1C951F886Dd2",
                "value": "0x0",
                "serializedData": "0xec5b999d000000000000000000000000...",
                "originalData": "{\"callDataType\":\"SWAP,DEPOSIT\",\"methodDefine\":\"{...executeWithPermit...}\",...}",
                "signatureData": "..."
            }
        ]
    }
}

Sui 链(NAVI Deposit,单步)

Json
{
    "code": 0,
    "msg": "",
    "data": {
        "dataList": [
            {
                "serializedData": "<base64 encoded Sui transaction bytes>",
                "from": "0x2791c11545a2fef7d8b3188002c80343bf6dc64130a603914238d8660b3bddde",
                "to": "...",
                "value": "0"
            }
        ]
    }
}

Solana 链(Kamino Deposit,单步)

Json
{
    "code": 0,
    "msg": "",
    "data": {
        "dataList": [
            {
                "serializedData": "<base58 encoded Solana VersionedTransaction>",
                "from": "4GK2VMnznuPpg8gG9vqD5MM6889pjJ8WS2HqzktaBfSo",
                "to": "...",
                "value": "0"
            }
        ]
    }
}

V3 Pool 双币仓位比例计算#

注意,该接口仅在需要投资V3 Pool相关投资品时需调用:V3 Pool 申购前,需先调用此接口计算双币投入比例——用户只需提供一种代币的金额,接口即可根据当前池价格和所选价格区间,智能拆算出两种代币各需投入多少。返回的 investWithTokenList 可直接作为上方申购接口的 userInputList 传入。

URL:POST /api/v6/defi/calculator/enter/info

请求参数#

字段类型必填说明
inputAmountString用户输入的单币金额(人类可读格式,如 "0.05")
inputTokenAddressString用户输入的 token 合约地址。可以是 V3 Pool 的 token0 或 token1
tokenDecimalString输入 token 的精度(如 "18", "6")
investmentIdString投资品 ID(V3 Pool 对应的 investmentId)
addressString用户钱包地址
tickLowerStringV3 仓位的 tick 下限(如 "-33500")
tickUpperStringV3 仓位的 tick 上限(如 "-30450")

请求示例#

示例:BSC V3 Pool (USDT → 双币分配)

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

Json
{
    "inputAmount": "0.05",
    "inputTokenAddress": "0x55d398326f99059fF775485246999027B3197955",
    "tokenDecimal": "18",
    "investmentId": 1589649169,
    "address": "0x1ae68a40b9f903a469aed01574f3a9ab6d45c563",
    "tickLower": "-33500",
    "tickUpper": "-30450"
}

响应参数#

data 对象

字段类型说明
investWithTokenListArray双币分配结果列表,通常包含 2 个元素(token0 和 token1)
> tokenAddressStringToken 合约地址(小写格式)
> chainIndexString链 ID(如 "56" = BSC)
> coinAmountString分配金额(人类可读格式,如 "0.05")。高精度小数,直接用于 transaction/enter 的 userInputList

响应示例#

成功:USDT 输入 → USDT + RIVER 双币分配

Json
{
    "code": 0,
    "data": {
        "investWithTokenList": [
            {
                "tokenAddress": "0x55d398326f99059ff775485246999027b3197955",
                "chainIndex": "56",
                "coinAmount": "0.05"
            },
            {
                "tokenAddress": "0xda7ad9dea9397cffddae2f8a052b82f1484252b3",
                "chainIndex": "56",
                "coinAmount": "0.000275606738038671"
            }
        ]
    }
}

解读:用户投入 0.05 USDT,按当前 tick ≈ -32932 的价格比例,需要 0.05 USDT + 0.000275 RIVER 组成双币入场。

完整调用流程#

  1. POST /api/v6/defi/calculator/enter/info(当前接口)— 输入:单币金额 + tick 区间 → 输出:investWithTokenList
  2. 校验钱包余额 — 确保两个 token 余额均满足 investWithTokenList 中的 coinAmount
  3. POST /api/v6/defi/transaction/enter — 传入 userInputList(= investWithTokenList)+ tickLower + tickUpper + slippage → 输出:calldata (DEPOSIT)
  4. 签名 & 发送链上交易 — 双币入场为纯 DEPOSIT(无链上 swap)