Guida introduttiva ad Amazon Managed Blockchain (AMB) Access Polygon - Poligono di accesso AMB

Amazon Managed Blockchain (AMB) Access Polygon è in versione di anteprima ed è soggetto a modifiche.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Guida introduttiva ad Amazon Managed Blockchain (AMB) Access Polygon

Inizia a usare Amazon Managed Blockchain (AMB) Access Polygon utilizzando le informazioni e le procedure in questa sezione.

Crea una policy IAM per accedere alla rete blockchain Polygon

Per accedere all'endpoint pubblico della rete principale Polygon per effettuare chiamate JSON-RPC, devi disporre di credenziali utente (AWS_ACCESS_KEY_IDeAWS_SECRET_ACCESS_KEY) che disponga delle autorizzazioni IAM appropriate per Amazon Managed Blockchain (AMB) Access Polygon. In un terminale su cui è AWS CLI installato, esegui il comando seguente per creare una policy IAM per accedere a entrambi gli endpoint 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
Nota

L'esempio precedente ti dà accesso a tutte le reti Polygon disponibili. Per accedere a un endpoint specifico, utilizzate il seguente comando: Action

  • "managedblockchain:InvokeRpcPolygonMainnet"

Dopo aver creato la policy, associala al ruolo del tuo utente IAM affinché abbia effetto. Nella AWS Management Console, accedi al servizio IAM e collega la policy AmazonManagedBlockchainPolygonAccess al ruolo assegnato al tuo utente IAM.

Effettua richieste di chiamata di procedura remota (RPC) Polygon sull'editor RPC di AMB Access utilizzando il AWS Management Console

È possibile modificare, configurare e inviare chiamate di procedura remota (RPC) utilizzando AMB Access Polygon. AWS Management Console Con questi RPC, puoi leggere dati e scrivere transazioni sulla rete Polygon, incluso il recupero dei dati e l'invio di transazioni alla rete Polygon.

L'esempio seguente mostra come ottenere informazioni sull'ultimo blocco utilizzando RPC. eth_getBlockByNumber Modifica le variabili evidenziate con i tuoi input o scegli uno dei metodi RPC elencati e inserisci gli input pertinenti richiesti.

  1. Apri la console Managed Blockchain all'indirizzo https://console.aws.amazon.com/managedblockchain/.

  2. Scegli l'editor RPC.

  3. Nella sezione Richiesta, scegli POLYGON_MAINNET come rete Blockchain.

  4. Scegli eth_getBlockByNumber come metodo RPC.

  5. Inserisci latest come numero di blocco e scegli False come flag Transazione completa.

  6. Quindi, scegli Invia RPC.

  7. Puoi visualizzare i risultati del latest blocco nella sezione Risposta. È quindi possibile copiare le transazioni non elaborate complete per ulteriori analisi o utilizzarle nella logica aziendale delle applicazioni.

Per ulteriori informazioni, consulta gli RPC supportati da AMB Access Polygon

Effettua richieste JSON-RPC per AMB Access Polygon utilizzando il awscurlAWS CLI

Firma le richieste con le tue credenziali utente IAM utilizzando Signature Version 4 (SigV4) per effettuare richieste Polygon JSON-RPC agli endpoint AMB Access Polygon. Lo awscurlstrumento da riga di comando può aiutarti a firmare le richieste ai servizi che utilizzano SigV4. AWS Per ulteriori informazioni, consulta awscurl README.md.

Installa awscurl utilizzando il metodo appropriato per il tuo sistema operativo. Su macOS, HomeBrew è l'applicazione consigliata:

brew install awscurl

Se hai già installato e configurato AWS CLI, le tue credenziali utente IAM e quelle predefinite Regione AWS sono impostate nel tuo ambiente e hai accesso a. awscurl Utilizzandoawscurl, invia una richiesta alla rete principale Polygon richiamando l'RPC. eth_getBlockByNumber Questa chiamata accetta un parametro di stringa corrispondente al numero di blocco per il quale si desidera recuperare le informazioni.

Il comando seguente recupera i dati del blocco dalla rete principale Polygon utilizzando il numero di blocco nell'paramsarray per selezionare il blocco specifico per il quale recuperare le intestazioni.

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
Suggerimento

È inoltre possibile effettuare la stessa richiesta utilizzando la funzionalità di accesso basata su token AMB Access utilizzando curl i token. Accessor Per ulteriori informazioni, consulta Creazione e gestione di token Accessor per l'accesso basato su token per effettuare richieste AMB Access Polygon.

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'

La risposta di entrambi i comandi restituisce informazioni sul blocco più recente. Vedi l'esempio seguente a scopo illustrativo:

{"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":[]}}

Effettua richieste Polygon JSON-RPC in Node.js

È possibile richiamare Polygon JSON-RPC inviando richieste firmate utilizzando HTTPS per accedere alla rete Polygon Mainnet utilizzando il modulo https nativo in Node.js oppure è possibile utilizzare una libreria di terze parti come AXIOS. I seguenti esempi di Node.js mostrano come effettuare richieste Polygon JSON-RPC all'endpoint AMB Access Polygon utilizzando sia l'accesso Signature Version 4 (SigV4) che quello basato su token. Il primo esempio invia una transazione da un indirizzo a un altro e il seguente esempio richiede i dettagli della transazione e le informazioni sul saldo dalla blockchain.

Per eseguire questo script Node.js di esempio, applica i seguenti prerequisiti:

  1. È necessario che nel computer siano installati node version manager (nvm) e Node.js. Puoi trovare le istruzioni di installazione per il tuo sistema operativo qui.

  2. Usa il node --version comando e conferma che stai usando la versione 18 o successiva di Node. Se necessario, puoi usare il nvm install v18.12.0 comando, seguito dal nvm use v18.12.0 comando, per installare la versione 18, la versione LTS di Node.

  3. Le variabili AWS_ACCESS_KEY_ID di ambiente AWS_SECRET_ACCESS_KEY devono contenere le credenziali associate al tuo account.

    Esporta queste variabili come stringhe sul tuo client utilizzando i seguenti comandi. Sostituisci i valori in rosso nelle stringhe seguenti con i valori appropriati del tuo account utente IAM.

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

Dopo aver completato tutti i prerequisiti, copia i seguenti file in una directory del tuo ambiente locale utilizzando il tuo editor di codice preferito:

pacchetto.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

avvertimento

Il codice seguente utilizza una chiave privata codificata per generare un portafoglio utilizzato da Signer solo a Ethers.js scopo dimostrativo. Non utilizzate questo codice in ambienti di produzione, poiché contiene fondi reali e rappresenta un rischio per la sicurezza.

Se necessario, contatta il team del tuo account per ricevere consigli sulle best practice relative a wallet e 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");

Una volta salvati questi file nella directory, installa le dipendenze necessarie per eseguire il codice utilizzando il seguente comando:

npm install

Inviare una transazione in Node.js

L'esempio precedente invia il token Polygon Mainnet (POL) nativo da un indirizzo all'altro firmando una transazione e trasmettendola alla rete principale Polygon utilizzando AMB Access Polygon. Per fare ciò, usa lo sendTx.js script, che utilizza una libreria popolare per interagire con Ethereum e blockchain compatibili con Ethereum come Ethers.js Polygon. È necessario sostituire tre variabili nel codice evidenziate in rosso, tra cui il token Accessor billingToken per l'accesso basato su token, la chiave privata con cui si firma la transazione e l'indirizzo del destinatario che riceve il POL.

Suggerimento

Ti consigliamo di creare una nuova chiave privata (portafoglio) per questo scopo anziché riutilizzare un portafoglio esistente per eliminare il rischio di perdere fondi. Puoi utilizzare il metodo della classe Wallet createRandom () della libreria Ethers per generare un portafoglio con cui testare. Inoltre, se è necessario richiedere POL dalla rete principale Polygon, è possibile utilizzare il faucet POL pubblico per richiederne una piccola quantità da utilizzare per i test.

Dopo aver aggiunto al codice la billingToken chiave privata di un wallet finanziato e l'indirizzo del destinatario, esegui il seguente codice per firmare una transazione per inviare .0001 POL dal tuo indirizzo a un altro e trasmetterla a Polygon Mainnet richiamando il eth_sendRawTransaction JSON-RPC utilizzando AMB Access Polygon.

node sendTx.js

La risposta ricevuta è simile alla seguente:

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: [] }

La risposta costituisce la ricevuta della transazione. Salva il valore della proprietàhash. Questo è l'identificatore della transazione che hai appena inviato alla blockchain. Si utilizza questa proprietà nell'esempio di transazione di lettura per ottenere ulteriori dettagli su questa transazione dalla rete principale Polygon.

Nota che i blockNumber e blockHash sono null nella risposta. Questo perché la transazione non è stata ancora registrata in un blocco sulla rete Polygon. Tieni presente che questi valori vengono definiti in seguito e potresti vederli quando richiedi i dettagli della transazione nella sezione seguente.

Leggete una transazione in Node.js

In questa sezione, richiedi i dettagli della transazione per la transazione inviata in precedenza e recuperi il saldo POL per l'indirizzo del destinatario utilizzando le richieste di lettura alla rete principale Polygon utilizzando AMB Access Polygon. Nel readTx.js file, sostituisci la variabile etichettata your-transaction-idcon quella salvata dalla risposta durante l'hashesecuzione del codice nella sezione precedente.

Questo codice utilizza un'utilità che firma le richieste HTTPS ad AMB Access Polygon con i moduli Signature Version 4 (SigV4) richiesti dall' AWS SDK e invia le richieste utilizzando il client HTTP ampiamente utilizzato, AXIOS. dispatch-evm-rpc.js

La risposta ricevuta è simile alla seguente:

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

La risposta rappresenta i dettagli della transazione. Nota che ora blockNumber sono probabilmente definiti gli blockHash e. Ciò indica che la transazione è stata registrata in un blocco. Se questi valori sono fissinull, attendi qualche minuto, quindi esegui nuovamente il codice per verificare se la transazione è stata inclusa in un blocco. Infine, la rappresentazione esadecimale del saldo dell'indirizzo del destinatario (0x110d9316ec000) viene convertita in decimale utilizzando il formatEther() metodo di Ethers, che converte l'esadecimale in decimale e sposta le posizioni decimali di 18 (10^18) per fornire il vero equilibrio in POL.

Suggerimento

Sebbene gli esempi di codice precedenti illustrino come utilizzare Node.js, Ethers e Axios per utilizzare alcuni dei JSON-RPC supportati su AMB Access Polygon, puoi modificare gli esempi e scrivere altro codice per creare le tue applicazioni su Polygon utilizzando questo servizio. Per un elenco completo dei JSON-RPC supportati su AMB Access Polygon, consulta. API Blockchain gestita e JSON-RPC supportati con AMB Access Polygon