

# ウォレットに資金を提供し、エージェントにアクセス許可を付与する
<a name="payments-fund-wallet"></a>

支払い手段を作成した後、エンドユーザーはウォレットに USDC の資金を提供し、トランザクションに署名するアクセス許可をエージェントに付与する必要があります。両方のステップが完了するまで、プロセス支払いオペレーションはクライアント側の例外で失敗します。

**ヒント**  
エージェント AWS ツールキットの AgentCore Payments スキルを使用して、このページのステップを自動化できます。スキルは **aws-agents** プラグインの一部です。これにより、AI コーディングエージェントは `agentcore`CLI を使用して Payment Manager、コネクタ、認証情報プロバイダー、支払い手段、セッションを作成し、x402 支払いツールをエージェントに追加できます。詳細については、GitHub の[クイックスタート](payments-getting-started.md)とエージェントツールキットを参照してください。 [AWS GitHub](https://github.com/aws/agent-toolkit-for-aws/tree/main)

## コインベース CDP
<a name="payments-fund-wallet-coinbase"></a>

Coinbase CDP コネクタを使用して支払い手段を作成すると、`CreatePaymentInstrument`API は、エージェントのアクセス許可を付与し、ウォレットに資金を提供するポータルである Coinbase WalletHub `redirectUrl`を指す を返します。この URL にエンドユーザーを誘導してウォレットに資金を提供し、単一のインターフェイスからエージェントにアクセス許可を付与します。

### WalletHub URL を使用する
<a name="payments-fund-wallet-coinbase-wallethub"></a>

`CreatePaymentInstrument` レスポンス`redirectUrl`の が 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/ja_jp/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 (またはセルフホストフロントエンド) から、エンドユーザーは次のいずれかの方法を使用してウォレットに資金を提供できます。


| 方法 | 説明 | 利用可能な状況 | 
| --- | --- | --- | 
|  **Coinbase Onramp (カード/バンク)**  | クレジットカード、デビットカード、Apple Pay、Google Pay、または Coinbase のホスト型購入フローを通じて 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. エンドユーザーは、認可する 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>

ホストされた WalletHub の代わりにカスタマイズ可能な UI が必要な場合は、[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. **アプリ設定** > **基本** > **ドメインの下のプライベートダッシュボードで localhost エンドポイントを許可リストする** 

![localhost が許可されたオリジンリストに追加されるアプリケーション設定のドメインフィールドを示すプライベートダッシュボード](http://docs.aws.amazon.com/ja_jp/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` 値は、**ウォレットインフラストラクチャ** > 認可の下のプライベートダッシュボードの**認可** ID (キー ID) です。これはパブリック識別子であり、クライアント側で公開しても安全です。

1. 依存関係をインストールし、アプリケーションを起動します。

   ```
   pnpm install
   pnpm dev
   ```

### ウォレットに資金を提供する
<a name="payments-fund-wallet-privy-funding"></a>

エンドユーザーが Privy フロントエンドを介して認証すると、ベース (EVM) ネットワークと Solana ネットワークの両方で埋め込みウォレットが自動的に作成されます。エンドユーザーは、次のいずれかの方法を使用してウォレットに資金を提供できます。


| 方法 | 説明 | 利用可能な状況 | 
| --- | --- | --- | 
|  **カードで支払う (ストライプ)**  | で Stripe がホストする暗号化オンランプを使用して、クレジットカードまたはデビットカードを使用して USDC を購入します`crypto.link.com`。 | Mainnet のみ | 
|  **受信 (QR コード)**  | EIP-681 (EVM) または Solana Pay URI 形式を使用して、QR コードとウォレットアドレスを表示します。ユーザーは QR をスキャンするか、アドレスをコピーして外部ウォレットまたは交換所から資金を送信します。 | Mainnet と testnet | 
|  **外部ウォレットからの転送**  | ブラウザ拡張ウォレット (MetaMask for Base、Phantom for Solana) を接続し、USDC を埋め込みウォレットに直接転送します。 | Mainnet と testnet | 

テストネット環境の場合は、[Circle USDC 蛇口からテストネット USDC ](https://faucet.circle.com/)でウォレットに資金を提供します。

### エージェントにアクセス許可を付与する
<a name="payments-fund-wallet-privy-permissions"></a>

Privy のエージェントアクセス許可は、**セッション署名者** (認可キーとも呼ばれます) を使用します。エンドユーザーは、埋め込みウォレットごとにエージェントの認可キーを登録し、トランザクションごとの承認なしでトランザクションに署名するアクセス許可をエージェントに付与します。

1. Privy フロントエンドでは、エンドユーザーがログインし、自動埋め込みウォレットが作成されます (1 つの EVM、1 つの Solana)。

1. ホーム画面に **Connect エージェント**のセットアップカードが表示されます。

1. エンドユーザーが **Connect エージェント**を選択すると、「エージェントにウォレットへのアクセスを許可する」というモーダルが表示されます。

1. エンドユーザーは**アクセス権を付与**を選択します。

フロントエンドは Privy SDK `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. フロントエンド`.env.local`ファイル`NEXT_PUBLIC_NETWORK_MODE=testnet`で を設定します。

1. Circle USDC [蛇口からテストネット USDC ](https://faucet.circle.com/)を取得します。
   + EVM ウォレットの **Base Sepolia** を選択する
   + **Solana ウォレットの Solana Devnet** を選択する

1. 埋め込みウォレットアドレス (フロントエンドダッシュボードまたは QR コード画面に表示) を蛇口に貼り付けます。

1. 蛇口は、数秒以内にテスト USDC をウォレットにディスペンスします。

**注記**  
Stripe Card onramp (Privy) と Coinbase Onramp はテストネットでは使用できません。Circle 蛇口、外部ウォレット転送、または直接アドレス転送をテストネット資金に使用します。