

# Financie la billetera y otorgue permisos a los agentes
<a name="payments-fund-wallet"></a>

Tras crear un instrumento de pago, el usuario final debe depositar fondos en la cartera con el USDC y conceder al agente permiso para firmar las transacciones. Hasta que no se completen ambos pasos, la operación de pago del proceso fallará con una excepción del lado del cliente.

**sugerencia**  
Puedes automatizar los pasos de esta página con la habilidad AgentCore Pagos del kit de herramientas para AWS agentes. La habilidad forma parte del complemento **aws-agents**. Con él, un agente de codificación de IA puede crear su administrador de pagos, conector, proveedor de credenciales, instrumento de pago y sesión mediante la `agentcore` CLI, y añadir una herramienta de pago x402 a su agente. Para obtener más información, consulta la guía de [inicio rápido](payments-getting-started.md) y el kit de herramientas para [AWS agentes](https://github.com/aws/agent-toolkit-for-aws/tree/main) en. GitHub

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

Al crear un instrumento de pago con el conector CDP de Coinbase, la `CreatePaymentInstrument` API devuelve un mensaje que `redirectUrl` apunta a Coinbase WalletHub, un portal para conceder permisos a los agentes y depositar fondos en la cartera. Dirige al usuario final a esta URL para depositar fondos en su cartera y conceder permisos de agente desde una única interfaz.

### Utilice la WalletHub URL
<a name="payments-fund-wallet-coinbase-wallethub"></a>

`redirectUrl`A partir de la `CreatePaymentInstrument` respuesta, se abre la Coinbase WalletHub, donde el usuario final puede depositar fondos en la cartera y conceder permisos de firma al 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 para financiar y conceder permisos](http://docs.aws.amazon.com/es_es/bedrock-agentcore/latest/devguide/images/payments/grant-permission.png)


Como alternativa, puedes implementar la [ AgentCore plantilla de Coinbase GitHub](https://github.com/coinbase/cdp-agentcore-template) como una Next.js interfaz autohospedada que proporcione la misma funcionalidad de financiación y permisos con una interfaz de usuario personalizable. Consulte [(Alternativa) Implemente la interfaz autohospedada](#payments-fund-wallet-coinbase-self-hosted) para obtener instrucciones de configuración.

### Financia la cartera
<a name="payments-fund-wallet-coinbase-funding"></a>

Desde la interfaz WalletHub (o desde la interfaz autohospedada), el usuario final puede depositar fondos en su cartera mediante cualquiera de los siguientes métodos:


| Método | Description (Descripción) | Disponibilidad. | 
| --- | --- | --- | 
|  **Coinbase Onramp () card/bank**  | Compra USDC directamente con una tarjeta de crédito, tarjeta de débito, Apple Pay, Google Pay o ACH a través del flujo de compras alojado de Coinbase. | Solo Mainnet | 
|  **Recibir (código QR)**  | Muestra un código QR y la dirección del monedero. El usuario escanea el código QR o copia la dirección para enviar fondos desde una cartera o bolsa externa. | Mainnet y testnet | 
|  **Transferencia desde un monedero externo**  | Conecta una cartera de extensión de navegador (MetaMaskPhantom, Coinbase Wallet) y transfiere USDC directamente a la cartera integrada. | Mainnet y testnet | 

[Para los entornos de redes de prueba, financie el monedero con el USDC de testnet del grifo Circle USDC.](https://faucet.circle.com/)

### Otorgue permisos a los agentes
<a name="payments-fund-wallet-coinbase-permissions"></a>

Los permisos de agente en Coinbase CDP utilizan la **delegación por monedero**: cada monedero recibe su propia autorización independiente y con un plazo determinado del usuario final, que autoriza al agente a firmar transacciones.

1. **El usuario final accede a la sección de permisos del panel de control de la interfaz de Coinbase.**

1. El usuario final selecciona una o más carteras (EVM and/or Solana) para autorizarlas.

1. **El usuario final elige **Otorgar el permiso** y selecciona una duración de caducidad: **7 días**, **30 días** (predeterminado), **60 días o 90 días**.**

Una vez concedido, el agente puede firmar las transacciones en nombre de los monederos del usuario final hasta que venza la concesión. El usuario final puede revocar los permisos en cualquier momento desde el mismo panel de control. Una vez que se haya otorgado la subvención, proceda a [Crear una sesión de pago](payments-create-session.md).

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

El usuario final puede revocar el acceso del agente a cualquier monedero en cualquier momento desde la sección de permisos del panel de control WalletHub o desde la interfaz de usuario. Tras la revocación, el agente ya no podrá firmar las transacciones de esa cartera hasta que el usuario conceda nuevos permisos.

### (Alternativa) Implemente la interfaz autohospedada
<a name="payments-fund-wallet-coinbase-self-hosted"></a>

Si necesita una interfaz de usuario personalizable en lugar de una alojada WalletHub, implemente la [ AgentCore plantilla de Coinbase](https://github.com/coinbase/cdp-agentcore-template) como una aplicación autohospedada. Next.js 

1. Clona el repositorio:

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

1. Cree un `.env.local` archivo con sus credenciales de 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. Instale las dependencias e inicie la aplicación:

   ```
   npm install
   npm run dev
   ```

1. **En el [portal para desarrolladores de Coinbase](https://portal.cdp.coinbase.com/), añade la URL de tu aplicación a la lista de **orígenes permitidos** en **Monederos > **Non-custodial Monederos**** > Seguridad.**

La interfaz autohospedada proporciona los mismos flujos de financiación y concesión de permisos descritos anteriormente, con un control total sobre el estilo y la experiencia del usuario.

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

El [Privy AgentCore SDK on GitHub](https://github.com/privy-io/aws-agentcore-sdk) es una interfaz de Next.js referencia que permite a los usuarios finales autenticarse, financiar carteras y conceder permisos a los agentes mediante un flujo de configuración guiado.

### Implemente la interfaz
<a name="payments-fund-wallet-privy-deploy"></a>

1. ****Permite incluir el punto final localhost en el panel de control privado, en **Configuración de la aplicación** > Conceptos básicos > Dominios**** 

![Panel privado que muestra el campo Dominios en la configuración de la aplicación, donde se agrega localhost a la lista de orígenes permitidos](http://docs.aws.amazon.com/es_es/bedrock-agentcore/latest/devguide/images/payments/privy-allowlist.png)


1. Clona el repositorio:

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

1. Cree un `.env.local` archivo con sus credenciales de 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
   ```

   **El `NEXT_PUBLIC_PRIVY_SIGNER_ID` valor es el ID de autorización (ID clave) de tu panel de control de Privy, en **Wallet Infrastructure** > Autorización.** Se trata de un identificador público y es seguro exponerlo desde el punto de vista del cliente.

1. Instale las dependencias e inicie la aplicación:

   ```
   pnpm install
   pnpm dev
   ```

### Financie la cartera
<a name="payments-fund-wallet-privy-funding"></a>

Cuando el usuario final se autentica a través de la interfaz Privy, se crean automáticamente carteras integradas para las redes Base (EVM) y Solana. El usuario final puede depositar fondos en su cartera mediante cualquiera de los siguientes métodos:


| Método | Description (Descripción) | Disponibilidad. | 
| --- | --- | --- | 
|  **Pague con tarjeta (Stripe)**  | Compra USDC con una tarjeta de crédito o débito a través del servicio de criptomonedas alojado en Stripe, en. `crypto.link.com` | Solo Mainnet | 
|  **Recibir (código QR)**  | Muestra un código QR y una dirección de cartera en formato EIP-681 (EVM) o URI de Solana Pay. El usuario escanea el código QR o copia la dirección para enviar fondos desde una cartera o bolsa externa. | Mainnet y testnet | 
|  **Transferencia desde un monedero externo**  | Conecta una cartera de extensión de navegador (MetaMask para Base, Phantom para Solana) y transfiere USDC directamente a la cartera integrada. | Mainnet y testnet | 

[Para los entornos de redes de prueba, financie el monedero con el USDC de testnet del grifo Circle USDC.](https://faucet.circle.com/)

### Otorgue permisos a los agentes
<a name="payments-fund-wallet-privy-permissions"></a>

Los permisos de los agentes en Privy utilizan a **los firmantes de sesión** (también denominados claves de autorización): el usuario final registra la clave de autorización del agente en cada cartera integrada, lo que le otorga permiso para firmar transacciones sin la aprobación de cada transacción.

1. En la interfaz de Privy, el usuario final inicia sesión y se crean carteras integradas automáticas (una EVM y una Solana).

1. La pantalla de inicio muestra una tarjeta de configuración del **agente Connect**.

1. El usuario final elige el **agente Connect** y aparece un modal que dice: «Dale a tu agente acceso a tus carteras».

1. El usuario final elige **Dar acceso**.

La interfaz utiliza el SDK `addSessionSigners` de Privy para registrar la clave de autorización del agente en cada cartera integrada. La operación es idempotente: si el firmante ya está registrado, no se devuelve ningún error.

Una vez conectado, el agente puede firmar las transacciones en nombre de las carteras del usuario. Los permisos se conservan hasta que se revoquen de forma explícita.

#### (Opcional) Compruebe la conexión del agente
<a name="payments-fund-wallet-privy-permissions-verify"></a>

La interfaz verifica que los permisos estén activos mediante una llamada a la API Privy:

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

La respuesta incluye una matriz. `additional_signers` Si el identificador de autorización configurado aparece en esta matriz, el agente está conectado.

Una vez que se haya otorgado la subvención, proceda a [Crear una sesión de pago](payments-create-session.md).

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

Para el desarrollo y las pruebas, utilice redes de redes de prueba y financie carteras con el USDC de prueba:

1. Establecido `NEXT_PUBLIC_NETWORK_MODE=testnet` en el archivo de interfaz. `.env.local`

1. Obtenga el USDC de testnet en el grifo [Circle](https://faucet.circle.com/) USDC:
   + Seleccione **Base** Sepolia para las carteras EVM
   + Seleccione **Solana Devnet para las carteras Solana**

1. Pegue la dirección de la cartera integrada (que se muestra en el panel de control de la interfaz o en la pantalla de códigos QR) en el grifo.

1. El grifo envía una prueba de USDC a tu cartera en cuestión de segundos.

**nota**  
La tarjeta Onramp (Privy) de Stripe y la Coinbase Onramp no están disponibles en testnet. Utilice Circle Faucet, una transferencia de monedero externa o una transferencia de dirección directa para obtener fondos en la red de prueba.