什么是Robinhood Chain?开发者指南:链上Stock Tokens
概述
“tokenized RWAs” 这个词往往会让人联想到某种很特别的东西:一条定制链、一个专有 API、一个需要特殊访问权限的许可制系统。人们很容易认为集成方式会与日常的 EVM(以太坊虚拟机)开发完全不同。
Robinhood Chain 颠覆了这一假设。它是一个无需许可、EVM 兼容的 Layer 2,基于 Arbitrum Orbit 构建,最终结算到以太坊,并用 ETH 支付 Gas。Stock Tokens 在其上是 ERC-20 合约,因此你已经在使用的钱包代码、ABI(应用程序二进制接口)解码、事件索引和 RPC(远程过程调用)调用都可以原样沿用。有趣之处不在于新接口,而在于:当一种按交易所日历交易的资产类别,变成了智能合约可以持有的 Token 时,会发生什么。
TL;DR
- Robinhood Chain 是一个无需许可、EVM 兼容的 Layer 2,基于 Arbitrum Orbit(一个用于启动链的框架,可运行 Arbitrum Nitro 技术栈并结算到以太坊)构建,使用 ETH 作为原生 Gas Token
- 主网已上线,链 ID 为
4663,测试网链 ID 为46630,因此任何接受链 ID 和 RPC 端点的以太坊工具都能直接使用,无需协议级更改 - Stock Tokens 是标准的 ERC-20 合约,提供对底层 ETP(交易所交易产品)的经济敞口,这意味着
balanceOf、totalSupply和Transfer的行为与任何其他 Token 完全一致,任何能处理 ERC-20 的合约也都能处理它们 - 确认分两个阶段:先由 sequencer(负责给交易排序的服务)给出快速软确认;随后,包含交易的批次被提交到以太坊,并在约 13 分钟后达到 L1 最终性,此时交易获得硬最终性。7 天挑战期只适用于桥接提款,而不适用于交易最终性
- 公共 RPC 端点适合钱包配置和快速测试;生产流量则应使用专用的 Robinhood Chain RPC 端点,以获得归档数据、更高的速率上限和 WebSocket 订阅支持
你将学到的内容
- Robinhood Chain 是什么,以及它相对于以太坊和更广泛的 Arbitrum 生态系统的位置
- sequencer、批次处理和结算管线如何影响交易确认和最终性
- Stock Tokens 在合约层面是什么,以及“可组合性”究竟能带来什么
- 如何连接到 Robinhood Chain RPC,包括链 ID、网络参数,以及公共端点何时不再够用
- 哪些以太坊习惯可以原样沿用,哪些在 Orbit 链上需要调整
你需要准备什么
- 对 EVM、ERC-20 Token 和 JSON-RPC 有基本了解。本指南不需要你编写任何 Solidity
- 一个 Quicknode 账户 来创建 Robinhood Chain 端点(免费套餐足够完成本指南)
- 如果你想运行连接代码片段,需要 Node.js v20.6 或更高版本
Robinhood Chain 解决了什么问题?
要理解为什么会有这样的链,请思考:当资产只存在于传统经纪系统内部时,有三件事你无法做到:
- 无需许可即可读取持仓。 经纪数据被挡在带有密钥、配额和使用条款的许可制 API 后面。在链上,余额是公开状态,任何拥有 RPC 端点的客户端都可以无需询问任何人直接读取。
- 将资产与其他代码组合。 经纪账户中的股票没有任何其他程序可以调用的接口。智能合约不能把它作为抵押品,自动做市商不能把它纳入流动性池,托管方也无法持有它。
- 在市场时间之外交互。 交易所有开盘铃、收盘铃、周末和节假日。想在周日凌晨 3 点结算一笔转账的软件,没有任何可以对话的对象。
这三者都是同一个约束的变体:资产被锁定在一个没有可编程接口的封闭系统内。将其表示为公共链上的 Token,便消除了这一约束,因为 Token 合约提供了标准接口、状态公开可读,而且没有交易日历的概念。
Robinhood Chain 通过成为 EVM Layer 2 而不是特殊用途系统来解决这个问题,因此整个现有的以太坊工具链从第一天起就适用。
什么是 Robinhood Chain?
Robinhood Chain 是一条使用 Arbitrum Orbit 构建的以太坊 Layer 2 区块链,面向链上金融基础设施和 Token 化现实世界资产。它在自己的网络上执行交易,然后将交易数据和状态承诺发布到以太坊;以太坊充当结算和数据可用性层(即链发布交易数据、供任何人重建其状态的地方)。
三个属性最重要:
- 无需许可。 任何人都可以部署合约、读取状态或发送交易。你不需要白名单、合作关系或 Robinhood 账户即可在其上构建。(一个合规注意事项:sequencer 会过滤掉与受制裁地址相关的交易。)
- 完全 EVM 兼容。 Solidity 合约无需修改即可编译和部署。Hardhat、Foundry、Remix、viem、ethers.js 和 web3.py 只需指向 Robinhood Chain RPC 端点即可正常工作。
- 你用 ETH 支付 Gas。 没有单独的 Gas Token 需要获取或管理,这消除了整整一类接入摩擦。
以下是该链在技术栈中的位置:

实际效果是,Robinhood Chain 不会像独立链那样要求你信任它。它将状态锚定到以太坊,安全假设是熟悉的 Orbit 和 Nitro 假设,而非什么新奇的东西。
网络参数
以下值用于钱包配置、viem 或 wagmi 中的链定义,以及其他任何需要网络设置的场景:
| 参数 | 主网 | 测试网 |
|---|---|---|
| 链 ID | 4663 |
46630 |
| 原生货币 | ETH | ETH |
| 公共 RPC | https://rpc.mainnet.chain.robinhood.com |
https://rpc.testnet.chain.robinhood.com |
| Sequencer 数据流(WebSocket) | wss://feed.mainnet.chain.robinhood.com |
wss://feed.testnet.chain.robinhood.com |
| 区块浏览器 | robinhoodchain.blockscout.com | explorer.testnet.chain.robinhood.com |
| 技术栈 | Arbitrum Orbit (Nitro) | Arbitrum Orbit (Nitro) |
注意
上述公共 RPC 端点是共享且有速率限制的。Robinhood 在文档中将其定位为用于钱包连接、快速测试和入门,而非生产流量。Sequencer 数据流会实时推送已排序的交易,主要对节点运营商有用;大多数应用程序只需要 RPC 端点。关于生产环境的使用,请参阅 连接到 Robinhood Chain。
Robinhood Chain 如何运作
Robinhood Chain 上的交易分两个阶段确认:先由 sequencer 给出快速软确认;待包含该交易的批次在以太坊上达到最终性后,交易才获得硬最终性。理解这条管线,正是区分“我能读取余额”与“我能安全地转移价值”的关键。
当你提交交易时,它会进入负责排序的 sequencer。Sequencer 接受交易,为其分配一个排序位置,并快速返回回执。该回执就是软确认:sequencer 已经承诺了排序,在实践中这一承诺是可靠的,但以太坊尚未看到这笔交易。之后,sequencer 会把大量交易压缩成一个批次并发布到以太坊,从而在 L1 上固定这一排序。一旦该批次达到以太坊最终性(发布后约 13 分钟),交易便获得了硬最终性,由以太坊自身的安全性背书。以下是完整的生命周期:

每个阶段都可以通过 RPC 观察到,因此你不需要自己跟踪批次。非空的 eth_getTransactionReceipt 意味着交易已被软确认。safe 区块标签返回其批次已发布到以太坊的最新区块,实际通常比 latest 落后 5 到 15 分钟(以实时主网标签为基准测量;Robinhood 的文档只承诺“分钟”级别)。finalized 标签返回由完整以太坊最终性背书的最新区块。将任一标签传入 eth_getBlockByNumber,与你交易的区块号进行比较,即可构建确认逻辑。
由此得出的设计指导很简单。用软确认来保持界面响应;让用户为了刷新余额而等待 L1 最终性,是一种糟糕的体验。把硬最终性留给任何你无法撤销的操作:向外部账户入账、解除托管、与链下账本结算。
警告
不要将软确认视为会计或托管逻辑中的结算。在 sequencer 发布批次之前,L2 级别的重组虽然罕见,但仍有可能发生;任何将 sequencer 回执视为最终结果的系统,都在承担一种它可能尚未定价的风险。另外,请在你的心智模型中将最终性与桥接分开:通过规范桥把资产从 Robinhood Chain 移回以太坊,需要等待 Arbitrum 欺诈证明系统要求的 7 天挑战期。该延迟适用于桥接提款,而非交易最终性。
为什么 Arbitrum Orbit 在这里很重要
Orbit 让链可以继承 Nitro 执行环境和以太坊结算,同时保持对自身吞吐量、费用策略和配置的控制。对于面向金融基础设施的网络来说,这种组合正是关键所在:为高交易量提供可预测的低成本执行,同时无需发明新的安全模型,也无需要求开发者学习新的虚拟机。
这也意味着相关知识可以平移:Arbitrum 关于 Gas、预编译和最终性的文档大部分依然适用,在 Arbitrum One 上开发过的工程师会对这里的一切倍感熟悉。
什么是 Stock Tokens?
在法律上,Stock Token 是一种债务工具,而不是股票。Robinhood Assets (Jersey) Limited 发行每只 Stock Token 以提供对底层 ETP(交易所交易产品)的经济敞口:持有该 Token 意味着对该产品表现有敞口,而非拥有该产品;它也不赋予持有者对底层证券或其发行人的任何权利。在技术上,Stock Token 是标准的 ERC-20 合约,在代码层面没有什么特别之处:它有 name、symbol、decimals、totalSupply、每个地址的余额,并在余额发生变动时触发 Transfer 事件。
这种普通恰恰是它的特点。因为 Stock Token 只是一个 ERC-20:
- 任何展示 ERC-20 余额的钱包都可以显示它
- 任何接受 ERC-20 的合约(自动做市商、借贷市场、托管、金库)都可以在无需特殊处理的情况下持有它
- 任何解码
Transfer事件的索引器都可以还原其完整历史 - 读取路径就是
balanceOf和totalSupply,与任何其他 Token 完全一样

真正新颖的属性在于其时间性,而这是一项特性,不是需要警惕的地方。股票遵循交易所的交易日历,而 Token 合约没有周末、节假日或收盘铃的概念;只要有交易到达,它就会处理转账。Robinhood Chain 正是围绕这一点构建的:Stock Tokens 自托管、全天候可访问,并且每只 Token 在链上都有实时的 Chainlink 价格数据源,因此你的合约可以直接读取当前价格,而无需关心纽约现在是几点。发行方负责处理与底层市场的关系,这样一来,你就可以基于一种始终在线、且始终有价格的资产进行构建。
注意
发行方定义了 Stock Token 与其底层资产之间的法律和经济关系,Token 标准并不定义这种关系。本指南仅涵盖技术机制。有关储备、公司行为、资格或司法管辖区的问题,请查阅 Robinhood 官方文档。
连接到 Robinhood Chain
由于 Robinhood Chain 使用标准的以太坊 JSON-RPC,连接只是一项配置工作,而非集成项目。你只需要一个链 ID 和一个端点,剩下的交给现有工具即可。
Quicknode 为主网和测试网都提供托管的 Robinhood Chain 端点,两者均支持归档数据(归档端点会保留完整的历史状态,而不仅仅是最近的区块,任何分析或会计类工作负载最终都会需要这一点)。要创建端点,请登录 Quicknode 仪表板,新建一个端点,然后选择 Robinhood Chain 和目标网络。之后你会获得一个 HTTPS 端点和一个 WebSocket 端点。
从命令行创建项目目录并安装依赖项。tsx 直接运行 TypeScript,无需构建步骤:
mkdir robinhood-chain-connect && cd robinhood-chain-connect
npm init -y
npm install viem
npm install -D tsx
npm pkg set type=module
在项目根目录创建一个 .env 文件,内容为你的端点 URL:
.env
QUICKNODE_ENDPOINT=https://your-endpoint-name.robinhood-mainnet.quiknode.pro/your-token/
viem 从 v2.55.0 开始内置了 Robinhood Chain 定义:robinhood 用于主网,robinhoodTestnet 用于测试网,两者都从 viem/chains 导出。导入链并将你的 Quicknode 端点作为 transport 传入(如果不显式提供 transport,viem 会回退到定义中内置的有速率限制的公共 RPC)。创建 connect.ts:
connect.ts
import { createPublicClient, http } from "viem";
import { robinhood } from "viem/chains";
const RPC_URL = process.env.QUICKNODE_ENDPOINT;
if (!RPC_URL) {
throw new Error("Set QUICKNODE_ENDPOINT in your .env file before running.");
}
const client = createPublicClient({
chain: robinhood,
transport: http(RPC_URL),
});
async function main() {
try {
const [chainId, blockNumber, gasPrice] = await Promise.all([\
client.getChainId(),\
client.getBlockNumber(),\
client.getGasPrice(),\
]);
console.log(`Chain ID: ${chainId}`);
console.log(`Block number: ${blockNumber}`);
console.log(`Gas price: ${gasPrice} wei`);
} catch (error) {
console.error("Failed to read from Robinhood Chain:", (error as Error).message);
}
}
main();
运行它:
npx tsx --env-file=.env connect.ts
你应该会看到如下输出,确认你正在与主网通信:
Chain ID: 4663
Block number: 29494184
Gas price: 29510000 wei
如果链 ID 返回的是 4663,说明你的配置正确,其他任何以太坊库也都会以同样的方式工作。等你实际运行时,区块号会高于上面的数值,Gas 价格(以 wei 计价,wei 是 ETH 的最小单位)则会随网络状况波动。
注意
在早于 2.55.0 的 viem 版本中,这些内置定义不可用。请升级 viem,或使用 网络参数 表中的值通过 defineChain 自行定义链。
公共端点何时不再够用
公共 RPC 在把网络添加到钱包、检查余额或确认合约地址时确实很有用。但一旦你开始做实际工作,它就会成为瓶颈,原因有几点:
- 速率限制。 共享端点的限流很严格,回填(重新读取历史区块以构建数据集)或繁忙的前端很容易触及上限。
- 归档数据。 读取历史状态需要归档端点。
- WebSocket 订阅。 长时间保持的
eth_subscribe连接,需要一个能可靠维持连接不中断的端点。 - 日志查询深度。 范围较大的
eth_getLogs查询,通常是共享端点最先拒绝的请求。
出于这些原因,Robinhood 的官方文档建议生产工作负载使用专用提供商,Quicknode 就是它在 连接指南 中点名的提供商之一。
Robinhood Chain 与以太坊速览
大多数以太坊知识可以直接迁移。有几处需要调整,弄清楚哪些地方需要改,能省下不少调试时间:
| 领域 | 以太坊 | Robinhood Chain |
|---|---|---|
| Solidity 和字节码 | 标准 EVM | 不变。合约按原样编译和部署 |
| 客户端库和框架 | viem、ethers.js、Hardhat、Foundry | 完全一致,只需提供链 ID 和端点 |
| Gas Token | ETH | ETH |
| Gas 计算 | 仅执行 Gas | 新增 L1 数据部分,因此费用会随以太坊 calldata 成本(即发布到 L1 的交易数据)波动 |
| 最终性 | 约 13 分钟(两个 epoch) | 软确认在一秒内完成;批次达到以太坊最终性后获得硬最终性 |
| 交易排序 | 优先费可以改变待处理交易的排序 | 先到先得。提高费用不会让你排在已排队交易前面 |
| 合约大小限制 | 24 KB | 96 KB |
| 预编译 | 标准预编译集 | 新增 Arbitrum 预编译(位于固定地址的内置合约),如 ArbGasInfo 和 NodeInterface |
| 区块时间 | 规律的 12 秒 Slot | 亚秒级且不规则。不要假设固定间隔 |
Solidity 中的 block.number |
链自身的高度 | 以太坊 L1 区块号的估算值,会定期更新。调用 ArbSys 预编译上的 arbBlockNumber() 可获取实际的 L2 高度 |
最后两行最容易引发实际的 bug。那些假设区块节奏稳定、或把 block.number 当作链自身高度或时钟的代码,在以太坊主网上运行良好,但在这里就会出错。需要时间信息时用 block.timestamp,需要 L2 区块高度时用 ArbSys。
一个能避免混淆的说明:这一特殊行为只适用于 Solidity 代码在合约内部读取的 block.number 全局变量,RPC 层不受影响。eth_blockNumber 以及交易回执和日志中的 blockNumber 字段始终返回 L2 高度;并且 Robinhood Chain 上的回执还包含一个单独的 l1BlockNumber 字段,携带 L1 估算值,因此单个回执即可并排显示两个值。你在任何 eth_getBlockReceipts 的响应中都能看到这一点。
Gas 方面也需要类似的提醒。eth_estimateGas 仍然是正确的工具,但由于 L1 数据组件的存在,Gas 的计算方式与以太坊不同,gasleft() 在合约内部的行为也不一样。因此,应避免硬编码那些针对以太坊调优的 Gas 值,重新估算,而不是直接复用。
结论
你现在对 Robinhood Chain 已经有了准确的心智模型:一条基于 Arbitrum Orbit 的 Layer 2,结算到以太坊,用 ETH 支付 Gas,运行未经修改的 EVM 字节码,并以普通 ERC-20 合约的形式提供 Stock Tokens。该架构刻意地中规中矩,而这正是它能让你快速构建的原因。你现有的工具、ABI 知识和索引模式全都适用;需要小心的部分(最终性阶段和排序语义)现在也对你可见,而不再藏在暗处。Stock Tokens 则为你提供了一种始终在线、且始终有链上价格的资产。将客户端指向该链,读取一些真实数据吧。
下一步
- 在 Robinhood Chain 上读取 Stock Token 数据 使用 viem 查询 Token 元数据、供应量和余额
- 使用 Streams 跟踪 Stock Token 活动 无需轮询即可实时监控转账和交换活动
- 运行 Robinhood Chain 全节点 如果你想运营自己的基础设施
- Robinhood RPC 文档 查看支持的 JSON-RPC 和 Debug API 方法的完整列表
- Robinhood Chain 官方文档 查看网络状态和协议级详情
常见问题
什么是 Robinhood Chain?
Robinhood Chain 是一条基于 Arbitrum Orbit 构建的无需许可、EVM 兼容的以太坊 Layer 2。主网已上线,公共测试网也已开放。它在自己的网络上执行交易,并将数据和状态承诺发布到以太坊以进行结算和数据可用性。它使用 ETH 作为原生 Gas Token,面向链上金融基础设施,包括 Stock Tokens 等 Token 化现实世界资产。
Robinhood Chain 的 RPC 端点和链 ID 是什么?
Robinhood Chain 主网使用链 ID 4663,测试网使用链 ID 46630。公共主网 RPC 是 https://rpc.mainnet.chain.robinhood.com,公共测试网 RPC 是 https://rpc.testnet.chain.robinhood.com。两者都是共享且有速率限制的,因此适合钱包连接和测试,而不是生产环境。对于生产流量、更高的速率上限、归档数据和 WebSocket 订阅,请使用来自 Quicknode 等提供商的专用 Robinhood Chain RPC 端点。
哪些 RPC 提供商支持 Robinhood Chain?
Robinhood Chain 提供共享的公共 RPC 端点用于钱包连接和快速测试,Robinhood 的官方文档列出了用于生产工作负载的专用 RPC 提供商,包括 Quicknode。专用的 Robinhood Chain RPC 提供商提供更高的速率上限、归档数据、WebSocket 订阅和更深度的日志查询。Quicknode 为主网和测试网都提供托管的 Robinhood Chain 端点,两者均支持归档访问;其服务运行在一个每月处理 500B+ 次请求、可用性达 99.99% 的全球分布式网络上。
如何将 Robinhood Chain 添加到 MetaMask?
在 MetaMask 中添加自定义网络:主网链 ID 为 4663,RPC URL 可填公共的 https://rpc.mainnet.chain.robinhood.com 或你自己的专用端点,货币符号为 ETH,区块浏览器为 https://robinhoodchain.blockscout.com。测试网则对应链 ID 46630、RPC 地址 https://rpc.testnet.chain.robinhood.com 和区块浏览器 https://explorer.testnet.chain.robinhood.com。
以太坊开发工具可以在 Robinhood Chain 上使用吗?
可以。因为 Robinhood Chain 完全 EVM 兼容,并提供标准的以太坊 JSON-RPC 接口,Solidity 合约无需修改即可部署,Hardhat、Foundry、Remix、viem、ethers.js 和 web3.py 只需指向 Robinhood Chain 端点并设置正确的链 ID,即可正常工作。你不需要任何协议级更改。
Robinhood Chain 上的 Stock Tokens 是什么?
Stock Tokens 是 Robinhood Assets (Jersey) Limited 发行的债务工具,以 Robinhood Chain 上的标准 ERC-20 合约形式存在。持有它意味着对底层 ETP(交易所交易产品)有经济敞口,而非拥有其所有权,也不对底层证券享有任何权利。由于它们遵循 ERC-20 标准,提供了 name、symbol、decimals、totalSupply 和 balanceOf,并会触发 Transfer 事件,因此任何处理 ERC-20 Token 的钱包、智能合约或索引器都能在无需特殊逻辑的情况下处理它们。
Robinhood Chain 上的最终性与以太坊相比有何不同?
最终性分为两个阶段。Sequencer 接受并排序交易,并在片刻内返回回执,这是一个适合更新用户界面的软确认。一旦 sequencer 将交易以压缩批次发布到以太坊,且该批次达到以太坊最终性(发布后大约 13 分钟),硬最终性便随之到来。使用软确认来保证响应性,并在任何不可逆操作之前等待硬最终性。另外,通过规范桥将资产移回以太坊涉及 7 天挑战期,这适用于桥接提款,而不是交易最终性。
Robinhood Chain 与 Arbitrum One 有何不同?
两者都运行 Arbitrum Nitro 技术栈并结算到以太坊,因此执行环境和开发者体验几乎相同。不同之处在于 Robinhood Chain 是一条独立的 Orbit 链,有自己的链 ID、sequencer、区块历史、区块浏览器和合约部署,其配置和生态系统面向链上金融基础设施和 Token 化资产。部署在 Arbitrum One 上的合约,在 Robinhood Chain 上并不存在,除非你在那里另行部署。
- 原文链接: quicknode.com/guides/rob...
- 鸿途知科网 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
鸿途知科网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。