使用亚马逊托管区块链查询按地址列出比特币的未花费交易输出 数据库博客

公司动态

使用 Amazon Managed Blockchain 查询 Bitcoin 地址的未花费交易输出

关键要点

使用 Amazon Managed Blockchain (AMB) 查询 API 可以高效查询 Bitcoin 未花费交易输出UTXO。利用 ListFilteredTransactionEvents API,开发者可以获取特定地址的未花费和已花费交易输出。AMB 提供云端解决方案,减轻管理节点的负担,专注于应用特性开发。

在构建与 Bitcoin 区块链交互的应用程序时,无论是钱包、Ordinals 市场还是 BTC 交易所,都必须可靠地访问 Bitcoin 网络。一个基本的数据需求是从区块链中检索与特定钱包相关的交易输出数据,这对多种用例都至关重要。例如,检索未花费的交易输出UTXO以作为 BTC 出去交易的输入,或计算特定钱包的余额,以及收集已花费的输出以渲染过去的 Bitcoin 交易等。

有多个选项可用于检索这些数据,包括第三方数据提供者、节点运营商或自行运行 Bitcoin Core 节点。然而,运行您自己的 Bitcoin Core 节点可以优先考虑独立性和可验证性,但通过自管理节点检索交易输出数据的规模会受到限制。与此相对, Amazon Managed Blockchain (AMB) 利用云端的规模索引和存储,提供面向无限钱包集的低延迟 API。通过 AMB 查询,可以高效地处理 Bitcoin 工作负载,从而减轻管理 Bitcoin 节点和执行大规模数据提取的负担。

在这篇文章中,我们将重点介绍如何使用 AMB 查询中的区块链数据 API 来提供可靠、具成本效益的大规模 Bitcoin 数据访问,包括交易输出数据。此外,AMB Access 提供无服务器访问允许您在检索到可支出的 UTXO 后,广播您的 Bitcoin 交易。

AMB 查询与 ListFilteredTransactionEvents API

AMB 查询提供一组开发者友好的 API,能够从多个公共区块链中提供当前和历史的区块链数据,包括 Bitcoin。使用 AMB 查询,开发者可以将节点操作、区块链数据索引和 ETL提取、转换和加载的重担转移,集中精力开发应用的差异化功能。通过 AMB 查询,您可以使用 ListFilteredTransactionEvents API 查询 Bitcoin 网络及其测试网的地址或地址集合的已花费或未花费交易输出,为 Bitcoin Core 节点实现中的内置 listunspent JSONRPC API 提供替代方案。

ListFilteredTransactionEvents API 的功能

检索特定地址或地址集的未花费交易输出,以简化 Bitcoin 交易的构建过程。检索已花费交易输出信息,以填充仪表盘或钱包界面。按时间戳和最终性状态过滤与未花费输出相关的交易事件。

在展示 ListFilteredTransactionEvents 功能的代码示例之前,首先需要了解 Bitcoin 所采用的未花费交易输出UTXO模型的基础知识,以及在构建 Bitcoin 应用程序时为什么不可避免地需要像 ListFilteredTransactionEvents 这样的 API。

理解未花费交易输出UTXO模型

Bitcoin 区块链使用 UTXO 记账方法,因此计算可支配 BTC 余额或填充支出 BTC 的交易时,首先要编译特定钱包的未花费交易输出。在 Bitcoin 中,新的 BTC 交易会消耗之前交易的未花费输出,并产生新的未花费输出以供日后交易使用。以下是 Bitcoin 交易结构的解析示例:

json{ txid c80b343d2ce2b5d829c2de9854c7c8d423c0e33bda264c40138d834aab4c0638 hash c80b343d2ce2b5d829c2de9854c7c8d423c0e33bda264c40138d834aab4c0638 size 85 vsize 85 version 1 locktime 0 vin [ { txid 3f4fa19803dec4d6a84fae3821da7ac7577080ef75451294e71f9b20e0ab1e7b vout 0 scriptSig { asm hex } sequence 4294967295 } ] vout [ { value 4999990000 n 0 scriptPubKey { asm OPDUP OPHASH160 cbc20a7664f2f69e5355aa427045bc15e7c6c772 OPEQUALVERIFY OPCHECKSIG hex 76a914cbc20a7664f2f69e5355aa427045bc15e7c6c77288ac reqSigs 1 type pubkeyhash addresses [ mz6KvC4aoUeo6wSxtiVQTo7FDwPnkp6URG ] } } ]}

在上面的示例中,vin 对象定义了交易中的 BTC 输入,该输入引用一个或多个之前的 vout 对象,而这些 vout 对象则是先前 Bitcoin 交易的未花费值。对于每笔新 Bitcoin 交易,vin 对象会从之前的交易中获取未花费交易输出,并定义新的 vout 项,以将其支出发送到其他钱包。

vout 数组定义了交易的输出列表,包括接收者、价值以 BTC 计算等。vout 项的总值通常与 vin 的值相等,往往会以 vout 的形式定义找零,以返回给交易的发送者。这最终导致发送者在未来的交易中有新的未花费输出 (vout) 进行支出。虽然以上交易示例使用了单个 vin 和 vout,但每笔交易通常会定义多个 vin 和 vout 项。

正如你可以从 Bitcoin 交易的构造中推断出的那样,计算给定钱包的总可支配余额需要计算该钱包的所有未花费交易输出vout的总和。若没有 API 提供这方面的信息,您可能需要向 Bitcoin 节点发出大量请求,以检索与您的钱包相关的所有 vin 和 vout 并进行计算,以确定哪些是已花费或未花费的输出。这些信息也是构造有效 Bitcoin 交易的先决条件。有了 AMB 查询,检索特定地址集合的已花费和未花费交易输出列表变得非常简单,接下来的章节将展示具体是如何实现的。

如何使用 AMB 查询获取未花费交易输出列表

ListFilteredTransactionEvents API 接收地址列表,并返回与这些地址相关的任何适用的 Bitcoin 交易 VOUT 事件,无论是已花费的还是未花费的。数据将以以下格式返回,其中提供了可以用来为 Bitcoin 交易填充任意数量未花费输出的关键属性:

使用亚马逊托管区块链查询按地址列出比特币的未花费交易输出 数据库博客

json{ events [ { blockchainInstant { time number } confirmationStatus string contractAddress string eventType string from string network string spentVoutIndex number spentVoutTransactionHash string spentVoutTransactionId string to string tokenId string transactionHash string transactionId string value string voutIndex number voutSpent boolean } ] nextToken string}

在上述响应格式中,你会找到与已花费和未花费交易输出相关的多个属性。在检索已花费交易输出时,spentVoutTransactionHash、spentVoutTransactionId 和 spentVoutIndex 定义了交易标识符和已花费输出 (vout) 的数组位置,使得你可以轻松确定该输出的来源。对于未花费交易输出,其属性 transactionHash、transactionId 和 voutIndex 定义了交易标识符,以及在父交易中的未花费输出的数组位置。此外,标志 confirmationStatus 定义了包含该输出的交易在 Bitcoin 区块链上是否被认为是最终的。在 AMB 查询中,交易的最终性定义为等于或大于六个确认,或者在包含该交易的区块之后挖出的区块。根据这一标准,被认为是最终的交易将标记为 FINAL,而未确认的交易将标记为 NONFINAL。

为了更好地说明 API 的响应,以下是一个 JavaScript 代码示例,它定义了一个简单的脚本,以检索 Bitcoin 测试网上单个 Bitcoin 地址的未花费交易输出列表。运行这些 Nodejs 示例时,需要满足以下先决条件:

您必须在您的计算机上安装节点版本管理器 (nvm) 和 Nodejs。您可以在 nvm 的 GitHub 存储库 中找到适合您操作系统的安装说明。使用 node version 命令确认您正在使用 Node 版本 v18120 (LTS) 或更高版本。如果需要,可以通过 nvm install 18120 命令安装,然后使用 nvm use 18120 命令切换版本。环境变量 AWSACCESSKEYID 和 AWSSECRETACCESSKEY 必须包含与帐户关联的凭据。通过使用以下命令将这些变量作为字符串导出到您的客户端。请用 AWS 身份和访问管理 (IAM) 用户账户的适当值替换以下代码中的值。

将以下两个代码片段复制到您的本地工作目录中,一个包含代码示例 (indexjs),另一个包含一个依赖项,即 AMB 查询的官方 AWS SDK 模块的 packagejson:

以下是 packagejson 的代码:

json{ name querybitcoin version 100 description main indexjs scripts { test echo Error no test specified ampamp exit 1 } author license ISC dependencies { @awssdk/clientmanagedblockchainquery 35380 }}

以下是 indexjs 的代码:

javascriptconst { ManagedBlockchainQueryClient ListFilteredTransactionEventsCommand } = require(@awssdk/clientmanagedblockchainquery)

const listUnspentOutputs = async (addresses) =gt { const client = new ManagedBlockchainQueryClient({ region useast1 })

const input = { // ListFilteredTransactionEventsInput addressIdentifierFilter { transactionEventToAddress [ addresses ] } // 列出需要获取事件的地址 network BITCOINTESTNET // 定义网络,测试网或主网 sort { // 排序顺序 sortOrder ASCENDING } maxResults Number(250) voutFilter { voutSpent false // 仅检索未花费输出 } }

const command = new ListFilteredTransactionEventsCommand(input)

try { const data = await clientsend(command) consolelog(data) } catch (error) { consoleerror(error) } }

listUnspentOutputs([tb1qfrpw8av77mrmcf03epn5evfhv59z0t793jdh6t]) // 在这里输入您选择的 Bitcoin 地址

要使用此代码,从工作目录中运行以下命令,根据需要替换 indexjs 中定义的地址:

npm i ampamp node indexjs

在上述代码示例中,由于过滤器仅设置为未花费交易,结果将类似于以下内容:

海外梯子

jsonevents [ { blockchainInstant [Object] confirmationStatus FINAL eventType BITCOINVOUT network BITCOINTESTNET to tb1qfrpw8av77mrmcf03epn5evfhv59z0t793jdh6t tokenId btc transactionHash 195d8c08bda48315b4ba3690264dcee36a7862f98c15d3dde9cf57bbbdf6c6ad transactionId 438961c65220ca0c9427614f9dcd2a7ca8a1e638e7702debae6aa28417045ce7 value 000001 voutIndex 0 voutSpent false } // 更多事件]

在响应中,您可以看到每个未花费输出的交易标识符transactionHash 和 transactionId、value 和 voutIndex 被定义,可以用作构建未来 Bitcoin 交易的输入。

您可以根据需要修改查询中的过滤器,以检索不同的数据,例如检索已花费和未花费输出,或限制检索数据的时间跨度。有关这些过滤器的更多信息,请参阅 请求主体。对 AMB 查询 API 的请求按每百万请求的定价桶计费。您可以查看最新的 定价信息 以计算向 AMB 查询的请求成本。

结论

在这篇文章中,我们概述了 Bitcoin 普及的 UTXO 模型的基本概念、UTXO 在 Bitcoin 交易中的中心地位,以及如何使用 AMB 查询检索 UTXO 数据。要了解更多关于 AMB 查询的信息,请查看 What is Amazon Managed Blockchain (AMB) Query。如需了解更多有关其他管理区块链产品的信息,请访问 Amazon Managed Blockchain。

关于作者

Forrest Colyer 管理着支持 Amazon Managed Blockchain (AMB) 服务的 Web3/区块链专家解决方案架构团队。Forrest 和他的团队支持客户在采用旅程的各个阶段,从概念验证到生产,提供深入的技术专业知识和战略指导,以帮助将区块链工作负载变为现实。通过他在由财团领导的私有区块链解决方案和公共区块链应用场景如 NFT 和 DeFi方面的经验,Forrest 助力客户识别并实施高影响的区块链解决方案。

标签 Web3

使用 Amazon AppStream 20 流式传输 AWS Wickr 桌面客户端作者:Charles H 日期:2023年1月13日重点摘要AWS 用户们可以通过 Amazon AppStream 20 流式传输 AWS Wickr 桌面客户端,以便从网页浏览器访问该应用程序。此架构让用户可以...

AWS Certified Cloud Practitioner 考试即将更新关键要点AWS Certified Cloud Practitioner 考试将进行更新,以适应行业趋势和云专业人员的工作实践。当前版本的考试CLFC01可以在2023年9月18日之前参加,更新后的考试CLFC02将于20...