Skip to content

Deprecate Botanix to keys-only mode on July 9, 2026#6044

Open
j0ntz wants to merge 1 commit into
developfrom
jon/deprecate-botanix-keysonly
Open

Deprecate Botanix to keys-only mode on July 9, 2026#6044
j0ntz wants to merge 1 commit into
developfrom
jon/deprecate-botanix-keysonly

Conversation

@j0ntz

@j0ntz j0ntz commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

CHANGELOG

Does this branch warrant an entry to the CHANGELOG?

  • Yes
  • No

Dependencies

none

Requirements

If you have made any visual changes to the GUI. Make sure you have:

  • Tested on iOS device
  • Tested on Android device
  • Tested on small-screen device (iPod Touch)
  • Tested on large-screen device (tablet)

Description

Asana: https://app.asana.com/0/1215088146871429/1215599238343239

Deprecate the Botanix asset by making it keys-only, date-gated to take effect on July 9, 2026. On and after that date keysOnlyMode becomes true for botanix: existing Botanix wallets remain accessible (keys-only, view/export) but new Botanix wallets can no longer be created. Before the date the asset is unaffected.

The mechanism is generic, not Botanix-specific. A reusable isKeysOnlyModeDate(date) helper returns true once the current time reaches the given date. botanix.keysOnlyMode is a getter that calls it, so the flag re-evaluates on each read and flips at the cutover without an app restart (the same dynamic-keysOnlyMode pattern as zcash and piratechain). Any future asset can be deprecated on a date by giving its entry the same getter. The helper is a hoisted function rather than a module-level const because SPECIAL_CURRENCY_INFO reads it during module initialization.

WalletListModal builds its keys-only exclude list per render inside useMemo instead of once at import, so the date-gated flag is honored mid-session.

Changes:

  • Generic isKeysOnlyModeDate(date) helper next to isZecBroken().
  • botanix.keysOnlyMode getter calling isKeysOnlyModeDate(new Date('2026-07-09')).
  • WalletListModal computes the keys-only exclude list per render.
  • Unit tests for the date helper (before, on, after the date) and the getter re-evaluation.

Once active, the flag flows through the existing create-wallet filter (isKeysOnlyPlugin removes keys-only assets from the create-wallet list).

Testing

  • tsc --noEmit: clean.
  • verify-repo.sh full suite and jest: passed (399 tests).
  • Unit tests: isKeysOnlyModeDate is false before 2026-07-09 and true on/after; the botanix.keysOnlyMode getter re-evaluates per read. Passing.
  • iOS simulator (proxy): built, installed, and ran the app. Botanix's plugin is disabled by default (BOTANIX_INIT: false) and enabling it crashes the debug build, and the gate is not active until 2026-07-09, so Botanix itself is not runnable in the sim today. Verified the identical keys-only create-wallet exclusion the gate feeds via the bitcoinsv proxy (hardcoded-enabled and keysOnlyMode: true): searching "Bitcoin SV" in "Choose Wallets to Add" yields no creatable result, while "Bitcoin" returns creatable BTC/BCH variants. Screenshots attached. The date logic itself is covered by the unit tests.

Note

Low Risk
Time-gated UI filtering for one asset using an established keys-only pattern; no auth or payment logic changes.

Overview
Botanix is scheduled to enter keys-only mode on July 9, 2026: existing wallets stay viewable/exportable, but new Botanix wallets are blocked from the create-wallet flow via the existing isKeysOnlyPlugin filtering.

The cutover uses a reusable isKeysOnlyModeDate(date) helper and a botanix.keysOnlyMode getter (not a fixed boolean) so the flag re-evaluates on each read and can flip mid-session without restarting the app.

WalletListModal now builds the keys-only exclude list inside useMemo on each render instead of once at import, so the same date-gated behavior applies when picking wallets. Unit tests cover the date helper and getter re-evaluation; CHANGELOG notes the deprecation.

Reviewed by Cursor Bugbot for commit 850bb20. Bugbot is set up for automated code reviews on this repo. Configure here.

@j0ntz

j0ntz commented Jun 19, 2026

Copy link
Copy Markdown
Contributor Author

📸 Test evidence

agent proof 1215599238343239 01 app running

agent proof 1215599238343239 01 app running

agent proof 1215599238343239 02 normal asset creatable

agent proof 1215599238343239 02 normal asset creatable

agent proof 1215599238343239 03 keysonly asset excluded

agent proof 1215599238343239 03 keysonly asset excluded

Captured by the agent's in-app test run (build-and-test).

Comment thread src/constants/WalletAndCurrencyConstants.ts Outdated
@j0ntz j0ntz force-pushed the jon/deprecate-botanix-keysonly branch from e82ad4e to 859156d Compare June 19, 2026 00:35
Comment thread src/constants/WalletAndCurrencyConstants.ts
@j0ntz j0ntz force-pushed the jon/deprecate-botanix-keysonly branch from 859156d to 1e96df5 Compare June 19, 2026 00:47

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 1e96df5. Configure here.

Comment thread src/components/modals/WalletListModal.tsx
@j0ntz j0ntz force-pushed the jon/deprecate-botanix-keysonly branch from 1e96df5 to 86687da Compare June 22, 2026 22:53
Add a generic isKeysOnlyModeDate date-gate helper and make the botanix
keysOnlyMode flag a getter that calls it, so the asset becomes keys-only
(watch-only) on 2026-07-09 without an app restart. Build the wallet picker
keys-only exclude list per render so the date-gated flag is honored
mid-session instead of being frozen at module load. The helper is generic
and reusable for deprecating any future asset by date, not specific to
Botanix.
@j0ntz j0ntz force-pushed the jon/deprecate-botanix-keysonly branch from 86687da to 850bb20 Compare June 22, 2026 23:02
@j0ntz

j0ntz commented Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

📸 Test evidence (generic keysOnlyMode date-gate, commit 850bb20) — bitcoinsv keys-only proxy

agent proof 1215599238343239 01 bitcoinsv excluded

agent proof 1215599238343239 01 bitcoinsv excluded

agent proof 1215599238343239 02 bitcoin search control

agent proof 1215599238343239 02 bitcoin search control

Captured by the agent's in-app test run (build-and-test).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant