BlockVectra

地址标签(address_labels)

{db}.address_labels 给 Robinhood Chain(chain id 4663)上一批"已知地址"打标签,配合 一个把标签 JOIN 到 transactions.from/transactions.to 的视图,方便写 SQL 时不用记 一长串 hex 地址。

This content is sourced from upstream and is currently available in Chinese only.

{db}.address_labels 给 Robinhood Chain(chain id 4663)上一批"已知地址"打标签,配合 一个把标签 JOIN 到 transactions.from/transactions.to 的视图,方便写 SQL 时不用记 一长串 hex 地址。

SQL:schema/clickhouse/derived/011_address_labels.sql。

安装与补算

sed 's/{db}/robinhood/g' schema/clickhouse/derived/011_address_labels.sql \
  | clickhouse-client --multiquery

只需要执行一次即可建表 + 灌入种子数据 + 建视图。这张表不是由物化视图从 {db}.logs/{db}.transactions 实时派生的,而是人工核对后的静态参考表,所以没有 "补算历史区间"的概念——直接重跑这份 SQL 就是唯一的更新方式。

重新灌入 / 修正某条标签:改这份 .sql 文件里的 INSERT 那一行,重跑整份文件即可。 address_labels 用 ReplacingMergeTree(added_at)、以 address 为排序键,added_at 更新的行会替换旧行(读的时候要 FINAL,见下)——所以重跑是幂等的,不会插出重复的 同地址标签行。这张表不涉及 is_deleted/reorg:这里的每一行描述的是"这个地址是什么" 这件事实,不是某条链上事件,链重组不会让一个地址的身份跟着回滚。

表结构

列类型说明
addressFixedString(20)原始 20 字节地址(不是 hex 字符串)
labelString人类可读名字,例如 ArbSys、L2 Gateway Router
categoryLowCardinality(String)precompile / system / sequencer / bridge_gateway / token / well_known_deployment
confidenceLowCardinality(String)high:有能唯一区分该合约的链上调用/观测证据;medium:地址确认有代码 + 文档命名一致,但没有做区分性调用
sourceString证据来源:文档 URL,或具体的链上验证方法 + 期望值 vs 实际值
added_atDateTime('UTC')写入时间,兼作 ReplacingMergeTree 的版本列

已收录的地址(22 条,2026-09-25 核对)

Arbitrum / ArbOS 协议预编译(precompile,12 条)

这些地址是 ArbOS 协议本身规定的固定地址,不是 Robinhood Chain 专属,任何 Arbitrum Nitro 链上都一样。参考: Arbitrum 官方 Precompiles Reference。

地址名字confidence链上验证
0x...64ArbSyshigheth_call arbChainID() = 4663;arbBlockNumber() = 72044254,与同一时刻 eth_chainId/eth_blockNumber 的真实返回值一致
0x...65ArbInfohigheth_call getBalance(0x...64) = 0,与 eth_getBalance(0x...64) = 0 一致(ArbSys 预编译本身没有 ETH 余额)
0x...66ArbAddressTablemediumeth_call size() 正常返回(0,本链未使用地址表),且 eth_getCode 非空
0x...69ArbosTestmedium遗留的内部测试预编译,没有公开只读方法可调;eth_getCode 非空
0x...6bArbOwnerPublichigheth_call getAllChainOwners() 返回 2 个真实 owner 地址(0x2A15...C09、0x5Eb3...690)
0x...6cArbGasInfohigheth_call getPricesInWei() 返回非零的实时 gas 价格字段(例如 l2BaseFee = 20000000 wei)
0x...6dArbAggregatormediumeth_getCode 非空
0x...6eArbRetryableTxhigheth_call getLifetime() = 604800 秒(7 天),与 Arbitrum 文档规定的 retryable ticket 默认存活期一致
0x...6fArbStatisticsmediumeth_getCode 非空
0x...70ArbOwnermedium方法都是 owner-only,没有可调的公开只读方法;eth_getCode 非空
0x...71ArbWasmmediumeth_getCode 非空
0x...72ArbWasmCachemediumeth_getCode 非空

未采纳:0x...67(文档/搜索结果对这个地址目前是"ArbBLS(已禁用)"还是别的 东西说法不一致,eth_getCode 虽然非空但没法用它区分身份,为避免打错标签,这次 没有把它收进种子数据)。任务原始描述里给出的 ArbosTest→0x67、 ArbRetryableTx→0x68、ArbGasInfo→0x69 这组映射经核实是记错的,上表是修正后 的真实映射。

系统地址(system / sequencer,2 条)

地址名字confidence链上验证
0x00000000000000000000000000000000000A4B05ArbOS 内部交易的系统发送方high在抽查的创世期区块(block 1/2/3)里,每个区块开头都有一笔 type=0x6a(ArbitrumInternalTx)交易,from/to 都是这个地址——这是 ArbOS 给每个区块自动生成的标准内部交易
0xA4B000000000000000000073657175656E636572排序器(blocks.miner)high地址末尾字节解码成 ASCII 正好是 ...sequencer(vanity 地址);抽查从 block 32,044,885 到链头 72,044,885(2026-09-25)之间的多个区块,miner 字段全部是这个地址——覆盖了这条链几乎整个可观测历史

L2 代币桥 gateway/router(bridge_gateway,3 条)

来源:Robinhood Chain 官方 Protocol Contracts 文档("Robinhood Chain" 列,即 L2 主网)。

地址名字confidence链上验证
0x1E324B9316138CA9a73F960213621AD1aaf01B89L2 Gateway Routerhigh在 Robinhood Chain 上 eth_getCode 非空;同一份文档里的 L1 Gateway Router 地址在本链上 eth_getCode 为空(符合预期,那是 L1 合约),交叉印证文档表格的 L1/L2 列没读反;额外证据:这个地址是 block 2 里一笔创世期内部交易(type=0x68)的 to
0xfd9b17206278C16DdaacF6AC8f05dBf97EdCb31eL2 ERC20 Gateway(standard/generic gateway)high同上:本链 eth_getCode 非空,文档给出的 L1 ERC20 Gateway 地址在本链为空
0x1D187C3E2dA52D72BC9C41e3AbA0fdFa6a7bF055L2 Weth Gatewayhigh同上:本链 eth_getCode 非空,文档给出的 L1 Weth Gateway 地址在本链为空

同一份文档里的 Delayed Inbox / Sequencer Inbox / Bridge / Outbox / Rollup 都是 L1 (Ethereum)合约,在 Robinhood Chain 的 RPC 上 eth_getCode 全部返回空——这次没有 把它们收进 address_labels(这张表只标 L2 上真实存在代码的地址)。

代币与知名跨链部署(token / well_known_deployment,5 条)

地址名字confidence链上验证
0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73WETHhighdocs.robinhood.com/chain/contracts;eth_call name()="WETH",symbol()="WETH",decimals()=18
0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168USDG(Global Dollar)high同上文档;eth_call name()="Global Dollar",symbol()="USDG",decimals()=6
0xcA11bde05977b3631167028862bE2a173976CA11Multicall3high跨链统一部署地址(github.com/mds1/multicall3);eth_getCode 返回标准 Multicall3 运行时字节码(0x6080604052600436106100f3...开头)
0x000000000022D473030F116dDEE9F6B43aC78BA3Permit2high跨链统一部署地址(github.com/Uniswap/permit2);eth_getCode 非空,字节码前缀与标准 Permit2 一致(0x604060808152600490813610156100...)
0x4e59b44847b379578588920cA78FbF26c0B4956C确定性 CREATE2 部署工厂("Nick's method" / Arachnid factory)high通过预签名 keyless 交易在几乎所有 EVM 链上统一部署的工厂(github.com/Arachnid/deterministic-deployment-proxy);eth_getCode 与这个工厂公开的固定 69 字节字节码完全一致

任务里提到的另一个候选 create2 部署工厂地址,因为没能从可靠来源确认它在这条链上 具体对应哪个已知工厂实现,这次没有收录——宁可少标一个,也不在证据不足时瞎猜名字。

独立验证:真实回填数据 e2e 核对

用节点 RPC 对创世区块段 [0, 200) 做了一次真实 chain-indexer backfill --sink clickhouse(临时 scratch 库,验证完已 DROP),核对 v_transactions_labeled:

-- 独立算法 A:不经过视图,直接对 transactions FINAL 按 address_labels 做子查询过滤
SELECT count() FROM {db}.transactions FINAL
WHERE is_deleted = 0 AND block_number < 200
  AND (`from` IN (SELECT address FROM {db}.address_labels FINAL)
    OR `to` IN (SELECT address FROM {db}.address_labels FINAL));
-- 结果:242

-- 算法 B:通过视图统计 from_label/to_label 非空的行数
SELECT count() FROM {db}.v_transactions_labeled
WHERE block_number < 200 AND (from_label != '' OR to_label != '');
-- 结果:242(与算法 A 精确相等)

区间内总交易数 401,与 backfill 命令输出的 blocks=200 txs=401 logs=370 一致。抽样看 到的真实标注例子(block 1-3,来自这次真实回填的数据,不是编的):

  • block 1, tx 0:from/to 都被标为 "ArbOS 内部交易的系统发送方"(type=0x6a)
  • block 1, tx 1:to 被标为 "ArbRetryableTx"
  • block 3, tx 2:to 被标为 "L2 Gateway Router"
  • block 11, tx 1:to 被标为 "ArbOwner"

address_labels 里 22 条按 category 分布:precompile 12、bridge_gateway 3、 well_known_deployment 3、token 2、system 1、sequencer 1。

查询示例

-- 某个区块区间内,所有打到过"已知系统/桥/代币地址"的交易
SELECT block_number, hex(hash), from_label, `to`, to_label
FROM {db}.v_transactions_labeled
WHERE block_number >= {lo} AND block_number < {hi}
  AND (from_label != '' OR to_label != '')
ORDER BY block_number, tx_index;

-- 按标签统计交易量(务必带 block_number 范围,否则是全表 FINAL 扫描)
SELECT to_label, count() AS tx_count
FROM {db}.v_transactions_labeled
WHERE block_number >= {lo} AND block_number < {hi} AND to_label != ''
GROUP BY to_label
ORDER BY tx_count DESC;

On this page