

# Wallet에 자금을 지원하고 에이전트 권한 부여
<a name="payments-fund-wallet"></a>

결제 수단을 생성한 후 최종 사용자는 USDC로 Wallet에 자금을 지원하고 에이전트에게 거래에 서명할 수 있는 권한을 부여해야 합니다. 두 단계가 모두 완료될 때까지 클라이언트 측 예외와 함께 프로세스 결제 작업이 실패합니다.

**작은 정보**  
 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)

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

Coinbase CDP 커넥터를 사용하여 결제 수단을 생성하면 `CreatePaymentInstrument` API는 에이전트 권한을 부여하고 Wallet에 자금을 지원하는 포털인 Coinbase WalletHub를 `redirectUrl` 가리키는를 반환합니다. 최종 사용자를이 URL로 안내하여 Wallet에 자금을 지원하고 단일 인터페이스에서 에이전트 권한을 부여합니다.

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

`CreatePaymentInstrument` 응답`redirectUrl`의는 Coinbase WalletHub를 엽니다. 여기서 최종 사용자는 Wallet에 자금을 지원하고 에이전트에게 서명 권한을 부여할 수 있습니다.

```
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/ko_kr/bedrock-agentcore/latest/devguide/images/payments/grant-permission.png)


또는 [ GitHub에 Coinbase AgentCore 템플릿을](https://github.com/coinbase/cdp-agentcore-template) 사용자 지정 가능한 UI와 동일한 자금 및 권한 기능을 제공하는 자체 호스팅 Next.js 프런트엔드로 배포할 수 있습니다. 설정 지침은 [(대안) 자체 호스팅 프런트엔드 배포](#payments-fund-wallet-coinbase-self-hosted) 섹션을 참조하세요.

### 월렛에 자금 지원
<a name="payments-fund-wallet-coinbase-funding"></a>

WalletHub(또는 자체 호스팅 프런트엔드)에서 최종 사용자는 다음 방법 중 하나를 사용하여 Wallet에 자금을 지원할 수 있습니다.


| 방법 | 설명 | 가용성 | 
| --- | --- | --- | 
|  **Coinbase Onramp(카드/뱅크)**  | Coinbase의 호스팅 구매 흐름을 통해 신용 카드, 직불 카드, Apple Pay, Google Pay 또는 ACH를 사용하여 직접 USDC를 구매합니다. | 메인넷만 | 
|  **수신(QR 코드)**  | QR 코드와 Wallet 주소를 표시합니다. 사용자가 QR을 스캔하거나 주소를 복사하여 외부 Wallet 또는 Exchange에서 자금을 보냅니다. | 메인넷 및 테스트넷 | 
|  **외부 Wallet에서 전송**  | 브라우저 확장 Wallet(MetaMask, Phantom, Coinbase Wallet)을 연결하고 USDC를 임베디드 Wallet으로 직접 전송합니다. | 메인넷 및 테스트넷 | 

테스트넷 환경의 경우 Circle USDC [수도 꼭지의 테스트넷 USDC](https://faucet.circle.com/)로 Wallet에 자금을 지원합니다.

### 에이전트 권한 부여
<a name="payments-fund-wallet-coinbase-permissions"></a>

Coinbase CDP의 에이전트 권한은 **Wallet 범위 위임**을 사용합니다. 각 Wallet은 에이전트가 트랜잭션에 서명할 수 있는 권한을 부여하는 최종 사용자로부터 독립적인 시간 범위 권한을 받습니다.

1. 최종 사용자는 Coinbase 프런트엔드 대시보드의 **권한** 섹션으로 이동합니다.

1. 최종 사용자는 권한을 부여할 하나 이상의 지갑(EVM 및/또는 Solana)을 선택합니다.

1. 최종 사용자는 **권한 부여**를 선택하고 만료 기간을 **7일**, **30일**(기본값), **60일** 또는 **90일로** 선택합니다.

부여되면 에이전트는 부여가 만료될 때까지 최종 사용자의 지갑을 대신하여 트랜잭션에 서명할 수 있습니다. 최종 사용자는 언제든지 동일한 대시보드에서 권한을 취소할 수 있습니다. 권한 부여가 제공되면 [결제 세션 생성으로](payments-create-session.md) 이동합니다.

#### 권한 취소
<a name="payments-fund-wallet-coinbase-permissions-revoke"></a>

최종 사용자는 WalletHub 또는 프런트엔드 대시보드의 권한 섹션에서 언제든지 모든 Wallet에 대한 에이전트 액세스를 취소할 수 있습니다. 취소 후에는 사용자가 새 권한을 부여할 때까지 에이전트가 더 이상 해당 Wallet에 대한 트랜잭션에 서명할 수 없습니다.

### (대안) 자체 호스팅 프런트엔드 배포
<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/)의 **Wallets** > **Non-custodial Wallet** > **Security**에서 **허용된 오**리진 목록에 애플리케이션 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/ko_kr/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. 권한 자격 증명으로 `.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` 값은 **Wallet Infrastructure** > Authorization 아래의 Privy 대시보드의 **Authorization** ID(키 ID)입니다. 이는 퍼블릭 식별자이며 클라이언트 측에서 노출해도 안전합니다.

1. 종속성을 설치하고 애플리케이션을 시작합니다.

   ```
   pnpm install
   pnpm dev
   ```

### 월렛에 자금 지원
<a name="payments-fund-wallet-privy-funding"></a>

최종 사용자가 프리비 프런트엔드를 통해 인증하면 기본(EVM) 및 Solana 네트워크 모두에 대해 임베디드 지갑이 자동으로 생성됩니다. 최종 사용자는 다음 방법 중 하나를 사용하여 Wallet에 자금을 지원할 수 있습니다.


| 방법 | 설명 | 가용성 | 
| --- | --- | --- | 
|  **카드로 결제(스트립)**  | 에서 Stripe의 호스팅 암호화 온램프를 통해 신용 카드 또는 직불 카드를 사용하여 USDC를 구매합니다`crypto.link.com`. | 메인넷만 | 
|  **수신(QR 코드)**  | EIP-681(EVM) 또는 Solana Pay URI 형식을 사용하여 QR 코드와 Wallet 주소를 표시합니다. 사용자가 QR을 스캔하거나 주소를 복사하여 외부 Wallet 또는 Exchange에서 자금을 보냅니다. | 메인넷 및 테스트넷 | 
|  **외부 Wallet에서 전송**  | 브라우저 확장 Wallet(MetaMask for Base, Phantom for Solana)을 연결하고 USDC를 임베디드 Wallet으로 직접 전송합니다. | 메인넷 및 테스트넷 | 

테스트넷 환경의 경우 Circle USDC [수도 꼭지의 테스트넷 USDC](https://faucet.circle.com/)로 Wallet에 자금을 지원합니다.

### 에이전트 권한 부여
<a name="payments-fund-wallet-privy-permissions"></a>

권한의 에이전트 권한은 **세션 서명자**(권한 부여 키라고도 함)를 사용합니다. 최종 사용자는 각 임베디드 월렛에 에이전트의 권한 부여 키를 등록하여 에이전트에게 트랜잭션별 승인 없이 트랜잭션에 서명할 수 있는 권한을 부여합니다.

1. 권한 프런트엔드에서 최종 사용자가 로그인하고 자동 임베디드 지갑이 생성됩니다(EVM 1개, Solana 1개).

1. 홈 화면에 **Connect 에이전트** 설정 카드가 표시됩니다.

1. 최종 사용자가 **에이전트 연결을** 선택하면 “에이전트에게 지갑에 대한 액세스 권한 부여”라는 모달이 표시됩니다.

1. 최종 사용자는 **액세스 권한 부여**를 선택합니다.

프런트엔드는 Privy SDK`addSessionSigners`에서를 호출하여 각 임베디드 Wallet에 에이전트의 권한 부여 키를 등록합니다. 작업은 멱등성입니다. 서명자가 이미 등록된 경우 오류가 반환되지 않습니다.

연결되면 에이전트는 사용자의 지갑을 대신하여 트랜잭션에 서명할 수 있습니다. 권한은 명시적으로 취소될 때까지 유지됩니다.

#### (선택 사항) 에이전트 연결 확인
<a name="payments-fund-wallet-privy-permissions-verify"></a>

프런트엔드는 권한 API를 호출하여 권한이 활성 상태인지 확인합니다.

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

응답에는 `additional_signers` 배열이 포함됩니다. 구성된 권한 부여 ID가이 배열에 나타나면 에이전트가 연결된 것입니다.

권한 부여가 제공되면 [결제 세션 생성으로](payments-create-session.md) 이동합니다.

## Testnet 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 Wallets용 **Base Sepolia** 선택
   + **Solana Wallets용 Solana Devnet** 선택

1. 임베디드 Wallet 주소(프런트엔드 대시보드 또는 QR 코드 화면에 표시됨)를 수도 꼭지에 붙여 넣습니다.

1. 수도 꼭지가 몇 초 안에 테스트 USDC를 지갑에 분배합니다.

**참고**  
Stripe card onramp(Privy) 및 Coinbase Onramp는 테스트넷에서 사용할 수 없습니다. 테스트넷 자금 조달을 위해 Circle 수도 꼭지, 외부 지갑 이전 또는 직접 주소 이전을 사용합니다.