

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 Bitcoin
<a name="getting-started"></a>

Usa step-by-step i tutorial in questa sezione per imparare a eseguire attività utilizzando Amazon Managed Blockchain (AMB) Access Bitcoin. Questi esempi richiedono il completamento di alcuni prerequisiti. Se non conosci AMB Access Bitcoin, consulta la sezione *Configurazione* di questa guida per assicurarti di aver completato i prerequisiti. Per ulteriori informazioni, consulta [Configurazione di Amazon Managed Blockchain (AMB) Access Bitcoin](bitcoin-setting-up.md).

**Topics**
+ [Crea una policy IAM per accedere a Bitcoin JSON- RPCs](#getting-started-next-steps)
+ [Effettua richieste di chiamata di procedura remota (RPC) Bitcoin sull'editor RPC di AMB Access utilizzando il Console di gestione AWS](#gs-console-bitcoin)
+ [Effettua richieste AMB Access Bitcoin JSON-RPC in awscurl utilizzando il AWS CLI](#awscurl-bitcoin-rpc-requests)
+ [Effettua richieste Bitcoin JSON-RPC in Node.js](#nodejs-bitcoin-rpc-requests)
+ [Usa AMB Access Bitcoin su AWS PrivateLink](#bitcoin-rpc-requests-privatelink)

## Crea una policy IAM per accedere a Bitcoin JSON- RPCs
<a name="getting-started-next-steps"></a>

Per accedere agli endpoint pubblici di Bitcoin Mainnet e Testnet per effettuare chiamate JSON-RPC, devi disporre delle credenziali utente (AWS\_ACCESS\_KEY\_ID e AWS\_SECRET \_ACCESS\_KEY) con le autorizzazioni IAM appropriate per Amazon Managed Blockchain (AMB) Access Bitcoin. In un terminale su cui è AWS CLI installato, esegui il seguente comando per creare una policy IAM per accedere a entrambi gli endpoint 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**  
L'esempio precedente ti dà accesso sia a Bitcoin Mainnet che a Testnet. Per accedere a un endpoint specifico, usa il seguente comando: `Action`   
`"managedblockchain:InvokeRpcBitcoinMainnet"`
`"managedblockchain:InvokeRpcBitcoinTestnet"`

Dopo aver creato la policy, associala al ruolo del tuo utente IAM affinché abbia effetto. Nella Console di gestione AWS, accedi al servizio IAM e collega la policy `AmazonManagedBlockchainBitcoinAccess` al ruolo assegnato al tuo utente IAM. Per ulteriori informazioni, consulta [Creazione di un ruolo e assegnazione a un utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html).

## Effettua richieste di chiamata di procedura remota (RPC) Bitcoin sull'editor RPC di AMB Access utilizzando il Console di gestione AWS
<a name="gs-console-bitcoin"></a>

Puoi modificare e inviare chiamate di procedura remota (RPCs) Console di gestione AWS utilizzando AMB Access. Con questi RPCs, puoi leggere dati, scrivere e inviare transazioni sulla rete Bitcoin.

**Example**  
L'esempio seguente mostra come ottenere informazioni su *00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09 utilizzando `blockhash` RPC*. `getBlock` **Sostituisci le variabili evidenziate con i tuoi input o scegli uno degli altri metodi RPC elencati e inserisci gli input pertinenti richiesti.**  

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

1. Scegli l'**editor RPC**.

1. Nella sezione **Richiesta**, scegli `{{BITCOIN_MAINNET}}` come **rete Blockchain**. 

1. Scegli `{{getblock}}` come **metodo RPC**. 

1. Inserisci `{{00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09}}` come **numero di blocco** e scegli `{{0}}` come **verbosità**. 

1. Quindi, scegli **Invia** RPC.

1. Otterrai i risultati nella sezione **Risposta** di questa pagina. È quindi possibile copiare le transazioni non elaborate complete per ulteriori analisi o utilizzarle nella logica aziendale delle applicazioni.

Per ulteriori informazioni, consulta la pagina [RPCs supportata da AMB Access Bitcoin](https://docs.aws.amazon.com/managed-blockchain/latest/ambbtc-dg/bitcoin-api.html)

## Effettua richieste AMB Access Bitcoin JSON-RPC in awscurl utilizzando il AWS CLI
<a name="awscurl-bitcoin-rpc-requests"></a>

**Example**  
Firma le richieste con le tue credenziali utente IAM utilizzando [Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) per effettuare chiamate Bitcoin JSON-RPC agli endpoint Bitcoin di AMB Access. Lo strumento da riga di comando [awscurl può aiutarti](https://github.com/okigan/awscurl) a firmare le richieste ai servizi che utilizzano SigV4. AWS [Per ulteriori informazioni, vedere awscurl README.md.](https://github.com/okigan/awscurl#readme)  
Installa awscurl utilizzando il metodo appropriato al tuo sistema operativo. Su macOS, HomeBrew è l'applicazione consigliata:  

```
brew install awscurl
```
Se hai già installato e configurato la AWS CLI, le credenziali utente IAM e la regione AWS predefinita sono impostate nel tuo ambiente e hanno accesso a awscurl. *Utilizzando awscurl, invia una richiesta sia a Bitcoin *Mainnet che a Testnet* invocando l'RPC.* `getblock` Questa chiamata accetta un parametro di stringa corrispondente all'hash del blocco per il quale si desidera recuperare le informazioni.   
Il comando seguente recupera i dati dell'intestazione del blocco dalla rete principale di Bitcoin utilizzando l'hash del blocco nell'`params`array per selezionare il blocco specifico per il quale recuperare le intestazioni. Questo esempio utilizza l'endpoint. `us-east-1` Puoi sostituirlo con il tuo Bitcoin JSON-RPC e la tua AWS regione preferiti supportati da Amazon Managed Blockchain (AMB) Access Bitcoin. Inoltre, puoi inviare una richiesta alla rete Testnet, anziché alla rete Mainnet, sostituendola con nel 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
```
I risultati includono i dettagli delle intestazioni dei blocchi e un elenco di hash delle transazioni inclusi nel blocco richiesto. Fai riferimento al file di esempio seguente:   

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

## Effettua richieste Bitcoin JSON-RPC in Node.js
<a name="nodejs-bitcoin-rpc-requests"></a>

[Puoi inviare richieste firmate utilizzando HTTPS per accedere agli endpoint Bitcoin *Mainnet* e *Testnet* e per effettuare chiamate API JSON-RPC utilizzando il [modulo https nativo in Node.js](https://nodejs.org/api/https.html), oppure puoi utilizzare una libreria di terze parti come AXIOS.](https://axios-http.com) L'esempio seguente mostra come effettuare una richiesta Bitcoin JSON-RPC agli endpoint Bitcoin di AMB Access.

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

1. Usa il `node --version` comando e conferma che stai usando la *versione 14 o successiva di Node*. Se necessario, è possibile utilizzare il `nvm install 14` comando, seguito dal `nvm use 14` comando, per installare la *versione 14*.

1. Le variabili `AWS_ACCESS_KEY_ID` di ambiente `AWS_SECRET_ACCESS_KEY` devono contenere le credenziali associate all'account. Le variabili di ambiente `AMB_HTTP_ENDPOINT` devono contenere gli endpoint Bitcoin AMB Access. 

   Esporta queste variabili come stringhe sul tuo client utilizzando i seguenti comandi. Sostituisci i valori evidenziati nelle seguenti stringhe 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 il `package.json` file e `index.js` lo script seguenti nell'ambiente locale utilizzando l'editor:  
*pacchetto.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();
```
Il codice di esempio precedente utilizza Axios per effettuare richieste RPC all'endpoint Bitcoin e firma tali richieste con le intestazioni Signature Version 4 (SigV4) appropriate utilizzando gli strumenti SDK v3 ufficiali. AWS Per eseguire il codice, apri un terminale nella stessa directory dei file ed esegui quanto segue:   

```
npm i
node index.js
```
Il risultato generato sarà simile al seguente:  

```
{"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 richiesta di esempio nello script precedente effettua la `getblock` chiamata con lo stesso hash di blocco del parametro di input dell'[Effettua richieste AMB Access Bitcoin JSON-RPC in awscurl utilizzando il AWS CLI](#awscurl-bitcoin-rpc-requests)esempio. Per effettuare altre chiamate, modifica l'`rpc`oggetto nello script con un Bitcoin JSON-RPC diverso. Puoi modificare l'opzione della proprietà host in Bitcoin per `testnet` effettuare chiamate su quell'endpoint. 

## Usa AMB Access Bitcoin su AWS PrivateLink
<a name="bitcoin-rpc-requests-privatelink"></a>

AWS PrivateLink è una tecnologia scalabile e altamente disponibile che puoi utilizzare per connettere il tuo VPC ai servizi in modo privato come se fossero nel tuo VPC. Non è necessario utilizzare un gateway Internet, un dispositivo NAT, un indirizzo IP pubblico, una connessione AWS Direct Connect o una connessione VPN da AWS sito a sito per comunicare con il servizio dalle sottoreti private. [Per ulteriori informazioni AWS PrivateLink o per la configurazione, consulta Cos'è? AWS PrivateLinkAWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)

Puoi inviare richieste Bitcoin JSON-RPC a AMB Access Bitcoin AWS PrivateLink tramite un endpoint VPC. *Le richieste a questo endpoint privato non vengono trasmesse su Internet aperto, quindi puoi inviare le richieste direttamente agli endpoint Bitcoin utilizzando la stessa autenticazione SigV4.* [Per ulteriori informazioni, consulta Access services through. AWSAWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html) 

Per il *nome del servizio*, cerca *Amazon Managed Blockchain* nella colonna del *AWS servizio*. Per ulteriori informazioni, consulta [AWS i servizi che si integrano con AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html). Il nome del servizio per l'endpoint sarà nel seguente formato:`com.amazonaws.{{AWS-REGION}}.managedblockchain.bitcoin.{{NETWORK-TYPE}}`. 

 Ad esempio: `com.amazonaws.{{us-east-1}}.managedblockchain.bitcoin.{{testnet}}`. 