构建Solana应用:Helius RPCs + 教程 (Solana开发平台) — 第一部分

  • csjcode
  • 发布于 2025-02-23 16:36
  • 阅读 31

本文是关于Solana区块链开发中如何利用Helius RPCs平台的教程,重点介绍了RPCs的基本概念和作用,以及如何使用Helius提供的工具和服务来简化Solana应用的开发过程。教程内容包括Helius平台的概述、基本RPC设置、测试工具的使用(包括网页版和本地版),以及通过Postman、cURL和Node.js进行Solana RPC请求的实践。

构建于 Solana 之上:Helius RPCs + 教程(Solana 开发平台)— 第 1 部分

理解 RPC 对于 Solana 开发者至关重要。我们将探索使用 Helius,一家领先的 Solana RPC 提供商。

我最近发表了一篇关于 为云工程师准备的 Solana 区块链概述,这引起了那些对区块链感到好奇的人的兴趣。

云开发者正在涌入 Solana, 被围绕在 黑客马拉松、初创公司、AI 代理、去中心化金融 ( DeFi ) 以及 Solana 生态系统中发生的快速 创新 方面的活动所吸引。

本教程系列 将探索 开发者如何利用 RPC 平台Solana 区块链上创建强大的应用

我们将深入研究 Helius, 一家领先的 Solana RPC 提供商,并掌握将 RPC 集成到 Solana 应用程序中的艺术。

使用 Helius RPC 构建于 Solana 之上

基础知识:什么是 RPC?

RPC 是 Solana 开发者一个重要的组成部分。我们将深入探讨更多细节,但本节旨在 熟悉术语。

  • “RPC”是“远程过程调用 (Remote Procedure Call)”,这是一种特殊的 API 协议,开发者可以使用它与像 Solana 这样的区块链进行通信。
  • “RPC 节点”是运行 RPC 协议的服务器。 这些节点是一个加粗中间体加粗,允许开发者向区块链 发送请求 并以可预测的、结构化的格式 接收响应
  • “JSON-RPC” 是 Solana 上使用的一种特定的 RPC 协议,用于与区块链通信。
  • 开发者使用 JSON-RPC 向 RPC 节点和区块链 发送特定的“方法”请求,例如获取 账户余额 或执行 交易。然后他们接收以 JSON 格式返回的响应。这是 你的应用程序Solana 区块链 之间通信所必需的。
  • RPC “方法类似于执行特定任务的函数名。开发者包含必需和/或可选的输入变量,并接收到格式一致的输出响应。
  • 你可以使用 HTTP 方法或 Websocket。HTTP 总是使用 POST,最适合发送单个请求。使用 Websocket 进行双向订阅和实时事件。
  • Solana RPC “端点” 类似于你可能使用过的 REST 或 GraphQL API 的 “base url”
  • 端点根据你正在使用的 Solana 环境而有所不同,例如 devnet(供开发者使用)、testnet (QA) 和 mainnet-beta(实时的生产 Solana 区块链)。此外,如果你正在使用 RPC 提供商的服务,他们会要求你替换成他们的 RPC 提供商 URL

HTTP JSON-RPC 请求示例 (示例展示了如何从 CLI 使用 cURL):

curl https://api.devnet.solana.com -s -X POST -H "Content-Type: application/json" -d '
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBalance",
    "params": [\
      "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"\
    ]
  }
'

## ✅ 这是 Solana devnet 端点:https://api.devnet.solana.com
## ✅ HTTP 调用总是使用 POST 方法。
## ✅ Header content type 始终是 JSON。
## ✅ 方法可能会有所不同,但这里是 getBalance
## ✅ 需要的参数:因方法而异,但在本例中是一个公钥 (pubkey)
## ✅ 参数仅按数组顺序取值(不是键值对)。

你可能之前使用过“API Gateway”。 这是一种常见的 API 管理服务,在云平台堆栈中使用 API 协议,如 HTTP REST、WebSockets 或 GraphQL。

  • 像 Helius 这样的“RPC 提供商” 类似于 RPC 请求、节点和方法的 API Gateway,用于连接到区块链。
  • Solana RPC 提供商的目的是类似于云 API 网关提供商的角色。 它们提供了一个云平台来增强性能、可靠性、可扩展性,并为开发者提供额外的工具。它们会根据使用情况和高级服务收费。

领先的 RPC 服务提供商如 HeliusAlchemyQuickNode 等,提供 对开发者友好的平台,使 Solana 的 JSON-RPC 协议的使用更加容易。这就是你应该使用它们的原因,而不是直接连接到 Solana。

Solana RPC 提供商示例:

“所以,我必须使用 RPC 提供商吗?” — 匿名开发者

“所以,我必须使用 RPC 提供商吗?” ... 从技术上讲 — 不是必须的,对于小型应用来说。

但是不使用它是一个糟糕的选择,因为存在可能严重影响你的开发体验和应用程序性能的 重大限制没有提供商,你将面临 性能、扩展、附加功能、可靠性、正常运行时间和成本效益方面的限制。

RPC 提供商平台 针对更好的连接性进行了优化 — 这样你就可以专注于构建出色的应用程序。它们运行 节点(处理和扩展 RPC API 请求的特殊服务器),从而提高性能并提供增强 Solana 请求的特殊功能。

此外,像 Helius、Alchemy、Moralis 和 QuickNode 这样的平台还提供额外的教程、博客文章和其他与 API 相关的工具,包括用于其他区块链的工具,并且 可能为入门级 Solana 开发者提供资源

在本评价中,我们将专注于 Helius, 了解其 概述、工具和教程

完成之后,你将对如何使用此平台和 Solana RPC 有一个扎实的了解。此外,如果需要更多通用信息,请查看我的 通用 Solana 概述

第 1 部分 — Postman、Node.js 中的概述 + 基本教程

  • 介绍
  • 关于 Helius
  • 更多关于 RPC 节点
  • 其他数据服务
  • Helius 入门 (免费注册)
  • 仪表板概述
  • 基本 RPC 设置
  • Helius Test Drive 工具 (网页版)
  • Helius Test Drive 工具(本地,开源仓库)
  • Solana RPC 方法列表
  • Solana RPC 扩展 DAS API 方法列表
  • Postman:入门 (免费) / 工作区设置 (可选)
  • Postman:Solana RPC 端点的 Postman 集合
  • 来自 Postman 的基本 Solana RPC 请求
  • 使用 Helius 的 Solana RPC、cURL 教程
  • Node.js 中的基本 Solana/DAS RPC 请求教程
  • Typescript 中的基本 Solana/DAS RPC 请求教程

第 2 部分 — 更高级的 RPC 教程(即将推出)

下一篇教程第 2 部分将涵盖的主题

  • 通过 Helius 从带有自动化基础设施的云 Lambda 中的 Solana RPC。
  • Solana 的 Helius Webhooks 请求
  • Helius Enriched API 请求。
  • Helius 前端代理
  • 后端 Solana RPC 请求的用例
  • Webhooks 与 Solana 结合使用的用例
  • 后端 Solana RPC 请求的用例
  • 其他数据服务

注意:加粗我与 Helius 没有任何隶属关系,这不是加粗付费的,也不是加粗赞助的。加粗 我之所以使用 Helius RPC 提供商,是因为我曾经使用过它,并且它拥有良好的声誉,但你也可以找到其他提供商,例如 QuickNode 和 Alchemy!加粗

关于 Helius

Helius 一直处于改善开发者体验的最前沿,通过 RPC 和 Solana,帮助初创公司和开发者快速上手为该链创建应用程序。你可能在 加密货币 Twitter/X 上的 mert 看到过他,asche 是最活跃/最著名的 Solana 创始人/工程师之一。此外,我 有机会在去年的盐湖城 MtnDAO 上与 Helius 联合创始人 Nick 及其他 Helius 员工会面, 他们是一群友善的人,热情、知识渊博且平易近人。

Helius 提供了一个高级 Solana 开发平台,其中包含 RPC、API、Webhooks 和数据流等工具,并由社区和/或客户服务选项提供支持。它针对 可扩展和高性能 的应用程序开发进行了优化。

值得注意的是,Helius 也是 领先的 Solana 验证器 之一,使质押者和机构合作伙伴能够享受 0% 的费用和完整的 MEV(最大可提取价值)奖励。

更多关于 RPC 节点

如上所述,RPC 节点之于 Solana,就像 API 网关之于许多其他非 Solana 应用程序和云服务一样。

RPC 节点对于 Solana 交互至关重要。 它们允许应用程序读取和写入数据到 Solana 区块链。

作为一名 Solana 开发者, 你主要使用 像 Helius 这样的 RPC 提供商 连接到 Solana 区块链进行交易、信息查询以及与链上应用程序交互。你获取响应并在你的应用程序中使用它。

Helius 和大多数提供商至少提供两种主要类型的节点。

  1. 共享 RPC 节点 适用于 较小的 项目。这些是基于使用量和速率限制的节点,专为适度要求的项目而设计,在成本和性能之间取得平衡。这适用于免费或低成本计划。
  2. 专用 RPC 节点 适用于 高需求 应用程序。它们提供无限的请求和低延迟,非常适合大规模用例。

你可能还会看到 公共/私有端点

  • “公共” RPC 将是 原生 Solana 端点。这些端点具有非常低的“速率限制”,以防止滥用的高使用量。因此,它们不适合生产应用程序。

公共 RPC 端点,来源:https://solana.com/docs/core/clusters

  • “私有” RPC 是你付费以获得更高的速率限制、更好的性能和可靠性的服务。这些是 RPC 提供商提供的。

带有 API 密钥的 Helius 端点已模糊处理

Helius 节点在全球范围内分布以提高效率:Helius 表示他们在纽约、新加坡、东京、法兰克福和其他关键地点设有节点,以确保在全球范围内实现低延迟访问。

节点自动路由请求。 该系统会将请求发送到 最近的节点,从而确保共享 RPC 用户的最佳性能。

使用 Helius“你可以锁定你的端点,使其仅服务于来自特定 IP 和域名的请求”,但是,特别是对于客户端应用程序,你可能需要代理你的请求以获得更好的安全性,因为你不想泄露你的密钥,因为你需要为使用量付费。

Helius RPC 代理: 有一个 免费的 Github 一键部署开源 RPC 代理 ,你可以一键将其部署到 Cloudflare。

其他相关的数据服务

Helius 还提供额外的数据服务,以简化开发者的工作,以下是一些:

  • 实时数据流选项。 开发者可以使用 Geyser、Enhanced Websockets 和 Standard Websockets 等工具来流式传输实时 Solana 数据。
  • Geyser (“Yellowstone”) 插件 提供 Solana 数据最快的更新。“高度可配置的实时数据流。” 它利用 Solana 的数据流,提供关于区块链事件的更新,例如添加新块、处理交易或更改帐户状态。“Geyser 或 gRPC 流提供了一种最快、最有效的方式来直接将 Solana 数据流式传输到你的后端。使用 gRPC,你可以订阅块、插槽、交易和帐户更新。”
  • Enhanced Websockets 提供交易和帐户更新,适用于非延迟敏感的客户端应用程序。
  • Standard Websockets 需要重新连接处理,用于实时数据的双向通信,但需要强大的重新连接逻辑。
  • Webhooks 自动化事件通知:支持超过 70 种交易类型,Webhooks 处理大规模交互,每个 Webhook 最多可处理 100,000 个地址。它们非常适合自动化,但不适合亚秒级延迟要求。

Helius 入门

  • 转到 Helius 主页,点击 “免费开始 (Start for Free)”“开始构建 (Start Building)” 按钮
  • 使用电子邮件/密码、Google、Github 或你的 Solana 钱包注册

点击任意一个按钮开始 — https://www.helius.dev/

(可选,仅针对付费计划连接 Solana 钱包) 如果你想使用你的 Solana 钱包注册付费计划(如果你已经有钱包),你可以这样做,但如果你想要免费计划,你仍然需要连接你的 Github/Google 帐户。

使用你的电子邮件/密码、Google、Github 登录后,你将看到下面的价格图表。

  • 我们将从 免费版本 开始尝试一些演示,所以选择它。
  • 单击下面的“开始构建 (Start Building)”按钮

使用免费计划, 你将获得“50 万积分、10 个 每秒请求数、1 个 API 密钥、1 个 Webhook、社区支持”。

如果你正在构建主要处于开发中的基本新应用,或者正在尝试服务教程,则最好使用免费计划。 一旦你开始运行完整的应用程序,你可能希望至少升级到开发者选项, 而对于有良好吸引力的应用程序,其他选项会提供更多的选项/使用量。

接下来,你将看到一个屏幕,提示他们正在构建你的工作区,这大约需要 10-15 秒,然后你将看到 Helius 仪表板

🥰 感谢阅读!…… 🔥 请鼓掌并分享这篇文章,谢谢!🚀

概述 — Helius 仪表板

让我们看看这一切意味着什么。

  1. 调整仪表板显示 以获得全宽、半宽、中间等显示效果。
  2. 当前计划。 我们选择了免费计划,但这将反映当前的设置。
  3. 积分使用情况。 标准 RPC 调用需要 1 个积分。请参阅 积分使用情况文档。
  4. 项目名称/ID: 在你重命名之前,这是一个随机生成的名称/ID。在免费计划中,你获得一个用户和一个项目,升级以获得一个团队。
  5. API 密钥。 你在使用免费计划时会得到一个 API 密钥,但在其他计划中会有更多密钥。你需要在向 Helius RPC 发出的请求中包含 API 密钥。
  6. 仪表板。 仪表板的首页,你从这里开始。
  7. 端点。 管理与 Solana 区块链数据交互的接入点。查看和配置项目的不同端点。
  8. API 密钥。 安全地生成和管理 API 密钥,这些密钥可以对 Helius 服务的使用进行身份验证和跟踪。确保每个项目都有其唯一的密钥,以便更好地进行控制。复制此以用于你的请求。
  9. Webhooks。 配置 webhook 端点以接收来自区块链的实时更新或通知。“Webhooks 允许你监听链上的事件,并在这些事件发生时触发某些操作。Webhook 更改可能需要长达 2 分钟才能生效。”
  10. 专用节点(付费)。 设置和管理高性能、专用的 RPC 节点,这些节点经过定制,可以处理大规模应用需求,而不会受到共享流量的干扰。“在我们全球任何数据中心位置订购带有可选 Geyser 插件的专用节点。”
  11. 使用情况。 监控你的服务使用指标,包括请求计数、数据处理量以及 Helius 订阅的其他关键分析。已用积分、剩余积分、结算周期、 使用情况细分、RPC 指标(如果已升级)
  12. RPC 测试。 直接在仪表板中测试和验证你的 RPC 调用。此功能可帮助开发者调试和优化其 API 集成。使用各种方法并查看结果,例如 getAsset、getBalance 等。
  13. 结算。 查看订阅详细信息、管理付款方式并访问 Helius 帐户的结算单。更改你的计划。
  14. 项目设置。 自定义各个项目的设置,例如重命名、调整配置。
  15. 系统状态。 检查 Helius 服务的实时运行状态和历史正常运行时间指标以及过去的事件,确保透明度和快速故障排除。
  16. 支持。 使用 Helius 访问客户支持资源以解决任何问题或疑问。免费用户可以访问 Discord 和 Telegram 社区支持,付费用户可以获得额外的聊天资源。
  17. 文档。 探索深入的指南、参考和示例,以充分利用 Helius API、仪表板和工具。
  18. 核心服务:RPC(连接到“端点”页面) — 开始使用 RPC,“查看 RPC URL、设置自动缩放首选项、购买预付积分(用于加密计划)、Websockets:原生和增强”
  19. 核心服务:Webhooks — 探索 Helius Webhooks 产品, 配置 webhook 端点、设置事件触发器、测试你的 webhooks、监控 webhook 活动”
  20. 核心服务:Enriched APIs — “ DAS Token API、DAS NFTs API、Priority Fee API、Transaction API、Mint API、Asset Metadata APIs”

基本 RPC 设置

你可能还记得 Solana 具有你可连接到的特定 RPC API 端点。我在 我的另一篇 Solana 文章 中讨论过。

你将用 Helius RPC 替换它,因为它们充当着与你正在使用的 API 网关类似的角色。

要在 Helius 上进行 标准 RPC 调用,请使用这些 Helius 平台端点,而不是标准 Solana RPC 端点:

  • Mainnethttps://mainnet.helius-rpc.com
  • Devnethttps://devnet.helius-rpc.com

当你单击 Helius 仪表板 上的 “端点”页面链接 时,你将看到类似以下内容(我的 API 密钥已编辑)。

你也可以切换到 Dev 以获取 dev 端点。

Helius Test Drive 工具

现在我们已经注册并获得了 API 密钥,我们可以访问 Helius 设置的一个很棒的资源,以便轻松测试所有 RPC 端点并获取数据。

它是一个名为 Helius Test Drive开源工具

Helius 上的网站界面: https://testdrive.helius.xyz/

在本地下载的 Helius 仓库: https://github.com/helius-labs/test-drive

这是网站示例,你可以在其中输入之前给你的带有 API 密钥的端点,然后你可以测试各种可用的端点。

对于此示例,由于我将查看 Mainnet 上的一些内容,我将使用 Mainnet api url,例如 https://mainnet.helius-rpc.com/?api-key=\[your key]

让我们尝试 getAccount 方法。

我将查看 WEN memecoin pubkey/account number加粗我拥有少量这种 memecoin,你无需为了本教程拥有它,我们只是在检查其信息;这不是建议或财务建议,如果你购买 memecoin,请进行自己的尽职调查,它们通常会归零加粗)。

⚠️ 重要提示: 不要将 pubkey (或 PUBLIC 密钥)与你的秘密 API 密钥或钱包密钥混淆!Pubkey 是一个 公共地址,它是区块链上的公共信息。加粗 绝不加粗 应泄露秘密 API 密钥或秘密钱包密钥。加粗 ⚠️加粗

我访问了 SolanaFM 网站, 这是一个 Solana 区块链浏览器,可以更轻松地查看交易、代币、区块和帐户。

我在搜索栏中键入了“wen”, 它会显示帐号(与 pubkey 相同)。

请记住,Solana 代币是帐户,地址是“公钥”。因此,在这种情况下,代币/程序地址/号码、帐号和 公钥 是相同的。

另请注意,代币由 Solana 程序创建,但它本身不像程序那样是可执行的。当我们在下面查询有关代币的信息时,你将看到创建它的程序在此处提到:“owner”:“TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA”,

我们想要的代币地址恰好是列表中的第一个:“WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk”

⚠️ 请注意,列出了其他几个,请确保你拥有正确的那个。始终验证你是否正在使用正确的代币/pubkey 进行交易。有些诈骗会试图欺骗你将钱发送给冒名顶替者。

如果你不确定哪个是正确的代币/pubkey,你还可以通过其他来源(例如 CoinGecko 或 Jupiter(Solana 上最大的 DEX 或交易平台进行交易))来验证该程序/帐号。

✅ Wen CoinGecko pubkey:WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk

CoinGecko 显示代币/程序,复制/粘贴以确认

请参阅:如果在 SolanaFM 中显示“Jupiter 已验证”意味着它是 Jupiter 已验证的币

如果你单击 wen 的第一个条目的页面,则会在 SolanaFM 页面上显示“Jupiter verified”。 Jupiter 会验证一些在其平台上允许的代币,以防止出现类似名称的代币造成的混淆,因此,虽然这一项本身并不能 100% 确定这是你想要的那个,但它是一个指标。

  • 有关我打开时放入的 getAccountInfo 的更多信息和输入。
  • 我将 Wen 程序地址 作为 pubkey 输入。你可以更改其他参数,但我们无需这样做。请注意,如果你发出请求,你也可以使用可选参数。

在这里我们看到了请求的输出:

{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "apiVersion": "2.2.0",
      "slot": 312525542
    },
    "value": {
      "data": [\
        "111191jdMLtc4pmrDHdRipUKTtM7mjLHtWJp4VH8v2qbkTw9xGpG8NBeFSPxEGZ5oixG19yiAVH4qy5AzJiDKjfzRfFLyx24jWKrZKLCCs5hch5",\
        "base58"\
      ],
      "executable": false,
      "lamports": 71152956048,
      "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
      "rentEpoch": 18446744073709552000,
      "space": 82
    }
  },
  "id": "test-drive"
}

我真正喜欢的一个功能是你可以向下滚动 并获取

  • 请求架构
  • 响应架构
  • CLI 代码示例

这作为一个例子很有用,但我们正在进行的这个特定查询并没有告诉我们太多信息,所以让我们看看另一种方法 - 我将其更改为方法 getAsset。

需要理解的一点是 getAsset 是一种方法,它是原始 Solana RPC 方法扩展的一部分。它使用 Solana 的 DAS API(数字资产标准 API),该服务可以更高效地查询 Solana 数字资产并提供更多信息。

它会返回大量关于代币的额外元数据。这告诉我它是一种可替代代币(如其中许多代币的币)。它不是 NFT,那将是不可替代的(独一无二的)。

{
  "jsonrpc": "2.0",
  "result": {
    "interface": "FungibleToken",
    "id": "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk",
    "content": {
      "$schema": "https://schema.metaplex.com/nft1.0.json",
      "json_uri": "https://qgp7lco5ylyitscysc2c7clhpxipw6sexpc2eij7g5rq3pnkcx2q.arweave.net/gZ_1id3C8InIWJC0L4lnfdD7ekS7xaIhPzdjDb2qFfU",
      "files": [\
        {\
          "uri": "https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png",\
          "cdn_uri": "https://cdn.helius-rpc.com/cdn-cgi/image//https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png",\
          "mime": "image/png"\
        }\
      ],
      "metadata": {
        "name": "Wen",
        "symbol": "WEN",
        "token_standard": "Fungible"
      },
      "links": {
        "image": "https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png"
      }
    },
    "authorities": [\
      {\
        "address": "Hd7tQ6JUPaKPid8tiqyhLfWEaivRnf7YJDyMi4abmsvx",\
        "scopes": [\
          "full"\
        ]\
      }\
    ],
    "compression": {
      "eligible": false,
      "compressed": false,
      "data_hash": "",
      "creator_hash": "",
      "asset_hash": "",
      "tree": "",
      "seq": 0,
      "leaf_id": 0
    },
    "grouping": [],
    "royalty": {
      "royalty_model": "creators",
      "target": null,
      "percent": 0,
      "basis_points": 0,
      "primary_sale_happened": false,
      "locked": false
    },
    "creators": [],
    "ownership": {
      "frozen": false,
      "delegated": false,
      "delegate": null,
      "ownership_model": "token",
      "owner": ""
    },
    "supply": null,
    "mutable": false,
    "burnt": false,
    "token_info": {
      "symbol": "WEN",
      "supply": 72764767280822620,
      "decimals": 5,
      "token_program": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
      "price_info": {
        "price_per_token": 0.0000822689,
        "currency": "USDC"
      }
    }
  },
  "id": "test-drive"
}

你在那里获得的大量信息很有用,例如代币是否“冻结”,或者创建者是否可以增加供应量(通常对价格不利)。虽然理解这篇文章的所有内容已超出范围。

当你访问 Dexscreener 或 CoinGecko 时, 它可能会获取一些元数据并将其添加到该币的配置文件中。

请注意“price_per_token”

"price_per_token": 0.0000822689,

根据 CoinGecko 的说法,这差不多是正确的

Helius Test Drive — 本地,github 仓库(开源)

仓库在这里:https://github.com/helius-labs/test-drive

在本地克隆仓库(需要 node。):

git clone https://github.com/your-username/helius-rpc-playground.git

更改目录:

cd test-drive

安装依赖项:

npm install

开始:

npm run dev

Solana RPC 方法列表

这些是可用的方法。Solana HTTP RPC

来源:https://solana.com/docs/rpc/http/getaccountinfo

  • getAccountInfo: 获取关于特定账户的详细信息。
  • getBalance: 以 lamports(SOL 的最小单位)获取特定账户的余额。
  • getBlock: 通过其 slot 编号获取已确认区块的详细信息。
  • getBlockCommitment: 获取特定区块的 commitment 信息。
  • getBlockHeight: 获取节点的当前区块高度。
  • getBlockProduction: 获取关于当前或之前 epoch 的区块生产信息。
  • getBlockTime: 获取区块的估计生产时间。
  • getBlocks: 获取两个 slot 编号之间已确认的区块列表。
  • getBlocksWithLimit: 获取从给定 slot 开始的已确认区块列表,数量受指定限制。
  • getClusterNodes: 获取关于所有参与集群的节点的信息。
  • getEpochInfo: 获取关于当前 epoch 的信息。
  • getEpochSchedule: 获取 epoch 计划,详细说明 slot 和 epoch 结构。
  • getFeeForMessage: 估计给定消息的费用。
  • getFirstAvailableBlock: 获取账本中第一个可用区块的 slot。
  • getGenesisHash: 获取账本的 genesis hash。
  • getHealth: 检查节点的健康状态。
  • getHighestSnapshotSlot: 获取存在快照的最高 slot。
  • getIdentity: 获取当前节点的身份公钥。
  • getInflationGovernor: 获取当前的 inflation governor 参数。
  • getInflationRate: 获取当前的 inflation rate,当前 epoch。
  • getInflationReward: 获取地址列表的 inflation 奖励。
  • getLargestAccounts: 通过 lamport 余额获取最大账户的地址。
  • getLatestBlockhash: 获取最新的 blockhash。
  • getLeaderSchedule: 获取 epoch 的 leader 计划。
  • getMaxRetransmitSlot: 从重传中获取看到的最大 slot。
  • getMaxShredInsertSlot: 获取从 shreds 插入的最大 slot。
  • getMinimumBalanceForRentExemption: 计算使账户免于 rent 所需的最低余额。
  • getMultipleAccounts: 在单个请求中获取关于多个账户的信息。
  • getProgramAccounts: 获取特定程序拥有的所有账户。
  • getRecentPerformanceSamples: 获取最近的性能样本列表。
  • getRecentPrioritizationFees: 获取最近的优先级费用。
  • getSignatureStatuses: 获取签名列表的状态。
  • getSignaturesForAddress: 获取涉及某个地址的交易的已确认签名。
  • getSlot: 获取节点正在处理的当前 slot。
  • getSlotLeader: 获取当前的 slot leader。
  • getSlotLeaders: 获取一系列 slot 的 slot leader。
  • getStakeMinimumDelegation: 获取最小 stake 委托金额。
  • getSupply: 获取关于 SOL 总供应量的信息。
  • getTokenAccountBalance: 获取 token 账户的 token 余额。
  • getTokenAccountsByDelegate: 获取与委托者关联的的 token 账户。
  • getTokenAccountsByOwner: 获取特定账户拥有的 SPL Token 账户。
  • getTokenLargestAccounts: 获取特定 token 类型的最大账户。
  • getTokenSupply: 获取特定 SPL token 的总供应量。
  • getTransaction: 返回已确认交易的交易详情。
  • getTransactionCount: 返回账本中的当前交易计数。
  • getVersion: 获取节点的当前软件版本。
  • getVoteAccounts: 获取当前 bank 中所有投票账户的账户信息和相关 stake。
  • requestAirdrop: 请求向特定地址空投 lamports(仅在测试网络上可用)。
  • sendTransaction: 向网络提交已签名的交易。
  • simulateTransaction: 模拟交易以查看其效果,而无需广播它。

DAS API 方法

注意: 这是一个 API 扩展,独立于核心 RPC 方法,某些方法可能不适用于某些提供商。

  • getAsset: 压缩/标准资产的元数据信息
  • getAssets: 单个请求中获取多个资产的元数据
  • getAssetProof: 特定资产的 Merkle 证明
  • getAssetProofs: 多个资产的 Merkle 证明
  • getAssetsByAuthority: 由特定 authority 控制的资产
  • getAssetsByCreator: 由指定创建者创建的资产
  • getAssetsByGroup: 使用自定义组标识符的资产,例如 collection
  • getAssetsByOwner: 由特定钱包地址拥有的资产
  • getAssetSignatures: 指定压缩资产的交易签名
  • getTokenAccounts: 列出指定 mintAddress 或 ownerAddress 的 token 账户和余额
  • getNftEditions: 指定 master NFT 的 edition NFT 的详情
  • searchAssets: 搜索与特定参数匹配的资产

我们将更深入地研究这些。有些可能你还无法理解,而且许多仅在特殊情况下才需要。该结果中提供的所有元数据都可用于学习关于 token 的更多信息。

接下来,我们将使用 Postman 进行一些 RPC 测试。

为什么要使用 Postman? Postman 是一个功能齐全的 API 测试套件,包括协作和 API collections。虽然 Helius Test Drive 工具很棒,但我们可能需要额外的功能用于企业应用程序。

在忽略本文的 Postman 部分之前,请注意你可以获得 Solana RPC endpoints 的完整 collection 作为 Postman collection。这非常有价值且节省时间。

所以我建议继续学习 Postman 部分。稍后我也会提到它。不要错过!

Postman 工作区设置(可选)

我建议使用 Postman 或其他 API 客户端 进行测试。

你们中的许多人可能已经使用过 Postman。

在 Chrome 或 IDE 中有一些轻量级选项,但如果你没有这些,Postman 是一个不错的选择,也是一个好的起点。它可以处理你的应用程序可能使用的各种场景(各种类型的 API,协作)。

  • Postman 提供了一个用户友好的界面,可以快速设计、测试和调试 API,而无需大量的编码知识, 这使其成为开发人员和 QA 团队的理想选择。
  • 团队可以通过共享 collections、环境和自动化测试有效地进行协作, 确保开发和测试的一致性。
  • 它与 GitHub、Jenkins 和 Slack 等工具集成,并允许你实时监控 API 的性能和可靠性。

免费注册 Postman: https://www.postman.com/

⚠️ 安全提示:为了额外的安全, 如果要做一个涉及电子商务、支付、银行等的大规模生产应用程序,最佳做法是不要存储 API 密钥而不采取额外的加密措施。这是一个关于 Devnet 的测试演示,并且我会在之后删除 API 密钥,所以我们只使用 Postman 云的 常规加密默认设置

我们将做一个快速的 Postman 设置,并开始使用 Helius RPC。

让我们创建一个工作区。这给了我们一个干净的状态,我们将在其中放置所有 RPC 调用。

✅ 去创建一个工作区, 你可以在 Workspaces 选项卡 > Blank > Next 下找到它,如下图所示。前往此处:https://web.postman.co/workspace/create

在 NEXT 之后,创建工作区的第 2 页

现在点击 创建按钮 后,我看到的是:

🥰 感谢阅读!… 🔥 请鼓掌并分享本文,谢谢!🚀

Solana RPC endpoints/方法的 Postman Collection

https://www.postman.com/explore

你可以在上面的 url 和 API 网络中搜索 Solana endpoint collections。此外,我找到了一个,我将 url 放在此图像下方。

Solana Mainnet RPC Methods Postman Collection 作者:Blocktech Solutions

注意:这是 Postman API 网络上的公共 API endpoint collection。 如果使用它,请自行进行尽职调查,以确认它是安全的以及你所需要的。文档提供了创建者的 X.com 地址以及关于它的其他文档。

“这个 Solana RPC 方法 Postman collection 使你能够快速测试 Solana RPC 方法 […] 默认情况下,这些 collection 使用 Solana Foundation 的公共 Mainnet Beta RPC endpoint。此 endpoint 受到速率限制,并且由于其滥用潜力,某些方法已列入黑名单。

你可以将 collection 变量 _solRpcEndpoint 更新为另一个提供商的 URL”。

那是关键部分。我们将使用我们的 Helius endpoint。

这将使我们达到一个测试 Solana endpoints 的基线,但使用我们的 Helius 帐户。

你可以在这里看到该变量:

但是,我们将要做的是将这个公共 collection 分叉到我们的工作区中

  • 单击 Create Fork 选项卡。
  • 在“Fork Label”下将其重命名为你想要的名称,并且
  • 选择你希望它位于哪个工作区中。
  • 一旦你单击分叉按钮,完成此操作可能需要一分钟左右的时间

⚠️ 确保你在 Collection 中而不是 Environment 中——第一次我不小心只分叉了 environment。

确保你在 Collection > Fork Collection 中

你还可以指定 Environments。⚠️ 我有一次是单独进行操作的,而不是一次性完成!如果你首先只执行 Environments,则该 collection 将不会显示。

对于 environments,进入 Public API 上的 environment 并进行分叉(仅在需要时):

分叉的 collection 将显示在 Environments 下

现在单击你的 Workspace > Environments

你现在可以看到我在我的 Postman 工作区“Helius RPC’s”中拥有所有方法。

我的工作区“Helius RPC’s”。

我现在将用我的 Helius endpoint 替换掉 _solRpcEndpoint

你还可以将你的 API 密钥放在一个单独的变量中,并确保任何额外的加密(查看文档了解如何操作),我正在使用一个临时的 API,它会在之后被删除,所以我就不在这里做这些了。

  • 所以现在我将在方法列表中单击 getAccountInfo 方法(记住,我们fork了 collection 所以它在我的 workspace collection 中)

  • 选择“Body”选项卡,它将显示与请求一起发送的参数。这些参数设置在一个变量中(见下文,完整请求)。我们需要将该变量更改为 Wen meme coin 合约。

  • 双击该变量,这将显示右侧的“Variables in request”
  • 添加 Wen meme coin 的公钥。

完整请求:

  • ✅ 现在点击蓝色的 Send 按钮以发送请求

它返回:

恭喜!🎉

你正在使用 Postman 通过 Helius RPC Provider 调用 Solana 区块链!

你可能会问——“好的,很好,但那又怎么样?”

Postman 的好处:

  • Postman 使得制作和测试 Solana RPC 请求变得容易。
  • 无需设置完整的开发环境 即可进行基本的方法测试,以获取关于请求和结果的基本信息。
  • 使用和构建可重用请求的 collections(就像我们所做的那样), 用于常见的 Solana RPC 方法。添加更多,例如 DAS API。
  • 共享并检入到 Github 自定义的 collections 或 environments。
  • 快速测试单个 RPC 调用并检查响应 以查找错误或意外数据。
  • 自动保留请求/响应 history/logs。
  • 使用 Postman 的 pre-request 脚本和测试自动化 Solana RPC 工作流程。
  • 轻松调整 environment、参数和 headers 在 Postman 界面中对请求进行故障排除。
  • 保存和组织请求 以实现可重复的调试工作流程。

使用 Helius 和 cURL 的 Solana RPC 教程

cURL 可以从你的终端命令行 (CLI) 用于测试请求和结果。如果你不确定是否已安装它,MacOS 和 Linux 通常会自动安装,也许 Windows 也是:cURL 安装提示

有一种简单的方法可以从 Postman 获取 cURL 代码和你的请求的其他代码片段

在 Postman 界面中,单击 Code snippet 按钮,然后找到 cURL。

现在它将为你提供要运行的片段:

curl --location 'https://mainnet.helius-rpc.com/?api-key=[your key goes here]' \
--header 'Content-Type: application/json' \
--data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAccountInfo",
    "params": [\
        "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk",\
        {\
            "encoding": "base58"\
        }\
    ]
}'

同样,我们使用的是 Wen 合约公钥: “WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk”

结果:

✅ 这非常酷,但我想使用 getAsset 方法。但是,这是 DAS API 扩展的一部分,虽然我们可以使用 Helius 调用它,但它不在 collection 中,因此我们必须添加它。

我转到 Metaplex DAS 页面并复制粘贴了 cURL 请求示例的一部分:https://developers.metaplex.com/das-api/methods/get-asset

我们在 Postman 中创建一个新请求,然后将该请求复制粘贴到 Body 中。

我已经将显示“New Request”的部分重命名为“getAsset”,现在它出现在该 collection 的方法列表中。

以下是它应具有的外观的查看:

cURL

curl --location 'https://mainnet.helius-rpc.com/?api-key=[your key goes here]' \
--header 'Content-Type: application/json' \
--data '{
    "jsonrpc": "2.0",
    "method": "getAsset",
    "params": [\
        "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk"\
    ],
    "id": 0
}'

使用 Helius 和 Node.js 的 Solana RPC 教程

现在让我们创建一个简短的 Node.js 脚本,我们可以将其集成到我们的应用程序的后端中,并且我们将使用 Helius endpoints 调用 Solana。

既然我们知道可以通过 Postman 获取代码片段,我们可以通过在本地执行一个快速的 Node.js 脚本来“作弊”。

你可以将此代码放在本地的任何位置,但我喜欢在 Github 上创建一个快速的新空 repo,将其克隆到本地,然后在那里执行。所以我将这样做。

但做任何你想做的,我建议遵循 Node.js typescript 设置。

Github/本地 repo 设置

https://github.com/new

在本地克隆 repo

git clone https://github.com/csjcode/helius-demos
cd helius-demos && code .

让我们使用 Axios 库进行请求,以便我们可以在 Postman 中找到它以快速执行此操作。当然,你可以使用另一个库,这很快,而且我经常使用 Axios 😁

const axios = require('axios');
let data = JSON.stringify({
  "jsonrpc": "2.0",
  "method": "getAsset",
  "params": [\
    "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk"\
  ],
  "id": 0
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://mainnet.helius-rpc.com/?api-key=[your key]',
  headers: {
    'Content-Type': 'application/json'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

确保你在工作代码目录中,并且让我们安装 npm 和 axios。

npm init -y
npm install axios

然后创建一个 Node.js 文件并将上面的代码放在那里——确保添加你的 API 密钥。

touch getAsset.js

在上面的代码中复制粘贴。

⚡️现在我们要运行它:

node getAsset.js

它打印出来了,但只是一堆文字。

让我们让它看起来“更漂亮”。将以 axios.request(config) 开头的代码部分替换为以下内容。这将打印出来,使其看起来不错,你可以更好地看到信息:


axios.request(config)
.then((response) => {
  console.log("Response Data:\n", JSON.stringify(response.data, null, 2)); // Pretty print JSON
})
.catch((error) => {
  if (error.response) {
    console.log("Error Response:\n", JSON.stringify(error.response.data, null, 2)); // Pretty print error details
  } else {
    console.log("Error:\n", error.message);
  }
});

⚡️再次运行

node getAsset.js

✅ 结果:

Response Data:
 {
  "jsonrpc": "2.0",
  "result": {
    "interface": "FungibleToken",
    "id": "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk",
    "content": {
      "$schema": "https://schema.metaplex.com/nft1.0.json",
      "json_uri": "https://qgp7lco5ylyitscysc2c7clhpxipw6sexpc2eij7g5rq3pnkcx2q.arweave.net/gZ_1id3C8InIWJC0L4lnfdD7ekS7xaIhPzdjDb2qFfU",
      "files": [\
        {\
          "uri": "https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png",\
          "cdn_uri": "https://cdn.helius-rpc.com/cdn-cgi/image//https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png",\
          "mime": "image/png"\
        }\
      ],
      "metadata": {
        "name": "Wen",
        "symbol": "WEN",
        "token_standard": "Fungible"
      },
      "links": {
        "image": "https://shdw-drive.genesysgo.net/GwJapVHVvfM4Mw4sWszkzywncUWuxxPd6s9VuFfXRgie/wen_logo.png"
      }
    },
    "authorities": [\
      {\
        "address": "Hd7tQ6JUPaKPid8tiqyhLfWEaivRnf7YJDyMi4abmsvx",\
        "scopes": [\
          "full"\
        ]\
      }\
    ],
    "compression": {
      "eligible": false,
      "compressed": false,
      "data_hash": "",
      "creator_hash": "",
      "asset_hash": "",
      "tree": "",
      "seq": 0,
      "leaf_id": 0
    },

## etc. it continues....

Typescript 版本

我们成功地使其工作很棒,但最佳实践是将此代码放入 TypeScript 中。

让我们重写 typescript 的代码。

安装 typescript 库

npm install --save-dev typescript @types/node

最新版本的 axios 应包括类型。我正在使用 “axios”: “^1.7.9”

安装 ts-node

npm install --save-dev ts-node

初始化一个 tsconfig.json 文件:

npx tsc --init

.tsconfig 文件应如下所示:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "CommonJS",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

创建 src 目录

mkdir src
cd src

制作一个新的 typescript 文件:

import axios, { AxiosRequestConfig }  from 'axios';

const API_KEY = "[your key]"; // Replace with your actual API key
const URL = `https://mainnet.helius-rpc.com/?api-key=${API_KEY}`;

const data = {
  jsonrpc: "2.0",
  method: "getAsset",
  params: [\
    "WENWENvqqNya429ubCdR81ZmD69brwQaaBYY6p3LCpk"\
  ],
  id: 0
};

const config: AxiosRequestConfig = {
  method: 'post',
  maxBodyLength: Infinity,
  url: URL,
  headers: {
    'Content-Type': 'application/json'
  },
  data: data
};

async function getAsset() {
  try {
    const response = await axios.request(config);
    console.log("Response Data:\n", JSON.stringify(response.data, null, 2));
  } catch (error: any) {
    if (error.response) {
      console.log("Error Response:\n", JSON.stringify(error.response.data, null, 2));
    } else {
      console.log("Error:\n", error.message);
    }
  }
}

getAsset();

⚡️现在运行该代码,你应该得到结果。

这是在你仅在本地安装 ts-node 的情况下。但是,如果你全局安装了 ts-node,则可以去掉 “npx” ts-node getAsset.ts

npx ts-node getAsset.ts

🚀 你应该获得与之前在常规 javascript 中相同的结果!

回到 Helius Dashboard,我可以看到我已经发出了一些请求,单击菜单的 Usage 选项卡:

请注意,你可以通过付费计划获得更多指标:

我们将在 PART 2 中进一步探索此内容——我们将设置一个 AWS Lambda,以便我们可以远程运行程序,使用 Webhooks 和增强的 API,查看更多深入的用例等等!

相关文章:

Solana for Cloud Developers \ \ Solana 的实践性云计算工程师入门。深入了解与云服务和 AWS 服务的比较\ \ medium.com

Create AI Agents with ai16z \ \ 创建一个 AI agent,以使用 ai16z Eliza Typescript/Python 库了解 AI Agent 领域 - 逐步…\ \ medium.com

🔥 AI Agents + Crypto: the Next Hot Tech Craze? \ \ AI agent 炒作周期在 AI/开源开发人员和加密货币社区中变得越来越激烈\ \ medium.com

📈 Crypto Volatility Alerts with Amazon Data Firehose + Terraform (step-by-step) \ \ 用于免费加密货币价格数据源的 AWS 实时波动率警报,存储数据以进行分析。在几分钟内部署…\ \ medium.com

初创公司的入门/文档中心(快速入门) 适用于初创公司的低成本解决方案。https://store.systemsarchitect.io/l/docshub

初创公司的入门/文档中心(企业版) 适用于已建立的初创公司和成长型公司的豪华解决方案。

https://store.systemsarchitect.io/l/edocshub

披露:封面图像由 AI 生成并由 be 修改,其他屏幕截图来自 Helius 网站。

🥰 感谢阅读!… 🔥 请鼓掌并分享本文,谢谢!🚀

关于我

我是一位云架构师、高级开发人员和技术主管,喜欢使用创新解决方案解决高价值挑战。

Get an email whenever Chris St. John publishes. \ \ Get an email whenever Chris St. John publishes. By signing up, you will create a Medium account if you don't already…\ \ medium.com

SystemsArchitect.io Store 查看我的一些云工程电子书, 所有这些电子书对于部署支持链下应用程序/云基础设施的 Solana 应用程序也可能很有用:

我总是乐于讨论项目。 如果你需要帮助、有机会或只是想聊天,你可以在 csjcode at gmail 与我联系。

我已经从事软件开发 20 多年了, 无论是在 企业 环境中,例如 NIKE 和最初的 MP3.com,还是在 初创公司 中,例如 FreshPatents、SystemsArchitect.io、API.cc 和 Instantiate.io。

我的经验范围从 云电子商务、API 设计/实现、 无服务器、AI 集成 用于开发、内容管理、前端 UI/UX 架构 和登录/身份验证。我进行技术讲座、教程并分享架构软件的文档。之前还持有 AWS 解决方案架构师认证。

云电子书商店——以极高的价值查看云架构师和工程师书籍,“云指标”(800 多页)和“云审计”(800 多页)等等——https://store.systemsarchitect.io

  • 原文链接: medium.com/solana-dev-ti...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
csjcode
csjcode
江湖只有他的大名,没有他的介绍。