低成本基础设施:eRPC+Ponder

当你的核心业务逻辑位于链上时,你的基础设施需要牢不可破,同时保持成本控制。以下是使用开源工具构建它的方法。

低成本基础设施:eRPC+Ponder
一键发币: x402兼容 | Aptos | X Layer | SUI | SOL | BNB | ETH | BASE | ARB | OP | Polygon | Avalanche

每个区块链项目都从一个梦想和有限的预算开始。在 Frak,我们构建了一个平台,用于自动链上奖励分发,通过智能合约推动营销活动。我们的基础设施完全运行在 Arbitrum 上,需要处理:

  • 高频事件:每个活跃用户每周处理约 8 笔用户交易
  • 复杂查询:实时分析和奖励计算
  • 多合约索引:8 个主合约和 3 个活动工厂(在撰写本文时,已部署了约 100 个合约)。

当您的核心业务逻辑位于链上时,您的基础设施需要牢不可破,同时保持成本控制。以下是使用开源工具构建它的方法。

1、挑战

每个区块链应用程序都会面临三个核心挑战:

  1. 可靠且成本效益高的 RPC 访问
  2. 高效的事件索引和数据访问
  3. 可扩展的基础设施,不会耗尽资金

大多数团队会把钱扔向问题。我们采取了不同的方法。

2、eRPC:交通管制员

eRPC 就像你区块链请求的空中交通管制器——但还有一个摄影记忆和成本优化的超能力。用 Go 编写以获得最大性能,它是一个容错的 EVM RPC 负载均衡器,使你的典型代理看起来像生锈的门。

2.1 我们选择 eRPC 的关键功能

智能负载均衡

  • 按方法路由(因为让我们面对现实,不是所有的 RPC 都是平等的)
  • 项目特定配置(不同的人有不同的需求)
  • 自动故障转移处理(因为 uptime 不只是一个可选功能)

智能缓存

  • 重新组织意识的永久缓存(不再有陈旧数据的噩梦)
  • 按方法的缓存规则(缓存重要的内容,忽略不重要的内容)
  • 选择器级别的粒度(因为有时你只需要缓存特定的合同调用)

开发者体验超级力量

  • 需要扩大你的开发团队吗?有智能合约测试击中你的 RPC 像 airdrop 期间的 MEV 机器人吗?eRPC 的项目系统让你:
  • 为不同的团队创建专用环境
  • 实施基于 IP 或钱包签名的身份验证
  • 为测试环境配置激进的缓存
  • 开发者无需配置更改(它只是工作™)

2.2 简单中的力量

想看看做复杂的事情有多容易吗?这是一个 eRPC 配置,处理多提供者负载平衡、速率限制、方法特定路由和缓存:

export default initErpcConfig({  
    logLevel: "info",  
    database: {  
        // 在这里你可以列出每个数据库(pg、redis、内存等),然后根据数据类型或甚至使用的 方法来配置哪些数据库被使用  
        // Frak 配置在这里:https://github.com/frak-id/infra-blockchain/blob/6e907c50db2117083a113ee74e2d38d1a6b596ea/packages/erpc/src/storage.ts  
        evmJsonRpcCache: cacheConfig,  
    },  
})  
    .addRateLimiters({  
        // 是的,你甚至可以深入到每种方法的速率限制  
        alchemy: [{ method: "*", maxCount: 300, period: "1s", waitTime: "5s" }],  
        pimlico: [{ method: "*", maxCount: 100, period: "1s", waitTime: "5s" }],  
        drpc: [{ method: "*", maxCount: 100, period: "1s", waitTime: "5s" }],  
        // 是的,速率限制也可以应用于网络、认证策略、项目等  
        walletProject: [{ method: "*", maxCount: 1000, period: "1s", waitTime: "5s" }],  
    })  
    // 向配置中添加几个网络  
    .decorate("networks", {  
        arbitrum: arbNetwork,  
        arbitrumSepolia: arbSepoliaNetwork,  
    })  
    // 向配置中添加几个上游  
    // Frak 上游配置:https://github.com/frak-id/infra-blockchain/blob/main/packages/erpc/src/upstreams.ts  
    .decorate("upstreams", {  
        alchemy: alchemyUpstream,  
        drpc: drpcUpstream,  
        pimlico: pimlicoUpstream,  
    })  
    .addProject(({ store: { upstreams, networks } }) => ({  
        id: "wallet-rpc",  
        // 智能路由:Pimlico 用于 AA,Alchemy 用于其他所有,dRPC 作为备用  
        upstreams: [  
            upstreams.alchemy,  
            upstreams.pimlico,  
            upstreams.drpc  
        ],  
        networks: [networks.arbitrum, networks.arbitrumSepolia],  
        // 使用之前定义的预算进行速率限制  
        rateLimitBudget: "walletProject"  
    }))  
    .build();

在这个例子中,我们使用了 erpc-config-generator 包,它提供了构建器模式,你也可以直接使用 erpc typescript 配置

3、我们的生产设置

这就是 eRPC 如何让区块链负载平衡和多 RPC 路由变得简单,并帮助我们实现几乎零停机时间:

索引项目

  • 主要:Envio + dRPC
  • 备用:Alchemy
  • 为什么?为了高容量历史查询的成本优化

通用用途(前端+后端+Foundry)

  • 主要:Alchemy + Pimlico
  • 备用:dRPC
  • 辅助:非关键路径的免费 RPC

4、Ponder:带来快乐的索引器

如果你曾经与 The Graph 的托管服务搏斗过,Ponder 就像是你最喜欢的开发工具给你的一次温暖拥抱。它是那个让你记住为什么最初热爱区块链开发的索引器。

// 跟踪当一个活动分配奖励时  
ponder.on("CampaignBanks:RewardAdded", async ({ event, context }) => {  
    // 尝试找到给定事件发射器的奖励合同  
    const bankingContract = await context.db.find(bankingContractTable, {  
        id: event.log.address,  
    });  
    if (!bankingContract) {  
        console.error(`Banking contract not found: ${event.log.address}`);  
        return;  
    }  

    // 更新奖励合同的已分发代币总金额  
    await context.db  
        .update(bankingContractTable, {  
            id: event.log.address,  
        })  
        .set({  
            totalDistributed:  
                bankingContract.totalDistributed + event.args.amount,  
        });  

    // 更新当前用户奖励(如果未找到则插入)  
    await context.db  
        .insert(rewardTable)  
        .values({  
            contractId: bankingContract.id,  
            user: event.args.user,  
            pendingAmount: event.args.amount,  
            totalReceived: event.args.amount,  
            totalClaimed: 0n,  
        })  
        .onConflictDoUpdate((current) => ({  
            pendingAmount: current.pendingAmount + event.args.amount,  
            totalReceived: current.totalReceived + event.args.amount,  
        }));  

    // 插入奖励事件  
    await context.db.insert(rewardAddedEventTable).values({  
        id: event.log.id,  
        contractId: bankingContract.id,  
        user: event.args.user,  
        emitter: event.args.emitter,  
        amount: event.args.amount,  
        txHash: event.log.transactionHash,  
        timestamp: event.block.timestamp,  
    });  

    // 更新分布式金额的当前活动统计  
    await safeIncreaseCampaignsStats({  
        productId: bankingContract.productId,  
        context,  
        blockNumber: event.block.number,  
        increments: {  
            totalRewards: event.args.amount,  
        },  
    });  
});

4.1 Frak 的实际索引

我们不是在谈论玩具合约。我们在索引:

  • 8 个主合约
  • 3 个活动工厂合约
  • 在 Arbitrum 上(你好,短块时间 👋)
  • 复杂的营销活动跟踪
  • 实时统计数据生成

4.2 为什么 Ponder 拥有了我们的心

闪电般的索引速度

  • 重新索引不需要喝咖啡休息
  • 内部缓存使更新感觉即时
  • 直接的 PostgreSQL 集成,只需工作

真实世界的性能

  • 处理复杂的链上营销活动
  • 实时统计数据生成
  • 与 Web2 后端共享数据库(再见,不必要的数据传输)

不会让人讨厌的开发者体验

  • TypeScript 一路到底
  • 通过 Hono 提供内置 HTTP 服务器
  • 包含缓存和速率限制

5、部署:因为 YOLO 到生产是 2017 年的事了

SST v3 以完美的执行闪贷的优雅方式协调了我们的整个部署:

5.1 代码即基础设施的优势

  • 无接触部署
  • 版本控制的基础设施
  • 易于环境复制
  • Pulumi 在后台(因为当我们最终迁移到 k8s 时,我们不需要治疗)

5.2 一路开源

我们堆栈中的每个工具都是开源且积极维护的:

  • eRPC: 与您一起扩展的 RPC 基础设施
  • Ponder: 仅仅合理的索引器
  • SST: 不会让你哭泣的基础设施即代码

想看看它们是如何结合在一起的吗?查看我们的 区块链基础设施仓库 以获得完整画面。

5.3 像个高手一样启动,像熊市一样花费

启动你的区块链基础设施而不需要 A 轮融资的秘密武器:明智地使用免费层级和高效的架构。把它想象成收益耕作云凭证和 RPC 调用。

6、从零到一的基础设施堆栈

云基础 🌩️

  • AWS 免费套餐 = 12 个月的免费 t2.micro 实例
  • GCP = $300 初始信用额度
  • 选择你喜欢的,两者都与我们的堆栈兼容

RPC 策略 🔌

.addProject({  
  id: "bootstrap-rpc",  
  upstreams: [  
    // 免费 RPC,战略性负载平衡  
    llamaNodes,     // 25k 请求/天  
    publicNodes,    // 可变限制  
    ankr.free,      // 20k 请求/天  
    // 随着增长添加更多  
  ]  
})

索引与 API 📊

  • 自托管 Ponder = $0(在你的免费套餐实例上运行)
  • PostgreSQL = 云提供商上的免费套餐
  • Hono 端点 = 与 Ponder 一起免费提供

6.1 MVP 成本分解

  • 基础设施:$0(云信用)
  • RPC 调用:$0(负载平衡的免费套餐)
  • 索引:$0(自托管)
  • 你的时间:最少(感谢这些工具)

6.2 当你准备好扩展时 📈

达到免费套餐限制?恭喜,你有了牵引力!当你准备好从耕作免费 RPC 中毕业时,查看 eRPC 的 聚合服务。它是一个统一的端点,适用于所有链,具有预先协商的供应商费率。如果基础设施管理不是你的强项,他们甚至会为你托管 eRPC 实例。

7、结果

这种设置使我们能够:

  • 从精益开始(你的风投会感谢你)
  • 随着用户基数的增长平稳扩展
  • 保持高可靠性
  • 保持基础设施复杂性可控
  • 实时处理复杂的链上营销活动

8、接下来是什么?

虽然我们目前的设置很稳固,但我们正在探索:

  • 为更多的部署灵活性迁移至 Kubernetes
  • 为成本优化寻找本地解决方案
  • 进一步优化 RPC 使用模式

9、结论

构建区块链基础设施不必感觉像盲眼解决魔方。有了 开源工具eRPCPonderSST,你可以构建一个 稳健、可扩展的系统,随着你的需求增长。

在 Frak,这个基础设施支持一个正在革新品牌倡导的平台:

  • 实时奖励分发 用于真实的分享
  • 透明、成本效益高 的客户获取
  • 品牌到倡导者的直接价值流
  • 可扩展的口碑营销自动化

最好的基础设施就像一个好的智能合约——它只是工作,只有在出问题时你才会注意到它。而当 87% 的人 在购买前阅读评论,79% 的人 信任客户评论如同朋友的推荐,你真的不能承受出错。


原文链接:Building Cost-Effective Blockchain Infrastructure: A Journey with eRPC and Ponder

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。