Releases: bitcart/bitcart-admin
Version 0.10.1.1
Fixes for cashtokens decimal formatting
Version 0.10.1.0
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
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
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
Last release containing some fixes before the new backend is going to be pushed
Version 0.9.0.0
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
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.shThe 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_updatesmethod now no longer crashes in eth-based daemons- Speed-up payouts loading, fix tron payouts
- Add more data to
new_transactionevent in eth-based coins - Allow passing nonce directly and add
getnoncemethod 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
Fix an issue with new store POS checkout for tor onedomain mode
Allow to disable POS calculator screen
Version 0.7.4.0
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
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