Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
05f6897
docs(migration): design the v0.9.3 legacy identity import
lklimek Jul 13, 2026
453cd15
feat(migration): import legacy v0.9.3 identities and their keys
lklimek Jul 13, 2026
ce1205a
fix(migration): never let a corrupt vote queue strand identity keys
lklimek Jul 13, 2026
e2c0970
merge: bring the v1.0 parity batch into the legacy identity import
lklimek Jul 13, 2026
b56ebff
fix(migration): honor legacy alias fallback and guard identity-import…
lklimek Jul 13, 2026
39a97a9
fix(ui): replace uncovered symbol glyphs with proven-working characters
lklimek Jul 13, 2026
8e5fc43
fix(masternodes): label rotated evonode payout keys distinctly
lklimek Jul 13, 2026
b33e2b4
fix(fonts): vendor Noto Sans Symbols2 as an icon-glyph fallback
lklimek Jul 13, 2026
9c5c3df
fix(masternodes): remove Top up and Transfer from the detail screen
lklimek Jul 13, 2026
545d25c
fix(wallets): list addresses funded past the BIP44 bootstrap window
lklimek Jul 13, 2026
2ff3a9b
fix(wallets): show Shielded tab so tracked shielded funds are viewable
lklimek Jul 13, 2026
fcd4b71
fix(withdrawal): skip disabled keys when selecting a withdrawal signi…
lklimek Jul 13, 2026
3ae044e
fix(ui): make interface-mode indicator role-aware and consistently named
lklimek Jul 13, 2026
13dff83
refactor(wallet): audit legacy address-map retirement; pin resolver i…
lklimek Jul 13, 2026
0210c0c
fix(withdrawal): forbid owner-key withdrawals to a non-payout address
lklimek Jul 13, 2026
5f5614c
fix(migration): column-authoritative alias, per-row identity decode, …
lklimek Jul 13, 2026
64d611d
fix(tools): hide the ZK Proofs entry from the Tools menu
lklimek Jul 13, 2026
f14a326
fix(nav): hide legacy Identities and Dashpay tabs, rename Identity Hu…
lklimek Jul 13, 2026
a3f9a59
fix(masternodes): vertically center hash/copy/badge in detail header row
lklimek Jul 13, 2026
8f012b4
fix(masternode): align key labels with Dash Core DIP-3 ProTx terms
lklimek Jul 13, 2026
965f35d
fix(onboarding): land "Just Explore" on Identities hub, not DashPay p…
lklimek Jul 13, 2026
856608e
Merge branch 'feat/legacy-identity-migration' into fix/qa-followups-885
lklimek Jul 13, 2026
2b49d9a
fix(masternodes): clarify DPNS contest voting on the node detail screen
lklimek Jul 13, 2026
4587f25
fix(migration): surface unreadable votes alongside unreadable identities
lklimek Jul 13, 2026
9f10784
fix(masternodes): explain each V/O/P role letter on hover
lklimek Jul 13, 2026
9bd4daf
Merge branch 'feat/legacy-identity-migration' into fix/qa-followups-885
lklimek Jul 13, 2026
d99b713
fix(masternodes): keep load form open on error, lock submit while loa…
lklimek Jul 13, 2026
c2a9427
test(identity-selector): wire wallet backend synchronously in make_ctx
lklimek Jul 13, 2026
e8b6182
fix(migration): reconcile legacy keys into partially loaded identities
lklimek Jul 13, 2026
6c3b2b3
fix(qa-887): close three thepastaclaw blockers on PR #887
lklimek Jul 13, 2026
b454dba
fix(migration): only reconcile bare identities, never keyed ones
lklimek Jul 13, 2026
a77aa6c
fix(masternodes): reconcile load form on arrival instead of blindly u…
lklimek Jul 14, 2026
08242ec
fix(migration): revert legacy-identity reconcile to safe skip-if-present
lklimek Jul 14, 2026
07d50ee
fix(masternodes): gate the load on the submitted node, not the live form
lklimek Jul 14, 2026
0d01a19
fix(masternodes): have the load report its phase instead of inferring it
lklimek Jul 14, 2026
8a47745
fix(masternodes): stamp every load record with the load it belongs to
lklimek Jul 14, 2026
d038d1a
fix(masternodes): let a load claim only the record it was dispatched …
lklimek Jul 14, 2026
b6df532
fix(wallet): refuse root-key derivation at the chokepoint, not at a b…
lklimek Jul 14, 2026
60eab6e
fix(wallets): stop inventing metadata for addresses with no derivatio…
lklimek Jul 14, 2026
8baa6f4
fix(masternodes): bind entered key lifetime to the tab that holds them
lklimek Jul 14, 2026
5978b10
fix(withdrawal): lock the owner-key destination to the payout address…
lklimek Jul 14, 2026
5696884
fix(nav): route both root-screen fallbacks to the Identities hub
lklimek Jul 14, 2026
d7743d0
refactor(wallet): source send-autocomplete from the snapshot, not the…
lklimek Jul 14, 2026
b3a2fc6
fix(masternodes): pass None to begin_identity_load in secret-residenc…
lklimek Jul 14, 2026
71b9a01
fix(masternodes): claim the outstanding-load test via its own dispatc…
lklimek Jul 14, 2026
a86eabc
fix(identity-hub): stop DashPay profile flicker during sync
lklimek Jul 14, 2026
c0f92bf
fix(masternodes): sort the node grid by name and surface each node's …
lklimek Jul 14, 2026
82d9c10
fix(migration/wallet): QA follow-ups for #885 — resurrection, banners…
lklimek Jul 14, 2026
26eb55f
Merge branch 'feat/legacy-identity-migration' into fix/qa-followups-885
lklimek Jul 14, 2026
fb28249
fix(masternodes): relabel identity status as Platform-identity and ga…
lklimek Jul 14, 2026
a25dd84
docs(migration): mark the legacy-identity design as shipped and name …
lklimek Jul 14, 2026
7b43483
build(deps): document the deliberate bincode pin (RUSTSEC-2025-0141)
lklimek Jul 14, 2026
84b448a
fix(shielded): let the Verified badge name the balance it vouches for
lklimek Jul 14, 2026
c507b42
test(migration): extract the legacy-identity fixture into database::t…
lklimek Jul 14, 2026
b83dc03
docs(legacy-import): state precisely what read_identities logs
lklimek Jul 14, 2026
4e89da3
fix(migration): name the Identities screen in the unreadable-identity…
lklimek Jul 14, 2026
3326548
fix(migration): publish a terminal state for every migration failure
lklimek Jul 14, 2026
834bbb2
Merge remote-tracking branch 'origin/feat/legacy-identity-migration' …
lklimek Jul 14, 2026
c6176f4
fix(migration): prompt for wallet passwords before completing migration
lklimek Jul 14, 2026
3deda80
Merge remote-tracking branch 'origin/fix/qa-followups-885' into feat/…
lklimek Jul 14, 2026
8941c6c
test(masternodes): assert the explicit Platform-identity status label
lklimek Jul 14, 2026
91dc077
Revert "fix(migration): prompt for wallet passwords before completing…
lklimek Jul 14, 2026
e4d29b4
fix(masternodes): drop the dead Expert-mode gate on the Platform-iden…
lklimek Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ serde = "1.0.219"
serde_json = "1.0.140"
serde_yaml_ng = { version = "0.10.0" }
tokio = { version = "1.46.1", features = ["full"] }
# Pin is deliberate; do not "fix" the audit warning by bumping. bincode is flagged
# unmaintained (RUSTSEC-2025-0141, INFO-level — no known vulnerability). The advisory
# covers *all* versions, so no bump can clear it: 2.0.1 is the last functional release
# and 3.0.0 is a tombstone whose lib.rs is a bare `compile_error!`. This crate encodes
# the on-disk wallet-secret envelopes and QualifiedIdentity blobs, so switching encoders
# changes the wire format of data users already have on disk — that needs a designed
# read-old/write-new migration, not a dependency bump.
bincode = { version = "=2.0.1", features = ["serde"] }
hex = { version = "0.4.3" }
async-trait = "0.1.89"
Expand Down
93 changes: 93 additions & 0 deletions assets/Fonts/Noto_Sans_Symbols2/OFL.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/symbols)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.
32 changes: 20 additions & 12 deletions docs/ai-design/2026-05-28-migration-tool/notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,19 +203,27 @@ idempotency is confirmed.

### `identity` (DET source file: `src/database/identities.rs`)

- **Source:** `identity` in `data.db`
- **Destination:** `identities.entry_blob` (typed BLOB column) in `platform-wallet-storage`
- **Mapping:** Deserialize DET's stored identity representation → serialize as
bincode-encoded `QualifiedIdentity` with a leading version byte prepended
- **Per-network split:** Yes
- **Gotchas:** Upstream schema uses a leading version byte in `entry_blob` for
forward/backward compatibility — this byte must be present and set correctly, or upstream
deserialization will silently produce garbage. Confirm the byte format with the
platform-wallet-storage author before implementing. This is the highest-risk table in the
migration.
> **SUPERSEDED (2026-07-13).** Design and task breakdown now live in
> `docs/ai-design/2026-07-13-legacy-identity-migration/design.md`. The entry below is kept
> for context; two of its claims are wrong. The destination is **not** upstream's
> `identities.entry_blob` — commit `b14bf32c` moved it to DET's own per-network k/v
> (`det:identity:v1` under `DetScope::Identity`, roster at `det:identity_index:v1`). And the
> version byte needs no agreement with the platform-wallet-storage author: `DetKv::put`
> prepends `kv::SCHEMA_VERSION` automatically, so an importer that goes through
> `AppContext::insert_local_qualified_identity` gets it for free.

- **Source:** `identity` in `data.db` (`is_local = 1 AND data IS NOT NULL`)
- **Destination:** `StoredQualifiedIdentity` in DET's per-network k/v — see the design doc
- **Mapping:** `QualifiedIdentity::from_bytes(row.data)` → restore `status` from its column →
`AppContext::insert_local_qualified_identity(&qi, &wallet_link)`. The `data` BLOB carries
**all identity key material**; there is no second key table in v0.9.3.
- **Per-network split:** Yes — two-value filter (`mainnet` / legacy `dash`)
- **Gotchas:** The real risk is cross-version bincode compatibility of the `data` BLOB, not a
version byte. Every DET-side and dpp-side struct in the blob was verified unchanged between
v0.9.3 and HEAD; only the `bincode` rc.3 → 2.0.1 wire format is unproven, and a golden-blob
test closes it. Still the highest-risk table in the migration.
- **Status:** DONE for new-install path — see commit `b14bf32c` (identities + tokens →
per-network k/v). Migration tool still needs to import legacy rows with the version-byte
contract correct.
per-network k/v). Migration tool still needs to import legacy rows.

---

Expand Down
Loading
Loading