Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
OnFinality Learn
网络与协议指南阅读约 11 分钟

Etherlink:Tezos 上 EVM Layer 2 实用指南

了解 Etherlink 如何作为 Tezos 上兼容 EVM 的 Layer 2 运行,并通过可复现的步骤进行连接、部署和验证。

TL;DR

Etherlink 是 Tezos 上非托管的、兼容 EVM 的执行层,基于 Tezos Smart Rollup 技术构建。它通过 EVM 接口和 Michelson 接口暴露同一条区块链,因此以太坊工具和 Tezos 工具可以与同一状态交互。本指南解释了心智模型,展示了如何使用可运行的代码进行连接和部署,并提供了验证交易和排查常见故障的诊断流程。它将文档化行为、建议以及你需要自行测量的数据区分开来。

心智模型:一条链、两个接口、L1 结算

将 Etherlink 视为一条有两个前门的区块链。EVM 门接受以太坊风格的交易和 JSON-RPC 调用。Michelson 门接受 Tezos 风格的交互。两扇门通向同一状态,这就是资产可以在 Etherlink 和 Tezos L1 主网之间移动,以及兼容 EVM 的链可以互操作的原因。

结算发生在 Tezos Layer 1 上。Etherlink 使用 Smart Rollups,这是由 Tezos 实现的内置乐观 rollup 机制。排序器提供低延迟确认,而最终性和安全性最终取决于 Tezos L1。这种分离在操作上很重要:交易可能在执行层显示为已确认,但在共识层尚未结算。

文档描述执行层确认时间约为 500 毫秒,L1 结算时间约为 6 秒,并有一个实验性的即时确认功能,可在约 50 毫秒内提供预确认。将这些视为文档化的特性,而不是针对你特定工作负载的保证。在你自己的路径上进行测量。

  • 执行层:EVM 交易被排序和执行的地方。
  • 共识层:Tezos L1,结算和安全性的锚定处。
  • 排序器:提供快速确认;它不是最终的事实来源。
  • 治理:与 Tezos 链上治理集成,用于协议变更。

先决条件和环境假设

在运行以下流程之前,准备一个工作环境。你需要 Node.js 和 npm 用于 JavaScript 示例,curl 用于 RPC 检查,以及一个 EVM 钱包或私钥用于部署。将机密信息排除在 shell 历史记录和源代码管理之外。

你还需要一个 Etherlink 的 RPC 端点。示例使用占位符 RPC_URL。不要在生产环境中硬编码公共端点;根据你的延迟、速率限制和可靠性要求选择提供商。如需具体的端点推荐,请使用 RPC Assistant,而不是猜测。

  • Node.js 18 或更高版本以及 npm。
  • 已安装 curl。
  • 在 Etherlink 上拥有已注资的账户用于部署测试。
  • 一个你控制或信任的 RPC_URL,以及存储在环境变量中的 PRIVATE_KEY。

使用 ethers 部署和调用合约

一个最小的部署可以确认你的工具链、账户和 RPC 路径都能协同工作。下面的脚本使用 ethers 读取链 ID、发送交易并等待收据。将 RPC_URL 和 PRIVATE_KEY 替换为你自己的值。合约字节码有意省略;请使用你自己编译的产物。

关键的验证点是收据状态。状态为 1 表示交易在执行层成功执行。这本身并不证明 L1 结算,后者是单独的检查。

import { JsonRpcProvider, Wallet, ContractFactory } from "ethers";

const provider = new JsonRpcProvider(process.env.RPC_URL);
const wallet = new Wallet(process.env.PRIVATE_KEY, provider);

const chainId = (await provider.getNetwork()).chainId;
console.log("chainId", chainId.toString());

const factory = new ContractFactory(abi, bytecode, wallet);
const contract = await factory.deploy();
const deployTx = contract.deploymentTransaction();
console.log("deploy tx", deployTx.hash);

const receipt = await deployTx.wait();
console.log("status", receipt.status, "block", receipt.blockNumber);

验证交易状态和结算

验证有两个层面。首先,使用 eth_getTransactionReceipt 确认执行层收据。其次,在收据区块之后读取相关合约或余额,确认交易已反映在链状态中。对于结算敏感的操作,还要根据 Tezos 工具和 Etherlink 文档检查 L1 侧。

使用以下流程并将结果记录在表格中。不要凭记忆填写数字;运行每个步骤并粘贴实际输出。表格是模板,不是对性能的声明。

  • 步骤 1:调用 eth_getTransactionReceipt 并记录 status、blockNumber 和 gasUsed。
  • 步骤 2:在收据区块读取受影响的状态并记录值。
  • 步骤 3:短暂延迟后重复读取并确认一致性。
  • 步骤 4:对于结算检查,遵循文档化的 Tezos L1 验证路径。
curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["TX_HASH"]}'

用于自行测量的结果表格模板

使用此 Markdown 表格记录你自己的观察结果。在测量之前将单元格留空。列将执行层确认与 L1 结算分开,以免混淆两者。

检查项方法观察值时间戳备注
链 IDeth_chainId
最新区块eth_blockNumber
部署收据状态eth_getTransactionReceipt
执行确认时间客户端计时
L1 结算时间Tezos 工具
状态读取一致性合约读取

局限性、权衡以及需要测量什么

Etherlink 继承了其设计的权衡。快速的执行层确认改善了用户体验,但它们与 L1 最终性不同。乐观 rollup 设计涉及挑战期和欺诈证明,因此结算语义与单体 L1 不同。治理与 Tezos 集成,这提供了可升级性,但也意味着协议变更遵循 Tezos 治理流程。

测量影响你应用程序的因素:从用户到 RPC 端点的端到端延迟、收据延迟、状态读取一致性以及负载下的错误率。不要依赖已发布的数字进行容量规划。如果你需要可预测的吞吐量,考虑使用专用节点而不是共享公共端点。

  • 执行确认不是最终结算。
  • 公共端点可能有限速;生产工作负载需要容量规划。
  • 跨接口操作需要理解 EVM 和 Michelson 工具。
  • 升级遵循 Tezos 治理,并可能改变内核行为。

后续步骤:工具、端点与运维

在验证连接和部署后,转向运维加固。将 RPC 配置放入环境变量,添加带退避的重试,并监控收据延迟和错误率。如果你正在选择端点,使用 RPC Assistant 获取直接推荐,并在配置钱包之前查看网络详情。

对于运行生产工作负载的团队,根据你测量的吞吐量评估专用基础设施和定价。为 nonce 冲突和结算检查保留运行手册,并在任何提供商或网络变更后重新运行验证流程。

  • 在配置你的技术栈之前查看支持的网络。
  • 比较 API 服务选项以获取托管访问。
  • 评估专用节点选项以获得可预测的性能。
  • 查看定价以进行 RPC 容量规划。
  • 使用 RPC Assistant 获取端点选择指导。

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始