> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/zkp2p/zkp2p-contracts/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported Payment Methods

> Complete list of payment platforms integrated with zkp2p-v2-contracts

ZKP2P supports multiple payment platforms across different regions, each with verified payment attestation capabilities. All payment methods use the UnifiedPaymentVerifier for secure verification.

## Overview

The protocol uses a unified verification architecture where each payment method is registered with:

* **Payment Method Hash**: Unique identifier for the payment platform
* **Supported Currencies**: List of fiat currencies accepted
* **Verification Method**: EIP-712 signed attestations from off-chain services
* **Timestamp Buffer**: Maximum time allowance for L2 flexibility (up to 48 hours)

## Supported Platforms

### Venmo

**Region**: United States

**Supported Currencies**:

* USD

**Payment Method Hash**: `0x90262a3db0edd0be2369c6b28f9e8511ec0bac7136cefbada0880602f87e7268`

**Verification**: Uses UnifiedPaymentVerifier with attestation from payment receipts

**Configuration**: Defined in `deployments/verifiers/venmo.ts`

### PayPal

**Region**: Global

**Supported Currencies**:

* USD

**Payment Method Hash**: See `deployments/verifiers/paypal.ts`

**Verification**: Single payment details verification through UnifiedPaymentVerifier

**Configuration**: Defined in `deployments/verifiers/paypal.ts`

### Wise (TransferWise)

**Region**: Global

**Supported Currencies**:

* USD, EUR, GBP, CNY
* AUD, NZD, CAD, CHF
* AED, SGD, HKD, JPY
* ZAR, ILS, PLN, TRY
* IDR, KES, MYR, MXN
* THB, VND, UGX, CZK
* DKK, HUF, INR, NOK
* PHP, RON, SEK

**Payment Method Hash**: `0x554a007c2217df766b977723b276671aee5ebb4adaea0edb6433c88b3e61dac5`

**Verification**: Multi-currency support with comprehensive payment verification

**Configuration**: Defined in `deployments/verifiers/wise.ts`

<Note>
  Wise offers the broadest currency support, making it ideal for international transactions.
</Note>

### Zelle

**Region**: United States

**Supported Banks**:

* Citibank (Zelle Citi)
* Chase Bank (Zelle Chase)
* Bank of America (Zelle BofA)

**Supported Currencies**:

* USD (all variants)

**Payment Method Hashes**:

* Zelle Citi: See `deployments/verifiers/zelle.ts`
* Zelle Chase: See `deployments/verifiers/zelle.ts`
* Zelle BofA: See `deployments/verifiers/zelle.ts`

**Verification**: Bank-specific verification paths with optional timestamp buffers

**Configuration**: Defined in `deployments/verifiers/zelle.ts`

<Warning>
  Zelle Chase and Zelle BofA use custom timestamp buffers. Ensure your attestation service accounts for this.
</Warning>

### CashApp

**Region**: United States, United Kingdom

**Supported Currencies**:

* USD

**Payment Method Hash**: See `deployments/verifiers/cashapp.ts`

**Verification**: CashApp returns up to 20 activities at a time for verification

**Configuration**: Defined in `deployments/verifiers/cashapp.ts`

### Revolut

**Region**: Global

**Supported Currencies**:

* USD, EUR, GBP, SGD
* NZD, AUD, CAD, JPY
* HKD, MXN, SAR, AED
* THB, TRY, PLN, CHF
* ZAR, CNY, CZK, DKK
* HUF, NOK, RON, SEK

**Payment Method Hash**: `0x617f88ab82b5c1b014c539f7e75121427f0bb50a4c58b187a238531e7d58605d`

**Verification**: Multi-currency digital bank with comprehensive coverage

**Configuration**: Defined in `deployments/verifiers/revolut.ts`

<Note>
  Revolut's UnifiedPaymentVerifier handles decimal conversions automatically for currencies like JPY.
</Note>

### MercadoPago

**Region**: Latin America (Argentina, Brazil, Mexico, Chile, Colombia, Peru, Uruguay)

**Supported Currencies**:

* See `deployments/verifiers/mercadopago.ts` for supported currencies

**Payment Method Hash**: See `deployments/verifiers/mercadopago.ts`

**Verification**: Regional payment platform verification

**Configuration**: Defined in `deployments/verifiers/mercadopago.ts`

### Monzo

**Region**: United Kingdom

**Supported Currencies**:

* GBP, EUR, USD

**Payment Method Hash**: See `deployments/verifiers/monzo.ts`

**Verification**: Single transaction details verification

**Configuration**: Defined in `deployments/verifiers/monzo.ts`

## Additional Payment Methods

The following payment methods are also available in the deployment scripts:

* **N26**: European mobile bank
* **Alipay**: Chinese payment platform
* **Luxon**: Regional payment service
* **Chime**: US mobile banking

Refer to the `deploy/` directory for complete configuration details of these additional methods.

## Verification Architecture

### UnifiedPaymentVerifier

All payment methods use the UnifiedPaymentVerifier contract (`contracts/unifiedVerifier/UnifiedPaymentVerifier.sol`), which:

1. **Validates EIP-712 Attestations**: Verifies cryptographically signed payment attestations
2. **Checks Intent Snapshots**: Ensures payment details match the on-chain intent
3. **Prevents Double-Spending**: Nullifies payment IDs in the NullifierRegistry
4. **Enforces Timestamp Buffers**: Allows flexibility for L2 transaction timing (max 48 hours)
5. **Emits Payment Events**: Records verified payment details for off-chain reconciliation

### Payment Attestation Structure

Each payment proof contains:

```solidity theme={null}
struct PaymentAttestation {
    bytes32 intentHash;       // Binds payment to on-chain intent
    uint256 releaseAmount;    // Final token amount after FX conversion
    bytes32 dataHash;         // Hash of payment details for integrity
    bytes[] signatures;       // Witness signatures
    bytes data;               // Encoded payment and intent data
    bytes metadata;           // Additional unsigned metadata
}
```

### Payment Details

```solidity theme={null}
struct PaymentDetails {
    bytes32 method;           // Payment method hash (e.g., "venmo")
    bytes32 payeeId;          // Hashed recipient ID (privacy-preserving)
    uint256 amount;           // Amount in smallest currency unit (cents)
    bytes32 currency;         // Currency hash (e.g., "USD")
    uint256 timestamp;        // Payment timestamp (UTC milliseconds)
    bytes32 paymentId;        // Hashed payment identifier
}
```

## Adding New Payment Methods

To add a new payment method:

1. **Create Verifier Configuration**: Add a new file in `deployments/verifiers/`
2. **Define Payment Method Hash**: Use `calculatePaymentMethodHash("method-name")`
3. **Specify Supported Currencies**: List all supported Currency enum values
4. **Create Deployment Script**: Add script in `deploy/` directory
5. **Register with UnifiedVerifier**: Call `addPaymentMethod()` on UnifiedPaymentVerifier
6. **Register with PaymentVerifierRegistry**: Call `addPaymentMethod()` with currencies

Example from `deployments/verifiers/venmo.ts`:

```typescript theme={null}
import { calculatePaymentMethodHash, Currency } from "@utils/protocolUtils";

export const VENMO_PAYMENT_METHOD_HASH = calculatePaymentMethodHash("venmo");

export const VENMO_CURRENCIES: any = [
  Currency.USD,
];

export const VENMO_PROVIDER_CONFIG = {
  paymentMethodHash: VENMO_PAYMENT_METHOD_HASH,
  currencies: VENMO_CURRENCIES
};
```

## Payment Method Registry

The `PaymentVerifierRegistry` contract maintains:

* Mapping of payment method hashes to verifier contracts
* Supported currencies for each payment method
* Active/inactive status for each method

Query available payment methods:

```typescript theme={null}
const verifier = await paymentVerifierRegistry.getVerifier(paymentMethodHash);
const currencies = await paymentVerifierRegistry.getCurrencies(paymentMethodHash);
```

## Security Considerations

<Warning>
  **Nullifier Registry**: All verified payments are nullified to prevent double-spending. The nullifier combines payment method and payment ID:

  ```solidity theme={null}
  bytes32 nullifier = keccak256(abi.encodePacked(paymentMethod, paymentId));
  ```
</Warning>

<Warning>
  **Timestamp Buffers**: While timestamp buffers provide L2 flexibility, they also create a window where payment timing can vary. Maximum buffer is 48 hours.
</Warning>

<Info>
  **Privacy**: Payment IDs and payee details are hashed on-chain to preserve user privacy while still preventing double-spending.
</Info>

## Network Deployment Status

| Network      | Payment Methods Deployed        |
| ------------ | ------------------------------- |
| Base         | All supported methods           |
| Base Sepolia | All supported methods (testnet) |
| Base Staging | All supported methods (staging) |

View specific contract addresses in the `deployments/` directory for each network.

## Related Resources

* [UnifiedPaymentVerifier Contract](/contracts/unified-payment-verifier)
* [PaymentVerifierRegistry Contract](/contracts/payment-verifier-registry)
* [Orchestrator Integration](/contracts/orchestrator)
* [Troubleshooting Guide](/resources/troubleshooting)
