Logo
RPC Assistant

什么是 Polygon 最终性,它如何影响您的 dApp?

摘要

Polygon 最终性是指交易在 Polygon PoS 链上变得不可逆转的时刻。随着 Heimdall v2 升级,最终性现在大约在 5 秒内实现,而之前需要 1-2 分钟,这使得网络更适合支付和实时应用。对于开发者来说,理解最终性对于设计用户体验、处理重组以及选择合适的 RPC 基础设施来监控最终性状态至关重要。

快速决策指南:最终性如何影响您的应用

在深入机制之前,先问自己:您的应用是否需要等待最终性后再采取行动?答案决定了您的 RPC 策略和用户体验。

  • 支付和结算:如果您正在构建支付应用,您需要等待最终性以避免撤销。借助 Polygon 约 5 秒的最终性,您可以快速显示已确认状态,但仍应在释放资金前检查最终性。
  • DeFi 和交易:对于交换或清算,等待最终性可降低重组风险,但会增加延迟。您可能会选择接受概率性最终性以换取速度,但需准备好处理重组。
  • 游戏和 NFT:这些通常可以使用概率性最终性,但如果您正在铸造稀有物品,您可能需要等待最终性以防止重复。

下一步:如果您需要监控最终性,请使用提供可靠访问最新已定稿区块的 RPC 提供商。OnFinality 提供专用节点RPC 端点,可帮助您高效查询最终性状态。

区块链中的最终性是什么?

最终性是保证交易或区块不能被逆转或更改。在区块链中,主要有两种类型:

  • 概率性最终性:在交易之上构建的区块越多,被重组可能性就越小。比特币使用此模型。
  • 确定性最终性:一旦区块被定稿,它就是不可逆的。以太坊使用 Casper FFG,Polygon 使用里程碑机制。

Polygon PoS 使用确定性最终性,这意味着一旦里程碑被定稿,包含的交易就是永久的。

Polygon 最终性如何工作

Polygon 通过两种机制实现最终性:里程碑和检查点。

里程碑

里程碑在 Polygon 本身上提供快速的确定性最终性,无需等待检查点提交到以太坊。在每个 Heimdall 高度,验证者使用 CometBFT 共识中的投票扩展,提议自上次定稿里程碑以来他们看到的 Bor 区块哈希。当定稿 Heimdall 高度 H+1 时,Heimdall 会寻找所有验证者中具有 2/3 或更多一致性的最长公共区块哈希序列。该序列被定稿为新的里程碑。

借助 Heimdall v2 升级,Heimdall 中的区块时间缩短至 1-2 秒,因此里程碑的投票和定稿速度大大加快。这使最终性缩短至约 5 秒。

检查点

检查点是提交到以太坊的 Polygon 链状态的定期快照。它们通过将 Polygon 状态锚定到以太坊来提供额外的安全性,但速度较慢(通常每 30 分钟到 1 小时一次)。检查点不是 Polygon 本身最终性的必要条件,但对于跨链桥和其他需要以太坊级最终性的应用来说很重要。

为什么最终性对开发者很重要

理解最终性对于构建可靠的应用程序至关重要。以下是一些原因:

  • 用户体验:如果您等待最终性,用户可能会看到延迟。借助 Polygon 的快速最终性,您可以提供更好的用户体验。
  • 重组处理:即使有确定性最终性,在里程碑定稿之前也可能出现临时重组。您需要在应用程序中处理这些情况。
  • 跨链交互:如果您正在桥接资产,您需要在源链上等待最终性,然后再在目标链上铸造。

在 Polygon 上查询最终性

您可以使用 RPC 方法查询最终性状态。以下是一些示例:

使用 curl

要获取最新的已定稿区块,您可以使用带有 finalized 标签的 eth_getBlockByNumber 方法:

curl -X POST https://polygon.api.onfinality.io/public \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["finalized", false],"id":1}'

使用 ethers.js

const { ethers } = require('ethers');

const provider = new ethers.JsonRpcProvider('https://polygon.api.onfinality.io/public');

async function getFinalizedBlock() {
  const block = await provider.getBlock('finalized');
  console.log('Finalized block:', block.number);
}

getFinalizedBlock();

使用 viem

import { createPublicClient, http } from 'viem';
import { polygon } from 'viem/chains';

const client = createPublicClient({
  chain: polygon,
  transport: http('https://polygon.api.onfinality.io/public'),
});

const block = await client.getBlock({ blockTag: 'finalized' });
console.log('Finalized block:', block.number);

监控最终性和处理重组

即使有快速最终性,您也应该监控重组,尤其是在构建高价值应用时。以下是一些提示:

  • 跟踪最新的已定稿区块:轮询 finalized 标签并将其与最新区块进行比较。如果差异很大,则可能存在问题。
  • 使用 WebSocket 订阅:订阅 newHeads 并通过跟踪区块哈希来监听重组。
  • 设置警报:使用监控工具在最终性延迟或出现深度重组时提醒您。

WebSocket 订阅示例

const WebSocket = require('ws');
const ws = new WebSocket('wss://polygon.api.onfinality.io/public');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    method: 'eth_subscribe',
    params: ['newHeads'],
    id: 1
  }));
});

ws.on('message', (data) => {
  const message = JSON.parse(data);
  if (message.method === 'eth_subscription') {
    const block = message.params.result;
    console.log('New block:', block.number, block.hash);
  }
});

最终性与 RPC 提供商选择

在选择 Polygon 的 RPC 提供商时,请考虑他们如何处理与最终性相关的查询和重组。以下是一个比较:

提供商最终性支持重组处理备注
OnFinality支持 finalized 标签、WebSocket 订阅提供低延迟的可靠基础设施RPC 定价支持的网络
其他提供商各不相同各不相同查看文档了解最终性支持

OnFinality 提供公共和专用端点,使您可以根据需要进行扩展。对于生产应用,请考虑使用专用节点以获得更一致的性能。

常见陷阱和故障排除

  • 不等待最终性:如果您不等待最终性,您可能会接受可能被重组的交易。对于关键操作,始终检查 finalized 标签。
  • 使用错误的区块标签:某些 RPC 提供商可能不支持 finalized 标签。请确保您的提供商支持。
  • 忽略重组:即使有确定性最终性,也可能出现临时重组。请监控它们。
  • RPC 速率限制:公共端点可能有速率限制。对于高吞吐量应用,请使用专用节点。

关键要点

  • 得益于 Heimdall v2 升级,Polygon 最终性现在约为 5 秒。
  • 最终性通过里程碑实现确定性,检查点在以太坊上提供额外安全性。
  • 开发者应查询 finalized 标签以确保交易不可逆。
  • 选择支持最终性查询和 WebSocket 订阅的 RPC 提供商,例如 OnFinality。
  • 监控重组并设置警报以保持应用程序可靠性。

常见问题解答

概率性最终性和确定性最终性有什么区别?

概率性最终性意味着存在重组的可能性,而确定性最终性意味着一旦区块被定稿,就不能被还原。Polygon 通过里程碑使用确定性最终性。

Polygon 最终性需要多长时间?

借助 Heimdall v2,最终性在约 5 秒内实现,而之前需要 1-2 分钟。

我需要在 Polygon 上等待最终性吗?

这取决于您的应用。对于支付和高价值交易,是的。对于随意交互,您可能会接受概率性最终性。

如何检查交易是否已定稿?

您可以使用 eth_getTransactionReceipt 方法,并将区块号与最新的已定稿区块进行比较。或者,在 eth_getBlockByNumber 中使用 finalized 标签。

什么是检查点?

检查点是提交到以太坊的 Polygon 状态快照。它提供额外的安全性,并用于跨链桥。

OnFinality 是否支持 Polygon 最终性查询?

是的,OnFinality 的 Polygon RPC 端点支持 finalized 标签和 WebSocket 订阅。有关更多详细信息,请参阅 Polygon 网络页面

RPC 知识库

相关 RPC 内容

Rpc Provider Selection

什么是面向Web3的顶级以太坊RPC服务?

# 什么是面向Web3的顶级以太坊RPC服务? 选择面向Web3的顶级以太坊RPC服务取决于您的具体工作负载,但最佳服务始终能提供高可用性、低延迟、强大的安全功能(如MEV保护)以及灵活的定价。以太坊仍然是DeFi、NFT和L2基础设施的主导链,每天处理数百万笔交易。生产级应用需要的不仅仅是免费的公...

Rpc Provider Selection

什么是Arbitrum RPC,如何选择合适的端点?

Arbitrum RPC端点是dApp、钱包和索引器与Arbitrum One、Nova或测试网通信的网关。本文涵盖链设置、公共与私有端点、排序器行为以及为生产环境选择可靠RPC提供商的标准。...

Rpc Provider Selection

Solana RPC Providers: How to Pick the Right One for Your dApp

Choosing a Solana RPC provider is critical for dApp performance and reliability. This guide helps developers evaluate shared vs dedicated nodes, uptim...

Testnet Rpc

BNB 测试网:RPC 端点、水龙头和设置的完整开发者指南

# BNB 测试网:RPC 端点、水龙头和设置的完整开发者指南 BNB 测试网是 BNB Chain 生态系统(包括 BNB Smart Chain (BSC)、opBNB 和 Greenfield)的沙盒环境。它允许开发者部署和测试智能合约、dApp 以及跨链集成,而无需使用真实资金。测试网使用 ...

Rpc Provider Selection

Web3项目的最佳RPC提供商是什么?

Web3项目的最佳RPC提供商是能够支持您所需网络、保持延迟和正常运行时间可预测、提供清晰的请求可见性,并在流量增长时允许您从共享RPC端点扩展到专用节点基础设施的提供商。 对于许多生产团队来说,这意味着比较支持的链、请求限制、归档和Trace API支持、定价、分析、区域性能以及支持响应质量。On...

Testnet Rpc

Solana Devnet:开发者测试与构建完整指南

# Solana Devnet:开发者测试与构建完整指南 Solana Devnet 是一个公共测试网络,专为开发者构建、部署和调试 Solana 程序而设计,无需使用真实的 SOL。它紧密模拟主网行为,但使用无货币价值的测试代币。本指南涵盖您入门所需的一切:连接 Devnet、获取测试 SOL、选...

永远不用担心基础设施

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

开始