配置 Web 托管以控制成本
- Vercel 和 Railway 提供了方便的无服务器平台来托管您的应用,相对于直接使用云提供商, 抽象了 web 托管的运维事务。您可能会为便利性付出溢价,尤其是在高流量时。
- AWS 和其他云提供商提供了更大的灵活性和商品化的定价。
- 在选择任何服务之前,请检查定价,并注意许多提供商在较低流量下提供亏本引流的定价,但一旦达到某个阈值, 就会收取更高的费用。
- 例如,假设有一个 $20 的套餐,包括每月 1 TB 的数据传输,超出后 $0.20/GB。做一下算术就会发现第二 TB (以及之后)将花费 $200。如果下一个套餐说”联系我们”,不要假设下一个套餐会按 $20 每 TB 收费。
- 如果您正在构建高流量应用,并且不注意更便宜地提供静态文件,那么很容易超出亏本引流的层级, 并支付比预期高得多的费用。
- 对于 AWS 上的生产部署,请考虑:
- Amazon S3 + CloudFront 用于静态文件托管和 CDN
- AWS Lambda 用于无服务器函数
- Amazon ECS 或 EKS 用于容器化应用
- Amazon RDS 用于数据库需求
- 这种设置通常为高流量应用提供精细的成本控制和可扩展性。
如果 gas 使用量是静态的,使用硬编码值代替 eth_estimateGas 调用
许多链上操作具有固定的 gas 成本。最简单的例子是原生代币的转账始终花费 21,000 gas,但还有许多其他情况。 这使得每笔交易调用 eth_estimateGas 变得没有必要。
请改用硬编码值,如此处所建议。 消除 eth_estimateGas 调用可以大幅加速钱包中的用户工作流程,并避免一些钱包在 eth_estimateGas 回滚时可能出现的不良行为(在链接页面中讨论)。
通过并发提交多个请求来降低 eth_call 延迟
串行发起多个 eth_call 请求会由于到 RPC 节点的多次往返而引入不必要的延迟。您可以并发发起许多 eth_call, 方法是将它们压缩为单个 eth_call 或提交一批调用。或者,您可能会发现切换到索引器更好。
将多个 eth_call 压缩为一个
- Multicall: Multicall 是一个实用智能合约,允许您将多个读取请求(
eth_call)聚合为单个请求。 这对于同时获取代币余额、授权或合约参数等数据点特别有效。标准Multicall3合约部署在 Monad 主网和 Monad 测试网上的0xcA11bde05977b3631167028862bE2a173976CA11。 许多库都提供辅助函数来简化 multicall 的使用,例如 viem。 在此处阅读有关Multicall3的更多信息。 - 自定义批处理合约: 对于复杂的读取模式或标准 multicall 合约无法轻易处理的场景, 您可以部署一个自定义智能合约,在单个函数中聚合所需的数据,然后通过单个
eth_call调用它。
Multicall 按序列执行调用,如您从此处的代码中可以看到。 因此,虽然使用 multicall 避免了到 RPC 服务器的多次往返,但仍然不建议将过多昂贵的调用放入一个 multicall 中。 一批调用(接下来解释)可以在 RPC 上并行执行。
提交一批调用
大多数主要库支持将多个 RPC 请求批处理到单个消息中。 例如,viem 通过将 promise 数组作为单个批次提交来处理 Promise.all():
对读取密集型负载使用索引器
如果您的应用频繁查询历史事件或派生状态,请考虑使用索引器,如下所述。使用索引器代替反复调用 eth_getLogs 来监听事件
以下是最流行的数据索引解决方案的快速入门指南。有关更多详情,请查看索引器文档。
使用 Allium
- Allium Explorer
- Allium Datastreams
- 通过 Kafka、Pub/Sub 和 Amazon SNS 提供实时区块链数据流(包括区块、交易、日志、trace、 合约和余额快照)。
- 通过 GUI 为链上数据创建新流。 创建流时,从
Select topics下拉菜单中选择相关的Monad Mainnet或Monad Testnet主题。 - 相关文档:
- Allium Developers
- 支持获取钱包交易活动和跟踪余额(原生、ERC20、ERC721、ERC1155)。
- 对于请求体,使用
monad_mainnet(Monad 主网)或monad_testnet(Monad 测试网)作为chain参数。 - 相关文档:
使用 Envio HyperIndex
- 遵循快速入门 来创建索引器。在
config.yaml文件中,使用网络 ID10143来选择 Monad 测试网 (在下面的示例中使用)或网络 ID143用于 Monad 主网。 - 示例配置
- 示例
config.yaml文件config.yaml - 示例
EventHandlers.tsEventHandlers.ts
- 示例
- 重要:网络下的
rpc_config部分(查看config.yaml示例)是可选的, 仅当您在使用默认 Envio 设置时遇到问题时才应配置。此配置允许您:- 使用您自己的 RPC 端点
- 配置块获取参数以获得更好的性能
- 相关文档:
使用 GhostGraph
另请参见:Ghost
使用 Goldsky
另请参见:Goldsky
- Goldsky Subgraphs
- 要部署 Goldsky subgraph,请遵循此指南。
- 作为网络标识符,使用
monad-mainnet(Monad 主网)或monad-testnet(Monad 测试网)。有关 subgraph 配置示例,请参考下面的 The Graph 协议部分。 - 有关查询 Goldsky subgraph 的信息,请参见 GraphQL API 文档。
- Goldsky Mirror
使用 QuickNode Streams
另请参见:QuickNode Streams
- 在您的 QuickNode 仪表板上,选择
Streams>Create Stream。在创建流的 UI 中, 在 Network 下选择 Monad Mainnet 或 Monad Testnet。或者,您可以使用 Streams REST API 来创建和管理流 — 使用monad-mainnet(Monad 主网)或monad-testnet(Monad 测试网)作为网络标识符。 - 您可以通过在流创建期间选择目的地来消费流。 支持的目的地包括 Webhooks、S3 存储桶和 PostgreSQL 数据库。 在此处了解更多信息。
- 相关文档:
使用 The Graph 的 Subgraph
另请参见:The Graph
- 网络 ID:使用
monad-mainnet(Monad 主网)或monad-testnet(Monad 测试网) - 示例配置
- 示例
subgraph.yaml文件subgraph.yaml - 示例
mappings.ts文件mappings.ts - 示例
schema.graphql文件schema.graphql
- 示例
- 相关文档:
使用 thirdweb 的 Insight API
另请参见:thirdweb
- 提供广泛的链上数据的 REST API,包括事件、区块、交易、代币数据(如转账交易、余额和代币价格)、 合约详情等。
- 构造请求 URL 时,使用链 ID
143(Monad 主网)或10143(Monad 测试网)。 - 相关文档:
如果快速连续发送多笔交易,请在本地管理 nonce
这仅适用于您手动设置 nonce 的情况。如果您将此委托给钱包,则无需担心。
eth_getTransactionCount需要网络请求。如果您有来自同一钱包的多笔连续交易, 您应该实现本地 nonce 跟踪。

