输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
预测市场
证券与期货
链上与自定义接入

在发明者量化交易平台主要通过exchange.IO()函数实现区块链相关的各种功能、调用。以下文档把exchange.IO()函数根据其功能分别描述。 exchange.IO("abi", ...)函数的调用方式用于注册ABI。

  • 支持以太坊(eth)
  • 支持波场(tron)

exchange.IO(k, address, abiContent)

示例

  • 注册Uniswap SwapRouter02合约exactOutput方法的ABI片段。

    javascript
    function main() { // register Uniswap SwapRouter02 abi var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45" var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]` // abi只使用了局部的exactOutput方法的内容,完整的abi可以在网上搜索 exchange.IO("abi", routerAddress, abi) }
  • 使用内置模板注册Uniswap V3头寸管理合约,并查询最近的头寸。

    javascript
    function main() { var npm = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" // Uniswap V3 头寸管理合约(以太坊主网) // 第二个参数传模板名,使用内置的常用合约 ABI exchange.IO("abi", npm, "uniswapV3PositionManager") // 模板中包含事件定义:查询最近 100 个区块新增流动性的头寸 var logs = exchange.IO("logs", { address: npm, event: "IncreaseLiquidity", fromBlock: -100 }) if (logs.length > 0) { var id = logs[logs.length - 1].args.tokenId var pos = exchange.IO("api", npm, "positions", id) Log("头寸", id, "持有人:", exchange.IO("api", npm, "ownerOf", id)) Log("区间 tick:", pos.tickLower, "~", pos.tickUpper, "流动性:", pos.liquidity) } }

参数

名称类型必填描述

k

string

是

固定为abi,用于注册ABI。

address

string

是

智能合约的地址。

abiContent

string

是

智能合约的ABI(JSON字符串),或内置模板名,例如weth、uniswapV3Pool、permit2;全部模板名见备注。

参考

备注

调用的智能合约方法如果是标准ERC20方法,则不需要注册。

获取合约的ABI内容可以使用Etherscan的V2接口(需要Etherscan的API Key,chainid为链ID),只取result字段,例如:

url
https://api.etherscan.io/v2/api?chainid=1&module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45&apikey=YourApiKey

使用方法名调用时,优先使用该地址注册的ABI中的方法,其次是内置的ERC20方法;同名的重载方法需要使用完整的方法签名区分,例如"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)"。

内置模板包含常用的函数和事件定义,事件可以配合exchange.IO("logs", ...)、exchange.IO("waitReceipt", ...)解码;常用合约地址可以通过exchange.IO("contracts", ...)获取。

波场(TRON)上调用没有注册ABI的合约方法时,会自动从链上读取该合约的ABI并缓存;链上读取不到时报错,需要用exchange.IO("abi", ...)手动注册。

abiContent也可以传入内置模板名:weth(包装币的deposit、withdraw方法,别名wbnb、wrappedNative)、uniswapV3Pool、uniswapV3Factory、uniswapV3QuoterV2、uniswapV3SwapRouter02、uniswapV3PositionManager、permit2。PancakeSwap V3对应的合约使用相同模板,也可以写pancakeV3Pool、pancakeV3Factory、pancakeV3QuoterV2、pancakeV3SmartRouter、pancakeV3PositionManager,或通用别名v3Pool、v3Factory、v3QuoterV2、v3Router、v3PositionManager。模板名不存在时报错。