Bitcoin and Altcoin Wallets RC1 release notes

The long-awaited version six of Bitcoin and Altcoin Wallets for WordPress is ready!

About this release

Version 6.0.0-RC1 is a Release Candidate. This means that it will NOT be made available on wordpress.org. You can download this, and any subsequent release candidates from dashed-slug.net only.

Once I am reasonably certain that there are no serious problems with the new release, I will push a stable release to wordpress.org as 6.0.0.

Delays

I started work on it on August of 2020. At the time my best guess was that it would take me about 6 months to rewrite the entrire codebase, with the new requirements.

On January 2021, I thought I was 75% done. Instead, development took 2 full years. Turns out, estimating dev effort is hard!

Please read carefully before trying out version 6.0.0-RC1:

Testing the plugin

If you want to test the new plugin and it’s extensions, you can do so now! Just make sure you’re running PHP 7.2 or later!

Even though it’s not strictly necessary, it’s best if you deactivate all extensions (coin adapters and app extensions) before installing this RC1 version. You can find step-by-step installation instructions at the plugin’s homepage.

I have been testing the plugin and its extensions thoroughly, but it is still possible that there are some issues.

Please report any defects/issues at the migration forum, or email me.

Please do not report feature requests at this time, they will be ignored! For the time being, I will focus on addressing possible defects, and on helping users with the transition.

Do not be afraid to test the plugin. You can always install the previous version of the plugin (5.0.18) if something goes wrong. If you want to be extra safe, keep a backup of your site.

Data migration

If you have been using version 5.x, the plugin will prompt you to perform a data migration.

Take the time to read the documentation on data migration right after installing the plugin. You will be prompted to do so.

The documentation is built in to the plugin. Just install the plugin and navigate to https://example.com/wp-admin/admin.php?page=wallets_docs&wallets-component=wallets&wallets-doc=migration (where example.com is your site). You’ll find all that you need to know. You can also check out the complete installation instructions.

Most importantly, you must decide if you want to transfer only user balances or all transaction history. If you have too many transactions, you may decide to only transfer the balances. You can monitor, and even revert, the migration process via the migration tool.

The migration cron task, once started, copies data from the custom SQL tables to new custom post types, but does not delete or modify data. This makes it very safe, in case you need to revert to 5.0.18 for whatever reason. If you are certain that migration worked, you can drop the SQL tables yourself to save space. This new version of the plugin will never delete or modify these tables.

Extensions

Once you have installed the plugin, you can update the extensions to their latest versions.

extensionlast compatible with 5.xfirst compatible with 6.0.0
Exchange1.3.122.0.0
Airdrop2.1.33.0.0
Faucet1.8.02.0.0
Tip the Author2.2.03.0.0
WooCommerce Cryptocurrency Payment Gateway2.3.43.0.0
CoinPayments Adapter1.2.12.0.0
Full Node Multi Coin Adapter1.0.7is now built-in
Fiat Coin Adapter0.6.3-betais now built-in
Monero Coin Adapter1.1.42.0.0
TurtleCoin Adapter0.1.5-beta0.2.0-beta

As you install extensions, their documentation will be added to your Wallets API Docs admin screens. You can now easily refer to the most recent documentation at any time. Step-by-step installation instructions for each extension are available at the homepages for the extensions, and in the online documentation.

What’s new?

There’s way too many changes. All the promised features were implemented.

Post Types

Most importantly everything is now a CPT, and this makes editing easier via the admin screens. As an admin, you can create Wallets and Currencies independently. You can create, edit or even delete user Transactions and user Addresses. You can list Addresses and Transactions using filters, such as user, currency, status, tags. In fact, Currencies, Transactions, and Addresses all have their own non-hierarchical (i.e. tag) taxonomies, which makes it easier to keep things grouped and organized.

You will have to create Wallets and Currencies manually. These are not migrated. Do not create any Fiat currencies manually, because these can be created simply by entering a fixer.io key in the settings. Also don’t bother crearing currencies for CoinPayments, the new wallet adapter will take care of that for you automatically. Check out the installation instructions for details. There are now step-by-step installation instructions for the plugin and all its extensions. These are available in the built-in documentation, and on the dashed-slug.net pages. If you follow the installation instructions for the plugin, it will guide you on how to install the new wallet adapters and create Wallets and Currencies.

Currencies can now be used by users even if the wallets are not online. The wallets only need to be online for deposit and withdrawals, obviously. Users can view the status of all wallets via the new [wallets_status] shortcode.

The new CPTs defined by extensions are:

  • Airdrops (Airdrop extension)
  • Markets (Exchange extension)
  • Faucets (Faucet extension)

UI Templates

I have put effort to preserve compatibility as much as possible with previous versions. The classes in all UI templates are preserved. The frontend JavaScript spaghetti code is NOT preserved. If you have any JS code that worked with old versions of the plugin, these will likely no longer work. If you have created custom templates these will likely no longer work. This is because template files are now self-contained: Each template file encapsulates the entire CSS, HTML and JS code for one UI. No more obscure dependencies to wallets-front.js and the likes.

If you need to override any UIs in your theme or child theme, the process is the same as before: Copy any of the template files to wp-content/themes/YOUR_THEME/templates/wallets, or wp-content/themes/YOUR_CHILD_THEME/templates/wallets. You can edit the copies under your theme or child theme directory, and these copies will take precedence.

Shortcodes

There are no more static templates (template="static"). All templates are dynamic, as long as they are showing data for the current user. You can enter shortcodes that display data for a particular user using the user="" or user_id="" shortcode attributes. For shortcodes that require a currency attribute, you can specify the currency with a symbol="" attribute like before. However, in cases where this is ambiguous (multiple currencies with the same ticker symbol), the first currency having that ticker symbol will be used. Instead, you can use the unambiguous currency_id attribute, or coingecko_id. Refer to the Frontend chapter of the online documentation for details.

APIs

The templates now use the new WP-REST API. The old JSON-API is deprecated. If you need it, you can enable it in the settings.

The old PHP-API is still available as “Legacy PHP-API”. You can still use it. But you can also create/modify Wallets, Currencies, Addresses and Transactions in an Object-Oriented way, via the new classes. You will find example code at the PHPdocumentor microsite.

If you are a developer interested in building something that uses this plugin, let me know, I am happy to answer your questions.

Exchange rates

You can now define multiple currencies with the same ticker symbol. Currencies are now uniquely identified internally by their post_id. It is highly recommended (but not necessary) that you set the CoinGecko ID to all cryptocurrencies. CoinGecko is now the only exchange rate provider. If it is not set, the admin can easily set fixed exchange rates by editing a Currency. No more filters for setting fixed exchange rates.

Where’s the settings?

The settings for the plugin are now under the Settings menu, where they should be! Go to SettingsBitcoin and Altcoin Wallets and you’ll find the settings organized in a bunch of tabs. As you install more extensions, some extensions will add tabs to this screen.

Translations

For the parent plugin, it should now be possible to use crowdsourced wordpress.org translations, once the final 6.0.0 version is released there. For the extensions, the same method is in effect as before (provide .po and .mo files for the admin and frontend text domains).

Changelog

Here’s the full changelog for 6.0.0-RC1:

  • Change: Sourcecode rewritten from scratch and modernized for PHP7.x compatibility: Namespaces, callbacks, etc.
  • Change: Coin adapters removed and replaced with wallet adapters. Wallet adapters are a more versatile abstraction of external wallets.
  • Change: All amounts stored on the DB are now stored as integers. This avoids FP/rounding errors, but requires the admin to specify the number of decimals on a Currency explicitly.
  • Add: Wallets now have their own CPT and editor screen. Connection information for wallet APIs is now decoupled from currency details.
  • Add: Currencies now have their own CPT and editor screen. Currency details are now decoupled from wallet connection information details.
  • Change: Currencies are no longer identified by their ticker symbol, since these can clash. Currencies are now uniquely identified by their post ID.
  • Change: Transactions now have their own CPT and editor screen. Transactions are no longer stored in custom SQL tables, but are stored as posts.
  • Add: If a transaction is saved without a comment, a basic comment is entered as a title.
  • Change: Addresses now have their own CPT and editor screen. Addresses are no longer stored in custom SQL tables, but are stored as posts.
  • Add: When creating a new address, if admin sets the address string empty, a new address string is created from the wallet.
  • Add: Currencies, Transactions and Addresses can be organized via tags. These are implemented as WordPress custom taxonomies.
  • Add: When listing Wallets, these can be filtered by Wallet Adapter type.
  • Add: When listing Currencies, these can be filtered by associated Wallet or Currency tag.
  • Add: When listing Transactions, these can be filtered by Currency, User, Type (deposit/withdaw/move), Status (pending, done, cancelled, failed), or Transaction tag.
  • Add: When listing Addresses, these can be filtered by Currency, User, Type (deposit/withdaw/move), Status (pending, done, cancelled, failed), or Transaction tag.
  • Add: When editing Wallets, Currencies, Transactions, or Addresses, there are now metaboxes that let an admin easily jump between associated CPTs. For example, can click a link to go from a Currency to the Transactions of that Currency.
  • Add: A new “Migration” tool helps users transfer balances from the old custom SQL tables to the new format. Please study the documentation for details.
  • Add: A new Object-Oriented way to create and manipulate Wallets, Currencies, Addresses and Transactions. Lots of example code snippets included in the docs and PHPdocumentor files.
  • Add: A documented library of helper functions can be used by PHP developers to interface with the plugin. This lives in the DSWallets namespace.
  • Change: The old PHP-API is renamed as “Legacy PHP-API”, but not removed. Only the wallets_api_adapters filter is removed, since there are no more Coin Adapters.
  • Add: A new cron job scheduler that runs jobs based on priorities. Can be triggerred externally to improve site performance.
  • Add: New email queue system based on cron, handles large volumes of outgoing emails by sending them in batches.
  • Add: New cron job that iterates over defined currencies and pulls icons/logos from CoinGecko when possible. Adds images to the WordPress media collection, and sets the logo as Currency featured image. Admin can override the featured image.
  • Change: All the plugin’s settings are now placed under the Settings menu, and organized in tabs. Extensions, when installed, add tabs to the settings screen.
  • Change: Capability settings are now in a settings tab. The existing capabilities are retained. It is also possible to edit the capabilities related to the new CPTs (Wallets, Currencies, Addresses, Transactions).
  • Add: Fiat currencies are now created automatically by a cron job when you enter a fixer.io API key. Fiat currencies can be associated to the built-in wallet adapter that handles manual Bank transfers. The Fiat Coin Adapter extension is removed.
  • Change: It is now possible to define any number of Bitcoin-like wallets and currencies without any plugin extensions. The Full Node MultiCoin Adapter extension is removed.
  • Change: The UIs are now self-contained. All the HTML markup, knockout.js attributes, JavaScript code, and CSS rules are encapsulated within the template files, and are overridable.
  • Change: The UIs are now rendered independently. This improves frontend performance. If one UI crashes, the remaining UIs continue to work.
  • Remove: There are no more static templates. All templates are dynamic. This reduces confusion about how templates work.
  • Add: Currencies can be used by users even if not associated with a Wallet, or if the wallet API is unreachable. If wallet API is unreachable, only deposits and withdrawals will not be available, but on-site transactions are still possible.
  • Add: New shortcode [wallets_status] informes users if a wallet is online.
  • Change: The exchange rates mechanism now relies on CoinGecko. If the admin provides the CoinGecko ID for a Currency, the exchange rates are retrieved automatically via cron.
  • Improve: In the Currency editor, if a currency is not associated with a CoinGecko ID, it is still possible for an admin to setup a fixed exchange rate for a currency.
  • Improve: The admin can choose against which well-known currencies the exchange rates are stored (these are the “VS currencies” and correspond to CoinGecko data).
  • Improve: The frontend UIs, when they display equivalent amounts in other currencies, no longer display amounts in one fixed site currency. User can click to rotate between displaying the equivalent amounts in all available “VS currencies”.
  • Add: Daily withdrawal limits per Currency. Can be set for all users, or per user role.
  • Add: More information in the plugin’s widget in the dashboard screen.
  • Add: A new WP-REST API which utilizes the RESTful API mechanism built into WordPress replaces the old JSON-API.
  • Change: The old JSON-API is now marked as deprecated and is disabled by default. Can be enabled in settings for backwards compatibility.
  • Add: A new system that displays documentation in the admin screens. Some screens feature direct links to the relevant documentation. As extensions to the plugin are installed, their documentation books are added to the system.
  • Change: The user profile screen has been improved. Lists all balances held by a user and links to the user’s lists of Addresses and Transactions.
  • Change: The cold storage UI screens have been improved.
  • Remove: The frontend Widgets have been removed. Please use the shortcodes instead.

Roadmap

  • For a while, I will be waiting to see if users encounter problems with RC1. If so, I will release RC2, RC3, etc.
  • Once the plugin looks stable, I will upload it to WordPress.org as 6.0.0.
  • Normally, as per the dashed-slug Terms of Service, I only provide support for the latest version of each component. In this case I will make an exception and continue to support 5.18 for a few more months after releasing the stable version. I realise that not everyone can take the time to read this long article and upgrade right now!
  • On days when I am not too busy with support, I will be working on the Bitcoin Lightning wallet adapter. Please DO NOT ask me how long it will take; I’ve learned my lesson, and will not be giving time estimates any more!
  • I also have a cool idea about a paywall app, and I will be developing it on the side. Users will be able to pay using their crypto balances for subscription to a user role.
  • Once the Lightning wallet adapter is done, I would like to (finally) work on a native ERC-20 adapter, which should work equally well for Ethereum, Binance Smart Chain, Tron, etc. Don’t hold your breath. Realistically, it will be a long time before I get to this. I believe lightning must take priority. I am really impressed with Bitcoin LN and it must take precedence.

Feedback

If you have any questions about this release, or if you encounter problems with the transition from the previous version, please post them at: https://www.dashed-slug.net/forums/forum/migration/

If you encounter other issues with the release, you can post them at https://www.dashed-slug.net/forums/forum/general-discussion/ or, for extensions, at the appropriate support forum, as always. Please mention which version you are using.

You can also email me.

Please do not post issues about this RC release at the wordpress.org support forum, since RCs will not be uploaded there. Thank you!

Comments:6

  1. Thanks for your work. Welcome to 6.0.
    But I’m a bit disappointed. For me the main change in 6.0 was applying ERC-20. maybe i misunderstood

  2. Hello. I’m sorry you’re disappointed. It’s understandable. I also want to do tokens, and haven’t found the time, since ages ago. But I had clearly stated in the previous post that ERC-20 is something I will look at after this release. I now believe that Bitcoin Lightning will have to take even higher priority.

    I am currently waiting to see how many support requests I get with wallets 6. After I am convinced that I can release version 6 on wordpress.org, and no issues arise with the broader user base there (including the non-paying users), then I will start analysis on both. But keep in mind these things take time.

    If you get to try out 6.0.0, please post any issues you encounter at the support forum. I think the ability to edit the ledger via the admin interface, and to filter transactions and other data, is the killer feature of this release. Lots of people have been asking for this from the beginning.

    1. Great WordPress friendly improvement! .I know the implications of this upgrade. The site operator will be able to directly control it more stably.
      I know your hard work and I always support you.

      1. Thank you! Yes, my main focus was to turn everything into admin-editable post types. If you do get to try out RC1, please post any defects that you find.

  3. It’s finally here! Hurray. The wait nearly took the breath off me. I’m glad you made it through. Programming stuffs is no child’s play. More grease to your elbows as I look forward to walk the tall with you.

Leave a Reply

Your email address will not be published.