亚马逊托管区块链入门 (AMB) 访问比特币 - AMB访问比特币

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊托管区块链入门 (AMB) 访问比特币

使用本节中的 step-by-step 教程来学习如何使用 Amazon Managed Blockchain (AMB) 访问比特币来执行任务。这些示例要求您完成一些先决条件。如果您不熟悉A AMB ccess Bitcoin,请查看本指南的设置部分,确保您已完成这些先决条件。有关更多信息,请参阅 设置 Amazon Managed Blockchain (AMB) 访问比特币

创建访问比特币的IAM政策 JSON-RPCs

要访问比特币主网和测试网RPC拨打的公共终端节点,您必须拥有对Amazon Managed Block JSON chain (KEY) 访问比特币具有相应IAM权限的用户证书(AWS_ACCESSAWS_SECRETACCESS_ KEY _ID 和 _AMB)。在航站楼里有 AWS CLI 安装后,运行以下命令来创建访问两个比特币端点的IAM策略:

cat <<EOT > ~/amb-btc-access-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid" : "AMBBitcoinAccessPolicy", "Effect": "Allow", "Action": [ "managedblockchain:InvokeRpcBitcoin*" ], "Resource": "*" } ] } EOT aws iam create-policy --policy-name AmazonManagedBlockchainBitcoinAccess --policy-document file://$HOME/amb-btc-access-policy.json
注意

前面的示例允许您同时访问比特币主网和测试网。要访问特定端点,请使用以下Action命令:

  • "managedblockchain:InvokeRpcBitcoinMainnet"

  • "managedblockchain:InvokeRpcBitcoinTestnet"

创建策略后,将该策略附加到IAM用户的角色以使其生效。在 AWS Management Console,导航到该IAM服务,然后将策略附加AmazonManagedBlockchainBitcoinAccess到分配给您的IAM用户的角色。有关更多信息,请参阅创建角色并分配给IAM用户

使用 A AMB ccess RPC 编辑器发出比特币远程过程调用 (RPC) 请求 AWS Management Console

可以在上编辑和提交远程过程调用 (RPCs) AWS Management Console 使用AMB访问权限。有了这些RPCs,你就可以在比特币网络上读取数据、写入和提交交易。

以下示例显示了如何使用获取有关 00000000c983704af73704af28acdec37b049d214adbda81d7e2a3dd14a3dd146f6ed09 blockhash 的信息。getBlock RPC用您自己的输入替换突出显示的变量,或者选择列出的其他RPC方法之一,然后输入所需的相关输入。

  1. 打开托管区块链控制台,网址为https://console.aws.amazon.com/managedblockchain/

  2. 选择RPC编辑器

  3. 请求部分中,选择BITCOIN_MAINNET作为区块链网络

  4. 选择getblock作为RPC方法

  5. 输入00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09作为区块号并选择0作为详细程度

  6. 然后,选择 Submit (提交)RPC

  7. 您将在本页的 “回复” 部分获得结果。然后,您可以复制完整的原始交易以供进一步分析或用于应用程序的业务逻辑。

欲了解更多信息,请参阅 A AMBccess Bitcoin RPCs 支持的

在 awscurl 中AMB使用访问比特币 JSON ——使用 awscurl 中的RPC请求 AWS CLI

使用签名版本 4 (Sigv4) 使用您的IAM用户凭证签署请求,以便拨打比特币 JSON-RPC 调用 A AMB ccess Bitcoin 端点。a wscurl 命令行工具可以帮助你签署请求 AWS 使用 Sigv4 的服务。有关更多信息,请参阅 awscur README l .md。

使用适合您的操作系统的方法安装 awscurl。在 macOS 上,推荐 HomeBrew使用以下应用程序:

brew install awscurl

如果您已经安装并配置了 AWS CLI,您的IAM用户凭证和默认AWS区域是在您的环境中设置的,并且可以访问 awscurl。使用 awscurl,通过调用,向比特币主网和测试提交请求。getblock RPC此调用接受与您要检索其信息的区块哈希相对应的字符串参数。

以下命令使用params数组中的区块哈希来选择要检索标头的特定区块,从而从比特币主网上检索区块头数据。此示例使用us-east-1终端节点。你可以用你喜欢的比特币代替它 JSON-RPC 而且 AWS Amazon Managed Blockchain (AMB) 支持的区域访问比特币。此外,您可以通过在命令中替换mainnet为,向测试网网络而不是主网发出请求。testnet

awscurl -X POST -d '{ "jsonrpc": "1.0", "id": "getblockheader-curltest", "method": "getblockheader", "params": ["0000000000000000000105bebab2f9dd16234a30950d38ec6ddc24d466e750a0"] }' --service managedblockchain https://mainnet.bitcoin.managedblockchain.us-east-1.amazonaws.com --region us-east-1 -k

结果包括区块标头中的详细信息以及请求区块中包含的交易哈希列表。请参见以下示例:

{"result":{"hash":"0000000000000000000105bebab2f9dd16234a30950d38ec6ddc24d466e750a0", "confirmations":2,"height":799243,"version":664485888,"versionHex":"279b4000", "merkleroot":"568e79752e1921ecf40c961435abb41bc5700fe2833ecadc4abfc2f615ddc1b8", "time":1689684290,"mediantime":1689681317,"nonce":2091174943,"bits":"17053894", "difficulty":53911173001054.59, "chainwork":"00000000000000000000000000000000000000004f375cf72ff64e2404c1589c", "nTx":2135, "previousblockhash":"00000000000000000002ffe4efe07ae74ec8b92c7696f5e12b5da506f015ba6b", "nextblockhash":"000000000000000000038f05ddcf3f483fdcb74f4be606c022bcb673424fa4ca"}, "error":null,"id":"curltest"}

发送比特币 JSON ——在 Node.js 中RPC发出请求

您可以使用访问比特币主网和测试网端点,并使用 HTTPS Node.js 中的原生 https 模块RPCAPI拨打电话,也可以使用第三方库(例如)来提交已签名的请求。JSON AXIOS以下示例向您展示了如何向 A AMB ccess JSON Bitcoin 端点发出比特币RPC请求。

要运行此示例 Node.js 脚本,请应用以下先决条件:

  1. 您的计算机上必须安装节点版本管理器 (nvm) 和 Node.js。您可以在此处找到操作系统的安装说明。

  2. 使用node --version命令并确认您使用的是 Node 版本 14 或更高版本。如果需要,您可以使用nvm install 14命令和nvm use 14命令安装版本 14

  3. 环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY必须包含与您的账户关联的证书。环境变量AMB_HTTP_ENDPOINT必须包含您的 A AMB ccess Bitcoin 端点。

    使用以下命令将这些变量作为字符串导出到客户端。将以下字符串中突出显示的值替换为IAM用户帐户中的相应值。

    export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

完成所有先决条件后,使用编辑器将以下package.json文件和index.js脚本复制到本地环境中:

包裹.json

{ "name": "bitcoin-rpc", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "@aws-crypto/sha256-js": "^4.0.0", "@aws-sdk/credential-provider-node": "^3.360.0", "@aws-sdk/protocol-http": "^3.357.0", "@aws-sdk/signature-v4": "^3.357.0", "axios": "^1.4.0" } }

index.js

const axios = require('axios'); const SHA256 = require('@aws-crypto/sha256-js').Sha256 const defaultProvider = require('@aws-sdk/credential-provider-node').defaultProvider const HttpRequest = require('@aws-sdk/protocol-http').HttpRequest const SignatureV4 = require('@aws-sdk/signature-v4').SignatureV4 // define a signer object with AWS service name, credentials, and region const signer = new SignatureV4({ credentials: defaultProvider(), service: 'managedblockchain', region: 'us-east-1', sha256: SHA256, }); const rpcRequest = async () => { // create a remote procedure call (RPC) request object definig the method, input params let rpc = { jsonrpc: "1.0", id: "1001", method: 'getblock', params: ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"] } //bitcoin endpoint let bitcoinURL = 'https://mainnet.bitcoin.managedblockchain.us-east-1.amazonaws.com/'; // parse the URL into its component parts (e.g. host, path) const url = new URL(bitcoinURL); // create an HTTP Request object const req = new HttpRequest({ hostname: url.hostname.toString(), path: url.pathname.toString(), body: JSON.stringify(rpc), method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip', host: url.hostname, } }); // use AWS SignatureV4 utility to sign the request, extract headers and body const signedRequest = await signer.sign(req, { signingDate: new Date() }); try { //make the request using axios const response = await axios({...signedRequest, url: bitcoinURL, data: req.body}) console.log(response.data) } catch (error) { console.error('Something went wrong: ', error) throw error } } rpcRequest();

前面的示例代码使用 Axios 向比特币端点发出RPC请求,并使用官方的 Signature Version 4 (Sigv4) 标头使用相应的签名版本 4 (Sigv4) 标头对这些请求进行签名 AWS SDKv3 工具。要运行代码,请在文件所在目录下打开终端,然后运行以下命令:

npm i node index.js

生成的结果将类似于以下内容:

{"hash":"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"," confirmations":784126,"height":1000, "version":1,"versionHex":"00000001", "merkleroot":"fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33", "time":1232346882, "mediantime":1232344831,"nonce":2595206198,"bits":"1d00ffff","difficulty":1, "chainwork":"000000000000000000000000000000000000000000000000000003e903e903e9", "nTx":1, "previousblockhash":"0000000008e647742775a230787d66fdf92c46a48c896bfbc85cdc8acc67e87d", "nextblockhash":"00000000a2887344f8db859e372e7e4bc26b23b9de340f725afbf2edb265b4c6", "strippedsize":216,"size":216,"weight":864, "tx":["fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33"]}, "error":null,"id":"1001"}
注意

前一个脚本中的示例请求使用与在 awscurl 中AMB使用访问比特币 JSON ——使用 awscurl 中的RPC请求 AWS CLI示例相同的输入参数区块哈希进行getblock调用。要进行其他调用,请使用不同的比特币修改脚本中的rpc对象 JSON-RPC。您可以将主机属性选项更改为比特币,testnet以便在该端点上拨打电话。

AWS PrivateLink 是一种高度可用、可扩展的技术,您可以使用它来私下连接服务,就像它们在您的服务中一样VPC。VPC您不必使用互联网网关、NAT设备、公共 IP 地址, AWS Direct Connect 连接,或 AWS 站点到站点VPN连接,用于从您的私有子网与服务通信。有关 AWS PrivateLink 或者要设置 AWS PrivateLink,参见什么是 AWS PrivateLink?

你可以发送比特币 JSON —— RPC 请求AMB访问比特币 AWS PrivateLink 通过使用VPC端点。对该私有端点的请求不会通过开放的互联网传递,因此您可以使用相同的 SigV4 身份验证将请求直接发送到比特币端点。有关更多信息,请参阅访问权限 AWS 通过以下方式提供服务 AWS PrivateLink.

要查看服务名称,请在中查找 Amazon Managed Blockchain AWS 服务专栏。有关更多信息,请参阅 AWS 与之集成的服务 AWS PrivateLink。 终端节点的服务名称将采用以下格式:com.amazonaws.AWS-REGION.managedblockchain.bitcoin.NETWORK-TYPE

例如:com.amazonaws.us-east-1.managedblockchain.bitcoin.testnet