

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Introdução ao Amazon Managed Blockchain (AMB) Acesse Bitcoin
<a name="getting-started"></a>

Use os step-by-step tutoriais desta seção para aprender a realizar tarefas usando o Amazon Managed Blockchain (AMB) Access Bitcoin. Esses exemplos exigem que você preencha alguns pré-requisitos. Se você é novo no AMB Access Bitcoin, revise a seção de *configuração* deste guia para verificar se você cumpriu esses pré-requisitos. Para obter mais informações, consulte [Configurando o Amazon Managed Blockchain (AMB) Acesse Bitcoin](bitcoin-setting-up.md).

**Topics**
+ [Crie uma política do IAM para acessar Bitcoin JSON- RPCs](#getting-started-next-steps)
+ [Faça solicitações de chamada de procedimento remoto (RPC) do Bitcoin no editor RPC do AMB Access usando o Console de gerenciamento da AWS](#gs-console-bitcoin)
+ [Faça solicitações AMB Access Bitcoin JSON-RPC em awscurl usando o AWS CLI](#awscurl-bitcoin-rpc-requests)
+ [Faça solicitações Bitcoin JSON-RPC em Node.js](#nodejs-bitcoin-rpc-requests)
+ [Use o AMB Access Bitcoin em AWS PrivateLink](#bitcoin-rpc-requests-privatelink)

## Crie uma política do IAM para acessar Bitcoin JSON- RPCs
<a name="getting-started-next-steps"></a>

Para acessar os endpoints públicos da Bitcoin Mainnet e da Testnet para fazer chamadas JSON-RPC, você deve ter credenciais de usuário (AWS\$1ACCESS\$1KEY\$1ID e AWS\$1SECRET \$1ACCESS\$1KEY) que tenham as permissões apropriadas do IAM para o Amazon Managed Blockchain (AMB) acessar o Bitcoin. Em um terminal com o AWS CLI instalado, execute o seguinte comando para criar uma política do IAM para acessar os dois endpoints 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**  
O exemplo anterior fornece acesso ao Bitcoin Mainnet e ao Testnet. Para obter acesso a um endpoint específico, use o seguinte `Action` comando:   
`"managedblockchain:InvokeRpcBitcoinMainnet"`
`"managedblockchain:InvokeRpcBitcoinTestnet"`

Depois de criar a política, anexe essa política à função do usuário do IAM para que ela entre em vigor. No Console de gerenciamento da AWS, navegue até o serviço do IAM e anexe a política `AmazonManagedBlockchainBitcoinAccess` à função atribuída ao seu usuário do IAM. Para obter mais informações, consulte [Como criar uma função e atribuir a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).

## Faça solicitações de chamada de procedimento remoto (RPC) do Bitcoin no editor RPC do AMB Access usando o Console de gerenciamento da AWS
<a name="gs-console-bitcoin"></a>

Você pode editar e enviar chamadas de procedimento remoto (RPCs) Console de gerenciamento da AWS usando o AMB Access. Com eles RPCs, você pode ler dados, gravar e enviar transações na rede Bitcoin.

**Example**  
O exemplo a seguir mostra como obter informações sobre o *00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09 usando `blockhash` RPC*. `getBlock` Substitua as variáveis destacadas por suas próprias entradas ou escolha um dos outros **métodos RPC** listados e insira as entradas relevantes necessárias.  

1. Abra o console do Managed Blockchain em [https://console.aws.amazon.com/managedblockchain/](https://console.aws.amazon.com/managedblockchain/).

1. Escolha o **editor RPC**.

1. Na seção **Solicitação**, escolha `BITCOIN_MAINNET` como **Rede Blockchain**. 

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

1. Insira `00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09` como o **número do bloco** e escolha `0` como a **verbosidade**. 

1. Em seguida, escolha **Enviar RPC**.

1. Você obterá resultados na seção **Resposta** desta página. Em seguida, você pode copiar todas as transações brutas para análise posterior ou para usar na lógica de negócios de seus aplicativos.

Para obter mais informações, consulte o [RPCs suporte do AMB Access Bitcoin](https://docs.aws.amazon.com/managed-blockchain/latest/ambbtc-dg/bitcoin-api.html)

## Faça solicitações AMB Access Bitcoin JSON-RPC em awscurl usando o AWS CLI
<a name="awscurl-bitcoin-rpc-requests"></a>

**Example**  
Assine solicitações com suas credenciais de usuário do IAM usando o [Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) para fazer chamadas Bitcoin JSON-RPC para os endpoints Bitcoin do AMB Access. A ferramenta de linha de comando [awscurl](https://github.com/okigan/awscurl) pode ajudá-lo a assinar solicitações de AWS serviços usando o SigV4. Para obter mais informações, consulte o [awscurl](https://github.com/okigan/awscurl#readme) README.md.  
Instale o awscurl usando o método apropriado ao seu sistema operacional. No macOS, HomeBrew é o aplicativo recomendado:  

```
brew install awscurl
```
Se você já instalou e configurou a AWS CLI, suas credenciais de usuário do IAM e a região padrão da AWS estão definidas em seu ambiente e têm acesso ao awscurl. Usando awscurl, envie uma solicitação para a *rede principal do Bitcoin e para a *Testnet* invocando* a RPC. `getblock` Essa chamada aceita um parâmetro de string correspondente ao hash do bloco para o qual você deseja recuperar informações.   
O comando a seguir recupera os dados do cabeçalho do bloco da rede principal do Bitcoin usando o hash do bloco na `params` matriz para selecionar o bloco específico para o qual recuperar os cabeçalhos. Este exemplo usa o `us-east-1` endpoint. Você pode substituí-lo por seu Bitcoin JSON-RPC e sua AWS região preferidos, que são suportados pelo Amazon Managed Blockchain (AMB) Access Bitcoin. Além disso, você pode fazer uma solicitação na rede Testnet, em vez da Mainnet, `mainnet` substituindo por `testnet ` no comando.  

```
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
```
Os resultados incluem detalhes dos cabeçalhos dos blocos e uma lista de hashes de transação incluídos no bloco solicitado. Veja o exemplo a seguir:   

```
{"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"}
```

## Faça solicitações Bitcoin JSON-RPC em Node.js
<a name="nodejs-bitcoin-rpc-requests"></a>

[Você pode enviar solicitações assinadas usando HTTPS para acessar os endpoints Bitcoin *Mainnet* e *Testnet* e fazer chamadas de API JSON-RPC usando o [módulo https nativo em Node.js, ou você pode usar uma biblioteca de terceiros](https://nodejs.org/api/https.html), como a AXIOS.](https://axios-http.com) O exemplo a seguir mostra como fazer uma solicitação Bitcoin JSON-RPC para os endpoints Bitcoin do AMB Access.

**Example**  
Para executar esse exemplo de script Node.js, aplique os seguintes pré-requisitos:  

1. Você deve ter o node version manager (nvm) e o Node.js instalados em sua máquina. Você pode encontrar instruções de instalação para seu sistema operacional [aqui](https://github.com/nvm-sh/nvm).

1. Use o `node --version` comando e confirme se você está usando a *versão 14 ou superior do Node*. Se necessário, você pode usar o `nvm install 14` comando, seguido pelo `nvm use 14` comando, para instalar a *versão 14*.

1. As variáveis `AWS_ACCESS_KEY_ID` de ambiente `AWS_SECRET_ACCESS_KEY` devem conter as credenciais associadas à sua conta. As variáveis de ambiente `AMB_HTTP_ENDPOINT` devem conter seus endpoints AMB Access Bitcoin. 

   Exporte essas variáveis como cadeias de caracteres em seu cliente usando os comandos a seguir. Substitua os valores destacados nas sequências de caracteres a seguir pelos valores apropriados da sua conta de usuário do IAM.

   ```
   export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
   export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
   ```
Depois de concluir todos os pré-requisitos, copie o `package.json` arquivo e o `index.js` script a seguir em seu ambiente local usando seu editor:  
*pacote.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();
```
O código de exemplo anterior usa o Axios para fazer solicitações RPC ao endpoint Bitcoin e assina essas solicitações com os cabeçalhos apropriados do Signature Version 4 (SigV4) usando as ferramentas oficiais do SDK v3. AWS Para executar o código, abra um terminal no mesmo diretório dos seus arquivos e execute o seguinte:   

```
npm i
node index.js
```
O resultado gerado será semelhante ao seguinte:  

```
{"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"}
```
A solicitação de amostra no script anterior faz a `getblock` chamada com o mesmo hash de bloco de parâmetros de entrada do [Faça solicitações AMB Access Bitcoin JSON-RPC em awscurl usando o AWS CLI](#awscurl-bitcoin-rpc-requests) exemplo. Para fazer outras chamadas, modifique o `rpc` objeto no script com um Bitcoin JSON-RPC diferente. Você pode alterar a opção de propriedade do host para Bitcoin `testnet` para fazer chamadas nesse endpoint. 

## Use o AMB Access Bitcoin em AWS PrivateLink
<a name="bitcoin-rpc-requests-privatelink"></a>

AWS PrivateLink é uma tecnologia altamente disponível e escalável que você pode usar para conectar sua VPC a serviços de forma privada, como se eles estivessem em sua VPC. Você não precisa usar um gateway de internet, dispositivo NAT, endereço IP público, conexão AWS Direct Connect ou conexão VPN AWS Site-to-Site para se comunicar com o serviço a partir de suas sub-redes privadas. Para obter mais informações sobre AWS PrivateLink ou configurar AWS PrivateLink, consulte [O que é AWS PrivateLink?](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)

Você pode enviar solicitações Bitcoin JSON-RPC para o AMB Access Bitcoin AWS PrivateLink usando um VPC endpoint. As solicitações para esse endpoint privado não são passadas pela Internet aberta, então você pode enviar solicitações diretamente para os endpoints Bitcoin usando a mesma autenticação *SigV4*. Para obter mais informações, consulte [Acessar AWS serviços por meio de AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html). 

Para o *nome do serviço*, procure *Amazon Managed Blockchain* na coluna *AWS de serviço*. Para obter mais informações, consulte [AWS serviços que se integram com AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) o. O nome do serviço para o endpoint estará no seguinte formato:`com.amazonaws.AWS-REGION.managedblockchain.bitcoin.NETWORK-TYPE`. 

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