Wallet Generator

Create real Bitcoin, Ethereum, TRON and Solana wallets in bulk and feed the per-user wallet pool

What the Wallet Generator Does

The Wallet Generator is the admin tool that creates real on-chain wallet addresses for your platform. Every wallet it produces is a legitimate blockchain wallet capable of sending and receiving crypto — it is not a stub or mock. Generated addresses go into the wpcrypto_wallet_pool table; the rest of the plugin (deposits, checkout, user dashboards) pulls addresses from this pool on demand and assigns one address per user per network on a first-come, first-served basis.

🎛️ At a glance

  • 4 generator sections: Ethereum (ETH), TRON (TRX), Bitcoin (BTC), Solana (SOL)
  • Recommended batch size: up to 250 wallets per click for optimal performance
  • Three download formats: JSON, CSV, plain text
  • Private keys are never stored — they are returned to you in the download and then discarded
  • Pool-backed assignment — users get a unique address from the pool, never a recycled one

Where to Find It

In the WordPress admin sidebar, open WP Crypto → Wallet Generator. The page is split into four sections — one per supported chain. Each section has the same controls: a count input, a "Generate ... Wallets" button, a download-format dropdown and a download button that becomes active once you have generated wallets in that section.

Supported Chains

The plugin generates four kinds of cryptographic key pairs. Each key pair is usable on the chains noted below:

Generator section Key format Address works on
Ethereum (ETH) secp256k1 / EIP-55 address Every EVM-compatible chain that uses the same address format: Ethereum, Binance Smart Chain, Polygon, Arbitrum, Optimism, Avalanche C-Chain, Base, Linea, zkSync Era. One private key, all EVM chains.
TRON (TRX) Base58 (T...) address TRON mainnet (TRX + TRC-20 tokens)
Bitcoin (BTC) P2PKH / SegWit-compatible address Bitcoin mainnet
Solana (SOL) ed25519 / base58 address Solana mainnet (SOL + SPL tokens)

There are no separate generator buttons for BSC / Polygon / Arbitrum / Optimism / Avalanche / Base / Linea / zkSync. They all use the same Ethereum-format key, so one ETH generation gives you an address that works on every supported EVM chain.

Generating Wallets

  1. Pick a chain section — Ethereum, TRON, Bitcoin or Solana.
  2. Enter how many wallets to generate. The input accepts any positive integer; we recommend up to 250 per batch for optimal performance — larger batches still work but take longer and use more memory.
  3. Click "Generate <Chain> Wallets". The plugin creates the key pairs and immediately inserts the addresses into wpcrypto_wallet_pool with status = 0 (available).
  4. Pick a download format from the dropdown.
  5. Click "Download <Chain> Wallets". The browser downloads a file containing the addresses and private keys you just generated. After the download, private keys are gone from memory — there is no way to retrieve them later.

🔒 Private keys are not stored

Only the public address goes into the database. Private keys live in the response payload only. Download the wallets in the same session you generate them; once the page reloads or you close the tab, the private keys cannot be recovered. Treat the downloaded file like cash — keep it offline, encrypted and away from the web server.

Download Formats

The download-format dropdown offers three encodings of the same data:

Format Best for Notes
JSON Bulk import into wallet apps Common wallet apps (MetaMask, Trust Wallet, TronLink Pro, Phantom) can read JSON exports. Most flexible format.
CSV Spreadsheets and audits One address per row with private key in the next column. Easy to open in Excel / Numbers / Google Sheets.
TXT Simple paper backups Plain text, line-delimited. Ideal for printing and offline storage.

The Wallet Pool

Generated wallets live in the wpcrypto_wallet_pool table. The plugin uses two integer states for each address:

status Meaning Set by
0Available — sitting in the pool waiting to be assigned to a user.Set automatically when the wallet is generated.
1Assigned — a user owns this address; nobody else can ever be given the same address.Set automatically the first time a user is assigned a wallet on this network.

Assignment happens lazily. The plugin assigns a wallet to a user when:

  • The user first opens their deposit screen
  • The user starts a buy-crypto or checkout flow that needs a deposit address
  • An admin explicitly assigns one via the user list

Each user gets exactly one wallet per network. Once assigned, a wallet stays with that user forever; it will not be re-issued to anyone else.

How Clients Experience the Deposit Flow

From the client's point of view there is no concept of a "pool" — they simply receive their own personal deposit address and use it like any other crypto wallet. Step by step:

  1. The client registers and logs in to your platform.
  2. They open the Deposit page from their dashboard.
  3. They pick a coin (e.g. USDT) and select the network they want to use (e.g. TRC20).
  4. The plugin pulls the first available address for that network from the wallet pool and permanently assigns it to the client. That address is now theirs forever — no other user will ever see it.
  5. The deposit page shows the personal address as plain text and as a QR code, with a one-click copy button.
  6. The client sends crypto from any external wallet (Binance, Trust Wallet, TronLink, MetaMask, hardware wallet, etc.) to that address.
  7. The 24/7 Blockchain Monitor service detects the on-chain transaction.
  8. The deposit fee configured in Coins Manager (flat coin amount + flat USD amount + percentage) is applied automatically.
  9. The client's account balance is credited and they receive an in-app notification, an email and — if configured — a Telegram message.

🔁 Same address, every time

Because the assignment is permanent, the client can keep depositing to the same address for the lifetime of their account. They can save it in their external wallet's address book without worrying that it will rotate or expire.

How You Collect the Funds (Treasury Workflow)

The plugin intentionally does not auto-sweep client deposits into a central wallet. The funds sit in each user's assigned address — and because you hold the private keys (via the JSON / CSV / TXT file you downloaded after generation), you have full direct control of every address in the pool.

The treasury model is fully manual and looks like this:

  1. Deposits accumulate inside user wallets. Each client's funds live at the address that was assigned to them.
  2. You decide your own treasury wallet — your Binance / Bybit / OKX deposit address, a hardware wallet, a separate TronLink account, anything you choose. This address is not stored in the plugin; only you know it.
  3. Import the downloaded keys into a wallet app:
    • TRON addresses → TronLink Pro
    • EVM-format addresses (ETH / BSC / Polygon / Arbitrum / Optimism / Base / Avalanche / Linea / zkSync) → MetaMask or Trust Wallet
    • Bitcoin addresses → Electrum or any standard BTC wallet
    • Solana addresses → Phantom
  4. On your own schedule (weekly, monthly, or when a threshold is reached), open the wallet app and manually transfer the accumulated balance from each user wallet to your treasury wallet.
  5. You are in full control: nothing moves unless you move it. There is no auto-sweep daemon, no scheduled job, no server-held private key that could be exploited.

💼 Why manual sweeping is the default

An automatic sweep would require the server to know every private key — which would defeat the entire "keys never touch the server" security model. The manual workflow removes that whole class of risks (misconfigured destination, exploit, batched-key compromise) and keeps you 100% in custody.

Keeping the Pool Topped Up

If the pool runs out of available wallets for a chain, new users on that chain cannot be assigned a deposit address until you generate more. A good operational rhythm:

  • Generate at least 50 wallets per chain right after activation so the first wave of users has addresses ready.
  • Set yourself a reminder to top up before the pool drops below 20 for any chain you care about.
  • If you expect a marketing push, top up the pool the day before — generating 250 wallets only takes seconds, but doing it under load is unnecessary risk.

📊 How big can a batch be?

There is no hard upper limit. You can generate millions of wallets over time. The "250 per batch" recommendation is purely a browser-performance guideline, not a cap. As a reference:

  • 250 wallets per batch → roughly 2–3 seconds
  • 500 wallets per batch → roughly 5–6 seconds
  • Larger batches still complete, but your browser may become unresponsive while it works

The practical pattern is to generate 250 – 500 wallets per batch, download the file, and repeat as needed. There is no cost — generation is free and every wallet is a real on-chain wallet.

🔔 Automatic low-pool notifications

You do not have to watch the pool by hand. The plugin sends you an admin notification (in-app, by email, and — if configured — by Telegram) as soon as a chain's available count drops below a safe threshold, and again if the pool is fully exhausted. The early warning gives you plenty of time to generate a new batch before any client ever sees an error.

You can still review the live counts at any time on the Wallet Pool Status panel at the top of the Wallet Generator page — total / assigned / available, broken down per chain.

Day-One Checklist

If you are setting the platform up for the first time, this is the minimum sequence to get from "freshly installed" to "users can deposit":

Step Action Approx. time
1Log into wp-admin as an administrator
2Open WP Crypto → Wallet Generator
3In the TRON section, enter 250 (or 500) and click Generate TRX Wallets3 – 6 seconds
4Choose JSON Format and click Download TRX Wallets, then save the file to a secure, offline location~1 minute
5(Recommended) Import the JSON into TronLink Pro so you can monitor and sweep the wallets later~5 minutes
6(Optional) Repeat steps 3 – 5 for the Ethereum, Bitcoin and Solana sections if you plan to accept those chains
7Enable the chains you generated wallets for in Coins Manager
8Pool is live — clients can now deposit and receive permanent personal addresses
9Watch your inbox / admin notifications — when the low-pool alert arrives, generate the next batch in a few secondsOngoing
10Set a periodic reminder to manually transfer accumulated funds from user wallets to your own treasury walletOngoing

🗝️ Security summary — the single most important rule

Your clients' funds are only as safe as the JSON / CSV / TXT files you downloaded during generation. Treat those files like a vault:

  • If the file is lost, the funds at every address inside it become permanently unreachable.
  • If the file is stolen, the attacker can sweep every wallet inside it.

Keep them encrypted, keep them offline, and keep at least one independent backup in a separate physical location.

Why a Deposit Might Not Appear in a User's Balance

The deposit detector and the wallet pool are tightly coupled. A client's deposit will only be detected and credited automatically when all four of the following are true at the moment the transaction is broadcast on-chain:

  1. The client has already opened the Deposit page and received their permanent personal address from the pool.
  2. That address is registered with the deposit detector (this happens automatically the moment the address is assigned).
  3. The deposit is sent to that exact address, on the matching network (e.g. USDT on TRC20, not on ERC20).
  4. The deposit detector is online (it runs 24/7 by default).

⏱️ Timing rule: send the deposit after the address is issued

If a client somehow sends crypto to an address before that address has been assigned to them through the Deposit page (for example by reusing an address they saw on a different site), the detector has no way to know who the funds belong to and will not credit the balance. The on-chain transfer still succeeds — the funds reach the address — but the platform cannot match it to a user without manual help.

The fix is to always have the user open their Deposit page first, copy the address shown there, and only then send the deposit from their external wallet.

🛠️ If a "missed" deposit needs to be credited manually

If a deposit predates the address assignment (or any other edge case) and the balance never appears, an admin can credit the user from the user's profile in WP Crypto → Users using the manual balance adjustment. Verify the on-chain transaction on the chain explorer (e.g. tronscan.org for TRON) before doing this.

How Many Wallets Should You Generate?

The pool must contain at least one available address for every user who might request a deposit address before you refill it. There is no per-chain cost — generation is free and the only practical limit is your browser performance during the generate click.

Your situation Suggested first batch (per chain)
Brand-new install, expecting fewer than 100 signups in the first month250
Already-live site with 100 – 1,000 active users500 – 1,000
Site with an upcoming marketing push or 1,000+ users2,000+ (in 250-batch increments)

The Wallet Pool Status panel at the top of the Wallet Generator page colour-codes each chain so you can refill at a glance: HEALTHY (more than 50 available), LOW (1 – 50 available — refill soon), EMPTY (0 — users can no longer be assigned an address until you generate more).

Security Checklist

🛡️ Hardening generation and storage

  • Only admins (manage_options) can open the Wallet Generator page.
  • HTTPS is required — the private-key download travels over your admin session; serve the admin only over HTTPS.
  • Download to a trusted device. Never download to a shared computer or a server you do not control.
  • Move the file offline. Once downloaded, transfer the file to encrypted offline storage and delete it from the downloads folder.
  • Do not commit the file to git. If you keep notes alongside code, double-check your .gitignore.

Troubleshooting

"Generate" button does nothing or the page hangs

You probably requested too many wallets in one batch. Drop the count to 250 and try again. If the page still hangs, increase PHP max_execution_time and memory_limit in your php.ini (or via your host's control panel).

Download button stays disabled

The download button only activates after a successful generation. Generate at least one wallet in the same section, then the download becomes available. Switching to a different section resets the state for that section.

A user is told "no deposit address available"

The pool for that chain is empty. Open the Wallet Generator, generate at least a handful of wallets for the chain in question, then ask the user to refresh their deposit page. The Wallet Pool Status panel at the top of the page shows you which chains are EMPTY or LOW.

A user sent a deposit but their balance was not credited

Confirm the transaction on the chain explorer first (e.g. tronscan.org). Once you confirm the on-chain success, check:

  • Was the deposit sent after the user had opened their Deposit page and received their assigned address? If they reused an address from elsewhere, or sent before the address was assigned, the detector cannot match it automatically — credit the user manually from WP Crypto → Users.
  • Was the deposit sent on the correct network (e.g. USDT on TRC20, not ERC20)? Cross-network sends are detected only if the address happens to be valid on that other network too.
  • Is the deposit detector reporting recent transactions for that chain in WP Crypto → Blockchain Monitor? If it has stalled, restart the chain tab.

If the on-chain transaction is real but the timing matched a pre-assignment edge case, credit the user manually after verifying the explorer.

Users see "High demand / temporarily unavailable" when requesting a deposit address

This message means the wallet pool for that chain is empty — not that the system is under load. Open the Wallet Generator and check the Wallet Pool Status panel; any chain showing EMPTY needs a fresh batch.

I lost the downloaded private keys

There is no recovery path. Private keys are never written to the database — the download is the only copy. Funds already sent to those addresses are not lost (you can still derive the key offline if you have a backup), but if you have no backup, the addresses are effectively unrecoverable. Always download to encrypted offline storage immediately.