Amazon Managed Blockchain (AMB) Access Polygon の開始方法 - AMB アクセスポリゴン

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

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

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

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

Polygon ブロックチェーンネットワークにアクセスするための IAM ポリシーを作成する

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

前の例では、使用可能なすべてのポリゴンネットワークにアクセスできます。特定のエンドポイントにアクセスするには、次のActionコマンドを使用します。

  • "managedblockchain:InvokeRpcPolygonMainnet"

ポリシーを作成したら、そのポリシーを IAM ユーザーのロールにアタッチして有効にします。で AWS Management Console、IAM サービスに移動し、IAM ユーザーに割り当てられたロールにポリシーAmazonManagedBlockchainPolygonAccessをアタッチします。

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

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

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

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

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

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

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

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

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

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

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

を使用して awscurlで AMB Access Polygon JSON-RPC リクエストを行う AWS CLI

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

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

brew install awscurl

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

次のコマンドは、 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、トークンを使用して AMB アクセストークンベースのアクセス機能Accessorを実行することもできます。詳細については、「AMB Access Polygon リクエストを作成するためのトークンベースのアクセス用の Accessor トークンの作成と管理」を参照してください。

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 リクエストを作成する

Node.RPCs を呼び出すことができます。または、AXIOS などのサードパーティーライブラリを使用できます。 https://nodejs.org/api/https.html次の Node.js の例は、署名バージョン 4 (SigV4) トークンベースのアクセス の両方を使用して、AMB アクセスポリゴンエンドポイントにポリゴン JSON-RPC リクエストを行う方法を示しています。最初の例では、あるアドレスから別のアドレスにトランザクションを送信し、次の例では、ブロックチェーンからトランザクションの詳細と残高情報をリクエストします。

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

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

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

  3. 環境変数 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 でトランザクションを送信する

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

ヒント

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

billingToken、ウォレットのプライベートキー 、受信者のアドレスをコードに追加したら、次のコードを実行して、アドレスから別のアドレスに送信される .0001 POL のトランザクションに署名し、AMB アクセスポリゴンを使用して eth_sendRawTransactionJSON-RPC を呼び出すポリゴンメインネットにブロードキャストします。

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。これは、ブロックチェーンに送信したトランザクションの識別子です。読み取りトランザクションの例でこのプロパティを使用して、このトランザクションに関する追加の詳細をポリゴンメインネットから取得します。

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

Node.js でトランザクションを読み取る

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

このコードでは、ユーティリティ を使用します。ユーティリティ はdispatch-evm-rpc.js、 AWS SDK から必要な Signature Version 4 (SigV4) モジュールを使用して AMB Access Polygon への HTTPS リクエストに署名し、広く使用されている HTTP クライアント AXIOS を使用してリクエストを送信します。

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

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

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

ヒント

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