Introducción a Amazon Managed Blockchain (AMB) Access Polygon - Polígono de acceso AMB

Amazon Managed Blockchain (AMB) Access Polygon se encuentra en versión preliminar y está sujeto a cambios.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Introducción a Amazon Managed Blockchain (AMB) Access Polygon

Comience a utilizar Amazon Managed Blockchain (AMB) Access Polygon con la información y los procedimientos de esta sección.

Cree una política de IAM para acceder a la red de cadenas de bloques de Polygon

Para acceder al punto final público de la red principal de Polygon y realizar llamadas JSON-RPC, debe tener credenciales de usuario (AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY) los permisos de IAM adecuados para Amazon Managed Blockchain (AMB) Access Polygon. En una terminal con el terminal AWS CLI instalado, ejecute el siguiente comando para crear una política de IAM que permita acceder a los dos puntos finales de 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

El ejemplo anterior le da acceso a todas las redes de Polygon disponibles. Para acceder a un punto final específico, utilice el siguiente Action comando:

  • "managedblockchain:InvokeRpcPolygonMainnet"

Después de crear la política, asocie esa política a la función de su usuario de IAM para que entre en vigor. En el AWS Management Console, navegue hasta el servicio de IAM y asocie la política AmazonManagedBlockchainPolygonAccess a la función asignada a su usuario de IAM.

Realice solicitudes de llamadas a procedimientos remotos (RPC) de Polygon en el editor RPC de AMB Access mediante el AWS Management Console

Puede editar, configurar y enviar llamadas a procedimientos remotos (RPC) en el polígono de acceso AMB que AWS Management Console utilice. Con estos RPC, puede leer datos y escribir transacciones en la red Polygon, incluida la recuperación de datos y el envío de transacciones a la red Polygon.

El siguiente ejemplo muestra cómo obtener información sobre el último bloque mediante el RPC. eth_getBlockByNumber Cambie las variables resaltadas por sus propias entradas o elija uno de los métodos de RPC de la lista e introduzca las entradas pertinentes necesarias.

  1. Abre la consola de Managed Blockchain en https://console.aws.amazon.com/managedblockchain/.

  2. Elija el editor RPC.

  3. En la sección de solicitudes, elige POLYGON_MAINNET como Blockchain Network.

  4. Elija eth_getBlockByNumber como método RPC.

  5. latestIntrodúzcalo como número de bloque y False selecciónelo como indicador de transacción completa.

  6. A continuación, selecciona Enviar RPC.

  7. Los resultados del latest bloqueo se muestran en la sección de respuestas. A continuación, puede copiar todas las transacciones sin procesar para analizarlas más a fondo o utilizarlas en la lógica empresarial de sus aplicaciones.

Para obtener más información, consulte los RPC compatibles con AMB Access Polygon

Realice solicitudes JSON-RPC de AMB Access Polygon mediante awscurlAWS CLI

Firme las solicitudes con sus credenciales de usuario de IAM mediante la versión 4 de Signature (SiGv4) para realizar solicitudes JSON-RPC de Polygon a los puntos finales de AMB Access Polygon. La herramienta de línea de awscurlcomandos puede ayudarle a firmar las solicitudes de servicios mediante SiGv4. AWS Para obtener más información, consulta el archivo README.md de awscurl.

Realice la instalación awscurl mediante el método apropiado para su sistema operativo. En macOS, la aplicación recomendada HomeBrew es:

brew install awscurl

Si ya la ha instalado y configurado AWS CLI, sus credenciales de usuario de IAM y las predeterminadas Región de AWS están configuradas en su entorno y a awscurl las que tiene acceso. Para elloawscurl, envíe una solicitud a la red principal de Polygon invocando el RPC. eth_getBlockByNumber Esta llamada acepta un parámetro de cadena correspondiente al número de bloque del que desea recuperar información.

El siguiente comando recupera los datos del bloque de la red principal de Polygon utilizando el número de bloque de la params matriz para seleccionar el bloque específico del que se van a recuperar los encabezados.

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
sugerencia

También puede realizar esta misma solicitud utilizando curl la función de acceso basado en el token de AMB Access mediante el uso de tokens. Accessor Para obtener más información, consulte Creación y administración de tokens de acceso para el acceso basado en tokens para realizar solicitudes de 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 respuesta de cualquiera de los comandos devuelve información sobre el último bloque. Consulte el siguiente ejemplo con fines ilustrativos:

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

Realice solicitudes JSON-RPC de Polygon en Node.js

Puede invocar el JSON-RPCS de Polygon enviando solicitudes firmadas mediante HTTPS para acceder a la red principal de Polygon mediante el módulo https nativo de Node.js, o puede utilizar una biblioteca de terceros, como AXIOS. Los siguientes ejemplos de Node.js muestran cómo realizar solicitudes JSON-RPC de Polygon al punto final de AMB Access Polygon mediante la versión 4 de Signature (SiGv4) y el acceso basado en tokens. El primer ejemplo envía una transacción de una dirección a otra y el siguiente solicita los detalles de la transacción y la información del saldo de la cadena de bloques.

Para ejecutar este script Node.js de ejemplo, aplique los siguientes requisitos previos:

  1. Debe tener el administrador de versiones de nodos (nvm) y Node.js instalados en el equipo. Puede encontrar las instrucciones de instalación de su sistema operativo aquí.

  2. Utilice el node --version comando y confirme que está utilizando la versión 18 o superior de Node. Si es necesario, puede usar el nvm install v18.12.0 comando, seguido del nvm use v18.12.0 comando, para instalar la versión 18, la versión LTS de Node.

  3. Las variables AWS_ACCESS_KEY_ID de entorno AWS_SECRET_ACCESS_KEY deben contener las credenciales asociadas a su cuenta.

    Exporte estas variables como cadenas en su cliente mediante los siguientes comandos. Sustituya los valores en rojo de las siguientes cadenas por los valores adecuados de su cuenta de usuario de IAM.

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

Tras completar todos los requisitos previos, copie los siguientes archivos en un directorio de su entorno local mediante el editor de código que prefiera:

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

aviso

El siguiente código utiliza una clave privada codificada para generar una cartera que Signer utilice únicamente con Ethers.js fines de demostración. No utilice este código en entornos de producción, ya que tiene fondos reales y supone un riesgo para la seguridad.

Si es necesario, ponte en contacto con tu equipo de cuentas para que te asesoren sobre las mejores prácticas de Wallet y 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 vez guardados estos archivos en su directorio, instale las dependencias necesarias para ejecutar el código mediante el siguiente comando:

npm install

Envíe una transacción en Node.js

El ejemplo anterior envía el token nativo de Polygon Mainnet (POL) de una dirección a otra mediante la firma de una transacción y su transmisión a la red principal de Polygon mediante AMB Access Polygon. Para ello, utilice el sendTx.js script, que utiliza una biblioteca popular para interactuar con Ethereum y cadenas de bloques compatibles con EthereumEthers.js, como Polygon. Debes reemplazar las tres variables del código resaltadas en rojo: la del token de acceso billingToken para el acceso basado en un token, la clave privada con la que firmas la transacción y la dirección del destinatario que recibe la POL.

sugerencia

Le recomendamos que cree una clave privada (cartera) nueva para este fin en lugar de reutilizar una cartera existente para eliminar el riesgo de perder fondos. Puedes usar el método createRandom () de la clase Wallet de la biblioteca Ethers para generar una cartera con la que realizar pruebas. Además, si necesitas solicitar POL desde la red principal de Polygon, puedes usar el recurso POL público para solicitar una pequeña cantidad para utilizarla en las pruebas.

Una vez que hayas añadido tu clave privada billingToken, la de una cartera financiada y la dirección del destinatario al código, ejecutas el siguiente código para firmar una transacción para que .0001 POL se envíe de tu dirección a otra y la transmites a Polygon Mainnet invocando el eth_sendRawTransaction JSON-RPC mediante el polígono de acceso AMB.

node sendTx.js

La respuesta recibida es similar a la siguiente:

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 respuesta constituye el recibo de la transacción. Guarde el valor de la propiedadhash. Este es el identificador de la transacción que acabas de enviar a la cadena de bloques. Utiliza esta propiedad en el ejemplo de transacción de lectura para obtener detalles adicionales sobre esta transacción desde la red principal de Polygon.

Tenga en cuenta que las blockNumber y blockHash están null en la respuesta. Esto se debe a que la transacción aún no se ha registrado en un bloque de la red Polygon. Tenga en cuenta que estos valores se definen más adelante y es posible que los vea cuando solicite los detalles de la transacción en la siguiente sección.

Lee una transacción en Node.js

En esta sección, solicita los detalles de la transacción enviada anteriormente y recupera el saldo de POL de la dirección del destinatario mediante solicitudes de lectura a la red principal de Polygon mediante AMB Access Polygon. En el readTx.js archivo, sustituya la variable your-transaction-idetiquetada por la hash que guardó de la respuesta al ejecutar el código de la sección anterior.

Este código utiliza una utilidad que firma las solicitudes HTTPS a AMB Access Polygon con los módulos Sigv4 (SigV4) necesarios del AWS SDK y envía las solicitudes mediante el cliente HTTP AXIOS, muy utilizado. dispatch-evm-rpc.js

La respuesta recibida es similar a la siguiente:

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 respuesta representa los detalles de la transacción. Tenga en cuenta que es probable que blockNumber los blockHash y ahora estén definidos. Esto indica que la transacción se ha registrado en un bloque. Si estos valores se mantienennull, espere unos minutos y vuelva a ejecutar el código para comprobar si la transacción se ha incluido en un bloque. Por último, la representación hexadecimal del saldo de direcciones del destinatario (0x110d9316ec000) se convierte a decimal mediante el formatEther() método de Ethers, que convierte el hexadecimal en decimal y desplaza los decimales en 18 (10^18) para obtener el saldo real en POL.

sugerencia

Si bien los ejemplos de código anteriores ilustran cómo usar Node.js, Ethers y Axios para utilizar algunos de los JSON-RPC compatibles en AMB Access Polygon, puede modificar los ejemplos y escribir otro código para crear sus aplicaciones en Polygon mediante este servicio. Para obtener una lista completa de los JSON-RPC compatibles con AMB Access Polygon, consulte. La API de cadena de bloques gestionada y los JSON-RPC son compatibles con AMB Access Polygon