@1inch/aqua-sdk

中文文档
0.4.0发布于 2026/11/05LicenseRef-Degensoft-Aqua-Source-1.1TypeScriptESM + CJS构建来源已验证近 30 天下载 3881

1英寸水协议SDK

中文使用文档
文档目录22 节
  1. 概览
  2. 安装
  3. 快速启动
  4. 核心业务
  5. 船舶
  6. 锁定
  7. 事件分析
  8. 推动事件
  9. 拉动事件
  10. 运输事件
  11. 锁定事件
  12. 工具函数
  13. 计算策略散列
  14. 编码调用数据
  15. 支持的网络
  16. API 参考
  17. 出口
  18. 现实生活实例
  19. 实例1:船舶流动性 XYCWAP.sol (英语) aqua 应用
  20. 例2:通过交换执行 XYCWAP.sol (英语) aqua 应用
  21. 例3:码头流动性
  22. 许可证

@ 1英寸/ aqua- sdk - 1英寸水协议的 SDK 类型

一个TypeScript SDK,用于编码,解码,并与一英寸水协议智能合同互动. 这个SDK为水议定书核心业务的建筑交易和剖析活动提供公用事业.

概览

《水议定书》是流动资金管理的分权议定书。 这种SDK通过提供:

  • 编码/解码: 构建打入的呼叫数据 ship, (中文(简体) ), dock 业务
  • 事件分析: 解码和解析 Pushed, (中文(简体) ), Pulled, (中文(简体) ), Shipped,以及 Docked 事件
  • 多钱支持: 10+区块链网络的预配置地址

关于详细的礼宾文件,请参看 水议定书文件。 。 。 .

安装

pnpm add @1inch/aqua-sdk

快速启动

import {
  AquaProtocolContract,
  AQUA_CONTRACT_ADDRESSES,
  Address,
  HexString,
  NetworkEnum
} from '@1inch/aqua-sdk'

// Initialize the contract
const contractAddress = AQUA_CONTRACT_ADDRESSES[NetworkEnum.ETHEREUM]
const aqua = new AquaProtocolContract(contractAddress)

// Build a ship transaction
const shipTx = aqua.ship({
  app: new Address('0x...'),
  strategy: new HexString('0x...'),
  amountsAndTokens: [
    {
      token: new Address('0x...'),
      amount: 1000000000000000000n, // 1 token with 18 decimals
    },
  ],
})

// Use the transaction data
console.log(shipTx) // { to: '0x...', data: '0x...', value: 0n }

核心业务

船舶

启动流动性战略,为此设定虚拟代号余额.

const shipTx = aqua.ship({
  app: new Address('0x...'),
  strategy: new HexString('0x...'),
  amountsAndTokens: [
    {
      token: new Address('0x...'),
      amount: 1000000000000000000n,
    },
  ],
})

参数:

  • app - 申请合同地址
  • strategy - 包含执行逻辑的战略字节
  • amountsAndTokens - 象征性地址和金额

回返情况: CallInfo 带有编码交易数据的对象

锁定

完成流动性策略,从中去除虚拟符号余额.

const strategyHash = AquaProtocolContract.calculateStrategyHash(strategy)

const dockTx = aqua.dock({
  app: new Address('0x...'),
  strategyHash: strategyHash,
  tokens: [
    new Address('0x...'),
    new Address('0x...'),
  ],
})

参数:

  • app - 申请合同地址
  • strategyHash - 战略字节的克恰克256散列
  • tokens - 战略所有象征性地址的组合,其虚拟余额被设定为零

回返情况: CallInfo 带有编码交易数据的对象

事件分析

推动事件

将资金投入战略/Wallet时予以发放.

import { PushedEvent } from '@1inch/aqua-sdk'

const log = { data: '0x...', topics: ['0x...'] }
const event = PushedEvent.fromLog(log)

console.log(event.maker)        // Address
console.log(event.app)          // Address
console.log(event.strategyHash) // HexString
console.log(event.token)        // Address
console.log(event.amount)       // bigint

拉动事件

在从战略/Wallet中提取资金时发放.

import { PulledEvent } from '@1inch/aqua-sdk'

const event = PulledEvent.fromLog(log)

运输事件

在启动流动资金战略时予以释放.

import { ShippedEvent } from '@1inch/aqua-sdk'

const event = ShippedEvent.fromLog(log)

锁定事件

当流动性战略结束时,即予释放.

import { DockedEvent } from '@1inch/aqua-sdk'

const event = DockedEvent.fromLog(log)

工具函数

计算策略散列

将策略字节转换为它们的克恰克256散列.

import { AquaProtocolContract } from '@1inch/aqua-sdk'
import { HexString } from '@1inch/sdk-core'

const strategy = new HexString('0x...')
const hash = AquaProtocolContract.calculateStrategyHash(strategy)

编码调用数据

需要时手动编码函数调用数据 .

import { AquaProtocolContract } from '@1inch/aqua-sdk'

const encodedShip = AquaProtocolContract.encodeShipCallData({
  app: new Address('0x...'),
  strategy: new HexString('0x...'),
  amountsAndTokens: [ /* ... */ ],
})

const encodedDock = AquaProtocolContract.encodeDockCallData({
  app: new Address('0x...'),
  strategyHash: new HexString('0x...'),
  tokens: [ /* ... */ ],
})

支持的网络

SDK包括以下网络的预配置合同地址:

网络链式标识地址
以利亚1个0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
BNB 链条页:10x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
多边形137国0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
坐标42161 (韩语)0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
雪崩第43114号0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
肠道100个0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
基地8453 (英语)0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
乐观主义10个0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
zk同步时代324国道0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
线性a第59144号0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
单链130个0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
音响146 (中文(简体) )0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
罗宾链第4663条0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
修道院143国0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
克罗诺斯第25条0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
超高频999号0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )
弧形5042 (简体中文)0x1111113ccf1426a8e30e2bff5e005d929bf6a90a (中文(简体) )

访问地址使用 :

import { AQUA_CONTRACT_ADDRESSES } from '@1inch/aqua-sdk'
import { NetworkEnum } from '@1inch/sdk-core'

const ethereumAddress = AQUA_CONTRACT_ADDRESSES[NetworkEnum.ETHEREUM]
const arbitrumAddress = AQUA_CONTRACT_ADDRESSES[NetworkEnum.ARBITRUM]

API 参考

出口

SDK出口:

现实生活实例

实例1:船舶流动性 XYCWAP.sol (英语) aqua 应用

启动流动性战略,在Aqua设定其虚拟余额. ship 不转移指使符:它们留在制作人的钱包里,水叮当用它拉出 transferFrom 当交换执行时,所以制作者必须持有符文并批准水上公司合同,以花费每个符文.

import { AquaProtocolContract, Address, HexString, AQUA_CONTRACT_ADDRESSES, NetworkEnum } from '@1inch/aqua-sdk'
import { encodeAbiParameters, parseUnits, http, createWalletClient, isHex, erc20Abi, maxUint256 } from 'viem'
import { privateKeyToAccount, privateKeyToAddress } from 'viem/accounts'
import { mainnet } from 'viem/chains'
import assert from 'assert'
import 'dotenv/config'

const makerPrivateKey = process.env.MAKER_PRIVATE_KEY

assert(isHex(makerPrivateKey))
const maker = privateKeyToAddress(makerPrivateKey)
const app = '0xTODO_REPLACE'
const WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'

// Define strategy based on the smart contract app structure. Each Aqua app can have it's own strategy schema
const strategyData = {
  maker,
  token0: WETH,
  token1: USDC,
  feeBps: 0n,
  salt: '0x0000000000000000000000000000000000000000000000000000000000000001'
} as const

// Encode strategy as bytes
const strategy = encodeAbiParameters(
  [
    {
      name: 'strategy',
      type: 'tuple',
      components: [
        { name: 'maker', type: 'address' },
        { name: 'token0', type: 'address' },
        { name: 'token1', type: 'address' },
        { name: 'feeBps', type: 'uint256' },
        { name: 'salt', type: 'bytes32' }
      ]
    }
  ],
  [strategyData]
)

console.log('Encoded strategy:', strategy)

// Initialize Aqua contract
const aqua = new AquaProtocolContract(AQUA_CONTRACT_ADDRESSES[NetworkEnum.ETHEREUM])

// Create ship transaction
const shipTx = aqua.ship({
  app: new Address(app),
  strategy: new HexString(strategy),
  amountsAndTokens: [
    {
      token: new Address(USDC),
      amount: parseUnits('4000', 6)
    },
    {
      token: new Address(WETH),
      amount: parseUnits('1', 18)
    }
  ]
})

const wallet = createWalletClient({
  chain: mainnet,
  transport: http(),
  account: privateKeyToAccount(makerPrivateKey)
})

// Aqua pulls the tokens from the maker's wallet when swaps execute, so it needs an allowance
for (const token of [USDC, WETH] as const) {
  await wallet.writeContract({
    address: token,
    abi: erc20Abi,
    functionName: 'approve',
    args: [aqua.address.toString(), maxUint256]
  })
}

// Send transaction
await wallet.sendTransaction(shipTx)

完整测试示例 : 试验/aqua. spec.ts -- -- 应发货

例2:通过交换执行 XYCWAP.sol (英语) aqua 应用

与水口公司提供的流动性进行互换. 测试器. sol 帮助者合同被用作批准持有人和路由器.

import {
  parseUnits,
  http,
  createWalletClient,
  isHex,
  encodeFunctionData,
  decodeAbiParameters,
  publicActions
} from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
import assert from 'assert'
import 'dotenv/config'

const takerPrivateKey = process.env.TAKER_PRIVATE_KEY

assert(isHex(takerPrivateKey))
const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
const app = '0xTODOReplace'
const routerAddress = '0xTestTraderAddress'

const strategy = '0x' // parsed from ship events or fetched from api

// Send transaction
const wallet = createWalletClient({
  chain: mainnet,
  transport: http(),
  account: privateKeyToAccount(takerPrivateKey)
}).extend(publicActions)

// decode data based on specified by app format
const [strategyData] = decodeAbiParameters(
  [
    {
      type: 'tuple',
      components: [
        { name: 'maker', type: 'address' },
        { name: 'token0', type: 'address' },
        { name: 'token1', type: 'address' },
        { name: 'feeBps', type: 'uint256' },
        { name: 'salt', type: 'bytes32' }
      ]
    }
  ],
  strategy
)

// Define swap parameters
const srcAmount = parseUnits('10', 6) // 10 USDC
const srcToken = USDC
const isZeroForOne = strategyData.token0 === srcToken

// Encode the swap call to helper Router contract
const swapData = encodeFunctionData({
  abi: [
    {
      type: 'function',
      name: 'swap',
      inputs: [
        {
          name: 'app',
          type: 'address'
        },
        {
          name: 'strategy',
          type: 'tuple',
          components: [
            { name: 'maker', type: 'address' },
            { name: 'token0', type: 'address' },
            { name: 'token1', type: 'address' },
            { name: 'feeBps', type: 'uint256' },
            { name: 'salt', type: 'bytes32' }
          ]
        },
        { name: 'zeroForOne', type: 'bool' },
        { name: 'amountIn', type: 'uint256' }
      ],
      outputs: [{ name: 'amountOut', type: 'uint256' }],
      stateMutability: 'nonpayable'
    }
  ],
  functionName: 'swap',
  args: [app, strategyData, isZeroForOne, srcAmount]
})

// give erc20 approve to routerAddress
await wallet.writeContract({
  abi: [
    {
      type: 'function',
      name: 'approve',
      inputs: [
        { name: 'spender', type: 'address', internalType: 'address' },
        { name: 'value', type: 'uint256', internalType: 'uint256' }
      ],
      outputs: [{ name: '', type: 'bool', internalType: 'bool' }],
      stateMutability: 'nonpayable'
    }
  ],
  address: srcToken,
  account: wallet.account,
  functionName: 'approve',
  chain: wallet.chain,
  args: [routerAddress, srcAmount]
})

// Execute swap
const swapTx = await wallet.sendTransaction({
  to: routerAddress,
  data: swapData
})

await wallet.waitForTransactionReceipt({ hash: swapTx })

完整测试示例 : 测试/aqua. spec.ts - 应互换

例3:码头流动性

关闭策略, 将其虚拟余额设置为 0 . dock 不传输令牌:它们已经在制作者的钱包中.

import { AquaProtocolContract, Address, HexString, AQUA_CONTRACT_ADDRESSES, NetworkEnum } from '@1inch/aqua-sdk'
import { http, createWalletClient, isHex } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
import assert from 'assert'
import 'dotenv/config'

const makerPrivateKey = process.env.MAKER_PRIVATE_KEY

assert(isHex(makerPrivateKey))
const app = '0xTODO_REPLACE'
const WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'

const strategy = '0x' // parsed from ship events or fetched from api

// Initialize Aqua contract
const aqua = new AquaProtocolContract(AQUA_CONTRACT_ADDRESSES[NetworkEnum.ETHEREUM])

// Create dock transaction
const dockTx = aqua.dock({
  app: new Address(app),
  strategyHash: AquaProtocolContract.calculateStrategyHash(new HexString(strategy)),
  tokens: [new Address(USDC), new Address(WETH)]
})

// Send transaction
const wallet = createWalletClient({
  chain: mainnet,
  transport: http(),
  account: privateKeyToAccount(makerPrivateKey)
})

await wallet.sendTransaction(dockTx)

// After the transaction is confirmed, the strategy's virtual balances are zero
// and the strategy is closed

完整测试示例 : 试验/aqua. spec.ts - 应停靠

许可证

该SDK是根据下列条款提供的: 自由主义 财务报告和审定财务报表 第三层( P)。 。 。 .

任何许可证发放问题或申请,请联系:

版本与发布记录

@1inch/aqua-sdk 共发布 16 个版本,首次发布于 2025/11/17;过去 12 个月发布了 16 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.0latest2026/11/051 天前
0.3.42026/09/111 个月前
0.3.32026/09/111 个月前
0.3.22026/09/091 个月前
0.3.2-rc.0next2026/09/052 个月前
0.3.12026/08/182 个月前

关于 @1inch/aqua-sdk 的常见问题

@1inch/aqua-sdk 是什么?

1英寸水协议SDK

如何安装 @1inch/aqua-sdk?

在项目目录运行 npm install @1inch/aqua-sdk,或使用 pnpm add / yarn add / bun add。

@1inch/aqua-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@1inch/aqua-sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@1inch/aqua-sdk 可以商用吗?

@1inch/aqua-sdk 使用 LicenseRef-Degensoft-Aqua-Source-1.1 许可。声明的许可为 LicenseRef-Degensoft-Aqua-Source-1.1,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@1inch/aqua-sdk 的下载量有多少?

根据 npm 官方下载统计,@1inch/aqua-sdk 在 2026/10/05 – 2026/11/03 这 30 天内被下载 3,881 次,日均约 129 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@1inch/aqua-sdk 还在维护吗?

最新版本 0.4.0 发布于 2026/11/05(1 天前);至今共发布 16 个版本,其中过去 12 个月发布了 16 个;首次发布于 2025/11/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。