Amazon Managed Blockchain (AMB) Access Bitcoin の開始方法 - AMB アクセス Bitcoin

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Managed Blockchain (AMB) Access Bitcoin の開始方法

このセクションのstep-by-stepのチュートリアルを使用して、Amazon Managed Blockchain (AMB) Access Bitcoin を使用してタスクを実行する方法について説明します。これらの例では、いくつかの前提条件を満たす必要があります。AMB Access Bitcoin を初めて使用する場合は、このガイドの「セットアップ」セクションを参照して、これらの前提条件を満たしていることを確認してください。詳細については、「Amazon Managed Blockchain (AMB) Access Bitcoin のセットアップ」を参照してください。

Bitcoin JSON-RPCs にアクセスするための IAM ポリシーを作成する

Bitcoin Mainnet と Testnet のパブリックエンドポイントにアクセスして JSON-RPC 呼び出しを行うには、Amazon Managed Blockchain (AMB) アクセス Bitcoin に適切な IAM アクセス許可を持つユーザー認証情報 (AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY) が必要です。 AWS CLI がインストールされているターミナルで、次のコマンドを実行して、両方の Bitcoin エンドポイントにアクセスするための 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
注記

前の例では、Bitcoin Mainnet と Testnet の両方にアクセスできます。特定のエンドポイントにアクセスするには、次のActionコマンドを使用します。

  • "managedblockchain:InvokeRpcBitcoinMainnet"

  • "managedblockchain:InvokeRpcBitcoinTestnet"

ポリシーを作成したら、そのポリシーを IAM ユーザーのロールにアタッチして有効にします。で AWS Management Console、IAM サービスに移動し、IAM ユーザーに割り当てられたロールにポリシーAmazonManagedBlockchainBitcoinAccessをアタッチします。詳細については、「ロールの作成」および「IAM ユーザーへの割り当て」を参照してください。

を使用して AMB Access RPC エディタで Bitcoin リモートプロシージャコール (RPC) リクエストを行う AWS Management Console

AMB Access AWS Management Console を使用して、 でリモートプロシージャコール (RPCs) を編集して送信できます。これらの RPCs を使用すると、Bitcoin ネットワークでデータの読み取り、書き込み、トランザクションの送信を行うことができます。

次の例は、getBlockRPC blockhashを使用して 00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09 に関する情報を取得する方法を示しています。強調表示された変数を独自の入力に置き換えるか、リストされている他の RPC メソッドのいずれかを選択して、必要な関連する入力を入力します。

  1. 「https://https://console.aws.amazon.com/managedblockchain/.com で Managed Blockchain コンソールを開きます。

  2. RPC エディタを選択します。

  3. リクエストセクションで、ブロックチェーンネットワークBITCOIN_MAINNETとして を選択します。

  4. RPC メソッドgetblockとして を選択します。

  5. ブロック番号00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09として を入力し、詳細度0として を選択します。

  6. 次に、RPC の送信を選択します。

  7. このページの「レスポンス」セクションに結果が表示されます。その後、詳細な分析やアプリケーションのビジネスロジックでの使用のために、完全な raw トランザクションをコピーできます。

詳細については、RPCs」を参照してください。

を使用して awscurl で AMB アクセス Bitcoin JSON-RPC リクエストを作成する AWS CLI

署名バージョン 4 (SigV4) を使用して IAM ユーザー認証情報を使用してリクエストに署名し、AMB Access Bitcoin エンドポイントに Bitcoin JSON-RPC 呼び出しを行います。awscurl コマンドラインツールは、SigV4 を使用して AWS サービスへのリクエストに署名するのに役立ちます。詳細については、「awscurl README.md://www.com」を参照してください。

オペレーティングシステムに適した方法を使用して awscurl をインストールします。macOS では、HomeBrew が推奨アプリケーションです。

brew install awscurl

AWS CLI を既にインストールして設定している場合は、IAM ユーザー認証情報とデフォルトの AWS リージョンが環境に設定され、awscurl にアクセスできます。awscurl を使用して、getblockRPC を呼び出して Bitcoin MainnetTestnet の両方にリクエストを送信します。この呼び出しは、情報を取得するブロックハッシュに対応する文字列パラメータを受け入れます。

次のコマンドは、 params配列のブロックハッシュを使用してヘッダーを取得する特定のブロックを選択することで、Bitcoin Mainnet からブロックヘッダーデータを取得します。この例では、 us-east-1エンドポイントを使用します。これは、Amazon Managed Blockchain (AMB) Access Bitcoin でサポートされている任意の Bitcoin JSON-RPC および AWS リージョンに置き換えることができます。さらに、 testnet コマンドで を mainnetに置き換えることで、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"}

Node.js で Bitcoin JSON-RPC リクエストを行う

署名付きリクエストを送信するには、HTTPS を使用して Bitcoin Mainnet エンドポイントと Testnet エンドポイントにアクセスし、Node.js のネイティブ https モジュールを使用して JSON-RPC API コールを行うか、AXIOS などのサードパーティーライブラリを使用できます。次の例は、AMB Access Bitcoin エンドポイントに Bitcoin JSON-RPC リクエストを行う方法を示しています。

このサンプル Node.js スクリプトを実行するには、次の前提条件を適用します。

  1. マシンにはノードバージョンマネージャー (nvm) と Node.js がインストールされている必要があります。OS のインストール手順については、こちらを参照してください

  2. node --version コマンドを使用して、Node バージョン 14 以降を使用していることを確認します。必要に応じて、 nvm install 14 コマンドの後に nvm use 14 コマンドを使用して、バージョン 14 をインストールできます。

  3. 環境変数 AWS_ACCESS_KEY_IDと には、アカウントに関連付けられている認証情報が含まれているAWS_SECRET_ACCESS_KEY必要があります。環境変数には、AMB Access Bitcoin エンドポイントが含まれているAMB_HTTP_ENDPOINT必要があります。

    次のコマンドを使用して、これらの変数をクライアントで文字列としてエクスポートします。次の文字列の強調表示された値を、IAM ユーザーアカウントの適切な値に置き換えます。

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

すべての前提条件を完了したら、エディタを使用して、次のpackage.jsonファイルとindex.jsスクリプトをローカル環境にコピーします。

package.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 を使用して Bitcoin エンドポイントに RPC リクエストを行い、公式の AWS SDK v3 ツールを使用して、適切な署名バージョン 4 (SigV4) ヘッダーでそれらのリクエストに署名しています。コードを実行するには、 ファイルと同じディレクトリでターミナルを開き、以下を実行します。

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 アクセス Bitcoin JSON-RPC リクエストを作成する AWS CLI例と同じ入力パラメータブロックハッシュを使用してgetblock呼び出しを行います。他の呼び出しを行うには、スクリプト内の rpc オブジェクトを別の Bitcoin JSON-RPC で変更します。ホストプロパティオプションを Bitcoin に変更testnetして、そのエンドポイントで呼び出しを行うことができます。

AWS PrivateLink は、VPC 内にあるかのように、VPC を サービスにプライベートに接続するために使用できる、可用性が高くスケーラブルなテクノロジーです。プライベートサブネットからサービスと通信するために、インターネットゲートウェイ、NAT デバイス、パブリック IP アドレス、 AWS Direct Connect 接続、または AWS Site-to-Site VPN 接続を使用する必要はありません。 AWS PrivateLink または のセットアップの詳細については AWS PrivateLink、「 とは」を参照してください AWS PrivateLink。

VPC エンドポイント AWS PrivateLink を使用して、 経由で Bitcoin JSON-RPC リクエストを AMB Access Bitcoin に送信できます。このプライベートエンドポイントへのリクエストはオープンインターネット経由で渡されないため、同じ SigV4 認証を使用して Bitcoin エンドポイントに直接リクエストを送信できます。詳細については、「 を通じて AWS のサービスにアクセスする AWS PrivateLink」を参照してください。

サービス名については、AWS サービス列で Amazon Managed Blockchain を探します。詳細については、「 AWS と統合する のサービス AWS PrivateLink」を参照してください。エンドポイントのサービス名は、 の形式になりますcom.amazonaws.AWS-REGION.managedblockchain.bitcoin.NETWORK-TYPE

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