构建一个功能完善的加密货币钱包,需要处理一系列复杂的区块链专有组件。这些组件包括但不限于:部署和管理区块链节点、开发安全的私钥管理解决方案、构建高性能的交易管理模块,以及处理复杂的区块链数据管道。这些任务不仅涉及繁重的基础设施管理工作,还伴随着极高的安全要求,因为钱包的核心使命是保障用户的数字资产安全。
Amazon Managed Blockchain (AMB) 为这些核心组件提供了强大的抽象层,使开发者能够将那些重复性的繁重工作托管出去,从而专注于应用本身的开发,例如为加密货币钱包构建更稳健的密钥管理体系。AMB Access 和 AMB Query 服务让开发者能够轻松接入包括比特币和以太坊在内的多个主流公有链,便捷地构建交易工作流、获取实时与历史的链上数据。结合其他 AWS 服务,Managed Blockchain 为构建一个安全可靠的加密货币钱包解决方案奠定了坚实基础。
本文将分享一个利用 AWS 服务及 Managed Blockchain 独特功能来实现钱包应用的范例。
AMB Access 与 AMB Query 简介
Managed Blockchain 极大地简化了区块链应用的运维复杂度,为比特币和以太坊等主流网络提供了必要的基础设施支持。
- AMB Access:提供了一个全托管的区块链节点网关,极大简化了连接并交互不同区块链网络的过程。
- AMB Query:提升了区块链数据处理的效率。它提供已索引的链上数据,使得复杂的区块链查询(无论是当前还是历史数据)都能被转换为简单的 API 调用。
这种跨协议的统一方法,显著降低了区块链数据管理的复杂性和时间成本,从而提高了整体效率,并降低了成本、风险和运维投入。
构建加密货币钱包的关键考量
实现一个钱包时,有两个至关重要的方面需要考虑。
密钥管理
私钥的安全是钱包的生命线。
- AWS CloudHSM:提供基于云的、经过 FIPS 140-2 Level 3 认证的硬件安全模块 (HSM)。只有用户才能访问其密钥。用户可自行生成私钥并将其安全地存储在 CloudHSM 中,其设计能抵御多个可用区的系统故障。
- AWS Key Management Service (KMS):在云环境中安全地管理密钥,支持私钥的安全存储和访问。
这两项服务为私钥管理提供了企业级的安全保障。
交易管理
钱包使用用户的私钥为交易添加加密签名,以创建新交易并将其安全地广播到区块链网络。
- 交易签名:签名确保了交易的有效性和不可篡改性,是交易能在区块链网络上被处理的前提。
- 状态查询:钱包需要与区块链节点通信,以准确提供交易进度、确认数以及是否被打包进区块等信息。这使得用户能够实时监控其交易状态并采取必要行动。
利用 AMB Access 和 AMB Query 简化开发
如果不使用 AMB Access 和 AMB Query,你需要自行构建交易管理模块,这可能涉及基于 Amazon EC2 和 AWS Fargate 创建事件监听器以处理交易回调。这种手动方案通常还需组合使用 Amazon Kinesis、Amazon S3、Amazon DynamoDB 和 Amazon Aurora 等多种服务来追踪交易提交、最终确认等状态,架构复杂。
然而,利用 AMB Access 和 AMB Query 便捷的基于 API 的查询功能,你可以极大地简化这一能力的实现:
- 使用 AMB Access 将交易广播到所选网络。
- 使用 AMB Query 查询与该交易状态相关的数据。
其架构流程通常如下:
- 用户调用后端 API,由 Amazon API Gateway 和 AWS Lambda 执行身份验证和授权。
- 验证通过后,Lambda 函数使用 AMB Query 调用 API 来请求所需的区块链数据。
- AMB Query 检索区块链数据并返回结果,Lambda 函数将结果处理成所需的数据格式后返回给用户。
- 如需发送加密货币或代币,则可使用 AMB Access 创建并发送交易。
钱包服务流程概览
一个典型的加密货币钱包应用界面通常包含以下功能:
- 余额查询 - 查看钱包总资产
- 交易列表 - 浏览交易历史记录
- 交易详情 - 探索特定交易的详细信息
- 代币列表 - 查看拥有的代币,尤其是 NFT
借助 AMB Query,开发者可以通过一系列简单的 API 调用来填充这些钱包用户界面元素。
查询余额
AMB Query 提供两种方式查询余额:GetTokenBalance 和 BatchGetTokenBalance。
GetTokenBalance用于查询由外部拥有账户 (EOA) 或合约地址 (CA) 持有的余额。BatchGetTokenBalance可一次性查询多个地址和合约地址的余额,对于使用多条主网的用户尤其方便。
以下是一个使用 Python 和 GetTokenBalance 查询比特币余额的示例:
import boto3
query = boto3.client("managedblockchain-query")
response = query.get_token_balance(
tokenIdentifier={"network":"BITCOIN_MAINNET", "tokenId":"btc"},
ownerIdentifier={"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"}
)
print(response['balance']) # 输出:'72.66900535'获取交易列表
使用 ListTransactions API 可以获取指定地址的交易历史列表。响应中包含的 nextToken 可用于获取后续分页数据。
response = query.list_transactions(
address="1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
network="BITCOIN_MAINNET",
maxResults=2
)
for tx in response['transactions']:
print(tx['transactionHash'], tx['transactionTimestamp'])查看交易详情
使用 GetTransaction 可以获取特定交易的详细信息,如所在区块、状态、手续费等。
若要查看更详细的事件信息(如转账的发送方、接收方和金额),可以使用 ListTransactionEvents。对于比特币,你会观察到 BITCOIN_VIN(输入)和 BITCOIN_VOUT(输出)类型的事件;而对于以太坊,事件类型则会有所不同(如 ERC20_TRANSFER)。
列出代币资产
ListTokenBalances API 可用于查询某地址拥有的以太坊代币(如 ERC-20, ERC-721, ERC-1155)及其余额列表。
响应中的 contractAddress 字段即为代币智能合约的地址。该 API 同样支持 maxResults 和 nextToken 进行分页查询。
arguments = {
'tokenFilter': {'network': 'ETHEREUM_MAINNET'},
'ownerFilter': {'address': '0xab5801a7d398351b8be11c439e05c5b3259aec9b'},
'maxResults': 3
}
response = query.list_token_balances(**arguments)
for token_balance in response['tokenBalances']:
print(token_balance)常见问题
Q1: AMB Access 和 AMB Query 支持哪些区块链网络?
A1: 目前主要支持比特币(BITCOIN_MAINNET, BITCOIN_TESTNET)和以太坊(ETHEREUM_MAINNET, ETHEREUM_GOERLI, ETHEREUM_SEPOLIA)等主流公有链。建议查阅 AWS 官方文档以获取最新支持的网络列表。
Q2: 使用这些服务是否还需要自己运行区块链全节点?
A2: 完全不需要。AMB Access 和 AMB Query 提供了全托管的节点服务和数据索引,开发者无需关心底层节点的部署、同步、维护和数据的提取与处理,直接通过 API 即可访问链上数据和服务。
Q3: 如何保证通过 API 访问的区块链数据是最新且准确的?
A3: AMB 服务由 AWS 维护,确保其节点与区块链网络保持同步。AMB Query 提供的数据是基于这些同步节点构建的索引,保证了数据的实时性和准确性。响应中的 atBlockchainInstant 等时间戳字段也标明了数据所对应的区块链上的确切时间。
Q4: 除了钱包,这些服务还能用于哪些场景?
A4: AMB Access 和 Query 的应用非常广泛,适用于任何需要与区块链交互或查询链上数据的 Web3 应用,包括但不限于 NFT 平台、区块链游戏、DeFi(去中心化金融)应用、DAO(去中心化自治组织)工具、区块链浏览器、审计和分析平台等。
Q5: 使用这些服务如何处理高并发请求?
A5: 基于 AWS Lambda 和 API Gateway 的无服务器架构天然具备处理高并发请求的能力。它们可以根据请求量自动扩展,而后端的 AMB 服务也设计为可扩展的托管服务,能够处理大量的 API 调用。
总结
通过本文,我们阐述了 AMB Access 和 AMB Query 如何通过抽象化与公有链及其数据交互的复杂性,让你能够快速创建加密货币钱包。除了钱包,这些服务还可用于各种 Web3 应用,如 NFT、游戏、DeFi 和 DAO 等。
自行创建和运营区块链节点并从这些节点索引数据需要大量投入。然而,通过将 AMB Query 和 AMB Access 作为托管服务使用,你可以轻松实现区块链应用。👉 探索更多区块链应用构建策略