

Amazon Managed Blockchain (AMB) Access Polygon はプレビューリリースであり、変更される可能性があります。

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

# Amazon Managed Blockchain (AMB) アクセスポリゴンの開始方法
<a name="getting-started"></a>

このセクションの情報と手順を使用して、Amazon Managed Blockchain (AMB) Access Polygon の使用を開始します。

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

## Polygon ブロックチェーンネットワークにアクセスするための IAM ポリシーを作成する
<a name="getting-started-next-steps"></a>

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

```
cat <<EOT > ~/amb-polygon-access-policy.json
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid" : "AMBPolygonAccessPolicy", 
            "Effect": "Allow",
            "Action": [
                "managedblockchain:InvokeRpcPolygon*"
            ],
            "Resource": "*"
        }
    ]
}
EOT
aws iam create-policy --policy-name AmazonManagedBlockchainPolygonAccess --policy-document file://$HOME/amb-polygon-access-policy.json
```

**注記**  
前の例では、使用可能なすべての Polygon ネットワークにアクセスできます。特定のエンドポイントにアクセスするには、次の`Action`コマンドを使用します。  
`"managedblockchain:InvokeRpcPolygonMainnet"`

ポリシーを作成したら、そのポリシーを IAM ユーザーのロールにアタッチして有効にします。で AWS マネジメントコンソール、IAM サービスに移動し、IAM ユーザーに割り当てられたロールにポリシー`AmazonManagedBlockchainPolygonAccess`をアタッチします。

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

AMB Access Polygon AWS マネジメントコンソール を使用して、 でリモートプロシージャコール (RPCs) を編集、設定、送信できます。これらの RPCs を使用すると、データの取得や多角形ネットワークへのトランザクションの送信など、多角形ネットワークでデータを読み書きできます。

**Example**  
次の例は、`eth_getBlockByNumber`RPC を使用して*最新の*ブロックに関する情報を取得する方法を示しています。強調表示された変数を独自の入力に変更するか、リストされている **RPC メソッド**のいずれかを選択して、必要な入力を入力します。  

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

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

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

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

1. ***ブロック番号*****latest**として を入力し、**フルトランザクションフラグ**`False`として を選択します。

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

1. `latest` ブロックの結果は、**レスポンス**セクションで取得できます。その後、詳細な分析やアプリケーションのビジネスロジックでの使用のために、完全な raw トランザクションをコピーできます。

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

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

**Example**  
AMB Access Polygon エンドポイントに Polygon JSON-RPC リクエストを行うには、[署名バージョン 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) を使用して IAM ユーザー認証情報でリクエストに署名します。[https://github.com/okigan/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`、`eth_getBlockByNumber`RPC を呼び出して Polygon *Mainnet* にリクエストを送信します。この呼び出しは、情報を取得するブロック番号に対応する文字列パラメータを受け入れます。  
次のコマンドは、`params`配列のブロック番号を使用して、ヘッダーを取得する特定のブロックを選択して、Polygon Mainnet からブロックデータを取得します。  

```
awscurl -X POST -d '{ "jsonrpc": "2.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' --service managedblockchain https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com -k
```
また、 を使用して同じリクエストを行い`curl`、`Accessor`トークンを使用して AMB アクセストークンベースのアクセス機能を実行することもできます。詳細については、「[AMB Access Polygon リクエストを行うためのトークンベースのアクセス用の Accessor トークンの作成と管理](polygon-tokens.md)」を参照してください。  

```
curl -X POST -d '{"jsonrpc":"2.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' 'https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com?billingtoken=your-billing-token'
```
いずれかのコマンドからのレスポンスは、*最新の*ブロックに関する情報を返します。例については、次の例を参照してください。  

```
{"error":null,"id":"eth_getBlockByNumber-curltest","jsonrpc":"1.0",
      "result":{"baseFeePerGas":"0x873bf591e","difficulty":"0x18",
      "extraData":"0xd78301000683626f7288676f312e32312e32856c696e757800000000000000009a\
      423a58511085d90eaf15201a612af21ccbf1e9f8350455adaba0d27eff0ecc4133e8cd255888304cc\
      67176a33b451277c2c3c1a6a6482d2ec25ee1573e8ba000",
      "gasLimit":"0x1c9c380","gasUsed":"0x14ca04d",
      "hash":"0x1ee390533a3abc3c8e1306cc1690a1d28d913d27b437c74c761e1a49********;",
      "nonce":"0x0000000000000000","number":"0x2f0ec4d",
      "parentHash":"0x27d47bc2c47a6d329eb8aa62c1353f60e138fb0c596e3e8e9425de163afd6dec",
      "receiptsRoot":"0x394da96025e51cc69bbe3644bc4e1302942c2a6ca6bf0cf241a5724c74c063fd",
      "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
      "size":"0xbd6b",
      "stateRoot":"0x7ca9363cfe9baf4d1c0dca3159461b2cca8604394e69b30af05d7d5c1beea6c3",
      "timestamp":"0x653ff542",
      "totalDifficulty":"0x33eb01dd","transactions":[...],
      "transactionsRoot":"0xda1602c66ffd746dd470e90a47488114a9d00f600ab598466ecc0f3340b24e0c",
      "uncles":[]}}
```

## Node.js で多角形 JSON-RPC リクエストを行う
<a name="nodejs-polygon-rpc-requests"></a>

HTTPS を使用して署名付きリクエストを送信し、[Node.js のネイティブ https モジュール](https://nodejs.org/api/https.html)を使用して Polygon *Mainnet* ネットワークにアクセスすることで、Polygon JSON-RPCs を呼び出すことも、[AXIOS](https://axios-http.com) などのサードパーティーライブラリを使用することもできます。次の *Node.js* の例は、[署名バージョン 4 (SigV4) ](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)と[トークンベースのアクセス](https://docs.aws.amazon.com/managed-blockchain/latest/ambp-dg/polygon-tokens.html)の両方を使用して、AMB Access Polygon エンドポイントに Polygon JSON-RPC リクエストを行う方法を示しています。最初の例では、あるアドレスから別のアドレスにトランザクションを送信し、次の例では、ブロックチェーンからトランザクションの詳細と残高情報をリクエストします。

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

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

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

1. 環境変数 `AWS_ACCESS_KEY_ID`と には、アカウントに関連付けられている認証情報が含まれている`AWS_SECRET_ACCESS_KEY`必要があります。

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

   ```
   export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
   export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
   ```
すべての前提条件を完了したら、任意のコードエディタを使用して、次のファイルをローカル環境のディレクトリにコピーします。  
*package.json*  

```
{
  "name": "polygon-rpc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ethers": "^6.8.1",
    "@aws-crypto/sha256-js": "^5.2.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.6.2"
  }
}
```
  
*dispatch-evm-rpc.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 (rpcEndpoint, rpc) => {
 
  // parse the URL into its component parts (e.g. host, path)
  let url = new URL(rpcEndpoint);

  // 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: url,
      data: req.body,
    });
    return response.data;
  } catch (error) {
    console.error("Something went wrong: ", error);
  }
};

module.exports = { rpcRequest: rpcRequest };
```
  
*sendTx.js*  
次のコードでは、ハードコードされたプライベートキーを使用して、デモンストレーションのみ`Ethers.js`を目的として を使用するウォレット Signer を生成します。このコードには実際の資金があり、セキュリティ上のリスクがあるため、本番環境では使用しないでください。  
必要に応じて、アカウントチームに連絡して、ウォレットと署名者のベストプラクティスについてアドバイスしてください。
  

```
const ethers = require("ethers");

//set AMB Access Polygon endpoint using token based access (TBA)
let token = "your-billing-token"
let url = `https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com?billingtoken=${token}`;

//prevent batch RPCs
let options = {
  batchMaxCount: 1,
};

//create JSON RPC provider with AMB Access endpoint and options
let provider = new ethers.JsonRpcProvider(url, null, options);

let sendTx = async (to) => {
  //create an instance of the Wallet class with a private key 
  //DO NOT USE A WALLET YOU USE ON MAINNET, NEVER USE A RAW PRIVATE KEY IN PROD
  let pk = "wallet-private-key";
  let signer = new ethers.Wallet(pk, provider);

  //use this wallet to send a transaction of POL from one address to another
  const tx = await signer.sendTransaction({
    to: to,
    value: ethers.parseUnits("0.0001", "ether"),
  });

  console.log(tx);
};

sendTx("recipent-address");
```
*readTx.js*  

```
let rpcRequest = require("./dispatch-evm-rpc").rpcRequest;
let ethers = require("ethers");

let getTxDetails = async (txHash) => {
  //set url to a Signature Version 4 endpoint for AMB Access
  let url = "https://mainnet.polygon.managedblockchain.us-east-1.amazonaws.com";

  //set RPC request body to get transaction details
  let getTransactionByHash = {
    id: "1",
    jsonrpc: "2.0",
    method: "eth_getTransactionByHash",
    params: [txHash],
  };

  //make RPC request for transaction details
  let txDetails = await rpcRequest(url, getTransactionByHash);
  
  //set RPC request body to get recipient user balance
  let getBalance = {
    id: "2",
    jsonrpc: "2.0",
    method: "eth_getBalance",
    params: [txDetails.result.to, "latest"],
  };
    
  //make RPC request for recipient user balance
  let recipientBalance = await rpcRequest(url, getBalance);

  console.log("TX DETAILS: ", txDetails.result, "BALANCE: ", ethers.formatEther(recipientBalance.result));
};

getTxDetails("your-transaction-id");
```
  
これらのファイルを ディレクトリに保存したら、次のコマンドを使用してコードの実行に必要な依存関係をインストールします。  

```
npm install
```

### Node.js でトランザクションを送信する
<a name="nodejs-send-transaction"></a>

前の例では、トランザクションに署名し、AMB Access Polygon を使用して Polygon Mainnet にブロードキャストすることで、あるアドレスから別のアドレスにネイティブ Polygon Mainnet トークン (POL) を送信します。これを行うには、 `sendTx.js`スクリプトを使用します。これは`Ethers.js`、Polygon などの Ethereum および Ethereum 互換ブロックチェーンとやり取りするための一般的なライブラリです。赤*で強調表示*されているコード内の 3 つの変数を置き換える必要があります。これには、[トークンベースのアクセス](https://docs.aws.amazon.com/managed-blockchain/latest/ambp-dg/polygon-tokens.html)`billingToken`用の *Accessor* トークンの 、トランザクションに署名する*プライベートキー*、POL を受信する*受信者のアドレス*が含まれます。

**ヒント**  
資金を失うリスクを排除するために、既存のウォレットを再利用するのではなく、この目的のために新しいプライベートキー (ウォレット) を作成することをお勧めします。Ethers ライブラリの Wallet クラスメソッド createRandom() を使用して、テストするウォレットを生成できます。さらに、Polygon Mainnet から POL をリクエストする必要がある場合は、パブリック POL 蛇口を使用して、テストに使用する少量をリクエストできます。

`billingToken`、資金供給ウォレットの*プライベートキー*、受信者のアドレスをコードに追加したら、次のコードを実行して、アドレスから別のアドレスに送信される *.0001* POL のトランザクションに署名し、AMB Access Polygon を使用して ` eth_sendRawTransaction` JSON-RPC を呼び出す Polygon Mainnet にブロードキャストします。

```
node sendTx.js
```

返されるレスポンスは次のようになります。

```
TransactionResponse {
provider: JsonRpcProvider {},
blockNumber: null,
blockHash: null,
index: undefined,
hash: '0x8d7538b4841261c5120c0a4dd66359e8ee189e7d1d34ac646a1d9923********',
type: 2,
to: '0xd2bb4f4f1BdC4CB54f715C249Fc5a991********',
from: '0xcf2C679AC6cb7de09Bf6BB6042ecCF05********',
nonce: 2,
gasLimit: 21000n,
gasPrice: undefined,
maxPriorityFeePerGas: 16569518669n,
maxFeePerGas: 16569518685n,
data: '0x',
value: 100000000000000n,
chainId: 80001n,
signature: Signature {
r: "0x1b90ad9e9e4e005904562d50e904f9db10430a18b45931c059960ede337238ee",
s: "0x7df3c930a964fd07fed4a59f60b4ee896ffc7df4ea41b0facfe82b470db448b7",
yParity: 0,
networkV: null
},
accessList: []
}
```

レスポンスは、トランザクションの受信を構成します。プロパティ の値を保存します`hash`。これは、ブロックチェーンに先ほど送信したトランザクションの識別子です。読み取りトランザクションの例でこのプロパティを使用して、Polygon Mainnet からこのトランザクションに関する追加の詳細を取得します。

`blockNumber` と `blockHash`はレスポンス`null`に含まれていることに注意してください。これは、トランザクションが Polygon ネットワークのブロックにまだ記録されていないためです。これらの値は後で定義され、次のセクションでトランザクションの詳細をリクエストすると表示される場合があることに注意してください。

### Node.js でトランザクションを読み取る
<a name="nodejs-read-transaction"></a>

このセクションでは、以前に送信されたトランザクションのトランザクション詳細をリクエストし、AMB Access Polygon を使用して Polygon Mainnet への読み取りリクエストを使用して受信者アドレスの POL 残高を取得します。`readTx.js` ファイルで、 というラベル*`your-transaction-id`*の変数を、前のセクションでコードを実行したレスポンスから`hash`保存した に置き換えます。

このコードでは、ユーティリティ を使用します。このユーティリティは`dispatch-evm-rpc.js`、 AWS SDK から必要な [Signature Version 4 (SigV4) ](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)モジュールを使用して AMB Access Polygon への HTTPS リクエストに署名し、広く使用されている HTTP クライアント [AXIOS](https://axios-http.com) を使用してリクエストを送信します。

返されるレスポンスは次のようになります。

```
TX DETAILS: {
blockHash: '0x59433e0096c783acab0659175460bb3c919545ac14e737d7465b3ddc********',
blockNumber: '0x28b4059',
from: '0xcf2c679ac6cb7de09bf6bb6042eccf05b7fa1394',
gas: '0x5208',
gasPrice: '0x3db9eca5d',
maxPriorityFeePerGas: '0x3db9eca4d',
maxFeePerGas: '0x3db9eca5d',
hash: '0x8d7538b4841261c5120c0a4dd66359e8ee189e7d1d34ac646a1d9923********',
input: '0x',
nonce: '0x2',
to: '0xd2bb4f4f1bdc4cb54f715c249fc5a991********',
transactionIndex: '0x0',
value: '0x5af3107a4000',
type: '0x2',
accessList: [],
chainId: '0x13881',
v: '0x0',
r: '0x1b90ad9e9e4e005904562d50e904f9db10430a18b45931c059960ede337238ee',
s: '0x7df3c930a964fd07fed4a59f60b4ee896ffc7df4ea41b0facfe82b470db448b7'
} BALANCE: 0.0003
```

レスポンスはトランザクションの詳細を表します。これで、 `blockHash`と `blockNumber` が定義される可能性が高いことに注意してください。これは、トランザクションがブロックに記録されたことを示します。これらの値が のままの場合は`null`、数分待ってからコードを再度実行し、トランザクションがブロックに含まれているかどうかを確認します。最後に、受信者アドレスバランスの 16 進数表現 *(0x110d9316ec000)* は、Ethers の `formatEther()`メソッドを使用して 10 進数に変換されます。これにより、16 進数を 10 進数に変換し、18 進数を 18 *(10^18)* シフトして POL の真のバランスが得られます。

**ヒント**  
上記のコード例は、Node.js、Ethers、Axios を使用して AMB Access Polygon でサポートされているいくつかの JSON-RPCs を利用する方法を示していますが、このサービスを使用して例を変更したり、Polygon でアプリケーションを構築するための他のコードを記述したりできます。AMB Access Polygon でサポートされている JSON-RPCs「」を参照してください[AMB Access Polygon でサポートされている Managed Blockchain API と JSON-RPCs](polygon-api.md)。