Forex Investment 6.1.2

29 July 2026

This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.

SECURITYMONEY SAFETYFOREXCRITICALAUDITVERIFICATIONPROFIT REPORTINGLANDING PAGE

Forex Investment v6.1.2

Release Date: July 29, 2026 Tags: SECURITY, MONEY SAFETY, FOREX, CRITICAL, AUDIT, VERIFICATION, PROFIT REPORTING, LANDING PAGE

Overview

A full review of the Forex Investment addon — every screen, the settlement schedule and both the user and admin sides.

The review found 61 defects. Ten of them let money be created or destroyed. This release fixes all of them.

The headline problem was that a forex account had no currency. Its balance was a single unit-less number, so depositing 1,000 USDT and withdrawing 0.5 BTC against "the same balance" handed the user 32,000 BTC. Approving that withdrawal then converted the payout a second time, so a 1 BTC withdrawal credited 64,444 BTC. Neither was theoretical; both were reproduced, and both are now blocked.

It also closes the verification gates. The forex requirements an operator switches on — account funding, withdrawals, investment plans and live account opening — were enforced by the screens alone, so every one of them could be had by anyone who asked the platform directly rather than clicking the button. All four are now checked when the request arrives.

Two changes beyond the defect list came with it: the platform's own side of every settled investment is now recorded, so profit reporting no longer reads fees as net profit; and the landing page has been rebuilt, dropping marketing claims — "99.7% Signal Accuracy", "100% Funds Protection" — that no install could substantiate.


Upgrade Notes

Requires Core v6.4.9 or higher. Everything below applies as soon as you update; no extra steps are required.

Existing forex accounts have no currency yet, and are locked to one by their next deposit or withdrawal — the same rule new accounts follow.

Forex accounts are now single-currency

An existing account holding a balance funded in more than one currency will refuse movements in any currency other than the first one it is used with after upgrading. This is intentional — a mixed balance has no correct interpretation — but operators with such accounts should settle them before upgrading.

Investment payouts now go to the forex account, not the spot wallet

Users withdraw them through the normal forex withdrawal flow, which requires admin approval like every other forex withdrawal. Previously a matured investment paid straight into the spot wallet, bypassing that approval.

The admin deposit screen is now a reversal screen

It reverses a completed deposit rather than approving a pending one, and the amount is not editable.


Changed

The landing page has been rebuilt

Visitors see a different page: new layout, new hero artwork, and no floating-particle background. It now uses the same landing structure as the platform's other addons.

Some copy changed with it:

  • Trust row: no longer claims "99.7% Signal Accuracy" or "100% Funds Protection". It now reads "Verified performance" — replaced by the platform's real win rate once there is one — and "Segregated accounts".
  • Getting started: the funding step no longer promises "Instant deposits" or "No hidden fees", against fees the operator sets themselves.
  • Hero statistics: on an install with no investment data yet, the row is hidden rather than showing a line of zeroes.
  • Theme: the page carried its own fixed palette, and so did the plan cards — painted with fixed dark colours regardless of theme, so on a light-themed install the plans showed as a block of dark tiles in the middle of a light page. The forex screens now follow the site theme in both light and dark.

Fixed

The verification gates were only on the screens

Forex verification requirements are now enforced by the platform, not just the page. The forex features an operator switches on under Admin → CRM → Compliance & Verification → Verification LevelsForex Account Funding, Forex Withdrawals, Forex Investment Plans and Forex Live Account Opening — were checked only by the screens that showed the buttons. Switching one on hid the button; it did not stop anyone who asked the platform to move the money directly. A user with no verification at all could fund a forex account, withdraw from it and open an investment.

All three money doors now check when the request arrives, and a user whose verification level does not carry the feature is refused. Provisioning a new live forex account is gated the same way.

The account gate is deliberately not fatal to the rest of the page: a user who is not cleared to open a new live account still gets their demo account and every account they already hold, so tightening the levels never locks an existing user out of their own balance.

This applies to installs with verification enforcement switched on. Nothing changes while it is off — the platform is never stricter than what the screens allow.

Money could be created

A forex account now has a currency. It is locked to one currency and one wallet the first time it is funded, and every later deposit or withdrawal must match. Before, the balance was a bare number every currency shared, and the account worked as a 1:1 converter between any two of them.

Approving a withdrawal no longer converts the amount a second time. A BTC withdrawal was credited roughly 64,000× what left the account. A forex withdrawal moves money between a user's own account and their own wallet in the same currency, so there is nothing to convert. USDT being worth 1 is why this was never noticed.

An admin can no longer inflate a withdrawal while approving it. The amount and fee were taken from whatever the approval screen submitted, so approving a 100 withdrawal as 5,000 credited 5,000 against an account that had given up 100. The figures now come from the request the user actually made; only the description is editable.

An investment's amount can no longer be edited after it is created. An admin editing an investment could change its amount, which changed what the investment paid at maturity without changing the principal already taken from the user's forex account — raising a 1,000 investment to 10,000 returned 10,000 at maturity against the 1,000 the account had actually given up, and lowering it did the reverse and kept the difference. To correct an investment, cancel it — which refunds the principal — and create a new one; the admin is told exactly that. Every other field on the edit screen still saves as before.

A negative investment amount no longer credits the forex account. The minimum-amount check was skipped entirely on any plan whose minimum was 0, and investing a negative amount added funds instead of removing them — so any user with a live account could create withdrawable money out of nothing.

Admin-created investments now take their principal. The investment was created without debiting anything, so one created with a past end date paid out both principal and profit on the next settlement run with nothing having been paid in.

The deposit fee is no longer charged twice. A 500 deposit at 0.5% took 505 from the wallet, credited 500 to the forex account and banked 2.50 — destroying 2.50 of the user's money on every single deposit.

Recovering a cancelled investment no longer pays the principal twice. Cancelling refunds the principal; recovering the investment then paid it again at maturity. Recovery now reclaims the refund first, and is refused when the account can no longer cover it.

Real money can no longer move against a DEMO account. Only the on-screen form checked this, so a demo account could be made to pay out real funds.

Money could be destroyed or stranded

A pending withdrawal can no longer be deleted. The amount had already left the user's forex account and was waiting on an admin decision — deleting it left the user short with no refund and no record. Reject it instead, which refunds properly.

Deleting a plan or a duration no longer destroys the investments using it. Removing a duration permanently deleted every investment on it, principal and history together. Disabling a plan was quieter but no better: its investments simply stopped paying out forever, with nothing on any screen to say so.

Deleting an active investment is refused. It removed the investment without returning the principal.

Cancelling from the admin edit dialog or the bulk selector now refunds. Only one of the three ways to cancel actually returned the user's money; the other two stranded it. All three now behave the same.

Settlement returns funds to where the principal came from. The principal leaves the forex account, but the payout was credited to a main wallet chosen from the plan — making every settled investment an unapproved withdrawal, paid in whatever currency the plan named regardless of what funded the account.

A user can hold more than one investment in the same plan again. A leftover database restriction meant a second investment in a plan failed at creation, and completing one while an older completed investment existed failed part-way through settlement — after which the investment was cancelled and only the principal refunded. The user lost the profit they had earned. The restriction has been removed.

Both money doors were closed

Deposits and withdrawals no longer require a live exchange connection. Fee calculation asked the configured exchange for its currency list and treated any failure as fatal, so on an install without working exchange credentials every deposit and every withdrawal failed with "Currency not found". The exchange is now only consulted when it can actually contribute a fee, and a failure costs that fee rather than the whole request.

Investments could be gamed

A duration must be one the plan actually offers. Every duration on the platform was offered on every plan. Because a plan's profit is a flat percentage that does not scale with time, a user could take a 30-day plan's full return in one hour.

A disabled plan no longer accepts money.

Settlement pays the percentage the plan advertises. Every screen showed the plan's profit percentage; settlement used a separate admin field that defaults to 0. A plan advertised at 15% paid exactly zero profit on every win.

Reporting told the truth about losses

A loss is recorded as a loss. A month in which investors collectively lost $10,000 was reported on the landing page as a $10,000 gain, painted green. Losses are now recorded and reported with the correct sign, including for past investments.

Settled investments now reach platform profit and loss. Nothing recorded the platform's own side of a forex investment. Profit reporting saw only the fees taken on deposits and withdrawals and counted them as net profit, so a month spent paying out winners read exactly the same as a month spent collecting from losers — an operator running generous plans could be steadily losing money while the report stayed green. Every settled investment now books its own side — the payout on a win, the retained principal on a loss — so the addon's real contribution to platform profit is visible for the first time, per currency. Recording the outcome is best-effort by design: a problem writing it can never strand a settled investment or hold up the user's payout.

Money totals name their currency. The landing statistics added up amounts across plans in different currencies and put a dollar sign in front — so 1.5 BTC counted as $1.50. The page now breaks the figures down per currency and headlines the largest single pool, named.

The admin dashboard's pending counters are real. Both were hard-coded to zero while displaying as clickable tiles linking to the queues — so an admin saw "0 pending" while users' withdrawals sat waiting with their money already debited.

The dashboard charts plot the data they were given. The monthly view silently omitted anything invested in the first nine days of any month, and the three-month view read as all zeros.

The admin forex dashboard says when a load fails. A failure was swallowed and every tile rendered as zero — indistinguishable from a platform with no activity at all. It now reports the failure and offers a retry, and a single failed background refresh no longer replaces a dashboard the admin is already reading; the figures on screen stay until fresh ones arrive.

The signal feature works for the first time

The addon shipped with an admin screen for signals, two ways to read them and a landing widget — and nothing anywhere that could actually assign a signal to an account. Every account's signal list was empty by construction, and every subscriber count was permanently zero.

Both ways of reading signals were broken independently as well, so the account-signals panel failed for every user, every time.

Assigning signals to an account now works from the admin panel, reading them works, and a user sees their own signals rather than every signal on the platform.

Admin screens that could not be used

  • Editing an account with a fractional balance failed on a field the admin had not touched. The only way to save was to round the balance and destroy the remainder.
  • Creating an account required a balance and a leverage value, neither marked as required in the form, so leaving them blank failed silently.
  • The recover button was closed to every admin except a Super Admin, whatever permissions they had been granted.
  • Bulk-activating signals deactivated them.
  • The deposit approve/reject screen could never act. Forex deposits settle instantly, so every row it listed rejected the admin's click. It is now a reversal screen: the forex account gives back what it was credited and the wallet is made whole, amount and fee together. A reversal the account can no longer cover is refused rather than pushing the balance negative.
  • Plans with contradictory numbers are refused. Transposing the limits (minimum 5,000 / maximum 100) saved happily and produced a plan no user could ever invest in.
  • A second account for the same user and type is refused. A duplicate made it arbitrary which account got debited, credited or refunded.

Withdrawal limits work

The daily and monthly limits shared a single reset, and the daily rollover overwrote it — so the monthly counter only reset after 30 consecutive days with no withdrawals at all. An active user hit the monthly cap and was then locked out permanently, unable to withdraw and unable to have pending requests approved. The two windows are now tracked separately.

Frontend

  • The invest form checked the wrong balance. It read the user's spot wallet while the investment is actually funded from the forex account, so a user who had deposited 5,000 into their forex account — exactly what the product asks — saw a balance of 0 and a disabled Invest button.
  • A lost connection during a deposit could double-charge. Retrying after a timeout that had actually gone through created a second deposit. It no longer can.
  • The verification notice told approved users to verify again. A fully approved user whose verification level simply did not include the forex feature was told to "Complete Verification" and sent to a page that already showed 100% complete — a loop with no way out. They are now told that a higher level is required, which is the thing that actually applies to them. The deposit, withdraw and invest screens also flashed that notice at signed-out visitors, and at everyone for the moment before their details had loaded; all three now show their normal loading state until they know who is asking. Applies to installs with verification enforcement switched on.
  • Deposit and withdraw screens quoted a hard-coded $5 fee against the percentage fees actually charged, promising totals that were never paid.
  • The deposit success screen told the user a deposit that had already settled was "PENDING approval" with a 5–15 minute wait.
  • The deposit confirmation showed "N/A" where the transaction reference belongs. Every successful forex deposit — not occasionally, always — finished on a receipt with no reference for the user to quote in a support ticket and nothing for the operator to match it against. The deposit's own reference is now shown.
  • The dashboard showed zeros for everyone, because it was reading data nothing on the page had loaded.
  • The landing page's "Premium Investment Opportunities" section never appeared for signed-out visitors, even though the plans it needed were being sent to the page.
  • The landing performance chart's hover readout never appeared. Hovering a month produced nothing at all: the readout was placed against the whole section rather than the bar under the pointer, which put it outside the section's edge, where it was clipped away. It now appears directly above the bar being pointed at, and shows the exact figure — $12,483, not the "$12K" the axis labels round to.
  • The plan list hid higher-tier plans by default, with the Filters button showing a filter the user never set.
  • A failed load rendered as an empty list forever — no error, no retry, just a permanent spinner or blank screen.
  • The transaction page's summary counted every transaction the user had ever made, contradicting the forex-only table directly beneath it.

Other

  • The fraud checks compared amounts without regard to currency — 15,000 JPY (about $100) was rejected while 9,000 BTC passed. They now compare in USD equivalent, and the investment ceiling is the plan's own configured maximum rather than a lower hidden limit that overruled it.
  • The "requires additional verification" hold on withdrawals never fired; it now triggers on unusual withdrawal frequency.
  • One admin-only screen could be reached by any signed-in user.
  • A missing plan returned a server error instead of a clear "not found".
  • The fiat fee was read from a field that does not exist, so fiat forex movements have always been free. The interface no longer advertises a fee that is not charged.
  • A leftover forex on/off setting that was reachable from no screen and read by nothing has been removed. The Extensions page is the switch.