Amazon Managed Blockchain(AMB)訪問多邊形處於預覽版本中,可能會發生變化。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用 Amazon Managed Blockchain(AMB)訪問多邊形
使用本節中的資訊和程序,開始使用 Amazon Managed Blockchain (AMB) 存取多邊形。
主題
建立 IAM 政策以存取多邊形區塊鏈網路
若要存取多邊形主網的公用端點以進行 JSON-RPC 呼叫,您必須擁有具有 Amazon Managed Blockchain (AMBAWS_SECRET_ACCESS_KEY
) 存取多邊形的適當 IAM 許可的使用者登入資料 (AWS_ACCESS_KEY_ID
和)。在 AWS CLI
已安裝的終端機中,執行以下命令以建立 IAM 政策以存取兩個 Polygon 端點:
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 Management Console,導覽至 IAM 服務,並將政策附加AmazonManagedBlockchainPolygonAccess
到指派給 IAM 使用者的角色。
在 AMB 存取 RPC 編輯器上使用 AWS Management Console
您可以在 AWS Management Console 使用 AMB 存取多邊形上編輯、設定和提交遠端程序呼叫 (RPC)。使用這些 RPC,您可以在 Polygon 網絡上讀取數據和寫入交易,包括檢索數據並將交易提交到 Polygon 網絡。
下列範例顯示如何使用 eth_getBlockByNumber
RPC 取得最新區塊的相關資訊。將反白顯示的變數變更為您自己的輸入,或選擇列出的其中一種 RPC 方法,然後輸入所需的相關輸入。
在 https://console.aws.amazon.com/managedblockchain/
開啟受管理區塊鏈主控台。 選擇 RPC 編輯器。
在「請求」部分中,選擇
作為POLYGON_MAINNET
區塊鏈網絡
。選擇
作為 RPC 方法。eth_getBlockByNumber
輸入
latest
為區塊編號
,並選擇
作為完整交易旗標。False
然後,選擇「提交 RPC」。
您會在 [回應] 區段中取得區
latest
塊的結果。然後,您可以複製完整的原始交易以供進一步分析,或在應用程式的商務邏輯中使用。
如需詳細資訊,請參閱 AMB 存取多邊形支援的 RPC
透過使用 awscurl
AWS CLI
使用簽名版本 4 (SIGv4) 使用您的 IAM 使用者登入資料簽署請求,以便向 AMB 存取多邊形端點發出多邊形 JSON-RPC 要求。命awscurl
使awscurl
用適合您作業系統的方法進行安裝。在 macOS 上,建議使 HomeBrew 用以下應用程式:
brew install awscurl
如果您已安裝並設定 AWS CLI,則您的 IAM 使用者登入資料和預 AWS 區域 設值會在您的環境中設定,並可存取awscurl
。使用awscurl
,通過調用 RPC 向多邊形主網提交請求。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 訪問多邊形請求。
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 請求
您可以通過使用 HTTPS 提交簽名的請求來使用 Node.js 中的本機 https 模塊
若要執行此範例 Node.js 指令碼,請套用下列先決條件:
您的電腦上必須安裝節點版本管理員 (nvm) 和 Node.js。您可以在
這裡找到作業系統的安裝說明。 使用指
node --version
令並確認您使用的是節點版本 18 或更高版本。如果需要,您可以使用nvm install v18.12.0
命令,然後使用nvm use v18.12.0
命令來安裝節點的 LTS 版本 18 版本。環境變數
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
必須包含與您的帳戶相關聯的認證。使用下列命令將這些變數匯出為用戶端上的字串。將下列字串中的紅色值取代為 IAM 使用者帳戶中的適當值。
export AWS_ACCESS_KEY_ID="
AKIAIOSFODNN7EXAMPLE
" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
"
完成所有必要條件之後,請使用偏好的程式碼編輯器,將下列檔案複製到本機環境中的目錄中:
包裝
{ "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
用僅用於演示。請勿在生產環境中使用此代碼,因為它具有真正的資金並帶來安全風險。
如有需要,請聯絡您的帳戶團隊,以提供有關錢包和簽署者最佳做法的建議。
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)進行交互。您需要替換以紅色突出顯示的代碼中的三個變量,包括基於令牌的訪問令牌的訪問令牌,用於簽署事務的私鑰以及接收 POL 的收件人的地址。billingToken
提示
我們建議您為此創建一個新的私鑰(錢包),而不是重複使用現有錢包以消除資金損失的風險。您可以使用以太函式庫的錢包類別方法 createranDOM () 來產生要測試的錢包。此外,如果您需要從多邊形主網請求 POL,則可以使用公共 POL 水龍頭請求少量用於測試。
一旦您billingToken
有了資金錢包的私鑰,並將收件人的地址添加到代碼中,您可以運行以下代碼來簽署 .0001 POL 的交易,以從您的地址發送到另一個地址並將其廣播到使用 AMB 訪問多邊形調用
eth_sendRawTransaction
JSON-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
。這是您剛提交到區塊鏈的交易標識符。您可以在讀取交易範例中使用此屬性,以從多邊形主網取得有關此交易的其他詳細資訊。
請注意,blockNumber
和blockHash
正null
在回應中。這是因為交易尚未記錄在 Polygon 網路上的一個區塊中。請注意,這些值會在稍後定義,您可能會在下一節要求交易詳細資訊時看到這些值。
在 Node.js 中讀取交易
在本節中,您要求先前提交的交易詳細信息,並使用 AMB Access Polygon 向多邊形主網讀取請求來檢索收件人地址的 POL 餘額。在readTx.js
檔案中,取代標示
為your-transaction-id
hash
您在上一節執行程式碼時所儲存的回應中所儲存的變數。
此代碼使用一個實用程序dispatch-evm-rpc.js
,該實用程序使用 AWS SDK 中必需的簽名版本 4(Sigv4)模塊對 AMB 訪問多邊形簽名 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
響應表示交易詳細信息。請注意,blockHash
和現blockNumber
在可能已定義。這表示交易已記錄在區塊中。如果這些值仍然存在null
,請等待幾分鐘,然後再次執行程式碼以檢查您的交易是否已包含在區塊中。最後,收件者地址餘額(0x110d9316ec000)的十六進制表示使用以太網的方法轉換為十進制,該formatEther()
方法將十六進制轉換為十進制,並將小數位移動 18(10 ^ 18),以獲得 POL 中的真正平衡。
提示
雖然前面的程式碼範例說明如何使用 Node.js、乙醚和 Axios 來利用 AMB 存取多邊形上支援的 JSON RPC,但您可以修改範例,並撰寫其他程式碼,以便使用此服務在多邊形上建置您的應用程式。如需 AMB 存取多邊形上受支援 JSON RPC 的完整清單,請參閱。受管理的區塊鏈 API 和支持 AMB 訪問多邊形的 JSON-RPC