

# Finanzia il portafoglio e concedi le autorizzazioni all'agente
<a name="payments-fund-wallet"></a>

Dopo aver creato uno strumento di pagamento, l'utente finale deve finanziare il portafoglio con USDC e concedere all'agente l'autorizzazione a firmare le transazioni. Fino al completamento di entrambi i passaggi, l'operazione di pagamento fallisce con un'eccezione sul lato client.

**Suggerimento**  
Puoi automatizzare i passaggi di questa pagina con l'abilità AgentCore Pagamenti nel toolkit per agenti. AWS L'abilità fa parte del plugin **aws-agents**. Con esso, un agente di codifica AI può creare Payment Manager, connettore, fornitore di credenziali, strumento di pagamento e sessione utilizzando la `agentcore` CLI e aggiungere uno strumento di pagamento x402 al tuo agente. [Per i dettagli, consulta il [quickstart](payments-getting-started.md) e il toolkit per agenti su.AWS GitHub](https://github.com/aws/agent-toolkit-for-aws/tree/main)

## Coinbase CDP
<a name="payments-fund-wallet-coinbase"></a>

Quando crei uno strumento di pagamento con il connettore Coinbase CDP, l'`CreatePaymentInstrument`API rimanda a Coinbase WalletHub, `redirectUrl` un portale per concedere le autorizzazioni agli agenti e finanziare il portafoglio. Indirizza l'utente finale a questo URL per finanziare il proprio portafoglio e concedere le autorizzazioni agli agenti da un'unica interfaccia.

### Usa l'URL WalletHub
<a name="payments-fund-wallet-coinbase-wallethub"></a>

`redirectUrl`Dalla `CreatePaymentInstrument` risposta si apre Coinbase WalletHub, dove l'utente finale può finanziare il portafoglio e concedere le autorizzazioni di firma all'agente.

```
instrument = dp_client.create_payment_instrument(
    userId="test-user-123",
    paymentManagerArn=PAYMENT_MANAGER_ARN,
    paymentConnectorId=PAYMENT_CONNECTOR_ID,
    paymentInstrumentType="EMBEDDED_CRYPTO_WALLET",
    paymentInstrumentDetails={
        "embeddedCryptoWallet": {
            "network": "ETHEREUM",
            "linkedAccounts": [{"email": {"emailAddress": "user@example.com"}}]
        }
    },
    clientToken=str(uuid.uuid4()),
)

# Direct the end user to this URL
wallet_hub_url = instrument["paymentInstrumentDetails"]["redirectUrl"]
print(f"Open the WalletHub: {wallet_hub_url}")
```

![Coinbase WalletHub per il finanziamento e la concessione di autorizzazioni](http://docs.aws.amazon.com/it_it/bedrock-agentcore/latest/devguide/images/payments/grant-permission.png)


In alternativa, puoi utilizzare il [ AgentCore modello Coinbase GitHub](https://github.com/coinbase/cdp-agentcore-template) come Next.js frontend ospitato autonomamente che fornisce le stesse funzionalità di finanziamento e autorizzazioni con un'interfaccia utente personalizzabile. Vedi per le istruzioni di configurazione. [(Alternativa) Implementa il frontend ospitato autonomamente](#payments-fund-wallet-coinbase-self-hosted)

### Finanzia il portafoglio
<a name="payments-fund-wallet-coinbase-funding"></a>

Dal frontend WalletHub (o dal frontend ospitato autonomamente), l'utente finale può finanziare il proprio portafoglio utilizzando uno dei seguenti metodi:


| Metodo | Description | Disponibilità | 
| --- | --- | --- | 
|  **Coinbase Onramp () card/bank**  | Acquista USDC direttamente utilizzando una carta di credito, una carta di debito, Apple Pay, Google Pay o ACH tramite il flusso di acquisto ospitato da Coinbase. | Solo Mainnet | 
|  **Ricevi (codice QR)**  | Visualizza un codice QR e l'indirizzo del portafoglio. L'utente esegue la scansione del codice QR o copia l'indirizzo per inviare fondi da un portafoglio o da un exchange esterno. | Mainnet e testnet | 
|  **Trasferimento da un portafoglio esterno**  | Collega un portafoglio con estensione del browser (MetaMaskPhantom, Coinbase Wallet) e trasferisci USDC direttamente nel portafoglio incorporato. | Mainnet e testnet | 

[Per gli ambienti testnet, alimenta il portafoglio con testnet USDC dal rubinetto Circle USDC.](https://faucet.circle.com/)

### Concedi le autorizzazioni agli agenti
<a name="payments-fund-wallet-coinbase-permissions"></a>

Le autorizzazioni degli agenti in Coinbase CDP utilizzano la **delega basata sull'ambito del portafoglio**: ogni portafoglio riceve una concessione indipendente e limitata nel tempo dall'utente finale che autorizza l'agente a firmare le transazioni.

1. **L'utente finale accede alla sezione Autorizzazioni della dashboard del frontend di Coinbase.**

1. L'utente finale seleziona uno o più portafogli (EVM Solana) da autorizzare. and/or 

1. ****L'utente finale sceglie **Concedi l'autorizzazione** e seleziona una durata di scadenza: **7 giorni, 30 giorni** **(impostazione predefinita), 60 giorni** o 90 giorni.****

Una volta concessa, l'agente può firmare le transazioni per conto dei portafogli dell'utente finale fino alla scadenza della concessione. L'utente finale può revocare le autorizzazioni in qualsiasi momento dalla stessa dashboard. Una volta fornita la sovvenzione, procedi con [Crea una sessione di pagamento](payments-create-session.md).

#### Revoca le autorizzazioni
<a name="payments-fund-wallet-coinbase-permissions-revoke"></a>

L'utente finale può revocare l'accesso dell'agente a qualsiasi portafoglio in qualsiasi momento dalla sezione delle autorizzazioni della dashboard o del frontend. WalletHub Dopo la revoca, l'agente non può più firmare le transazioni per quel portafoglio finché l'utente non concede nuove autorizzazioni.

### (Alternativa) Implementa il frontend ospitato autonomamente
<a name="payments-fund-wallet-coinbase-self-hosted"></a>

Se hai bisogno di un'interfaccia utente personalizzabile anziché quella ospitata WalletHub, implementa il [ AgentCore modello Coinbase](https://github.com/coinbase/cdp-agentcore-template) come applicazione ospitata autonomamente. Next.js 

1. Clona il repository:

   ```
   git clone https://github.com/coinbase/cdp-agentcore-template.git
   cd cdp-agentcore-template
   ```

1. Crea un `.env.local` file con le tue credenziali CDP:

   ```
   NEXT_PUBLIC_CDP_PROJECT_ID=<YOUR_CDP_PROJECT_ID>
   CDP_API_KEY_ID=<YOUR_CDP_API_KEY_ID>
   CDP_API_KEY_SECRET=<YOUR_CDP_API_KEY_SECRET>
   CDP_WALLET_SECRET=<YOUR_CDP_WALLET_SECRET>
   NEXT_PUBLIC_NETWORK_MODE=testnet
   ```

1. Installa le dipendenze e avvia l'applicazione:

   ```
   npm install
   npm run dev
   ```

1. **Nel [Coinbase Developer Portal](https://portal.cdp.coinbase.com/), aggiungi l'URL dell'applicazione all'elenco **Allowed Origins** in **Wallets > **Non-custodial Wallet**** > Security.**

Il frontend ospitato autonomamente offre gli stessi flussi di finanziamento e concessione delle autorizzazioni descritti sopra, con il pieno controllo sullo stile e sull'esperienza utente.

## Stripe (Privy)
<a name="payments-fund-wallet-privy"></a>

[Privy AgentCore SDK on GitHub](https://github.com/privy-io/aws-agentcore-sdk) è un frontend di Next.js riferimento che consente agli utenti finali di autenticarsi, finanziare i portafogli e concedere le autorizzazioni agli agenti attraverso un flusso di configurazione guidato.

### Implementa il frontend
<a name="payments-fund-wallet-privy-deploy"></a>

1. ******Consenti l'endpoint localhost nella dashboard di Privy in Impostazioni app > Nozioni di base > Domini****** 

![Dashboard Privy che mostra il campo Domini in Impostazioni app dove localhost viene aggiunto all'elenco delle origini consentite](http://docs.aws.amazon.com/it_it/bedrock-agentcore/latest/devguide/images/payments/privy-allowlist.png)


1. Clona il repository:

   ```
   git clone https://github.com/privy-io/aws-agentcore-sdk.git
   cd aws-agentcore-sdk
   ```

1. Crea un `.env.local` file con le tue credenziali Privy:

   ```
   NEXT_PUBLIC_PRIVY_APP_ID=<YOUR_PRIVY_APP_ID>
   PRIVY_APP_SECRET=<YOUR_PRIVY_APP_SECRET>
   NEXT_PUBLIC_PRIVY_SIGNER_ID=<YOUR_PRIVY_AUTHORIZATION_ID>
   NEXT_PUBLIC_NETWORK_MODE=testnet
   ```

   **Il `NEXT_PUBLIC_PRIVY_SIGNER_ID` valore è l'ID di autorizzazione (Key ID) dalla dashboard di Privy in **Wallet Infrastructure** > Authorization.** Si tratta di un identificatore pubblico ed è sicuro da esporre sul lato client.

1. Installa le dipendenze e avvia l'applicazione:

   ```
   pnpm install
   pnpm dev
   ```

### Trova il portafoglio
<a name="payments-fund-wallet-privy-funding"></a>

Quando l'utente finale si autentica tramite il frontend Privy, i portafogli integrati vengono creati automaticamente per le reti Base (EVM) e Solana. L'utente finale può finanziare il proprio portafoglio utilizzando uno dei seguenti metodi:


| Metodo | Description | Disponibilità | 
| --- | --- | --- | 
|  **Paga con carta (Stripe)**  | Acquista USDC utilizzando una carta di credito o di debito tramite la piattaforma crittografica ospitata da Stripe su Stripe all'indirizzo. `crypto.link.com` | Solo Mainnet | 
|  **Ricevi (codice QR)**  | Visualizza un codice QR e l'indirizzo del portafoglio utilizzando il EIP-681 formato URI (EVM) o Solana Pay. L'utente esegue la scansione del QR o copia l'indirizzo per inviare fondi da un portafoglio o da un exchange esterno. | Mainnet e testnet | 
|  **Trasferimento da un portafoglio esterno**  | Connect un wallet con estensione del browser (MetaMask per Base, Phantom for Solana) e trasferisci USDC direttamente nel wallet incorporato. | Mainnet e testnet | 

[Per gli ambienti testnet, alimenta il portafoglio con testnet USDC dal rubinetto Circle USDC.](https://faucet.circle.com/)

### Concedi le autorizzazioni agli agenti
<a name="payments-fund-wallet-privy-permissions"></a>

Le autorizzazioni degli agenti in Privy utilizzano **i firmatari di sessione** (chiamati anche chiavi di autorizzazione): l'utente finale registra la chiave di autorizzazione dell'agente su ogni portafoglio incorporato, concedendo all'agente il permesso di firmare le transazioni senza l'approvazione della singola transazione.

1. Nel frontend Privy, l'utente finale accede e vengono creati portafogli incorporati automatici (un EVM, un Solana).

1. La schermata principale mostra una scheda di configurazione **Connect Agent**.

1. L'utente finale sceglie **Connect agent** e viene visualizzato un modale: «Consenti al tuo agente di accedere ai tuoi portafogli».

1. **L'utente finale sceglie Concedi accesso.**

Il frontend chiama `addSessionSigners` dal Privy SDK per registrare la chiave di autorizzazione dell'agente su ogni portafoglio incorporato. L'operazione è idempotente: se il firmatario è già registrato, non viene restituito alcun errore.

Una volta connesso, l'agente può firmare le transazioni per conto dei portafogli dell'utente. Le autorizzazioni persistono fino a quando non vengono revocate esplicitamente.

#### (Facoltativo) Verifica la connessione dell'agente
<a name="payments-fund-wallet-privy-permissions-verify"></a>

Il frontend verifica che le autorizzazioni siano attive chiamando l'API Privy:

```
GET https://auth.privy.io/api/v1/wallets/{walletId}
Authorization: Basic <base64(appId:appSecret)>
```

La risposta include un array. `additional_signers` Se l'ID di autorizzazione configurato appare in questo array, l'agente è connesso.

Una volta fornita la concessione, procedi con [Crea una sessione di pagamento](payments-create-session.md).

## Test con testnet USDC
<a name="payments-fund-wallet-testnet"></a>

Per lo sviluppo e il test, utilizza le reti testnet e i portafogli di fondi con test USDC:

1. Impostato `NEXT_PUBLIC_NETWORK_MODE=testnet` nel file di frontend. `.env.local`

1. Ottieni testnet USDC dal rubinetto [Circle](https://faucet.circle.com/) USDC:
   + **Seleziona Base Sepolia per i portafogli EVM**
   + Seleziona **Solana Devnet per i portafogli Solana**

1. Incolla l'indirizzo del portafoglio incorporato (mostrato nella dashboard del frontend o nella schermata del codice QR) nel rubinetto.

1. Il rubinetto distribuisce l'USDC di prova al tuo portafoglio in pochi secondi.

**Nota**  
La carta Stripe onramp (Privy) e Coinbase Onramp non sono disponibili su testnet. Usa il faucet Circle, il trasferimento tramite wallet esterno o il trasferimento diretto di indirizzi per finanziare testnet.