使用亚马逊托管区块链查询检索比特币和以太坊公共区块链数据

作者: Forrest Colyer John Liu | 202

在过去的两年中,公共区块链的采用是由三个主要用例推动的:

  • 去中心化金融(DeFi),它提供了使用公共区块链上的智能合约构建的开放式金融系统
  • 不可替代代币 (NFT),用于认证数字资产的所有权并实现这些数字资产的广泛转让
  • 无需中间机构即可进行价值转移的数字货币支付

除了早期的Web3创新者推动的采用外,受监管的企业也越来越多地使用公共区块链。例如,伊塔乌银行和富达银行等金融机构正在以值得信赖、受监管的托管人和交易所的身份进入加密货币领域。纳斯达克等其他机构正在以技术提供商的身份为传统金融提供加密货币。华纳音乐集团等媒体公司和耐克等消费公司继续将NFT纳入其活动票务和忠诚度计划。维萨和万事达卡等支付处理商正在为商家提供加密货币借记卡和解决方案。

但是,越来越多的采用率也凸显了使用区块链进行建设所面临的日益严峻的挑战之一,即数据。区块链交易的不变性是该技术的优势,这意味着数据只能随着时间的推移而增长。尽管这些数据是公开存储的,每个人都可以访问,但将这些信息转换为一种高性能、准确的格式以供应用程序大规模高效访问,对许多客户来说仍然是一项挑战。

在这篇文章中,我们描述了使用区块链数据所面临的总体挑战 ,并介绍了 亚马逊管理区 块链 查询 功能如何帮助您快速访问区块链数据 ,以便您可以专注于为主流企业和消费者建立差异化因素。

区块链数据的挑战

总体而言,准备区块链数据的挑战与许多其他大数据问题类似:复杂的ETL(提取、转换和加载)流程、不同的信息来源和昂贵的存储。

首先,存储区块链数据的方法对应用程序的使用构成了挑战。区块链数据本质上存储为每个区块之间状态转换的账本。也就是说,该信息捕捉了从区块 n 到区块 n+1 的变化,例如地址余额变化或正在部署的新智能合约。这种结构虽然非常适合确保去中心化网络上的数据完整性和安全性,但并不非常适合诸如数据分析或开发需要运行复杂查询的应用程序之类的任务。没有简单的数据视图可以像应用程序构建器习惯的那样以高性能方式提供常用数据。以钱包开发者为例,他需要在几秒钟内加载用户的历史钱包余额。为了高效地运行查询,他们首先需要从以太坊、Arbitrum和Polygon等多个区块链下载整个区块链账本(大小可能有几百千兆字节,需要连接到区块链节点)。此后,需要在允许高效查询的数据库系统中对数据进行索引,这项任务带来了巨大的计算挑战,尤其是在处理大型区块链时。

其次,为了提供实时数据,开发人员必须调整其系统以适应区块链的终局性,这保证了过去的交易永远不会改变。由于区块链是全球性和去中心化的,因此网络需要一定的时间(或区块数量)才能就区块链的合法状态达成协议或共识。在这段时间内(可能从几分钟到几小时不等),区块链节点接收的数据可能会被网络认可为合法的另一个数据集所取代。在繁忙时期,许多交易被提交到不同的节点,区块链可能会恢复来自多个区块的交易。这种最终终局性的特征对开发者来说具有挑战性,因为在这种情况下,他们必须更正已经处理和计算的数据(例如余额),同时还要及时了解来自区块链的流媒体信息。在需要实时数据用于决策过程的情况下,这也会导致问题。以与公共区块链交互的金融应用程序为例。有可能根据系统中确认的交易进行高额交易。但是,如果网络承认另一条链是真正的链,那么这笔交易以后可能会被撤销。这种逆转可能对财务产生重大影响,这表明了与区块链流式传输实时数据相关的固有风险和复杂性。

第三,开发人员必须吸收来自多个来源的数据,以易于人类理解的方式构建交易和互动的完整画面。现在预计应用程序将在多个区块链上部署,因此开发人员必须使用可能不同的标准处理来自不同区块链的信息。存储在区块链上的数据包括关键信息,例如代币智能合约的发件人地址、收件地址、交易金额和地址。比特币和以太坊等区块链都以完全不同的结构存储数据,因此,希望从这些区块链访问数据的开发人员必须了解数据结构和JSON-RPC API选项的这些差异,以可用的方式提取这些数据。

第四,开发人员有时必须重新运行智能合约才能了解其操作的细节。这是处理区块链数据时资源密集度最高的挑战之一。智能合约是自动运行的合约,协议条款直接写入代码行中。但是,目前不同的智能合约开发人员在区块链上编码其功能和发出事件的方式具有灵活性,这使得跟踪余额或交易细节等重要信息成为一项艰巨的任务。为了与区块链上的分布式应用程序(例如去中心化借贷平台或去中心化交易所)进行交互,交易通常涉及调用多个智能合约。智能合约经常相互交互,它们的行为可能因区块链的状态而异。因此,要准确了解智能合约在特定时间点正在做什么,通常需要重新创建区块链当时的整个状态并 追踪交易 。例如,假设某位音乐艺术家提供代币门禁活动,只有在给定日期持有该艺术家的非同质代币(NFT)收藏品的持有者才能参加现场音乐会。为了验证允许个人访问活动的确切条件——例如历史时间点给定用户钱包的代币余额或用户拥有的确切NFT——开发者可能必须在给定时间重新创建区块链的整个状态,以确定谁应该和不应该被授予活动访问权限,具体取决于智能合约的设计。该过程的计算成本高昂且耗时,在效率和可扩展性方面带来了相当大的挑战。

AMB 查询 — 主要功能

在本节中,我们将讨论托管区块链查询的关键功能以及它如何支持构建者的区块链数据需求。

具有成本效益的公共区块链数据

Managed Blockchain Query 提供标准化的 API,用于从多个公共区块链(从比特币和以太坊开始)检索区块链数据,无需您为区块链节点预置或管理基础架构,也无需维护索引基础设施来提取、转换和加载区块链数据以用于您的应用程序。托管区块链查询 API 提供可预测的定价,它允许您仅为自己提出的 API 请求付费,并根据呈现 API 请求结果所需的计算和数据资源定价的定价区块为每百万个请求付费。

为了说明托管区块链查询的成本效益,假设你运营一个与比特币和以太坊区块链交互的托管数字资产钱包。想象一下,这个钱包的每月需求需要2000万次请求获取比特币用户地址的代币余额,50万次请求获取比特币的交易事件(例如,交易输入和输出)。此外,钱包必须容纳500万次以太坊资产代币余额请求和250万次以太坊交易事件请求。此请求流量的费用在下表中计算(在 us-east-1 区域)。

可靠且高度可用

由强大的数据索引基础设施和ETL管道支持的区域提供REST API,托管区块链查询为跨多条链的公共区块链数据提供了可靠且高度可用的访问。托管区块链查询遵循 亚马逊云科技 的高可靠性标准,因此您可以放心地构建应用程序以使用托管区块链查询。此外,您不必再猜测容量,因为托管区块链查询 API 会随着您的请求量而扩展,以亚秒级的延迟为您的请求提供服务。托管区块链查询还提供高可用性, 您可以预期该服务 可提供99.9%的可用性

无论您是构建概念验证还是大规模生产工作负载,托管区块链查询都可以支持您的区块链数据查询需求。

使用易于开发人员使用的 REST API 加速 Web3 应用程序的开发

托管区块链查询提供的 API 可减少向您的应用程序和用户提供公共区块链数据见解所需的时间和复杂性。例如,通过单个 API 调用,您可以检索从以太坊上的给定钱包地址发送和接收的交易列表,这样可以轻松地在用户界面中填充历史交易详情。此外,您可以使用托管区块链查询来获取具有亚秒延迟的原生代币(例如ETH和BTC)和非原生代币(例如 ERC20)的当前最终余额和历史余额。您可以使用此 API 来检索单个代币,也可以检索给定钱包地址的完整代币余额列表。托管区块链查询 API 使开发人员可以随时在众多应用程序(例如网络和移动钱包、分析管道、交易应用程序等)中使用常见的区块链数据见解,从而帮助依赖区块链数据的开发人员更快地推出产品。

区块链托管查询的用例

托管区块链查询以简单的方式向开发人员提供常见的公共区块链数据,无需自定义数据索引和查询基础架构。例如,假设一个数字钱包需要显示以太坊代币(ERC20、ERC721、ERC1155 和原生以太币(ETH)的历史交易和当前余额列表。使用托管区块链查询 API,只需简单的 REST API 调用即可获得这些数据。您可以在托管区块链查询 开发者指南 中详细了解托管区块链查询集合中的 每个 API 。

在本节中,我们将讨论托管区块链查询 API 可以解决的各种低级别用例。

查询公共区块链上的当前和历史代币余额

getTokenBal ance API 提供了一种获取原生代币(以太币、比特币)和各种代币(ERC20、ERC721、ERC1155)余额的方法,这些代币可用于获取外部拥有的账户 (EOA) 的当前余额或使用通用时间戳(Unix 时间戳,以秒为单位)的历史余额。例如,你可以使用 getTokenBal ance API 在以太坊主网上获取 ERC20 代币 USDC 的地址余额。您还可以使用 batchGet TokenBalance API 提供要获取余额的硬币或代币列表,批量检索代币的余额。

检索给定地址的历史交易数据

使用托管区块链查询,您可以轻松地从以太坊等公共区块链中检索历史数据。这支持多种用例,例如在移动或台式机加密钱包上填充交易历史记录,或根据交易哈希值提供有关交易的上下文信息。在此示例中,您可以使用 list Transacti ons 和 getTr ansaction API 首先在以太坊主网上获取给定外部拥有地址 (EOA) 的所有交易列表,然后检索列表中单笔交易的交易详情。

获取给定地址的所有代币余额

listToken Balances API 是一款适用于钱包、用户界面、Web3 实用程序等的强大工具,因为它可以在单个 API 调用中返回给定公共区块链上的代币(ERC20、ERC721、ERC1155)和原生硬币(以太坊、比特币)的所有余额列表。在此示例中,您可以在以太坊主网上提供EOA和网络,并在响应中收到以太坊上的代币和原生代币余额列表。

获取智能合约铸造的所有代币

当将智能合约地址 作为输入传递时,listToken Balances API 还可以返回智能合约铸造的所有代币(ERC20、ERC721、ERC1155)的列表。例如,您可以在单个 API 调用中检索与以太坊上的 ERC721 智能合约铸造的 NFT 相关的信息。

列出给定交易发出的事件

ListTransactionEv ents API 允许您检索作为给定交易结果发出的智能合约标准事件列表,这些事件由其哈希(交易标识符)标识。 例如,您可以使用 listTransactionEv ents 来检查调用以太坊上 ERC20 代币智能合约函数的交易的结果事件,例如转账事件。

在 亚马逊云科技 管理控制台中使用 AMB 查询

Amazon Managed Blockchain Query 的 亚马逊云科技 管理控制台体验提供了一个图形用户界面查询编辑器,允许您通过 亚马逊云科技 账户直接从浏览器测试查询 API。为了说明如何使用查询编辑器,此示例详细介绍了如何使用 list Transactansactions API 来检索 EOA 参与的交易的完整列表。

  1. 导航到 亚马逊云科技 管理控制台并登录您的 亚马逊云科技 账户。然后使用搜索栏导航到 Amazon Managed Blockchain 服务,并选择屏幕右侧的 “查询公共区块链” 单选按钮。最后,选择 “启动 AMB 查询”。
  2. 进入查询编辑器页面后,您必须在比特币网络或以太坊主网之间进行选择作为查询目标。在此示例中,从 “区块链网络” 下拉列表中选择 “ETHERUM_MAINNET”。
  3. 然后,从 “查询类型” 下拉列表中选择要运行的 AMB 查询 API,在本例中为 “listTokenBalances”。
  4. 然后,填写必填和/或可选的查询参数,以完成对区块链数据的请求。在此示例中,提供以太坊外部拥有的账户 (EOA) 地址以及任何相关的日期/时间过滤器。
  5. 将所有必要的详细信息添加到您的请求后,选择 “运行查询” 以接收您的请求的结果。如果未返回任何结果,请验证您使用的 EOA 是否在您为请求设置的任何日期/时间筛选条件内进行交易。

您可以在 亚马逊云科技 管理控制台中使用 AMB 查询编辑器来测试所有支持的 AMB 查询 API,并浏览这些 API 提供的比特币和以太坊数据。AMB Query 是一项按使用量付费的服务,根据您的 API 使用情况进行计费,因此,作为本动手示例的一部分,您的账户中没有预置任何需要删除的资源。

结论

在这篇文章中,我们讨论了构建者在处理区块链数据时面临的常见挑战,以及托管区块链查询如何应对其中的许多挑战。如果您想更深入地了解托管区块链查询背后的技术并以编程方式亲身体验该服务,请查看我们的 托管区块链查询开发者指南 ,该指南提供了一系列代码示例以及如何在数字钱包用例中使用该服务的架构示例。请继续关注后续博客文章,该文章将深入探讨与托管区块链查询相关的技术概念以及如何将其与其他 亚马逊云科技 服务集成。


作者简介

Forrest Colyer 管理着支持亚马逊管理区块链(AMB)服务的Web3/区块链专家解决方案架构团队。福雷斯特和他的团队在客户采用过程的每个阶段(从概念验证到生产)都为他们提供支持,提供深厚的技术专业知识和战略指导,以帮助将区块链工作负载变为现实。凭借他在由联盟领导的私有区块链解决方案以及NFT和DeFi等公共区块链用例方面的经验,Forrest帮助客户识别和实施高影响力的区块链解决方案。

John Liu 是 亚马逊云科技 的 Web3 /区块链产品主管。他拥有13年的产品主管经验和10年的投资组合经理经验。在加入 亚马逊云科技 之前,John 花了 4 年时间领导公共区块链协议的产品和业务开发,主要关注跨链技术、DeFi 和 NFT。在此之前,约翰以金融科技公司的首席产品官和多家对冲基金的投资组合经理的身份获得了金融专业知识。