Skip to content

Releases: bitcart/bitcart-admin

Version 0.10.1.1

01 Nov 09:08
7281768

Choose a tag to compare

Fixes for cashtokens decimal formatting

Version 0.10.1.0

31 Oct 15:24
ee1e558

Choose a tag to compare

IMPORTANT: fix redis memory and worker CPU issues

There was an issue where background tasks were creating entries in redis but were not cleaned up. The scope of issue varies instance by instance, but
what is certain is there was a near 100% CPU usage in background worker. This is now fixed.
After installing the update ensure to run ./restart.sh to clear redis memory.

IMPORTANT: fixes for MATIC (POL) exchange rates

Coingecko has changed the id for MATIC, which means exchange rate was broken and defaulted to 1:1. This is now fixed. Update ASAP if you use MATIC.

Cashtokens support in BCH

UTXO-native smart contracts in BCH chain are there! It works the same way as our existing support for ETH and similar tokens, but thanks to UTXO powers, it doesn't need any specific fixes to accept payments from anywhere.

Daemons healthcheck notifications

In case a daemon is down, you can now receive notifications to your preferred source. For that, configure healthcheck store id in server policies and connect at least 1 notification provider. You will get notifications if daemons are down.

Allow customizing payment methods in invoice creation

It is finally possible, you don't need to create multiple stores anymore. What you can do now is create one store, and when creating invoice, override payment methods used for this specific invoice. You can't select wallets not connected to this store.

Advanced mark as complete dialog

Now mark as complete no longer uses the first available payment method to mark invoice as complete. You can select payment method used, and optionally set sent_amount and tx_hashes to whatever the value it was.

Add per-wallet transaction speed override

In some wallets or chains you may want to accept payments only after a higher degree of confirmations. The policy in store applied to all wallets by default, but now you can edit it on the wallets level. It is still capped to 10 confirmations for all currencies, and 32 for XMR. Maximum limits may be adjusted after user feedback.

Other changes

  • Fix for product_names and refunds
  • Better error handling of database errors
  • Provide metadata accessing functions to templates
  • Create an autocomplete mode for list items endpoint
  • Make schema parsing more reliable (frontend handles it itself)
  • Add support to exact filter by metadata fields
  • Refactor pagination, add new search_query hook
  • Expose product quantities in API and display in admin panel
  • Don't require json responses in IPN
  • Add ability to allow lightning incoming channels
  • Don't truncate ULIDs in admin panel

Version 0.10.0.1

29 Sep 13:11
afd7744

Choose a tag to compare

Fix excessive memory usage of ETH-based daemons (TRX not affected)

The memory usage was capped but still too high due to excessive caching, update if you want to reduce memory footprint.

Fix worker and backend graceful shutdown

Fix tokens list created date display

Version 0.10.0.0

28 Sep 22:21
8bde02f

Choose a tag to compare

New backend

Bitcart backend was rewritten from scratch to the new backend, which finally allowed us to upgrade to Python 3.12+, and now we use modern database ORMs
which are maintained and well-written.

When porting, the functionality was kept as it to preserve backwards-compatibility, but old plugins are not compatible with the new backend.

If you use the ETH plugin, install version 1.0.4 to use with the new backend.

The logs now feature a better format, and also they are colored if you view them from the terminal.

With the new powers Bitcart backend has, it is now possible to quickly add new features.

With this release, we encourage you to try contributing to Bitcart or developing your own plugin: this is the best time to do so!

Also the new backend has better transaction isolation, so some possible concurrency bugs are fixed.

Version 0.9.1.0

13 Sep 22:01
beac7d6

Choose a tag to compare

Last release containing some fixes before the new backend is going to be pushed

Version 0.9.0.0

05 Mar 12:11
de720b8

Choose a tag to compare

The long-awaited release

After almost 2 years, we now have a new release. It's not like we had no changes, we had over 200 commits of changes.

The thing is, after addition of ./install-master.sh script, it was sometimes easier to just run it without issuing a release.

But now it's the right time to make all new users receive proper Bitcart version by default

ETH payments plugin

As you may probably know, ETH payments is a complex topic. After years of research, we've checked all solutions available.

Bitcart by default uses detection of incoming payments by asking for address of the sender beforehand.

This works well detection-wise, but provides bad UX especially because exchange users can't send you payments. It doesn't require paying any network fees, but UX is suboptimal.

That's why we have created a plugin which allows to make UX the best possible, and also save on network fees more than any solution existing.

Check out plugins marketplace in your admin panel to get the plugin!

Plugins marketplace

Before this release, plugins were installed manually, often shared as files in our community.

Now, all plugins are listed in your admin panel's plugins page, and you can install it with a single click! (and another click to reload plugins).

Also marketplace added the licensing server, which allows us to sell paid plugins and make it possible to make Bitcart development sustainable for many-many years.

Seed server in daemons

Another issue that has occurred during years of helping users was that, some RPCs for non-BTC-based coins are unreliable. Sometimes they get closed, or it hits rate limits.

And because of that, many users complained about X coin not running error. Which means we would have to forward the same message over and over again because we can't instantly update RPC url in all instances quickly.

So now we've launched the seed server at https://seed-server.bitcart.ai (e.g. https://seed-server.bitcart.ai/eth)

By default daemons are configured to use the seed server, and every hour (configurable) it will check for updates in server list and update it in runtime.

Which means, if any issues occur, in at most 1 hour your daemons will be working properly.

It allowed us to insert some servers we didn't want to commit to bitcart repositories, which means better RPC quality by default as well.

If you want to opt out of that behaviour, you just need to set COIN_SERVER to some specific RPC url not equal to seed server URL, and it will work the old way.

Daemons RPC multiple providers support

As an additional feature to the daemons, you can now configure multiple RPC servers per coin. When sending requests, if one RPC fails, it tries the next from the list. If one RPC fails too many times, the default RPC for next requests is switched to the next RPC in the list as well.

You can set multiple servers via COIN_SERVER=server1,server2,server3. But note that by default seed server is used, which already provides multiple RPC urls for most coins.

Support using a separate archive node for internal transactions

For ETH-based coins, the issue was that bitcart actually wasn't parsing all transactions existing. For example some exchanges like Coinbase may use internal transactions sometimes. Internal transactions are special type which isn't returned by any of the default RPCs in any API call. It requires calling a special method which isn't available in most places.

But if you do have access to one, you can set COIN_ARCHIVE_SERVER and if the server supports tracing, it will also parse internal transactions.

Because it's a separate server it is used only for tracing calls, because those RPCs are rare and we really don't want to use their total requests limit.

It is assumed that COIN_SERVER is a fast, almost-unlimited server which can serve many requests we have, while COIN_ARCHIVE_SERVER is used only for it's main purpose.

Better notification providers

We've replaced the old notifications library with Apprise, which allows to use a variety of different notification providers.

Now you can even send SMS if you want to.

NOTE: you may need to re-check your notification provider settings as data format has changed.

New captcha provider

Now you can use Cloudflare Turnstile as a captcha provider, which is easier to use for end users. HCaptcha isn't removed, and now you can switch between different options.

Optional Sentry integration

If you want to use Sentry for error tracking, you can now do so by setting BITCART_SENTRY_DSN environment variable.

Better email settings

Before it was confusing to configure email servers with the "SSL/TLS" switch, which was not reflecting what it actually did. Now you can choose between a list of auth modes.

Other changes

There are too many changes to list, but here's some of them:

  • Payment ID field to invoices for better matching of paid methods
  • Add favicon to API docs
  • New commands in daemon: rescan_blocks, batch_load
  • Support for one-time calls in xpub data. This allows to execute request and close wallet right away.
  • Refactored email utilities
  • Better email verification on sign up
  • Refactored schemes with Python 3.9+ type hints
  • Upgraded to Pydantic v2
  • Changed from passlib to pwdlib
  • Require Python 3.11+ (with Python 3.12 support)
  • Use Ruff for linting and formatting
  • Use uv instead of pip-compile
  • Use human-readable migration names
  • Renamed alembic folder to migrations
  • Upgraded all dependencies
  • Electrums upgrade
  • Fixed TRX contract sending
  • Fixed processing of invoices dropped from mempool
  • Fixed explorers for BCH
  • Fixed DKIM signing of emails
  • Fixed USDT exchange rate when only Tron is enabled
  • Fixed network fee estimation
  • Fixed SMTP port 465 issues
  • Fixed contract getting
  • Fixed BNB payouts
  • Fixed currency-api link
  • Fixed HTML mode in notifications
  • Fixed ETH max amount payouts
  • Fixed quotes with more than one underscore
  • Fixed verification emails sending
  • Fixed XMR amount formatting for underpaid detection
  • Fixed TRX daemon startup
  • Fixed setting fields to empty string
  • Fixed sign up when email is required
  • Fixed XMR invoices stuck on paid
  • More robust handling of Decimals
  • Allow to edit global templates
  • Optimize daemon shutdown
  • Reduce log spam in notifications
  • Add BCH testnet4 and chipnet support

Version 0.8.0.0

13 Sep 22:31
edbaa8d

Choose a tag to compare

Name change: from BitcartCC to Bitcart

It is an important milestone in our project. Initially we couldn't take that name because it was already filled by some other projects
Now, after years there is only one bitcart: ours. In fact, it was used as bitcart in code before, and now the UI naming will catch up too
It is more consistent. Also from the community polls it is easier and many people used Bitcart instead of BitcartCC even before.

Together with a new name, we've got a new professional-made logo redesign

This release has breaking changes in docker deployment mostly due to changing of some files.

In order to do the update, run:

./update.sh
./setup.sh
contrib/upgrades/upgrade-to-0800.sh

The env vars are now stored in /etc/profile.d/bitcart-env.sh, and systemd file is also named bitcart.service now.

All plugins have been updated with new naming and logos

Electrums upgrade

With the new electrums and other daemons update, it fixed a rare but possible bug when BTC or LTC wallets got stuck forever. More robustness, more performance!

Tracing internal ETH transactions

If your RPC supports debug_traceTransaction method, then bitcart will also automatically detect internal transactions to your wallet! Unfortunately for now the default RPC doesn't support it, but bitcart is ready

Publish to multiple container registries

Now Bitcart docker image is published to dockerhub, ghcr.io and nirvati registries for better reliability!

Bug fixing

  • A bug with metamask button in admin panel have been fixed
  • Also, before when you added a new wallet with contract in a new blockchain, it broke the exchange rates system and everything was stuck until a reboot. This is now fixed
  • get_updates method now no longer crashes in eth-based daemons
  • Speed-up payouts loading, fix tron payouts
  • Add more data to new_transaction event in eth-based coins
  • Allow passing nonce directly and add getnonce method in eth-based coins
  • Add ability to customize gas price by a multiplier globally or by call in eth-based coins
  • Store time it takes for customer to pay for an invoice
  • Fix store POS for non-global store

Version 0.7.4.1

05 Apr 15:38
2d58522

Choose a tag to compare

Fix an issue with new store POS checkout for tor onedomain mode

Allow to disable POS calculator screen

Version 0.7.4.0

03 Apr 21:12
a44898f

Choose a tag to compare

New exchange rates engine

Because of recent issues of coingecko, as well of lack of some local currencies and other issues, our rate engine has been improved.

The exchange rates functionality have been moved from the daemon one layer up, to the Merchants API. If you use exchange_rate or list_fiat functions from daemons RPC protocol, please either use Merchants API directly (some usecases of SDK can completely be replaced by the Merchants API), or fetch exchange rates manually. This already gives you more control over how to do the fetching.

For the rest of the users, no breaking changes are made. In fact, the system is more reliable. It is now possible to add custom rate rules in store settings.

If your local currency is not supported, you can do something like

X_MYCUR = X_USD * fiat(USD_MYCUR)

You can use a variety of exchanges. Most of them are added via coingecko exchanges API, but kraken and fiat are added natively. fiat refers to currency API hosted by github pages, updated daily list of USD to other fiat currencies rates.

You can also use functions like mean or median to gather rate off multiple exchanges. In case one fails, others will be still counted in.

Optimizations in daemons

We continue to optimize the performance and memory usage of the daemons. An issue with infinitely growing list of events for polling has been fixed, it's now capped by 100 events per wallet max. Polling is not used by merchants API, so it was a useless use of memory and performance.

Store POS improvements

The store POS has received numerous improvements in this release.

An initial prototype of a keypad UI is now accessible. It is useful for in-person checkouts for example.

Also, store POS now uses admin panel's checkout page, which means there is now only one reference universal checkout page.

Misc changes

  • Fix order_id endpoint in large instances
  • Fix issues in payouts sending
  • Add batch delete for API tokens
  • Handle ValidationError in OAuth2 endpoint
  • Improve UX of admin panel's autocompletes

Version 0.7.3.0

26 Feb 00:03
4c9e1e5

Choose a tag to compare

Admin panel UI revamp

Admin panel has got a revamped UI - the datatables now display 10 items at a time in full screen mode. Also you will see horizontal scrollbars in less cases.

Navigation is now performed via a toolbar at the left. This allows us to expand the dashboard in future releases with new graphs and statistics

Zero-amount invoices have better formatting now

Important: fixes for template rendering

In case your server is a public instance with many users, update is recommended. In short: in some cases template rendering could allow executing commands inside the worker containers

Batch payouts

It is now possible to batch payouts in one transaction to save on costs, for btc-based coins only for now

Lightning network send amount support

Lightning network now displays sent amount correctly, and payment hash is filled in transaction hashes value

Important: fix memory leaks in daemons

After a large investigation, we've found the issues of the leak to be located in malloc() linux function. To resolve this complex issue, all our python docker images now include and use jemalloc memory allocator for better performance and to avoid memory fragmentation.

Misc changes

  • Don't process pending blocks for fresh created wallets to speed up some operations.
  • Close wallet after performing diskless methods to avoid it being loaded in memory