Repository navigation
Releases: invalidcredentials/cardano-easy-mint
Release list
v4.6.3 - Install zip, Plugin Check pass, repo cleanup
Install: download cardano-easy-mint.zip below, then in WordPress go to Plugins → Add New → Upload Plugin. (The permanent link releases/latest/download/cardano-easy-mint.zip always points at the newest version.) Don't use GitHub's green "Download ZIP" button; it unpacks under the wrong folder name.
Housekeeping release on top of the 4.6.2 security fixes. No changes to how minting works.
Added
- Ready-to-install
cardano-easy-mint.zipat the repo root and on every release.
Fixed (WordPress Plugin Check + PHPCompatibility pass)
- Admin pages escape everything they print (nonces, URLs, counters, recovery words); stored NFT metadata is safely re-encoded before it's printed into the Mint Manager script.
gmdate()/wp_parse_url(), text domain matches the plugin slug, readme.txt tags and short description within wordpress.org limits.- PHP 7.4 compatibility scan is clean.
Changed / Removed
- Asset Upgrades admin page describes the shipped feature instead of "coming in later phases".
- Internal planning docs removed from the repo; example placeholders made generic.
Full details in CHANGELOG.md.
v4.6.2 - Security release: policy key only signs server-built transactions
Security release. Every site running 4.6.1 or earlier should update. No schema changes; drop-in replacement.
Security
- The policy key only co-signs transactions this site built. Previously the mint submit paths (checkout, REST
/mint/submit,/upgrade/submit) signed whatever transaction a visitor posted. Every build is now recorded server-side by transaction id and can be submitted once, within 30 minutes; anything else is refused. Supply, per-wallet counts, alt-pay invoices and discount commits come from that record, not from the request. - Merchant payout address always comes from Plugin Setup, never from the browser.
- Asset-upgrade re-mint requires this site's burn of the same asset, from the same wallet, to be confirmed on-chain; one re-mint per burn. The upgrade modal waits for the burn and can resume an interrupted re-mint.
- Alt-pay invoices are bound to their mint, cover one asset, and are consumed atomically, so one payment backs one mint.
- Discount codes are always committed, so single-use codes stay single-use.
- Timeouts or server errors during submit no longer hand single-use state back (the tx may have gone through); only a definite rejection does.
Fixed
- Image URLs and royalty addresses over 64 bytes (e.g. CIDv1 IPFS links) are chunked per CIP-25 / CIP-27, so they no longer fail the build.
- The BTC / ETH / SOL wallet tabs load on PHP 7.4 again.
- The embeddable widget can submit mints again.
Full details in CHANGELOG.md.
v4.6.1 - How to Use page points to the GitHub README
The in-admin How to Use page now opens with a notice pointing to the GitHub README as the most up-to-date guide, and its banner shows the real plugin version via CARDANO_MINT_VERSION.
Install: upload cardano-easy-mint-4.6.1.zip via Plugins > Add New > Upload Plugin.
v4.6.0 - Cleanup release + policy wallet generation fix
Cleanup release. No schema changes and no behaviour changes for customers or
operators, plus one real bug fix that surfaced while verifying the cleanup.
Fixed
- Generating a policy wallet could fatal with
Class "Ed25519Compat" not found.
CardanoWalletPHP.phpguarded itself with a class-exists check placed before
its ownrequire_onceof the Ed25519 compat layer. PHP binds the class at compile
time, so the guard was already true when the file ran and the require never
executed. It only worked when something earlier in the same request had loaded
the transaction signer (which loads the compat layer too). The require now comes
first. Verified on a live site: preprod and mainnet wallets generate with a
24-word mnemonic, addresses, and extended signing key.
Changed
- All server logging goes through
cardanomint_log()(includes/helpers/log.php).
Debug-level messages only reach the PHP error log whenWP_DEBUGis on or the
cardano_mint_debug_logfilter returns true; failure paths log at error level and
always appear. Four admin handlers that dumped the raw$_POSTbody to the log no
longer do. - Browser console noise is gated the same way.
cardano-nft-mint.jsroutes its
tracing throughcmDebug(), a no-op unlessWP_DEBUGis on (localized as
cardanoMint.debug).console.warn/console.errorare untouched. - The plugin entry file is a third of its old size. The Plugin Setup page, the
Mint Manager / Active Mints pages, the How to Use page, and the one-time
migrations moved verbatim intoincludes/admin/. Plugin paths resolve through
newCARDANO_MINT_PLUGIN_DIR/_URL/_FILEconstants;CARDANO_MINT_VERSION
is defined as well. CardanoCLIis now an honest 78-line facade over the pure-PHP signer and wallet
generator (its public signatures are unchanged).
Removed
includes/helpers/WalletGenerator.php: never referenced; its body was a placeholder.- The Deno-binary and Python fallbacks in
CardanoCLI, the activation-time "fix
binary permissions" step, and two address helpers keyed to the old binary's
output format. Neitherbin/norscripts/ship with the plugin, so none of
those paths could ever succeed; wallet generation and signing were already pure
PHP and still are. - The unreachable client-side address-conversion fallbacks (a Cardano Serialization
Library path nothing loads, and a placeholder that fabricated anaddr1…string).
If the server-side conversion fails, the raw address is passed through, which is
what the old chain ended up doing anyway. - The orphaned
cardano_get_connected_walletAJAX handler (the last CardanoPress
remnant) and the unauthenticated registration of the Anvil connectivity test
(cardano_test_anvil_apiis admin-only now; only Plugin Setup ever called it).
Install: upload cardano-easy-mint-4.6.0.zip via Plugins → Add New → Upload Plugin.
v4.5.3 - Open-source release prep + Anvil key exposure fix
Open-source release prep, plus one security fix.
Security
- The Anvil API key is no longer shipped to the browser. The mint modal's
address converter used a key localized into the page (cardanoMint.anvilApiKey)
to call Anvil'sutils/addresses/parsedirectly, so any visitor could read the
operator's key from page source. The conversion now goes through a nonce-gated,
rate-limited AJAX proxy (cardano_convert_address) and the key stays server-side.
Behaviour is unchanged for customers; the README's "key is never exposed" claim is
now actually true.
Fixed
- Wallet connector no longer fights a site-wide connector (2026-06-25). The
embedded CIP-30 manager auto-reconnected its last wallet on every page and could
thrash against a nav-level connector. Init is now gated to pages that render the
mint widget, connector wiring is one-shot, and there is no auto-reconnect on load.
Newassets/weldpress-bridge.jsclears the saved wallet key at load and on a
WeldPress disconnect; it is a harmless no-op on sites without WeldPress.
Changed
- Plugin header: name is now Cardano Easy Mint (matches the repo and README),
with License, Plugin URI, Requires at least, and Requires PHP fields. - 2FA: the authenticator issuer is the WordPress site title (falls back to
"Cardano Easy Mint"), and the recovery-code download no longer hard-codes a
site name. Existing enrollments keep working (the secret is unchanged). - Every PHP file now carries a direct-access guard.
- Added
LICENSE(AGPL-3.0-or-later),readme.txt,.gitignore,.distignore. - Removed an internal partner-onboarding note that did not belong in the repo.
Install: upload cardano-easy-mint-4.5.3.zip via Plugins → Add New → Upload Plugin.
v4.0.0 - Alt-chain payments + batch mints + wallet network gate
Cardano Easy Mint v4.0.0 — major release.
This is the alt-chain payments + batch mints + wallet-network gate cut. Drop-in installable to any WordPress site.
Install
- Download
cardano-easy-mint-v4.0.0.zipfrom Assets below. - WordPress admin → Plugins → Add New → Upload Plugin → select the zip → Install Now → Activate.
- Configure under Cardano Mint → Plugin Setup, then optionally Alt-Chain Payments.
Existing installs upgrade in place; no schema migration needed at activation (alt-pay tables are created lazily on first activation of the alt-chain feature).
What's new
Added
- Alt-chain payments. Customers pay for a Cardano NFT with BTC, ETH, or SOL. Per-mint deterministic deposit addresses, server-side watcher, price-locked invoices, refund + sweep tooling per chain.
- Batch mints. 1-5 NFTs per Cardano transaction, one wallet signature.
- Wallet network gate. Four layers refuse to proceed when the customer's Cardano wallet is on a different network than the site (catches the "paid in BTC, can't sign because wallet was on mainnet" failure mode).
- Resume banners for in-flight alt-chain payments. Per-chain localStorage sessions survive page reloads.
- Refund + sweep admin tooling per chain. Real on-chain txs, signed by the same pure-PHP crypto stack.
- filemtime() asset cache busting so any future plugin update auto-busts every browser cache.
Changed
AnvilAPI::buildMintTransactionsignature: added$quantity = 1. Default behavior is unchanged.- Step 2 modal: tighter spacing so the receipt fits without scrolling.
- Wallet picker no longer lists Nami (defunct).
Fixed
- Receipt info note unreadable on dark theme (duplicate light-theme
!importantrule removed). - After a successful alt-pay mint, reopening the modal could leave the receipt in alt-pay state with stale totals. New
kg:mint-completedevent wipes the overlay between mints. - Quantity stepper no longer interferes with the alt-pay overlay.
Security
- All signing keys (Cardano + alt-chain) AES-256-CBC at rest, key derived from WP salts.
- Decrypted xprvs scrubbed via
sodium_memzero+unsetintry/finally. - Alt-pay quote endpoint rate-limited 5/IP/min, 50/IP/day.
- HD address reuse: never. Cancelled invoices do not free the index.
See CHANGELOG.md for the full changelog and README.md for full feature docs.