

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

# Amazon Managed Blockchain (AMB) Access Bitcoin の開始方法
<a name="getting-started"></a>

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

**Topics**
+ [Bitcoin JSON-RPCs にアクセスするための IAM ポリシーを作成する](#getting-started-next-steps)
+ [を使用して AMB Access RPC エディタで Bitcoin リモートプロシージャコール (RPC) リクエストを行う AWS マネジメントコンソール](#gs-console-bitcoin)
+ [を使用して awscurl で AMB アクセス Bitcoin JSON-RPC リクエストを作成する AWS CLI](#awscurl-bitcoin-rpc-requests)
+ [Node.js で Bitcoin JSON-RPC リクエストを行う](#nodejs-bitcoin-rpc-requests)
+ [で AMB Access Bitcoin を使用する AWS PrivateLink](#bitcoin-rpc-requests-privatelink)

## Bitcoin JSON-RPCs にアクセスするための IAM ポリシーを作成する
<a name="getting-started-next-steps"></a>

Bitcoin Mainnet と Testnet のパブリックエンドポイントにアクセスして JSON-RPC 呼び出しを行うには、Amazon Managed Blockchain (AMB) Access Bitcoin に適切な IAM アクセス許可を持つユーザー認証情報 (AWS\$1ACCESS\$1KEY\$1ID および AWS\$1SECRET\$1ACCESS\$1KEY) が必要です。 AWS CLI がインストールされているターミナルで、次のコマンドを実行して IAM ポリシーを作成し、両方の Bitcoin エンドポイントにアクセスします。

```
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 マネジメントコンソール、IAM サービスに移動し、IAM ユーザーに割り当てられたロールにポリシー`AmazonManagedBlockchainBitcoinAccess`をアタッチします。詳細については、[「ロールの作成」および「IAM ユーザーへの割り当て](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

## を使用して AMB Access RPC エディタで Bitcoin リモートプロシージャコール (RPC) リクエストを行う AWS マネジメントコンソール
<a name="gs-console-bitcoin"></a>

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

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

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

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

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

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

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

1. 次に、**送信 RPC** を選択します。

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

詳細については、[RPCs](https://docs.aws.amazon.com/managed-blockchain/latest/ambbtc-dg/bitcoin-api.html)」を参照してください。

## を使用して awscurl で AMB アクセス Bitcoin JSON-RPC リクエストを作成する AWS CLI
<a name="awscurl-bitcoin-rpc-requests"></a>

**Example**  
AMB Access Bitcoin エンドポイントへの Bitcoin JSON-RPC 呼び出しを行うために[、署名バージョン 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) を使用して IAM ユーザー認証情報でリクエストに署名します。[awscurl ](https://github.com/okigan/awscurl) コマンドラインツールは、SigV4 を使用して AWS サービスへのリクエストに署名するのに役立ちます。詳細については、[awscurl README.md ](https://github.com/okigan/awscurl#readme)を参照してください。  
オペレーティングシステムに適した方法を使用して awscurl をインストールします。macOS では、HomeBrew が推奨アプリケーションです。  

```
brew install awscurl
```
 AWS CLI を既にインストールして設定している場合は、IAM ユーザー認証情報とデフォルトの AWS リージョンが環境に設定され、awscurl にアクセスできます。awscurl を使用して、`getblock`RPC を呼び出して Bitcoin *Mainnet* と *Testnet* の両方にリクエストを送信します。この呼び出しは、情報を取得するブロックハッシュに対応する文字列パラメータを受け入れます。  
次のコマンドは、`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 リクエストを行う
<a name="nodejs-bitcoin-rpc-requests"></a>

署名付きリクエストを送信するには、HTTPS を使用して Bitcoin *Mainnet* および *Testnet* エンドポイントにアクセスし、[Node.js のネイティブ https モジュール](https://nodejs.org/api/https.html)を使用して JSON-RPC API コールを行うか、[AXIOS](https://axios-http.com) などのサードパーティーライブラリを使用します。次の例は、AMB Access Bitcoin エンドポイントに Bitcoin JSON-RPC リクエストを行う方法を示しています。

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

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

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

1. 環境変数 `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](#awscurl-bitcoin-rpc-requests)例と同じ入力パラメータブロックハッシュを使用して`getblock`呼び出しを行います。他の呼び出しを行うには、別の Bitcoin JSON-RPC を使用してスクリプト内の`rpc`オブジェクトを変更します。ホストプロパティオプションを Bitcoin に変更`testnet`して、そのエンドポイントで呼び出しを行うことができます。

## で AMB Access Bitcoin を使用する AWS PrivateLink
<a name="bitcoin-rpc-requests-privatelink"></a>

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

VPC エンドポイント AWS PrivateLink を使用して、 経由で Bitcoin JSON-RPC リクエストを AMB Access Bitcoin に送信できます。このプライベートエンドポイントへのリクエストはオープンインターネットに渡されないため、同じ *SigV4* 認証を使用して Bitcoin エンドポイントに直接リクエストを送信できます。詳細については、「 [経由で AWS サービスにアクセスする AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)」を参照してください。

*サービス名*については、*AWS サービス*列で *Amazon Managed Blockchain* を探します。詳細については、「 [AWS と統合する のサービス AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html)」を参照してください。エンドポイントのサービス名は、 の形式になります`com.amazonaws.AWS-REGION.managedblockchain.bitcoin.NETWORK-TYPE`。

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