地址
Arc 上每一个 40 位十六进制的账户都有一个页面——它的 USDC 余额、它持有的代币、它做过的一切,以及如果它是合约,它的代码。
地址页面展示什么#
页头带有完整的校验和地址、一个复制控件和一个二维码,并为该地址的每一种身份加上一个标签:合约、代理,或某个代币标准。下面是三张卡片,然后是一排标签页。页面上没有任何内容需要账户——Arcscan 根本没有账户,这也是它里面处处都没有私人名称标签的原因。公开标签在标签云和代币目录中。
| 卡片 | 它包含什么 |
|---|---|
| 概览 | USDC 余额、USDC 价值和代币持仓。卡片上的每个数字都是在同一个区块高度读取的,而该高度写在余额的提示里。 |
| 更多信息 | 代币授权;若为合约,则是它的创建者和部署交易;若该地址本身就是代币合约,则有一个代币追踪链接;还有该地址的首笔与最新交易,以及最初是谁为它注的资。 |
| 多链信息 | 一个指向 DeBank 的外链,以及一条提示,说明 DeBank 并未索引 Arc——所以来自 Arc 的任何内容都不会出现在那里。它是一个链接,不是资产组合总额。 |
标签页那一排还带有一个筛选菜单,它会打开已预填该地址的高级筛选,以及一个 API 按钮,指向页面背后的那些端点。
余额#
原生 USDC 余额#
Arc 以 USDC 支付 Gas,因此原生余额本来就是美元——余额和它的价值是同一个数字,而不是按汇率换算的结果。原生单位带 18 位小数。0x3600000000000000000000000000000000000000 处的 ERC-20 USDC 接口报告的是同一笔钱,只是被截断到 6 位小数;地址页面只显示一个 USDC 余额,绝不同时显示两个。
没有高度的余额无法被核对
Arc 大约每半秒产生一个区块——实测时主网 506 ms,测试网 536 ms——因此两次读取「最新」会落在不同的高度上。Arcscan 会写明它是在哪个区块读取该余额的,而「概览」卡片上的每个数字都在同一个高度读取,这样它们彼此才对得上。代币持仓#
「代币持仓」为该地址在已索引范围内发送或接收过的每一种代币列出余额。金额是精确的,但每一个都是派生而来——由该代币的转移日志累加得出,而不是回读合约——因此一个不发出转移事件就能转移价值的代币可能出现偏差。这个列表是下限,不是清单:一个从未发出过与该地址相关的转移事件的代币,无法通过这种方式被发现。
只有在 Arcscan 愿意给出价格时才会出现美元价值,而它只在该代币的某个池子持有至少 10,000 USDC 的真实流动性时才愿意——更薄的池子一笔交易就能推动,因此它给出的数字不是价格。没有价格的持仓会如实说明;它绝不会贡献一个零。因此小计只是已定价持仓之和,别无其他,并且它会说明自己漏掉了多少项持仓。
它不是资产组合总额
这里有两种不同的东西可能未知,而两者都不是「没有」:一种是 Arcscan 不愿给出价格的代币,另一种是余额根本无法确定的代币。两者都被表述为未知,而不是写成 0。活动标签页#
普通账户有四个标签页;合约多一个第五个。这四个信息流各自都由游标分页,可以一直翻到 Arcscan 持有的全部历史,并且每一个都能把已加载的行导出为 CSV。
| 标签页 | 它列出什么 | 它来自哪里 |
|---|---|---|
| 交易 | 该地址发送或接收的交易,最新的在前。 | 地址到交易的索引。 |
| 内部交易 | 在某次调用内部而非作为顶层交易转移的原生 USDC。 | 由系统镜像合约发布的事件日志——不是 trace_filter。 |
| 代币转移 | 该地址参与的代币转移。 | 同一套地址索引,作用在转移表上。 |
| 日志 | 该地址发出的事件。 | 日志索引,按发出事件的地址筛选。 |
| 合约 | 字节码、ABI、创建代码、构造函数参数,以及 Arcscan 持有源码时的源码。仅限合约。 | 链本身,以及在存在验证时的 Sourcify。 |
Arc 上的内部交易并非来自 traces
用trace_filter 重建内部资金变动,会把这个标签页限制在大约一百个区块的窗口内——还不到一分钟的链。而这并无必要:每一笔原生资金的净变动都以日志形式发布,因此这个标签页读取完整历史时,一次 trace 调用也不需要。这也是为什么 traces 索引数据流在两条链上都没有任何区块,而这个标签页照样能用。什么被索引了,什么没有#
两条链都有一份地址到交易的索引和一份持有者索引,因此上面那些列表是索引读取,而不是扫描。除此之外两条链并不对称,而这些差异会改变地址页面能回答什么。
| 主网 — 5042 | 测试网 — 5042002 | |
|---|---|---|
| 交易索引 | 有 | 有 |
| 持有者索引 | 有 | 有 |
| 索引起始区块 | 0 — 该链的第一个区块 | 53,500,000,不是创世区块 |
| 历史状态(归档) | 可用 | 不可用 |
| Trace 索引 | 未索引任何区块 | 未索引任何区块 |
| 合约验证 | 今天不可能 | 可通过 Sourcify 进行 |
区块 53,500,000 以下的测试网历史并未持有
Arcscan 的测试网索引从区块 53,500,000 开始。活动全部位于该高度以下的地址会显示为空白页面,而这份空白是 Arcscan 缺失的历史,不是链缺失的。主网自区块 0 起被索引。Arcscan 不为地址发布交易总数:API 不返回总数,标签页也不显示计数徽标,而不是给出一个来自局部遍历的数字。页面上唯一真实的总数是账户 nonce,显示为该地址已发送的数量——它来自账户状态,因此即使对 Arcscan 尚无法列出的交易,它也是精确的。各索引此刻抵达何处,见数据覆盖范围。
合约源码#
合约地址会多出「合约」标签页,其中有代码、读取合约和写入合约几个部分。链本身持有的字节——已部署字节码、创建代码和构造函数参数——在两条链上都一直存在,因为它们不需要任何人的许可。源代码则是另一回事,而两条链在这一点上完全不同。
测试网 — 通过 Sourcify 验证#
Sourcify 收录了链 5042002,因此测试网合约可以被验证,其源码也可以在这里展示。Arcscan 持有的是一份缓存:它在有人第一次索取某个合约的源码时才去获取。所以 Arcscan 拥有源码的合约数量是一个缓存规模,远小于已被验证的合约数量——一个还没有人打开过的合约,会在有人打开时才被获取。提交请通过验证合约,已经完成的则列在已验证合约下。
主网 — 不存在验证#
以下引自主网服务自身对其能力的报告:
这不是 Arcscan 有所保留
Sourcify 未收录链 5042,因此今天这条链上没有任何合约能够被验证——无论通过 Arcscan 还是通过 Sourcify 的任何其他客户端。这里没有什么在等 Arcscan;它在等这条链被上游收录。在实践中:主网上的「合约」标签页永远不会显示源码,也永远不会显示验证对勾,因为根本不存在能够获得它的东西。提交表单仍然会加载,并直截了当地说明提交会被拒绝。请把字节码当作字节码来读——不要认为它与你在别处见到的某份源码相符。
同样的数据,JSON 形式#
地址页面展示的一切也都可以通过 REST API 读取。概览、持仓和每一个信息流各有自己的端点——写这一页时,下面这三个在主网上都返回了 200:
curl -s https://api.arc-scan.io/v1/address/0xe8FdCA9547985c2Fb8bE4A3E509fe9fE77ecf61e curl -s https://api.arc-scan.io/v1/address/0xe8FdCA9547985c2Fb8bE4A3E509fe9fE77ecf61e/tokens curl -s https://api.arc-scan.io/v1/address/0xe8FdCA9547985c2Fb8bE4A3E509fe9fE77ecf61e/txs