---
title: Blockchain Wallets
description: External, customer-controlled wallets that receive stablecoins after a payin completes.
---

## What it is

A blockchain wallet is an **externally owned wallet** that you or your customers control, used to receive stablecoin transfers once a payin completes. For BlindPay-managed wallets that store, send, and receive stablecoins within BlindPay, see [Wallets](/docs/essentials/wallets).

## How it works

Add one or more wallet addresses where you or your customers want to receive stablecoin transfers. A wallet can be added securely (via a signed message, no manual address entry) or non-securely (by pasting the address directly).

### Supported blockchains

See [Supported Chains](/knowledge-base/guides/supported-chains) for the full chain and token matrix across all features.

| Chain name                 | Chain id | Instance type |
| -------------------------- | -------- | ------------- |
| Ethereum                   | 1        | production    |
| Polygon                    | 137      | production    |
| Base                       | 8453     | production    |
| Arbitrum                   | 42161    | production    |
| Stellar                    | -        | production    |
| Solana                     | -        | production    |
| Tron (beta)                | -        | production    |
| Ethereum Sepolia (testnet) | 11155111 | development   |
| PoS Amoy (testnet)         | 80002    | development   |
| Base Sepolia (testnet)     | 84532    | development   |
| Arbitrum Sepolia (testnet) | 421614   | development   |
| Stellar Testnet (testnet)  | -        | development   |
| Solana Devnet (testnet)    | -        | development   |

## Prerequisites

::c-prerequisites
::

A customer must exist before adding a blockchain wallet.

## Add a blockchain wallet (secure)

This method attaches a wallet without entering the address manually. The steps are:

1. **Get the message to sign**
2. **Sign the message**
3. **Use the signature transaction hash to add the blockchain wallet**

To get the message to sign, use the following endpoint:

::c-auth-note{customer}
::

::c-code-group

```bash [cURL]
  curl https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/blockchain-wallets/sign-message \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
```

::

Use a library like **wagmi** or **ethers.js** to sign the message and get the signature transaction hash.

::c-code-group

```js [ethers.js]
import { signMessage } from '@wagmi/core'

// setup your wagmiConfig
const message = '<retrieved_from_blindpay_api>'

const signature_tx_hash = await signMessage(wagmiConfig, {
  message,
})
```

::

Use the `signature_tx_hash` to add the blockchain wallet:

::c-code-group

```bash [cURL]
  curl --request POST \
  --url https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/blockchain-wallets \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "John",
    "network": "polygon",
    "is_account_abstraction": false,
    "signature_tx_hash": "0x..."
  }'
```

::

## Add a blockchain wallet (non-secure)

This method is not recommended because **if the funds are sent to the wrong address, the funds will be lost.**

Set the `is_account_abstraction` field to `true` and fill the `address` field with the wallet address.

::c-code-group

```bash [cURL]
  curl --request POST \
  --url https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/blockchain-wallets \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "John",
    "network": "polygon",
    "is_account_abstraction": true,
    "address": "0x..."
  }'
```

::

## Related

- [Wallets](/docs/essentials/wallets) · [Customers](/docs/essentials/customers) · [Payins](/docs/essentials/payins)
- [Supported Chains](/knowledge-base/guides/supported-chains)
