高级速率限制:使用自定义规则管理和保护你的Solana RPC端点

  • syndica
  • 发布于 2024-12-20 16:10
  • 阅读 30

本文介绍了Syndica平台上的高级速率限制设置,允许开发者更精确地控制API密钥的使用,从而解决Solana上的两个常见问题:防止RPC服务被盗用和滥用,以及管理不同项目或服务的速率限制。文章通过两个实际场景,展示了如何使用这些设置来保护前端RPC端点和在单个账户下管理速率限制。

这篇帖子是我们介绍 Syndica 在 Solana 上的高级 web3 原生 API 产品的系列文章的第二部分。请继续关注即将发布的帖子,详细探讨各项功能,包括 ChainStream API、应用部署、动态索引等。


高级速率限制设置

在我们企业级的 Solana RPC 产品的基础上,我们在 Syndica 平台上实现了凭证级别的速率限制设置,使开发人员能够精确控制其 API 密钥的使用。此功能缓解了 Solana 上开发人员面临的两个问题:

  1. 防止 RPC 服务被恶意使用: Solana 上的应用程序面临的一个常见问题是 RPC API 凭证被盗用和滥用,尤其是在应用程序前端。发生此问题的原因是,一旦 RPC URL 或 API 密钥在前端源代码中暴露,就很容易被复制和利用,用于未经授权的活动,如 NFT 铸造等。为了解决这个问题,通常需要额外的后端解决方案来进行基于规则的速率限制。

在 Syndica 上,可以通过为用户需要的特定方法设置适当的每个 IP 速率限制,来安全地将 API 密钥公开给公众。这是对我们现有基于 header 的规则(IP 和 Origin)的补充。

  1. 管理单独项目或服务的速率限制: Solana 上的 Elastic-node RPC 服务通常对每个帐户施加全局速率限制,客户需要负责管理单独的项目级别限制。为了防止一个项目请求量的激增导致另一个项目受到速率限制,开发人员必须实施自己的项目级别速率限制。

在 Syndica 上,可以为 API 密钥配置个性化的速率限制,使开发人员能够精确地管理和平衡其帐户内所有项目的使用限制。

我们将通过两个场景来说明我们的新高级速率限制设置如何有效地解决这些问题。

场景 #1 - 保护前端 RPC 端点

考虑一个简单的 React 应用程序,它使用 web3.js 来显示有关用户钱包的信息,例如 token 余额和最近的交易。所需的 RPC 方法集包括:

  • getAccountInfo
  • getTokenAccountsByOwner
  • getTokenAccountBalance
  • getSignaturesForAddress
  • getTransaction

在 Syndica 上,我们可以为这个前端创建一个 API 密钥,并配置它来防止不必要的使用。

第一步是将 API 密钥限制为仅服务于 header 中包含我们域名 simple-dapp.xyz 的请求。我们还可以选择使用通配符来匹配我们的子域名模式。

接下来,我们可以禁用此凭证的 WebSocket 连接,因为它们对于我们的用例来说不是必需的。

最后,我们将 API 密钥限制为仅使用我们的前端所需的方法。在下面,你可以看到我们可以为 API 密钥设置速率限制的各种范围:

  • RPS 限制: 应用于所有客户端总流量的每秒最大费率
  • 每个 IP 的 RPS 限制: 应用于来自每个唯一客户端 IP 的请求量的每秒最大费率
  • 特定方法限制: 可以将特定 RPC 方法的每秒最大费率应用于总体组合流量或每个 IP

在我们的场景中,我们将在 IP 级别设置特定方法限制。我们的目标是将凭证的使用限制为我们的前端所需的少数方法,并将每种方法的 RPS 限制为单个用户的典型速率(一个客户端 IP)。

通过此配置,来自前端的 RPC 调用将为遵守预期流量模式的用户无缝运行。如果 API 密钥被泄露,它的效用将大大降低,因为它将被限制为一组有限的方法和一个低 RPS。

#2 - 管理单个帐户下的速率限制

假设我们想要使用 Syndica API 创建一个单独的后端服务。此后端服务必须与上述前端服务共享我们帐户的全局速率限制。

假设我们的全局帐户范围额度限制为 300 RPS,后端服务持续使用高达 50 RPS。为了避免我们的关键后端服务受到速率限制的风险,我们希望确保前端服务永远不超过 250 RPS。我们可以将帐户总 RPS 的一部分分配给每个服务,确保一个服务中的流量峰值不会影响另一个服务。

我们可以修改我们最初的 API 密钥,将其限制为所有客户端组合流量的 250 RPS。

然后,我们可以为后端服务创建一个单独的 API 密钥。假设我们的后端服务使用 ChainStream API 来流式传输事务并调用 getAccountInfo RPC 方法。我们将设置以下限制:

  1. 限制该凭证仅服务于来自单个 IP(我们的后端服务器)的请求。

  1. 对于 solana-mainnet,仅允许 getAccountInfo RPC 调用,最大为 50 RPS。

  1. 对于 ChainStream,仅允许 transactionSubscribe 方法,最多允许 1 个活动订阅。

通过此配置,我们的前端和后端服务不会相互干扰速率限制。当我们添加更多服务时,我们可以根据需要调整现有凭证的限制。这种方法还可以管理跨开发环境、用户组或部署的限制。


我们已将 Solana 开发堆栈整合到一个单一的、有凝聚力的平台中,为你的 RPC 体验提供无与伦比的自定义控件。

立即免费开始,并查看我们的 文档

👉 立即免费注册 app.syndica.io/register 👈

立即免费注册

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

0 条评论

请先 登录 后评论
syndica
syndica
News & research from Syndica: low latency Solana RPC, data streams, Sig Validator & more