Release Notes

October 4, 2021


  • Optional Minimal Amount setting is added for markets. You can specify the minimal amount of an order for any instrument. Any created orders with less than minimal amount will be rejected and will not be displayed in Transactions > Orders.

  • The minimal column width of the tables is set. Therefore some emails and nicknames may not fully display and will be shortened. You can hover the cursor over to display the full name.

  • Improved forming of Commissions > Users and Commissions > Assets pages by using a single GET /backoffice/pnl/actual API method upgraded with new request parameters and response fields.

  • User nickname is added to Balances > Users and Balances > Assets XLS reports.

  • The format of data which contains user registration and last login date is changed from DD.MM.YYYY to DD.MM.YY.

  • The Status filter is no longer required for the Commissions > Users page.

Bug Fixes

  • Fixed an issue due to which the bot without the defined configuration was unavailable for enabling or editing.

  • Fixed bot statuses indicators for Settings > TVB page, which were incorrectly displayed in different modes of the page representation.

  • Fixed an issue with the date filter due to which the To date was unable to autofill after defining the From date.

  • Fixed search by email on the Transactions > Trades page.

September 9, 2021 [BE]

General Improvements

  • New cache implementation for locked funds. The cache value updates each time an order or withdrawal operation is performed.

  • Users with Hedging role are included in trading alarms on trade amount, PnL triggers, and Arbitrage triggers.

  • Users with Support role can now cancel working orders again.

  • Account and Trade reports can now be sent only as a stack to improve data consistency. Sending a single report operation became unavailable.

  • Increased maximum simultaneous connections for trading bots up to 150.

  • New mechanism of filling blanks in avg_rates table. Added a new job that constantly scans the table and informs about any blanks.

B2BX Improvements

  • Reworked PnL calculation mechanism. Fixed several logical issues, which affected the existing formula. All user PnL data is revised and displayed according to the new algorithm.

  • New market added: LINK/USDT.

  • Market depth is increased up to 100/100 bid-ask spread.

  • 15% order price deviation was implemented to all markets.

Bug Fixes

  • Fixed PriceDeviation issue, that didn’t allow to set the price above the spread for limit orders. The PriceDeviation check is also canceled for market orders.

August 31, 2021


  • Added several prompts for fields on the Add User form. They will inform you about the password policy, and if the entered email is already being used.

  • Redesigned date filter. Date From and Date To fields are now combined into a single field.

Bug Fixes

  • Fixed an issue that caused records duplication in Trades XLS report.

  • Fixed an error that could appear due to the long loading time on the Commissions > Assets page.

  • Fixed Transfer ID field on Transfers page, which displayed incorrect value.

  • Fixed an issue, due to which users with Support and Admin roles could not authorize after changing password.

  • Fixed search by asset on Settings > Assets page.

  • Fixed an issue that caused the Enable Two FA switch not to save its state without reloading the page.

  • Fixed an issue in the mobile application that caused the Add Tier form to open when editing a tier.

  • Fixed an issue in the mobile application that caused invisible buttons to be present on the VIP Commission page.

August 26, 2021 [BE]


  • The price validation mechanism was implemented to prevent users from placing orders at too high or too low prices. When placing an order, if the price deviates from the current market price above the set value, an error will be returned, and the order will be rejected. The following endpoints are affected:

    • POST /back-api/backoffice/market

    • PUT /back-api/backoffice/market/{market_id}

    • GET /frontoffice/api/info

  • For any market, the ability to set the minimum order volume in the base currency was added. Also, validation was added for the “allowed” amount when creating and updating an order. The following endpoints are affected:

    • PUT /back-api/backoffice/market/{market_id}

    • GET /frontoffice/api/info

  • gRPC transport for IOrderProcessor was implemented along with OrderProcessorGrpcService.

  • The method of storing rates to root asset was improved for better PnL calculation.


  • New validation mechanism was implemented which is used when creating or changing bot configs.

  • Bots are now using gRPC endpoints for placing and canceling orders.


  • gRPC connection method was changed from cookies to token due to latency degradation.

Bug Fixes

  • Fixed an issue due to which the GET method back-api/antifraud/trades returned orders instead of trades.

  • Fixed an issue due to which the OrderMatcher service could cause the CPU overload.

August 17, 2021


  • Single sign-on (SSO) authentication scheme was implemented for front office and back office services.

New in Commissions

  • When adding a new VIP commission, Group Name dropdown list is displayed instead of Group ID.

New in Transfers

  • The Account field was removed from filters.

  • New status Awaiting Confirmation was added.

New in Settings

  • In Markets, the Status field is added to the list of markets.

Bug Fixes

  • Fixed DOGE rate to root asset calculation.

  • Fixed an error, which occurred when the VIP commission was added to a group for the first time.

  • Fixed some errors related to Roll-Back functionality.

  • Fixed Detail button in Balances > Users.

  • Fixed pop-up message informing about the necessity of user Frozen status when reverting a trade.

  • Fixed an issue which caused some fields to be missing in XLS reports.

July 15, 2021 [BE]

B2Trader Admin

  • Commission > Users page and report presentation were revised. Previously the list contained many users with no commission applied. Now it is possible to view the users, who performed trades during the specified period.


  • Now users can cancel their limit orders on markets with Paused status.

  • The min_amount field is now available when creating or editing a market. The field defines the minimum amount of an order in the base currency of the market.


  • The Price field is no longer used in trading bots requests. ExecutionPrice and RequestedPrice fields are used instead.

  • The RateToRootAsset field is now available by API key for trading bots.


  • Further performance increase. The maximum order book depth was increased to 100 levels (50 bids + 50 asks).

Other Improvements

  • The .NET Core was upgraded to version 3.1, including the following NuGets:

    • Microsoft.AspNetCore.Identity.EntityFrameworkCore

    • Microsoft.EntityFrameworkCore

    • Microsoft.EntityFrameworkCore.InMemory

    • Microsoft.EntityFrameworkCore.Relational

    • Npgsql.EntityFrameworkCore.PostgreSQL

  • Invalid order book subscriptions are now disposed of, which solved the problem with their unnecessary stockpiling.

  • OM memory limit is increased.

June 24, 2021 [BE]


  • Enabled HTTP Strict Transport Security. Application access is now available only using HTTPS in order to prevent users from connecting to it over unencrypted connections.

Client and Internal API

  • When subscribing to a WebSocket Channel, the complete current state is returned. All subsequent responses contain only updates, Summary.

  • Added update counter — version. On restart, the counter is reset. At the first snapshot, the counter is initialized and incremented on subsequent updates.

  • Added method GET frontoffice/api/orders?OrderId={orderId}, which returns information about the placed order. You can specify orderId (long) or clientOrderId (guid) in the query string parameters. If an order is received by clientOrderId, the current open order for this account is returned. If there is no open order, then the last order with clientOrderId for this account is returned. Note that method GET frontoffice/api/orders/{ClientOrderId} is now obsolete.

  • Changed responses for several methods:

    • executionPrice — new field, applicable for Market and Limit orders

    • requestedPrice — new field, applicable for Limit orders

    • price — obsolete field, for Market or Stop orders it is equal to executionPrice, for limit orders it is equal to requestedPrice. It is preferable to use executionPrice and requestedPrice instead of price.

    Full list of methods for which responsiveness has been changed:

    • GET frontoffice/api/orders/{orderId}

    • GET frontoffice/api/orders/my

    • GET frontoffice/api/order_history

    • DELETE frontoffice/api/orders/{orderId}

    • DELETE frontoffice/api/{userId}/orders/{orderId}

    • POST frontoffice/api/order

    • Private WebSocket Method /ws/account. Channel name “OpenOrders”


  • A performance boost was obtained. As a result, the maximum Order book depth was increased to 60 levels (30 bids + 30 asks).


  • Added the OrderType (Limit or Market) field to the message reports for OrderAmountAlerting.

June 14, 2021

New in Transfers

  • Changed information icon for reverted transfers. Now they are easier to distinguish from other transfers in the list.

New in Transactions

  • In Trades, the table header is now fixed and remains visible when scrolling.

New in Balances

  • The Asset tab with detailed information added to the asset details.

New in Commissions

  • In asset details, From-To filters for trades are now active.

June 1, 2021


  • A сopy button has been added to most pages of the Admin Panel (previously it was available only for the Users section). The copy button is displayed when you hover over a line and allows you to quickly copy the necessary information.

    A complete list of pages in the admin panel where information copying is implemented:

    • In the Users section — the Email and Nickname fields

    • In the Trades section — the Trade ID and Order ID fields

    • In the Orders section — the Order ID field

    • In the Trader Monitor section — the Email field

    • In the Roll-back section — the Email field

    • In the Arbitrage (Arbitrage triangle / Trading rates) section when receiving the results — the User ID field

New in Settings

  • The new TVB (Traded Volume Bots) subsection was added. It contains tools for managing exchange system bots. You can now view a list of bots; users with Admin role can also edit bot settings and create new bots.

    The two types of bots are available: Market-Maker bot and Chart bot. The set of adjustable parameters depends on the type of bot.

New in Dealing

  • Arbitrage triangle results are now displayed in an updated table. By clicking on a row in the table, you can view the details: side, date of the last order, instrument, and amount. This allows to display situations where there are more than three results.

Bug Fixes

  • Fixed an issue due to which it was possible to specify not only numbers for pagination.

  • Fixed an issue that caused incomplete data when exporting Commissions.

  • Fixed preloader for asset details in Commissions/Assets.

  • Fixed incorrect display of the Export button in Balances/Users.

  • Fixed incorrect behavior of the Total PnL (USD) field in Totals when opening filters in Commissions/Assets.

  • Some minor fixes in the mobile version.

May 27, 2021 [BE]

Markets and Assets for B2BX Exchange

  • The following instruments were added: TRXUSDT, LTCEUR, LTCUSDT, XLMBTC, DOGEUSDT, ADAEUR, DASHUSDT.

  • The following instruments were removed from the list of available markets: DASHBTC, XLMUSD, BTCGBP, ZECBTC, XEMBTC.

Client and Internal API

  • Now the Private Methods of the Trading API, such as Place order, Cancel order, Get orders history, Get trades history, require the unique nonce parameter, which is valid only for API key authentication. In the absence of this parameter,401 HTTP-code will be returned.

  • Market_data-new behavior of SignalR was also turned on. In order to prevent frequent market data restarts due to the overload, the channels will be closed if necessary on the back-end.

  • Insufficient fund notification for API orders was added. If a user does not have enough balance to make a trade during submitting order via API, the client now receives information on Insufficient Funds. We added the RejectReason field to OrderResponse, which will return RejectReason.InsufficientFunds.

  • To get the role(s) of an authorized user, GET /back-api/backoffice/user/${userId} method has been extended. Now, if the userId parameter is not provided, data of the particular authorized user is returned.

MarksMan Integration

  • A large and important story has been finalized for the B2Tarder-MarksMan integration. This is providing trade counterparty data through the CopyCat bot for MarksMan.


  • We changed the NATS connection logic between OM and FO — now there is one NATS connection in place between OrderMatcher and FrontOffice.

  • We changed the configuration of the ringbuffer for message sending. Now one ringbuffer is used for all instruments when sending messages.

  • We now store message index in base for messages with same SequenceId.

Other Tasks

  • To avoid spam, the logic of alarming to a dealing channel has been changed. For monitoring-b2bx-production-alarm (PnL weekly, monthly).

Bugs Fixes

  • OrderMatcher memory leak issue was investigated and fixed.

  • WSS update on order placment now provides execution price for limit orders — RequestedPrice field added to OrderInfoResponse.

April 27, 2021

New in Trades

  • New fields added:

    • Total Base Amount

    • Total Quote Amount

    These fields display the amount of the asset before the commission.

New in Admin Users

  • We have added warning messages about unauthorized actions by the admin user with the Support role.

    For example, when doing the following:

    • Changing user role

    • Changing market visibility

    • Changing market status

    • Adding a tier group or VIP commission level

Bug Fixes

  • A few more fixes in the reports:

    • Fixed empty data when exporting Commissions report

    • Fixed Total Amount Asset empty value when exporting Balances report

    • Fixed Created At and Completed At empty values when exporting Orders report

    • Fixed incorrect API value when exporting Trade Monitor report

  • Fixed an issue due to which the search by Nickname in Roll-Back did not work.

  • Fixed an issue that caused authorization failure after changing the password for users with Admin/Support roles.

  • Fixed an issue which caused incorrect Totals and Assets display when filtering data by user in Commissions.

  • Fixed missing info icons for PnL and Unrealized PnL in Commissions > Assets.

  • Fixed unstable preloader when applying filter by a large time period (several months).

  • Some minor fixes in the mobile version.

April 15, 2021 [BE]

  • The brand-new method was delivered that allows authorized users (via API Keys) to receive data on balances via a REST request GET /frontoffice/api/balances.

  • We increased security of the trading API (anti-replay protection). For Private Methods of the Trading API, such as Place order, Cancel order, Get orders history, Get trades history, the mechanism for signing requests will be changed. To ensure their integrity and authenticity, each request will include an arbitrary unique nonce, which will also be part of the signature. A transitional period will take 30 days. While transitioning, orders will be accepted both with and without nounce. At the end of the transition period, processing requests without nonce will stop. The transition period ends on May 19, 2021. Details and examples of the use of nonce will be indicated in the official documentation on the site.

  • A new sophisticated logic for holding client’s funds has been implemented, which should facilitate the work of the financial department. Now you need to confirm the previously initiated withdrawal request (WithdrawConfirm) or cancel it (WithdrawCancel) thus preventing back and forth transfers for the same ammount. Before withdrawal confirmation, the client’s funds are kept in the database in the hold mode, being blocked for trading and other operations.

  • In order to control the memory consumption in the Market-Data service, connections with increased memory consumption will be closed. The B2Trader team prepared a test SignalR channel — BookReconnections — analog of the “Book” channel. This is a special channel that closes the SignalR connection every minute and all channels open within this connection. By subscribing to it, you, as clients of our API, can test the operation of your code under the new logic. The transition is scheduled for May 19, 2021.

  • Now, when the sign-in request is sent (POST frontoffice/api/sign-in), the response contains Email, Id, Nickname of the user.

  • Fixed a bug that prevented the correct operation of the Risk Monitor service in the B2Trader admin (Dealing).

  • Last but not least, we are one step closer to the strategical task of making the liquidity deeper for B2Trader. In test mode, the Depth of Market on B2BX has been increased. For all instruments, 20 bids and 20 asks are now displayed. (we continue to monitor the load and reserve the right to roll back the change if necessary).

April 13, 2021

New in Users

  • We have added a new Hedging role for exchange uses. Users with this role are special financial accounts, they are not included in the PnL calculation and asset totals.

  • For exchange users, a Nickname is now displayed instead of Account ID in all sections. Quick search is also now available by nickname.

New in Transfers & Balances

  • To these pages we have added the RateToRoot Asset field, which displays conversion rate to the root asset of the exchange.

  • The Details field was added to Transfers. By clicking on the information icon, the details of the operation are opened. For reverted trades, order ID and trade ID will be specified.

New in Transactions

  • We have added the Commission Fee field to trades extended info. This value displays the percentage of commission charged from the client and the corresponding Tier level.

  • Filter by order status Reverted has been added.

Bug Fixes

  • Fixed an issue with Safari.

  • Fixed an issue due to which Trade ID was displayed in Counterparty Order ID when exporting Trades. Also, fixed incorrect values of Open Orders and Closed Orders when exporting Balances.

  • Fixed an issue due to which incomplete information about the execution price and base amount was displayed in the Transactions > Trades.

  • Fixed an issue with incorrect displaying of Open Orders of exchange users.

  • Fixed filters by order statuses in Historical Executions.

  • Some minor fixes in the mobile version.

March 25, 2021 [BE]

  • The general logic for setting daily trading volumes for Volgen Bots was fixed. Now the trading volume for the instrument is set in the amount of root asset (for B2BX — USD) and not in Base amount as before. This should smooth out the price impact on volume in a rising or falling market. In the future, these settings will be setup in the B2Trader admin and users will be able to configure the list of parameters for the charting bot and market making bot. Appropriate methods are prepared for this task.

  • Server time for public method GET /trading/frontoffice/api/info now contains UNIX time.

  • According to a request from a web-auditor company, when generating API KEYS on the back-end, some fields were deleted ("isWithdraw": false), the operability of some fields weke checked and insured ("isInfo": true, "isTrade": true).

  • We added a new type of alarm signal to #monitoring-b2bx-production-alarm, the alarm will be triggered (message arrives) when any valid user places an order (market, limit) with the order quantity exceeding 150,000 USD. The limit parameter is configurable.

  • As part of the large story — crypto-spot PnL — methods have been prepared that will allow the TR team to mark a kind of “fake” transfers and thus exclude them from the calculation for asset summary and PnL data. This is to provide correct information for dealing and finance departments.

March 23, 2021

New in Commissions and PnL

  • For this sections, we have added the ability to filter the Total data by date (from–to).

New in Dealing

  • Updates for Risk Monitor. Now data is updated each minute. We have also optimized the displayed fields.

New in Settings

  • Now Admin Panel users can change their Time Zone Preferences. Default data is taken from the user’s browser. When changing the time zone, all data will be displayed with corresponding date and time. The new setting is available in Preferences.

  • Now users with Admin role can change passwords of other Admin and Support users. New button is available in the Basic Info.


  • When exporting Trades, Orders, Commissions, Balances, and Transfers, the data is now fully consistent with the interface structure.

  • Сhanging user statuses now requires confirmation and shows a warning about the consequences. We also added some other useful hints to the interface, for example, explanations of market statuses.

Bug Fixes

  • Fixed an issue that caused incorrect Unrealized PnL displaying.

  • Fixed an issue that caused incorrect Run Monitoring button behavior on the Arbitrage page.

  • Fixed an issue due to which invalid order IDs were displayed in Historical Executions.

  • Fixed scroll in Commissions > Tiers.

  • Fixed incorrect behavior of the information icon when editing market.

  • Fixed an issue that caused errors when editing tiers.

  • Some other minor fixes in the desktop and mobile UI.

February 23, 2021

  • Fixed a minor bug when downloading a report for Transactions > Trades the user received an error.

  • In order to optimize the load for the backend while using Rollback data endpoint, the method was divided into two parts: receiving data on the list of users for a specified period, and separate part for receiving data on particular user trades that might be reverted.

  • Added a separate No Role User page to Settings. This page displays exchange users with no role assigned. When such exchange user is found, the admin user assigns him the appropriate role, and the exchange user is moved to the corresponding page and role group.

  • Removed asset search field in User Commissions details.

  • In Arbitrage, the Run Monitoring button now is active when requesting information for daily depth.

  • The design of the Logs page has been completely reworked. Now the most important information on operations is displayed in a list, and not in a popups as it was in the previous version.

  • Fixed minor bug with incorrect display of the time of creation for limit order in Users > Open Orders.

  • Fixed the problem of different formats of the applied commission in Settings > Markets and Commissions > Tiers. Previously both percentage values ​​and a multiplier were used.

February 18, 2021 [BE]

  • Data consistency between Trader Room and B2Trader database were upgraded and ensured once the matching parameter was added to B2Trader. Now no matter what changes happen to user email on TR side, B2Trader username i.e. TR liquidity account can be used to identify the exchange user.

  • Data consistency between Trader’s Room and B2Trader database were upgraded and ensured once the matching parameter was added to B2Trader. Now no matter what changes happen to user email on TR side, B2Trader username i.e. TR liquidity account can be used to identify the exchange user.

  • The high priority story with Arbitrage Monitoring was finally delivered. The new sophisticated algorithm is able to identify arbitrage cheating strategies with more than 3 market chains. This solution should ensure B2BX (and other exchanges) safety from arbitrage cheaters. For B2BX alarms comes in Slack and might be setup for other chanels on client requests.

  • For charting bot (Volgen) there was an issue of volume discrepancy between synthetics bot trading and trades generated based on external sources data feed. Despite the daily parameters Volgen ejected huge volume when switching from exchanges to synthetics. This was fixed.

  • New method was created for admin user password change. A user with an admin role is now capable to change the password for users with the admin and support roles. This is yet to be integrated into B2Trader admin for Settings/Admin Users.

  • Сondition for sending a notification on PnL to the Slack channel has been changed in order to avoid spamming. This is our last anti-spam issue as for Trades and Arbitrage it was incorporated before. If the user’s PnL limit has not changed from the last check the alarm wont be sent to Slack.

  • For root_asset information (method GET /marketdata/info/root-asset) the new field was added — rateScaleUi. This endpoint provides information for current exchange Root Asset (which is indicative currency for calculation and display of Totals — summary on commissions, summary on traded volume, summary and assets amount and PnL). This flag might be used by front-application to display sufficient precisions for root asset amounts.

  • Another important story for Volgen was finalized. We had an issue of ugly, unnatural amounts in Trade History. We needed more random and more human-like numbers in the Trade History widget. This was delivered with “Trade size rounding” task.

  • As a part of the task of providing From_To selection for Totals amounts in the B2Trader admin, GET /back-api/backoffice/pnl/total? was updated. Now it returns not only the total PnL for all users, for all assets for all time, but also the info for particular assets. This will hopefully help to reduce number of requests per backend in the Commissions/Assets section

  • Bug was fixed with /backoffice/user-card/find-user method. It provides information on user Bug in Logs (Admin B2Trader) — with not working pagination was fixed on back end.

  • At the request of the financial dep, we changed the mail to some users in the database API issue from WebAuditor was fixed (API private key is only visible in the UI at the time of creation, however hey were always sent to the client when accessing the key management page)

February 9, 2021

  • For exchange user balances a new information field was added — Available Amount Asset. It displays the available amount for withdrawal in crypto and is calculated as Total Amount Asset — Locked Amount Asset. Previously we displayed that info only in Root Asset (USD for B2BX and USDT for BTC-NEXT). It was delivered for all Balances tabs (Users > Balances, Transfers > Balances, Balances > Users, and Balances > Assets.

  • Some minor improvements were delivered for information fields names. This is basically connected to previous points and refers to the name of the balance fields (Total Amount Asset, Total Amount USD, etc).

  • For balance the calculation of the Available Amount USD was checked and fixed. There was a rare bug when this field, which displays amount free for withdrawal, returned incorrect numbers.

  • For the entire Admin Panel the timestamp was checked in all tabs and brought to the UTC time zone. Now no more different time for the same trade in Order Tab and Trades Tab.

  • Crypto Asset Amount filed was added in Dealing Risk Monitor. Though it is an old task, it will be a part of a new Risk Exposure story where Risk Monitor will be updated in streaming mode providing information about USD (USDT) amount for every asset exposure, asset traded volume and actual PnL.

  • Layout of fields in Trades tab was slightly changed. After discussion with parties involved it has been decided that Side, Base / Quote Amount and Execution Price information are much more important that trade id and order id for the admin user. Thus Trade and Order Ids were placed within the box and important info is accesable on the glance.

  • Some minor bugs were fixed.

February 9, 2021 [BE]

  • Online PnL notification bug in B2BX monitoring channel was fixed.

  • Incorrect quote/base volumes for markets in cmc endpoints (trades) when the trade amounts did not match the settings in the asset config.

January 27, 2021

  • On the Balances by Users page invalid roles of admin users (Support, Admin, Bot) were removed from the list as well as form balance reports. Now the page provides information on balances for the users which can actually have real balances.

  • Roll-Back page now displays user email ids (not UUID ids as before).

  • Exchange users can no longer stay with no-role assigned: a user can’t be saved in Settings without a role attached.

  • New important metric for user trade activity has been added: Unrealized PnL has been delivered to the Commissions (users / assets) and PnL (user / exchange asset) sections. It is applicable for user/users, asset/assets. Unrealized PnL provides information on a user profit/loss generated by an “open” position, meaning the asset price difference between the rate of the “in” operation (buy/deposit) and the average daily market price of a particular asset for the previous day.

  • Changed the logic of exchange reports generation for trades data and counterparty. Now the counterparty info for each trade is loaded by polling for trade id list, this will significantly speed up the loading of large amounts of data (BTC-NEXT reporting issue).

  • Important settings for markets and assets creation were added: amount scale and price scale for the market, and price scale for the asset (price scale determine the accuracy of the market quotation and amount scale sets the accuracy of the volume).

  • On the Users page requested information on the time of limit order placing is available now (Created At field).

  • Now exchange users can be searched by email on the Roll-Back page. Search filed have been updated and renamed.

  • The pagination was added for displaying a large amount of data on user trades details on the revert page.

  • Admin panels for all new B2Trader setups were added (Bitbull, Tomiex, Unistex).