Solana计划在2024年9月底或10月初发布Agave版本2.0,该版本将引入多项RPC API和SDK的变更,文章详细介绍了如何准备这些变更并提供了替代方法的代码示例。
Solana 计划在 2024 年 9 月底或 10 月初向主网测试版发布一个重大版本,称为 Agave 2.0 版本(来源:GitHub - Anza-xyz/agave/Wiki)。这些更改已经在 Devnet 和 Testnet 上线。此版本将引入 Solana 网络的许多更改,包括对 Solana RPC API 和 SDK 元素的修改。
在本指南中,我们将总结在最新版本发布后将不再支持的方法,以及如何为这些更改做好准备。
所有更改都是向后兼容的,并且在 Solana 主网之前的版本中可用,允许你无缝升级你的应用程序。
为了避免应用程序出现问题,我们建议尽快更新你的代码库,使用下面列出的替代调用。
更喜欢视觉格式?跟随 Sahil 在 3 分钟内了解这些变化。
如何为 Solana Agave v2.0 升级做准备 - YouTube
QuickNode
131K 订阅者
QuickNode
搜索
信息
购物
点击取消静音
如果播放没有立即开始,请尝试重新启动你的设备。
你已退出登录
你观看的视频可能会被添加到电视的观看历史记录中,并影响电视推荐。为了避免这种情况,请取消并在你的计算机上登录 YouTube。
取消确认
分享
包括播放列表
检索共享信息时出错。请稍后再试。
稍后观看
分享
复制链接
在 YouTube 上观看
0:00
/ •直播
•
订阅我们的 YouTube 频道以获取更多视频!订阅
许多 RPC 端点将被弃用,并且在 Agave 2.0 版本中不再支持。请使用下面列出的替代调用。
弃用的 v1 API 调用 | v2 替代调用 <br>(以及最新文档的链接) |
---|---|
confirmTransaction | getSignatureStatuses |
getSignatureStatus | getSignatureStatuses |
getSignatureConfirmation | getSignatureStatuses |
getConfirmedSignaturesForAddress | getSignaturesForAddress |
getConfirmedBlock | getBlock |
getConfirmedBlocks | getBlocks |
getConfirmedBlocksWithLimit | getBlocksWithLimit |
getConfirmedTransaction | getTransaction |
getConfirmedSignaturesForAddress2 | getSignaturesForAddress |
getRecentBlockhash | getLatestBlockhash |
getFees | getFeeForMessage |
getFeeCalculatorForBlockhash | isBlockhashValid 或 getFeeForMessage |
getFeeRateGovernor | getFeeForMessage |
getSnapshotSlot | getHighestSnapshotSlot |
getStakeActivation | getAccountInfo |
点击上面的链接或浏览我们的 Solana 文档 以了解更多关于弃用 RPC 端点的替代方案。
许多替代调用是一对一的替换,但有些可能需要对你的代码进行更多的修改。让我们来看几个例子。如果你有其他问题,告诉我们 或随时在 Discord 上联系我们。
鉴于新的升级,你需要创建自己的确认逻辑来验证交易是否已被网络接受。为此,我们可以创建一个类似的 confirmTransaction
函数,它将依赖 getSignatureStatuses
调用来检查交易的状态。以下是使用 @solana/web3.js
库的一个解决方案:
import { Connection, TransactionSignature, TransactionConfirmationStatus, SignatureStatus } from '@solana/web3.js';
async confirmTransaction(
connection: Connection,
signature: TransactionSignature,
desiredConfirmationStatus: TransactionConfirmationStatus = 'confirmed',
timeout: number = 30000,
pollInterval: number = 1000
): Promise<SignatureStatus> {
const start = Date.now();
while (Date.now() - start < timeout) {
const { value: statuses } = await connection.getSignatureStatuses([signature]);
if (!statuses || statuses.length === 0) {
throw new Error('Failed to get signature status');
}
const status = statuses[0];
if (status === null) {
// 如果状态为 null,交易尚未被知晓
await new Promise(resolve => setTimeout(resolve, pollInterval));
continue;
}
if (status.err) {
throw new Error(`Transaction failed: ${JSON.stringify(status.err)}`);
}
if (status.confirmationStatus && status.confirmationStatus === desiredConfirmationStatus) {
return status;
}
if (status.confirmationStatus === 'finalized') {
return status;
}
await new Promise(resolve => setTimeout(resolve, pollInterval));
}
throw new Error(`Transaction confirmation timeout after ${timeout}ms`);
}
此脚本简单地轮询 getSignatureStatuses
方法,直到交易达到我们期望的状态或超时。然后返回交易的状态。
如需更多想法,请查看我们的 Solana 交易传播指南。
如果你预计需要经常这样做,考虑构建你自己的 自定义函数 来处理此逻辑。
由于 getStakeActivation
方法将被弃用,你需要使用 getAccountInfo
方法并反序列化/解析返回的数据以获取质押激活状态。查看以下资源以了解更多信息:
在 Solana 上构建?Quicknode 的 RPC 端点与 Solana 网络的最新版本保持同步。QuickNode 通过其先进的 Solana 基础设施提供竞争优势:
🌎 高交易成功率:我们的全球网络和尖端硬件确保你的交易可靠地发送到 Solana 的主网、Devnet 或 Testnet。
🚀 专有的超扩展技术:我们的定制解决方案优于标准的 Solana 客户端,提供卓越的可扩展性、性能和延迟。
🛠️ 持续改进:我们不断改进我们的基础设施:
在此注册一个免费账户 这里 并创建一个 Solana 端点:
告诉我们 如果你有任何反馈或对新主题的请求。我们很乐意听取你的意见。
在 Twitter 上关注我们并加入我们的 Discord 以了解最新动态。
- 原文链接: quicknode.com/guides/sol...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!