

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为钱包注资并授予代理权限
<a name="payments-fund-wallet"></a>

创建支付工具后，最终用户必须使用美元硬币（USDC）为钱包注资，并授予代理签署交易的权限。在最终用户完成这两个步骤之前，流程付款操作会失败，出现客户端异常。

您对第三方钱包提供商的使用受其条款的约束。 Amazon 对钱包、资金、数字资产或相关私钥没有保管或控制权，也不对其负责。您应对因使用付款而产生的任何交易、争议或支付责任承担全部责任，并负责根据您的用例实施适当的保障措施（例如人为环监督）。 AgentCore 更多详情，请参阅《服务条款》第 50.15 节（亚马逊基岩 AgentCore 付款）。 Amazon 

**提示**  
您可以使用 Amazon 代理工具包中的 AgentCore 付款技能自动执行此页面上的步骤。该技能是 ** aws-agents 插**件的一部分。借助它，AI 编码代理可以使用 `agentcore` CLI 创建您的支付管理器、连接器、凭证提供商、支付工具和会话，并为您的代理添加流程付款工具。有关详细信息，请参阅上的[ GitHub](payments-getting-started.md)[快速入门和](https://github.com/aws/agent-toolkit-for-aws/tree/main)Amazon 代理工具包。

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

当您使用Coinbase CDP连接器创建支付工具时，`CreatePaymentInstrument`API会返回指向Coinbase的`redirectUrl`指向 WalletHub，Coinbase是授予代理权限并为钱包提供资金的门户。引导最终用户访问此网址，为他们的钱包注资，并通过单一界面授予代理权限。

### 使用网 WalletHub 址
<a name="payments-fund-wallet-coinbase-wallethub"></a>

`redirectUrl`来自`CreatePaymentInstrument`响应的内容会打开Coinbase WalletHub，最终用户可以在其中为钱包注资并向代理授予签名权限。

```
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 用于资助和授予权限](https://docs.amazonaws.cn/bedrock-agentcore/latest/devguide/images/payments/grant-permission.png)


或者，您可以将 [ Coinbase AgentCore 模板部署 GitHub](https://github.com/coinbase/cdp-agentcore-template)为自托管 Next.js 前端，通过可自定义的用户界面提供相同的资金和权限功能。有关设置说明，请参阅[（备选）部署自托管前端](#payments-fund-wallet-coinbase-self-hosted)。

### 为钱包注资
<a name="payments-fund-wallet-coinbase-funding"></a>

从 WalletHub （或自托管前端），最终用户可以使用以下任何一种方法为他们的钱包注资：


| 方法 | 说明 | 可用性 | 
| --- | --- | --- | 
|  **Coinbase 入门之路 () card/bank **  | 通过Coinbase的托管购买流程，使用信用卡、借记卡、苹果支付、谷歌支付或ACH直接购买USDC。 | 仅限主网 | 
|  **接收（二维码）**  | 显示二维码和钱包地址。用户扫描二维码或复制地址以从外部钱包或交易所汇款。 | 主网和测试网 | 
|  **从外部钱包转账 **  | 连接浏览器扩展钱包（Phantom MetaMask、Coinbase钱包），然后将USDC直接转移到嵌入式钱包。 | 主网和测试网 | 

对于测试网环境，使用来自C [ ircle USDC水龙头的测试网USDC为钱包注资。](https://faucet.circle.com/)

### 授予代理权限
<a name="payments-fund-wallet-coinbase-permissions"></a>

Coinbase CDP 中的代理权限使用**钱包范围的委托 ** ——每个钱包都从授权代理签署交易的最终用户那里获得自己的独立、有时限的授权。

1. 最终用户导航到Coinbase前端仪表板的 “**权限**” 部分。

1. 最终用户选择一个或多个钱包（EVM and/or Solana）进行授权。

1. 最终用户选择**授予权限**并选择到期期限：**7 天**、** 30 天**（默认）、** 60 天**或 ** 90 天**。

一旦获得授权，代理人就可以代表最终用户的钱包签署交易，直到赠款到期。最终用户可以随时从同一个仪表板撤消权限。提供补助金后，继续[创建付款会话](payments-create-session.md)。

#### 撤消权限
<a name="payments-fund-wallet-coinbase-permissions-revoke"></a>

最终用户可以随时从 WalletHub 或前端仪表板的权限部分撤消代理对任何钱包的访问权限。撤销后，在用户授予新权限之前，代理无法再签署该钱包的交易。

### （备选）部署自托管前端
<a name="payments-fund-wallet-coinbase-self-hosted"></a>

如果您需要可自定义的用户界面而不是托管用户界面 WalletHub，请将 [ Coinbase AgentCore 模板部署](https://github.com/coinbase/cdp-agentcore-template)为自托管应用程序 Next.js 。

1. 克隆存储库：

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

1. 使用您的 CDP 证书创建`.env.local`文件：

   ```
   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. 安装依赖项并启动应用程序：

   ```
   npm install
   npm run dev
   ```

1. 在 [ Coinbase 开发者门户中](https://portal.cdp.coinbase.com/)，将您的应用程序的 URL 添加到 “钱包” > “**钱包” ** > ** Non-custodial “**安全**” 下的 “**允许的来源” ** 列表中。**

自托管前端提供与上述相同的资金和权限授予流程，完全控制样式和用户体验。

## Stripe（Privy）
<a name="payments-fund-wallet-privy"></a>

[Privy AgentCore SDK on GitHub ](https://github.com/privy-io/aws-agentcore-sdk) 是一个 Next.js 参考前端，它使最终用户能够通过引导式设置流程进行身份验证、为钱包注资和授予代理权限。

### 部署前端
<a name="payments-fund-wallet-privy-deploy"></a>

1. 在 Privy 仪表板的 “**应用程序设置” ** > “基础知识” > ** “域” 下将本地主机端点列入许可名单 ** ** ** 

![Privy 仪表板显示了 “应用程序设置” 下的 “域名” 字段，将本地主机添加到允许的来源列表中](https://docs.amazonaws.cn/bedrock-agentcore/latest/devguide/images/payments/privy-allowlist.png)


1. 克隆存储库：

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

1. 使用您的 Privy 凭据创建`.env.local`文件：

   ```
   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
   ```

   该`NEXT_PUBLIC_PRIVY_SIGNER_ID`值是您的 Privy 控制面板 “**钱包基础架构” ** > “授权” 下的**授权 ** ID（密钥 ID）。这是一个公共标识符，可以安全地公开客户端。

1. 安装依赖项并启动应用程序：

   ```
   pnpm install
   pnpm dev
   ```

### 为钱包注资
<a name="payments-fund-wallet-privy-funding"></a>

当最终用户通过 Privy 前端进行身份验证时，会自动为 Base (EVM) 和 Solana 网络创建嵌入式钱包。最终用户可以使用以下任何一种方法为其钱包注资：


| 方法 | 说明 | 可用性 | 
| --- | --- | --- | 
|  **用卡付款（Stripe）**  | 通过Stripe托管的加密入口使用信用卡或借记卡购买USDC，网址为。`crypto.link.com` | 仅限主网 | 
|  **接收（二维码）**  | 使用 EIP-681 (EVM) 或 Solana Pay URI 格式显示二维码和钱包地址。用户扫描二维码或复制地址以从外部钱包或交易所汇款。 | 主网和测试网 | 
|  **从外部钱包转账 **  | 连接浏览器扩展钱包（MetaMask 适用于Base，Phantom用于Solana），然后将USDC直接转移到嵌入式钱包。 | 主网和测试网 | 

对于测试网环境，使用来自C [ ircle USDC水龙头的测试网USDC为钱包注资。](https://faucet.circle.com/)

### 授予代理权限
<a name="payments-fund-wallet-privy-permissions"></a>

Privy 中的代理权限使用**会话签名者**（也称为授权密钥）——最终用户在每个嵌入式钱包上注册代理的授权密钥，授予代理无需每笔交易批准即可签署交易的权限。

1. 在 Privy 前端，最终用户登录并创建自动嵌入式钱包（一个 EVM，一个 Solana）。

1. 主屏幕显示**连接代理**设置卡。

1. 最终用户选择 ** Connect 代理**，然后显示一个模式：“让您的代理访问您的钱包。”

1. 最终用户选择 “**授予访问权限**”。

前端调用 `addSessionSigners` Privy SDK，在每个嵌入式钱包上注册代理的授权密钥。该操作是指数等效的——如果签名者已经注册，则不会返回任何错误。

连接后，代理可以代表用户的钱包签署交易。权限在明确撤销之前一直有效。

#### （可选）验证代理连接
<a name="payments-fund-wallet-privy-permissions-verify"></a>

前端通过调用 Privy API 来验证权限是否有效：

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

响应包含一个`additional_signers`数组。如果配置的授权 ID 出现在此阵列中，则表示代理已连接。

提供补助金后，继续[创建付款会话](payments-create-session.md)。

## 使用测试网 USDC 进行测试
<a name="payments-fund-wallet-testnet"></a>

要进行开发和测试，请使用带有测试USDC的测试网络和资金钱包：

1. `NEXT_PUBLIC_NETWORK_MODE=testnet`在前端`.env.local`文件中设置。

1. 从 C [ ircle USDC 水龙头获取测试网 USDC：](https://faucet.circle.com/)
   + **为 EVM 钱包选择 ** Base Sepolia
   + 为 ** Solana 钱包选择 Solana Dev ** net

1. 将嵌入式钱包地址（显示在前端仪表板或二维码屏幕中）粘贴到水龙头中。

1. 水龙头会在几秒钟内将测试的USDC分发到您的钱包中。

**注意**  
Stripe card onramp（Privy）和 Coinbase Onramp 在测试网上不可用。使用 Circle 水龙头、外部钱包转账或直接地址转账进行测试网融资。