

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.

# Primeros pasos con Amazon Managed Blockchain (AMB) Access Bitcoin
<a name="getting-started"></a>

Utilice los step-by-step tutoriales de esta sección para aprender a realizar tareas con Amazon Managed Blockchain (AMB) Access Bitcoin. Estos ejemplos requieren que complete algunos requisitos previos. Si es la primera vez que utiliza AMB Access Bitcoin, consulte la sección de *configuración* de esta guía para asegurarse de que ha completado esos requisitos previos. Para obtener más información, consulte [Configuración de Amazon Managed Blockchain (AMB) Access Bitcoin](bitcoin-setting-up.md).

**Topics**
+ [Cree una política de IAM para acceder a Bitcoin JSON- RPCs](#getting-started-next-steps)
+ [Realice solicitudes de llamadas a procedimientos remotos (RPC) de Bitcoin en el editor RPC de AMB Access mediante el Consola de administración de AWS](#gs-console-bitcoin)
+ [Realice solicitudes JSON-RPC de AMB Access Bitcoin en awscurl mediante el AWS CLI](#awscurl-bitcoin-rpc-requests)
+ [Realice solicitudes JSON-RPC de Bitcoin en Node.js](#nodejs-bitcoin-rpc-requests)
+ [Utilice AMB Access Bitcoin en lugar de AWS PrivateLink](#bitcoin-rpc-requests-privatelink)

## Cree una política de IAM para acceder a Bitcoin JSON- RPCs
<a name="getting-started-next-steps"></a>

Para acceder a los puntos finales públicos de la red principal y la red de pruebas de Bitcoin para realizar llamadas JSON-RPC, debe tener credenciales de usuario (AWS\$1ACCESS\$1KEY\$1ID y AWS\$1SECRET \$1ACCESS\$1KEY) que tengan los permisos de IAM adecuados para Amazon Managed Blockchain (AMB) Access Bitcoin. En una terminal con los terminales AWS CLI instalados, ejecute el siguiente comando para crear una política de IAM que permita acceder a los dos puntos de conexión de Bitcoin: 

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

**nota**  
El ejemplo anterior te da acceso tanto a la red principal como a la red de pruebas de Bitcoin. Para acceder a un punto final específico, usa el siguiente comando: `Action`   
`"managedblockchain:InvokeRpcBitcoinMainnet"`
`"managedblockchain:InvokeRpcBitcoinTestnet"`

Después de crear la política, adjúntela al rol de su usuario de IAM para que entre en vigor. En el Consola de administración de AWS, navegue hasta el servicio de IAM y asocie la política `AmazonManagedBlockchainBitcoinAccess` al rol asignado a su usuario de IAM. Para obtener más información, consulte [Crear un rol y asignarlo a un](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) usuario de IAM.

## Realice solicitudes de llamadas a procedimientos remotos (RPC) de Bitcoin en el editor RPC de AMB Access mediante el Consola de administración de AWS
<a name="gs-console-bitcoin"></a>

Puede editar y enviar llamadas a procedimientos remotos (RPCs) Consola de administración de AWS utilizando AMB Access. Con ellos RPCs, puede leer datos, escribir y enviar transacciones en la red Bitcoin.

**Example**  
El siguiente ejemplo muestra cómo obtener información sobre el *`blockhash`00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09* mediante RPC. `getBlock` **Sustituya las variables resaltadas por sus propias entradas o elija uno de los otros 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/](https://console.aws.amazon.com/managedblockchain/).

1. Elija el **editor RPC**.

1. En la sección de **solicitudes**, elige `BITCOIN_MAINNET` como **Blockchain Network**. 

1. Elija `getblock` como **método RPC**. 

1. Introduzca `00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09` como **número de bloque** y elija `0` como **verbosidad**. 

1. Luego, selecciona **Enviar** RPC.

1. Obtendrá los resultados en la sección de **respuestas** de esta página. 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 la página [RPCs compatible con AMB Access Bitcoin](https://docs.aws.amazon.com/managed-blockchain/latest/ambbtc-dg/bitcoin-api.html)

## Realice solicitudes JSON-RPC de AMB Access Bitcoin en awscurl mediante el AWS CLI
<a name="awscurl-bitcoin-rpc-requests"></a>

**Example**  
Firme las solicitudes con sus credenciales de usuario de IAM mediante la [versión 4 de Signature (SiGv4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) para realizar llamadas de Bitcoin JSON-RPC a los puntos finales de AMB Access Bitcoin. La herramienta de línea de comandos [awscurl puede ayudarle](https://github.com/okigan/awscurl) a firmar las solicitudes de servicios mediante SiGv4. AWS [Para obtener más información, consulte el archivo README.md de awscurl.](https://github.com/okigan/awscurl#readme)  
Instale awscurl mediante el método apropiado para su sistema operativo. En macOS, la aplicación recomendada HomeBrew es:  

```
brew install awscurl
```
Si ya ha instalado y configurado la AWS CLI, sus credenciales de usuario de IAM y la región de AWS predeterminada se configuran en su entorno y tienen acceso a awscurl. *Con awscurl, envíe una solicitud tanto a la red principal de Bitcoin como a la *red* de prueba invocando el RPC.* `getblock` Esta llamada acepta un parámetro de cadena correspondiente al hash del bloque del que desea recuperar información.   
El siguiente comando recupera los datos del encabezado del bloque de la red principal de Bitcoin utilizando el hash de bloque de la `params` matriz para seleccionar el bloque específico del que se van a recuperar los encabezados. En este ejemplo se utiliza el punto final. `us-east-1` Puede sustituirlo por el JSON-RPC y la AWS región de Bitcoin que prefiera y que sea compatible con Amazon Managed Blockchain (AMB) Access Bitcoin. Además, puede realizar una solicitud en la red Testnet, en lugar de en la red principal, sustituyéndola por en el comando. `mainnet` `testnet `  

```
awscurl -X POST -d '{ "jsonrpc": "1.0", "id": "getblockheader-curltest", "method": "getblockheader", "params": ["0000000000000000000105bebab2f9dd16234a30950d38ec6ddc24d466e750a0"] }' --service managedblockchain https://mainnet.bitcoin.managedblockchain.us-east-1.amazonaws.com  --region us-east-1 -k
```
Los resultados incluyen detalles de las cabeceras de los bloques y una lista de los hashes de transacciones incluidos en el bloque solicitado. Vea el siguiente ejemplo:   

```
{"result":{"hash":"0000000000000000000105bebab2f9dd16234a30950d38ec6ddc24d466e750a0",
      "confirmations":2,"height":799243,"version":664485888,"versionHex":"279b4000",
      "merkleroot":"568e79752e1921ecf40c961435abb41bc5700fe2833ecadc4abfc2f615ddc1b8",
      "time":1689684290,"mediantime":1689681317,"nonce":2091174943,"bits":"17053894",
      "difficulty":53911173001054.59,
      "chainwork":"00000000000000000000000000000000000000004f375cf72ff64e2404c1589c",
      "nTx":2135,
      "previousblockhash":"00000000000000000002ffe4efe07ae74ec8b92c7696f5e12b5da506f015ba6b",
      "nextblockhash":"000000000000000000038f05ddcf3f483fdcb74f4be606c022bcb673424fa4ca"},
      "error":null,"id":"curltest"}
```

## Realice solicitudes JSON-RPC de Bitcoin en Node.js
<a name="nodejs-bitcoin-rpc-requests"></a>

[Puede enviar solicitudes firmadas mediante HTTPS para acceder a los puntos finales de Bitcoin *Mainnet* y *Testnet* y realizar llamadas a la API JSON-RPC mediante el [módulo https nativo de Node.js, o puede utilizar una biblioteca](https://nodejs.org/api/https.html) de terceros, como AXIOS.](https://axios-http.com) El siguiente ejemplo muestra cómo realizar una solicitud JSON-RPC de Bitcoin a los puntos finales de AMB Access Bitcoin.

**Example**  
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í.](https://github.com/nvm-sh/nvm)

1. Utilice el `node --version` comando y confirme que está utilizando la *versión 14 o superior de Node*. Si es necesario, puede usar el `nvm install 14` comando, seguido del `nvm use 14` comando, para instalar la *versión 14*.

1. Las variables `AWS_ACCESS_KEY_ID` de entorno `AWS_SECRET_ACCESS_KEY` deben contener las credenciales asociadas a su cuenta. Las variables de entorno `AMB_HTTP_ENDPOINT` deben contener sus puntos finales de AMB Access Bitcoin. 

   Exporte estas variables como cadenas en su cliente mediante los siguientes comandos. Sustituya los valores resaltados en 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"
   ```
Una vez que haya completado todos los requisitos previos, copie el siguiente `package.json` archivo y `index.js` script en su entorno local mediante su editor:  
*package.json*  

```
{
  "name": "bitcoin-rpc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-crypto/sha256-js": "^4.0.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.4.0"
  }
}
```
*index.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 () => {

  // create a remote procedure call (RPC) request object definig the method, input params
  let rpc = {
    jsonrpc: "1.0", 
    id: "1001", 
    method: 'getblock', 
    params: ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"]
  }
  
  //bitcoin endpoint
  let bitcoinURL = 'https://mainnet.bitcoin.managedblockchain.us-east-1.amazonaws.com/';
  
  // parse the URL into its component parts (e.g. host, path)
  const url = new URL(bitcoinURL);
  
  // 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: bitcoinURL, data: req.body})

    console.log(response.data)
  } catch (error) {
    console.error('Something went wrong: ', error)
    throw error
  } 

 
}

rpcRequest();
```
El código de ejemplo anterior utiliza Axios para realizar solicitudes de RPC al punto final de Bitcoin y las firma con los encabezados correspondientes de la versión 4 de firma (SiGv4) mediante las herramientas oficiales AWS del SDK v3. Para ejecutar el código, abre un terminal en el mismo directorio que tus archivos y ejecuta lo siguiente:   

```
npm i
node index.js
```
El resultado que se genere será similar al siguiente:  

```
{"hash":"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09","
    confirmations":784126,"height":1000, "version":1,"versionHex":"00000001",
    "merkleroot":"fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33",
    "time":1232346882,
    "mediantime":1232344831,"nonce":2595206198,"bits":"1d00ffff","difficulty":1,
    "chainwork":"000000000000000000000000000000000000000000000000000003e903e903e9",
    "nTx":1,
    "previousblockhash":"0000000008e647742775a230787d66fdf92c46a48c896bfbc85cdc8acc67e87d",
    "nextblockhash":"00000000a2887344f8db859e372e7e4bc26b23b9de340f725afbf2edb265b4c6",
    "strippedsize":216,"size":216,"weight":864,
    "tx":["fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33"]},
    "error":null,"id":"1001"}
```
La solicitud de ejemplo del script anterior realiza la `getblock` llamada con el mismo hash de bloque de parámetros de entrada que en el [Realice solicitudes JSON-RPC de AMB Access Bitcoin en awscurl mediante el AWS CLI](#awscurl-bitcoin-rpc-requests) ejemplo. Para realizar otras llamadas, modifique el `rpc` objeto del script con un JSON-RPC de Bitcoin diferente. Puedes cambiar la opción de propiedad anfitriona a Bitcoin `testnet` para realizar llamadas en ese punto final. 

## Utilice AMB Access Bitcoin en lugar de AWS PrivateLink
<a name="bitcoin-rpc-requests-privatelink"></a>

AWS PrivateLink es una tecnología escalable y de alta disponibilidad que puede utilizar para conectar su VPC a los servicios de forma privada como si estuvieran en su VPC. No tiene que usar una puerta de enlace a Internet, un dispositivo NAT, una dirección IP pública, una conexión AWS Direct Connect o una conexión VPN AWS Site-to-Site para comunicarse con el servicio desde sus subredes privadas. [Para obtener más información AWS PrivateLink o para configurarlo AWS PrivateLink, consulte ¿Qué es? AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)

Puede enviar solicitudes JSON-RPC de Bitcoin a AMB Access Bitcoin AWS PrivateLink mediante un punto final de VPC. *Las solicitudes a este punto final privado no se transmiten a través de Internet abierto, por lo que puedes enviar solicitudes directamente a los puntos finales de Bitcoin mediante la misma autenticación SigV4.* Para obtener más información, consulta [Acceder a los AWS servicios a través de](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html). AWS PrivateLink

Para el *nombre del servicio*, busca *Amazon Managed Blockchain* en la columna del *AWS servicio*. Para obtener más información, consulte [AWS los servicios que se integran con AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html). El nombre del servicio del punto final tendrá el siguiente formato:`com.amazonaws.AWS-REGION.managedblockchain.bitcoin.NETWORK-TYPE`. 

 Por ejemplo: `com.amazonaws.us-east-1.managedblockchain.bitcoin.testnet`. 