

# 為錢包提供資金並授予代理程式許可
<a name="payments-fund-wallet"></a>

建立付款工具後，最終使用者必須使用 USDC 為錢包提供資金，並授予代理程式簽署交易的許可。在這兩個步驟完成之前，程序付款操作會失敗，並出現用戶端例外狀況。

**提示**  
您可以使用 AWS 客服人員工具組中的 AgentCore Payments 技能來自動化此頁面上的步驟。技能是 **aws-agents** 外掛程式的一部分。AI 編碼代理程式可以使用 CLI `agentcore` 建立您的 Payment Manager、連接器、登入資料提供者、付款工具及工作階段，並將 x402 付款工具新增至您的代理程式。如需詳細資訊，請參閱 GitHub 上的[快速入門](payments-getting-started.md)和客服人員工具組。 [AWS GitHub](https://github.com/aws/agent-toolkit-for-aws/tree/main)

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

當您使用 Coinbase CDP 連接器建立付款工具時，`CreatePaymentInstrument`API 會傳回`redirectUrl`指向 Coinbase WalletHub 的入口網站，以授予代理程式許可並為錢包提供資金。將最終使用者導向此 URL，以為其錢包提供資金，並從單一界面授予代理程式許可。

### 使用 WalletHub URL
<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 提供資金和授予許可](http://docs.aws.amazon.com/zh_tw/bedrock-agentcore/latest/devguide/images/payments/grant-permission.png)


或者，您可以在 [ GitHub 上部署 Coinbase AgentCore 範本](https://github.com/coinbase/cdp-agentcore-template)做為自我託管的 Next.js 前端，該前端透過可自訂的 UI 提供相同的資金和許可功能。如需設定說明[（替代） 部署自我託管前端](#payments-fund-wallet-coinbase-self-hosted)，請參閱 。

### 為錢包提供資金
<a name="payments-fund-wallet-coinbase-funding"></a>

從 WalletHub （或自我託管前端），最終使用者可以使用下列任一方法為其錢包提供資金：


| Method | 說明 | 可用性 | 
| --- | --- | --- | 
|  **Coinbase Onramp （卡片/銀行）**  | 透過 Coinbase 的託管購買流程，直接使用信用卡、簽帳金融卡、Apple Pay、Google Pay 或 ACH 購買 USDC。 | 僅限 Mainnet | 
|  **接收 (QR 碼）**  | 顯示 QR 碼和錢包地址。使用者掃描 QR 或複製地址，以從外部錢包或交換傳送資金。 | Mainnet 和 testnet | 
|  **從外部錢包傳輸**  | 連接瀏覽器延伸錢包 (MetaMask、Phantom、Coinbase Wallet)，並將 USDC 直接轉移至內嵌錢包。 | Mainnet 和 testnet | 

對於睪丸環境，請從 [Circle USDC 龍頭使用睪丸 USDC](https://faucet.circle.com/) 為錢包提供資金。

### 授予代理程式許可
<a name="payments-fund-wallet-coinbase-permissions"></a>

Coinbase CDP 中的代理程式許可使用**錢包範圍委派**，每個錢包都會從授權代理程式簽署交易的最終使用者收到自己的獨立、有時間限制的授予。

1. 最終使用者導覽至 Coinbase 前端儀表板的**許可**區段。

1. 最終使用者選取要授權的一或多個錢包 (EVM 和/或 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>

如果您需要可自訂的 UI 而非託管的 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 新增至**錢包** > **非自訂錢包** > **安全性**下的**允許原始**伺服器清單。

自我託管前端提供與上述相同的資金和許可授予流程，並完全控制樣式和使用者體驗。

## 條紋 （私有）
<a name="payments-fund-wallet-privy"></a>

[GitHub 上的 Privy AgentCore SDK](https://github.com/privy-io/aws-agentcore-sdk) 是 Next.js 參考前端，可讓最終使用者透過引導式設定流程來驗證、為錢包提供資金，以及授予代理程式許可。

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

1. 允許在**應用程式設定** > **基本**概念 > **網域**下的 Privy 儀表板中列出 localhost 端點 

![Privy 儀表板顯示應用程式設定下的網域欄位，其中 localhost 已新增至允許的原始伺服器清單](http://docs.aws.amazon.com/zh_tw/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 網路建立內嵌錢包。最終使用者可以使用下列任一方法為其錢包提供資金：


| Method | 說明 | 可用性 | 
| --- | --- | --- | 
|  **使用卡片付款 （條紋）**  | 透過位於 的 Stripe 託管加密 onramp，使用信用卡或簽帳金融卡購買 USDC`crypto.link.com`。 | 僅限 Mainnet | 
|  **接收 (QR 碼）**  | 使用 EIP-681 (EVM) 或 Solana Pay URI 格式顯示 QR 代碼和錢包地址。使用者掃描 QR 或複製地址，以從外部錢包或交換傳送資金。 | Mainnet 和 testnet | 
|  **從外部錢包傳輸**  | 連接瀏覽器延伸錢包 (MetaMask for Base、Pantom for Solana)，並將 USDC 直接轉移至內嵌錢包。 | Mainnet 和 testnet | 

對於睪丸環境，請從 [Circle USDC 龍頭使用睪丸 USDC](https://faucet.circle.com/) 為錢包提供資金。

### 授予代理程式許可
<a name="payments-fund-wallet-privy-permissions"></a>

Privy 中的代理程式許可使用**工作階段簽署者** （也稱為授權金鑰） - 最終使用者在每個內嵌錢包上註冊代理程式的授權金鑰，授予代理程式簽署交易的許可，而無需按交易核准。

1. 在 Privy 前端中，最終使用者登入並建立自動內嵌錢包 （一個 EVM、一個 Solana)。

1. 主畫面會顯示 **Connect 客服人員**設定卡。

1. 最終使用者選擇 **Connect 代理**程式，並顯示模態：「讓您的代理程式存取您的錢包」。

1. 最終使用者選擇**授予存取權**。

來自 Privy 開發套件`addSessionSigners`的前端呼叫，以在每個內嵌錢包上註冊代理程式的授權金鑰。操作是等冪的 - 如果簽署者已註冊，則不會傳回錯誤。

連線後，代理程式即可代表使用者的錢包簽署交易。許可會持續到明確撤銷為止。

#### （選用） 驗證客服人員連線
<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. 從 [Circle USDC 精靈取得睪丸 USDC](https://faucet.circle.com/)：
   + 選取 EVM 錢包的基本 **Sepolia** 
   + 選取 **Solana 錢包的 Solana Devnet** 

1. 將內嵌錢包地址 （顯示於前端儀表板或 QR 碼畫面） 貼入水龍頭。

1. 水龍頭會在幾秒鐘內將測試 USDC 分配給您的錢包。

**注意**  
條紋卡 onramp (Privy) 和 Coinbase Onramp 無法在 testnet 上使用。使用 Circle 功能、外部錢包轉移或直接地址轉移來獲得睪丸資金。