PBay is a free, lightweight WordPress plugin that brings full Cardano blockchain ecommerce to any WordPress site. It replaces traditional payment processors entirely, enabling direct peer-to-peer transactions between buyers and merchants using ADA. Every product is represented as an on-chain NFT minted to the CIP-25 metadata standard, and every purchase generates a tamper-proof receipt that lives permanently on the Cardano blockchain. There are no subscription fees, no transaction middlemen, and no revenue sharing — just instant payments and instant payouts, with cryptographic proof of every sale.
Built entirely in pure PHP with no external runtime dependencies, PBay handles server-side NFT minting using Ed25519 signing and CBOR encoding, dual-output atomic transactions, IPFS image storage, and real-time USD-to-ADA conversion. Buyers connect any CIP-30 compatible Cardano wallet, browse a responsive product catalog, and complete purchases without ever creating an account or handing over a password. The plugin constructs the payment transaction, the buyer signs it in their own wallet extension, and both the merchant payment and buyer receipt NFT are delivered in a single atomic transaction.
For store owners, PBay provides a complete admin dashboard with a guided setup wizard, drag-and-drop product creation, category-based policy management, inventory tracking, order statistics, and multiple built-in theme presets. Policy wallet private keys are secured with AES-256-CBC encryption at rest and only decrypted during signing operations. The plugin integrates with CardanoPress for wallet connectivity, Ada Anvil for transaction building and submission, and optionally Blockfrost for on-chain queries and Pinata for IPFS pinning.
Whether you are selling digital goods, physical products, or tokenized assets, PBay turns your WordPress site into a fully functional Cardano marketplace with no platform lock-in. It is ideal for independent merchants, NFT creators, and anyone who wants to accept blockchain payments without the complexity of building a custom storefront. Every transaction is verifiable on-chain, every receipt is immutable, and every sale settles directly to the merchant’s wallet.
Trust Model
Hybrid
This plugin uses a hybrid custody model. The server holds an encrypted policy wallet for co-signing, while the user’s browser wallet provides the second signature. Neither party can act alone.
Installation
Install Steps
1. Download the ZIP from the Download button above
2. Go to Plugins > Add New > Upload Plugin
3. Upload the ZIP file and click Install Now
4. Activate the plugin
5. Configure your marketplace settings including wallet address and CoinGecko price feed
6. Start listing products as NFT-backed items
Documentation
PBay
Free, lightweight ecommerce for WordPress — powered by Cardano under the hood. Instant payments, instant payouts, cryptographic proof of every sale. No WooCommerce, no Stripe, no payment processor, no middleman.
PBay is a full marketplace plugin built on an ultra-light stack: WordPress + PHP + the Cardano blockchain. Sellers list products, buyers pay in ADA straight from their wallet, and the money lands in the seller's wallet in seconds — not days. Every product is backed by an on-chain NFT. Every purchase generates a tamper-proof receipt delivered directly to the buyer's wallet. No accounts, no passwords, no chargebacks.
What Makes This Different
Traditional ecommerce plugins sit on top of payment processors, subscription fees, and processing delays. PBay cuts all of that out:
Instant settlement. Payments confirm on the Cardano network in seconds. No 3-5 business day holds, no rolling reserves, no processor taking a cut.
Zero platform fees. No monthly subscription, no per-transaction percentage, no premium tiers. The plugin is free. Network fees are fractions of a cent.
Tamper-proof receipts. Every purchase mints a cryptographic receipt delivered to the buyer's wallet — proof of purchase that can't be faked, altered, or lost.
No accounts needed. Buyers connect a Cardano wallet to browse, buy, and track orders. No signups, no passwords, no email harvesting.
Products backed by NFTs. Each listing is a CIP-25 NFT with metadata, images pinned to IPFS, and custom attributes — all verifiable on-chain.
The entire crypto stack runs in pure PHP. No Node.js, no Python, no external binaries. If your server runs WordPress, it runs PBay.
Key Features
Server-side NFT minting - Ed25519 signing, CBOR encoding, and transaction submission happen entirely in PHP via encrypted policy wallets
CIP-25 metadata with 64-character chunking, IPFS image pinning, and dynamic product attributes embedded on-chain
Dual-output payments - merchant receives ADA payment + buyer receives 1 ADA receipt in a single atomic transaction
Automatic NFT delivery - after payment confirmation, the product NFT transfers from the policy wallet to the buyer's wallet server-side
Gallery images on IPFS - up to 4 product images (1 main + 3 gallery) auto-pinned to IPFS via Pinata during minting
Category-based policies - each product category auto-generates a Cardano native script policy with time-lock expiration
Real-time USD/ADA conversion - CoinGecko price feed with 5-minute caching, exchange rate locked at purchase time
Wallet-based order tracking - buyers connect their wallet on the orders page to see rich order cards with status, tracking numbers, and on-chain TX links
Admin order management - status updates, shipping tracking, CSV export, and manual NFT delivery fallback button
Frontend theme customizer - 4 presets (Glass Dark, Clean Light, Warm Dark, Midnight), custom color dropdowns for cards/text/accent/buttons, live preview, CSS variable injection
Store wallet as payout - optionally route payments directly to the policy wallet, eliminating the need for a separate merchant address
Drag-and-drop image upload - drop images directly onto the upload area in the listing wizard with visual feedback and instant upload
Blockfrost integration - on-chain address lookups, wallet balance queries, and NFT asset discovery via Blockfrost API
Zero external dependencies for crypto - Ed25519, BIP39, CBOR, Bech32 all implemented in pure PHP
Architecture Overview
SELLER (WordPress Admin)
|
+-----------------+-----------------+
| | |
Create Listing Mint NFT (PHP) Manage Orders
| | |
v v v
[WP Database] [Anvil API] [Order Dashboard]
| Build TX |
| Sign (Ed25519) |
| Submit |
| | |
| v |
| [Cardano Network] |
| | |
+-----------------+---------------+
|
BUYER (Frontend)
|
+-----------------+-----------------+
| | |
Browse Catalog Pay with ADA View Orders
(Shortcodes) (CIP-30 Wallet) (Wallet Connect)
| | |
v v v
[Product Page] [Checkout Modal] [Order History]
Build TX (Anvil) NFT Delivery TX
Sign (Wallet) Tracking Info
Submit Explorer Links
Create Order
Deliver NFT
Connect Wallet (CIP-30 via CardanoPress)
|
Enter Shipping Info
|
Review Order (live ADA price)
|
Build Payment TX (Server)
|-- Anvil resolves buyer UTxOs on-chain
|-- Output 1: merchant_address + payment in ADA
|-- Output 2: buyer_address + 1 ADA receipt
|
Sign in Wallet (CIP-30 signTx, partial)
|
Submit Payment TX (Server -> Anvil)
|
Create Order Record (status: 'paid')
|
Attempt NFT Delivery (non-blocking)
|-- Build transfer TX: policy wallet -> buyer
|-- Sign server-side with policy wallet
|-- Submit via Anvil
|-- Store nft_delivery_tx_hash on order
|
Return Confirmation
|-- Order ID (PBAY-XXXX-XXXX)
|-- Payment TX hash + Cardanoscan link
|-- NFT delivery TX hash + link
4. Buyer Views Orders
No login. Connect wallet on the orders page - all orders for that address appear as rich cards showing product image, status badge, price, tracking number, payment TX link, and NFT delivery TX link.
Shortcodes
[pbay-catalog]
Renders a responsive product grid with category filtering. When a product is clicked, renders the full product detail page with gallery, specs, and checkout modal.
Attribute
Default
Description
category
all
Filter by category name
limit
24
Products per page
columns
4
Grid columns
Supports URL parameters: ?pbay_cat=Electronics for category filtering, ?pbay_product=123 for direct product links.
[pbay-product id="X"]
Renders a single product detail page. Supports id or slug attribute.
[pbay-orders]
Buyer order history. Auto-detects CardanoPress wallet connection and displays all orders for that address.
NFT Delivery
Automatic (On Purchase)
After payment is confirmed, PBay immediately attempts to transfer the product NFT from the policy wallet to the buyer's wallet:
Build asset transfer TX via Anvil (policy wallet -> buyer, 2 ADA min UTxO + NFT)
Sign server-side with the encrypted policy wallet key
Submit to network
Store nft_delivery_tx_hash on the order
This is wrapped in a try-catch - if delivery fails, the order still succeeds. The buyer got their product, the payment went through, and the admin can retry NFT delivery manually.
Manual Fallback (Admin)
On the order detail page, if NFT delivery hasn't happened yet, an admin button appears: "Send NFT to Buyer". Same build-sign-submit flow, triggered manually. Double-send prevention checks that nft_delivery_tx_hash is null before allowing.
Edge Cases Handled
Listing has no NFT (physical-only product without minting): delivery skipped entirely
Policy wallet has no ADA: Anvil build fails, caught and logged, order still succeeds
All string values are automatically chunked to 64-character arrays when they exceed Cardano's metadata field limit. Gallery images are included in the files array for explorer compatibility (pool.pm, Cardanoscan, jpg.store).
Frontend Theming
PBay's frontend uses a CSS variable system that allows full theme customization without editing stylesheets. The default theme is a dark glassmorphism look (frosted glass cards, cyan accents, dark navy background).
How It Works
pbay-frontend.css declares :root variables with sensible defaults:
Address encoding for mainnet (addr1) and testnet (addr_test1)
Blake2b-224/256
Key hashes and transaction hashes
Performance Notes
The crypto stack uses a triple-fallback system:
Backend
Wallet Gen
TX Signing
Availability
Native Sodium
~50ms
~5ms
PHP 8.3+
FFI libsodium
~100ms
~10ms
PHP 7.4+ with FFI enabled
Pure PHP BCMath
~2000ms
~50ms
Everywhere (fallback)
Transaction building and submission go through the Anvil API (typically 1-3 seconds). IPFS pinning via Pinata takes 2-10 seconds per image. The full mint flow (auto-pin + build + sign + submit) completes in under 15 seconds on a typical server.
If NFTs are arriving at buyer wallets but the order detail page shows "Not Delivered," the nft_delivery_tx_hash column may be missing from the orders table. This happens when the table was created before the column was added to the schema — dbDelta() doesn't reliably add columns to existing tables. Fix: The v1.4.0 migration adds this column automatically via ALTER TABLE. Visit any admin page to trigger the migration. Previously delivered orders won't retroactively update — check the explorer for those.
NFT didn't deliver after purchase
Check debug.log for [PBay][NFT_DELIVERY] entries. Common causes:
Policy wallet out of ADA (needs ~2 ADA per transfer)
UTxO contention if multiple purchases happen simultaneously
Fix: Use the "Send NFT to Buyer" button on the order detail page
Images showing local URLs instead of IPFS
Pinata JWT may be missing or invalid. Check PBay > Setup and test the Pinata connection. Images auto-pin during minting - if Pinata fails, the fallback is the WordPress media URL.
"No active policy wallet" error
Navigate to PBay > Policy Wallet and either generate a new wallet or unarchive an existing one for the current network.
Transaction build fails
Ensure the Anvil API key matches the selected network (preprod key for preprod, mainnet key for mainnet)
Ensure the policy wallet has sufficient ADA (~5 ADA for minting, ~2 ADA for transfers)
Check debug.log for [PBay] API error entries with the full response
Wallet not detected on checkout
PBay uses CardanoPress for wallet connection. The buyer must connect their wallet via the site header button before opening the checkout modal. Supported wallets: Nami, Eternl, Typhon, Lace, Flint, and others that implement CIP-30.
Backslashes in descriptions (It's)
Fixed in current version. All text inputs use wp_unslash() before sanitization to handle WordPress magic quotes.
Database columns missing after update
PBay's migration system (v1.4.0+) uses explicit ALTER TABLE checks instead of relying solely on dbDelta(), which doesn't reliably add columns to existing tables. If you suspect a missing column, deactivate and reactivate the plugin to trigger the full table creation, or manually bump the pbay_db_version option to force the migration.
The Cardano developer community for CIP standards and documentation
Built with pure PHP stubbornness and the belief that ecommerce doesn't need a middleman.
Frequently Asked Questions
How does PBay handle payments without a middleman?
Payments go directly from buyer to seller on the Cardano blockchain. PBay constructs the transaction, the buyer signs it with their wallet, and the seller receives ADA directly.
What are NFT receipts?
When a purchase completes, an NFT receipt is minted on-chain. This provides tamper-proof evidence of the transaction that can be verified by anyone.
Does this require Node.js or Python?
No. The entire crypto stack is pure PHP. No external runtimes, binaries, or WASM libraries needed.