用途
dune2 是一个聚焦于链上调查的 Dune CLI 技能,专门处理那些通过 RPC 难以或无法完成的查询。它覆盖五个重点用例:从/向某地址的代币转账、合约创建交易、调用特定函数的所有交易、按合约或事件过滤日志,以及地址标签查询。
前置条件
假定 Dune CLI 已安装并完成认证,可直接运行命令。若命令失败:出现 "command not found" 表示 CLI 未安装;出现 401 / "unauthorized" 表示认证失败,需设置 DUNE_API_KEY 环境变量或运行 dune auth --api-key <key>。所有命令始终使用 -o json。
关键 DuneSQL 规则
- 地址是 varbinary 类型,使用 0x 前缀且不加引号:WHERE "from" = 0xabc...(而非 '0xabc...')
- 保留字 from 和 to 必须加引号:"from"、"to"
- 始终包含分区过滤条件(block_time、evt_block_time),避免全表扫描
- 对于 tokens.transfers spell 表,分区列是 block_time
作为表前缀和 blockchain 列值的链名包括:ethereum、base、arbitrum、optimism、polygon、bnb、avalanche_c、gnosis、fantom、scroll、zksync、linea、mantle、blast、celo。当用户未指定链时,应询问用户,或默认使用已包含 blockchain 列的 spell 表(tokens.transfers、dex.trades)跨所有链查询。
主要能力
1. 从/向某地址的代币转账
使用 tokens.transfers spell 表,它聚合了所有代币的 ERC-20/721/1155 转账,并已解码出 symbol、amount 和 USD 价值。可自定义链、时间范围、代币符号或 USD 价值过滤。若已知特定链上的特定代币合约,也可使用 erc20_<chain>.evt_Transfer 表查询。
2. 合约创建交易
查找合约的部署时间和方式,使用 <chain>.creation_traces 表,按 address 过滤即可,无需时间过滤。若不知道在哪条链上,可检查几条链或先用区块浏览器确认。
3. 调用特定函数的所有交易
提供三种方式:
- 方式 A:使用已解码的 call 表(若可用)。先用 dune dataset search-by-contract 查找合约是否有解码表,再查询 <namespace>.call_<FunctionName>。
- 方式 B:从原始 traces 按函数选择器过滤(适用于任意合约、任意链)。函数选择器是 calldata 的前 4 字节(函数签名的 keccak256)。常见选择器:transfer(address,uint256) = 0xa9059cbb,approve(address,uint256) = 0x095ea7b3。
- 方式 C:仅直接调用(交易级别),使用 <chain>.transactions 表。
4. 按合约或事件过滤日志
可查询某合约的所有原始日志,或按特定事件过滤(topic0 = 事件签名的 keccak256)。常见 topic0 值:Transfer(address,address,uint256) = 0xddf252ad...b3ef,Approval(address,address,uint256) = 0x8c5be1e5...1a11,Swap (Uniswap V2) = 0xd78ad95f...6b87。若有解码事件表则更清晰,使用 <namespace>.evt_<EventName>。
5. 地址标签
Dune 维护了将地址映射到可读名称、类别和所有权信息的标签表,用于识别未知钱包、合约或实体。主要查询使用 labels.addresses(整合、多链、数据最丰富),也支持反向查询(查找某实体的所有地址)。若需所有权/托管详情,使用 labels.owner_addresses;若需 OFAC 制裁检查,使用 labels.ofac_sanctioned_ethereum。
关键表说明:
- labels.addresses — 主表,所有标签集中一处:ENS 名称、行为画像(DEX 交易者、NFT 用户)、协议关联、交易所标签。列包括 blockchain、address、name、category、label_type、model_name、contributor。
- labels.owner_addresses — 所有权/托管数据:谁托管/拥有地址、合约名称、EOA 与工厂标志。
- labels.ofac_sanctioned_ethereum — OFAC 制裁地址(如 Tornado Cash 合约)。
错误恢复
- 列无法解析:检查 schema,运行 dune dataset search --query "<table>" --include-schema -o json
- 类型不匹配:地址必须使用 0x 字面量,而非字符串引号
- from/to 附近输入不匹配:必须给保留字加引号:"from"、"to"
- 查询超时/资源限制:添加或收紧 block_time 过滤;尝试 --performance large
- 表不存在:搜索正确名称,运行 dune dataset search --query "<keyword>" -o json
适用场景
适用于需要跨链、跨代币进行链上调查的场景,例如追踪资金流向、识别合约部署者、分析函数调用模式、监控事件日志,以及为地址打标签或做制裁筛查。
限制
该技能假定 Dune CLI 已安装并认证;未提供安装步骤。部分查询依赖 Dune 的解码表或标签表,若表不存在需改用原始 traces/logs。查询需注意分区过滤以避免超时或资源限制。