Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
399 commits
Select commit Hold shift + click to select a range
610179f
docs(rs-platform-wallet-storage): log V002-V004 in SCHEMA.md migratio…
lklimek Jul 13, 2026
8fd222c
docs(qa): adversarial review of #4113 provider-key persistence (Marvin)
lklimek Jul 13, 2026
c1349e6
fix(platform-wallet-storage): never delete pre-derived platform-node …
lklimek Jul 13, 2026
1df6169
fix(platform-wallet-storage): validate provider entries at write time
lklimek Jul 13, 2026
33d18ac
test(platform-wallet-storage): adversarial recheck of #4113 union/con…
lklimek Jul 13, 2026
7b56929
fix(platform-wallet-storage): reject conflicting keys at one node-key…
lklimek Jul 13, 2026
ad0164c
docs: design for asset-lock proof blob rehydration fix (#4133)
lklimek Jul 15, 2026
8f9c5f7
fix(platform-wallet-storage): tighten secrets/ error diagnostics & lo…
lklimek Jul 15, 2026
59f65e7
fix(platform-wallet-storage): log SqlitePersister open() and delete d…
lklimek Jul 15, 2026
081d055
fix(platform-wallet): retry transient persister failures in register_…
lklimek Jul 15, 2026
f7ab81f
fix(platform-wallet-storage): surface provider node keys and guard xp…
lklimek Jul 15, 2026
38ea7c9
fix(platform-wallet-storage): close error-handling gaps in sqlite sch…
lklimek Jul 15, 2026
da92ee9
docs(platform-wallet): make store()'s transient-failure retry contrac…
lklimek Jul 15, 2026
8417dc8
fix(platform-wallet-storage): rehydrate asset-lock proof blobs via wi…
lklimek Jul 15, 2026
ae01482
fix(platform-wallet): release wallet-event adapter on failed load; ty…
lklimek Jul 15, 2026
bdc7bf5
fix(platform-wallet-storage): route third from_script site through Ad…
lklimek Jul 15, 2026
95742a0
test(platform-wallet-storage): fully-populate both proof variants; dr…
lklimek Jul 15, 2026
66cea08
revert(platform-wallet-storage): drop the V004 migration — no pre-rel…
lklimek Jul 15, 2026
2878bd5
docs(dpp): pin the internally-tagged serde/bincode hazard at its defi…
lklimek Jul 15, 2026
40c08c5
merge: fold in secrets/ error-handling-coverage fixes (PR #3968)
lklimek Jul 15, 2026
fde795b
merge: fold in sqlite/schema/ error-handling-coverage fixes (PR #3968)
lklimek Jul 15, 2026
ee2b5d7
merge: fold in persister/orchestration-layer error-handling-coverage …
lklimek Jul 15, 2026
d210cae
Merge branch 'feat/platform-wallet-storage-rehydration' of https://gi…
lklimek Jul 15, 2026
d18020f
test(platform-wallet,dpp): QA-002/003/004 — honest Drop-release seman…
lklimek Jul 15, 2026
c992523
Merge remote-tracking branch 'origin/v4.1-dev' into feat/platform-wal…
lklimek Jul 15, 2026
a111e37
fix(platform-wallet-storage): resolve v4.1-dev merge fallout
lklimek Jul 15, 2026
1ce14ec
fix(platform-wallet-storage): resolve v4.1-dev merge fallout (content)
lklimek Jul 15, 2026
884a6cd
Merge remote-tracking branch 'origin/feat/platform-wallet-storage-reh…
lklimek Jul 15, 2026
77278e7
fix(platform-wallet-storage): lift provider node keys onto the persis…
lklimek Jul 15, 2026
fd26d4e
test(platform-wallet-storage): regenerate V001 fixture, fix remaining…
lklimek Jul 15, 2026
3f2092c
fix(platform-wallet-storage): fail loud on unread FFI provider node keys
lklimek Jul 15, 2026
b7f3af9
Merge remote-tracking branch 'origin/feat/platform-wallet-storage-reh…
lklimek Jul 15, 2026
7956bb8
style(platform-wallet-storage): fix rustfmt violation in sqlite_versi…
lklimek Jul 15, 2026
b361e11
fix(platform-wallet-storage): persist typed public keys on core addre…
lklimek Jul 15, 2026
a536a26
chore(platform-wallet): rustfmt reflow of changeset re-export list
lklimek Jul 15, 2026
769deaf
docs(qa): mark qa-review-4113.md superseded by the #4127 pivot
lklimek Jul 15, 2026
83a28f7
fix(platform-wallet-storage): reject conflicting typed pool-key writes
lklimek Jul 15, 2026
3c26fc1
refactor(platform-wallet): share platform-node pool-insert logic
lklimek Jul 15, 2026
42da594
fix(platform-wallet-storage): reject untyped/malformed typed pool-key…
lklimek Jul 20, 2026
04c71e2
fix(platform-wallet): restore used platform-node pool bookkeeping on …
lklimek Jul 20, 2026
25e50bb
Merge branch 'v4.1-dev' into feat/platform-wallet-storage-rehydration
lklimek Jul 21, 2026
91cd3e3
fix(platform-wallet-storage): persist provider key accounts and platf…
Claudius-Maginificent Jul 21, 2026
8eacd6b
merge: forward-port outstanding PR #4117 review-feedback fixes onto P…
claude Jul 21, 2026
1980a10
build(deps): pin rust-dashcore to the dash-evo-tool integration branch
claude Jul 21, 2026
c01f74f
fix(wallet): migrate address pool state bookkeeping
lklimek Jul 21, 2026
69b4803
fix(wallet): reserve platform receive addresses
lklimek Jul 21, 2026
f376d32
merge: reconcile with origin/feat/platform-wallet-storage-rehydration…
claude Jul 21, 2026
1ce7be0
Merge remote-tracking branch 'origin/v4.1-dev' into merge-base/3968-v…
lklimek Jul 21, 2026
be76265
build(deps): refresh lockfile for rust-dashcore pin
lklimek Jul 21, 2026
fabcbf0
style(wallet): format merge resolutions
lklimek Jul 21, 2026
267599d
fix(wallet-storage): remove stale merge import
lklimek Jul 21, 2026
1662b3a
test(wallet): migrate payment checks to address state
lklimek Jul 21, 2026
6304208
fix(platform-wallet-storage): persist AddressState::Reserved timestamp
lklimek Jul 21, 2026
fe71552
fix(platform-wallet): retry transient startup load, fix stale used-bo…
lklimek Jul 21, 2026
a864315
fix(platform-wallet-ffi): dedicated transient/fatal codes for persist…
lklimek Jul 21, 2026
9fcee37
fix(platform-wallet-storage): parent-dir permission gate, shared id32…
lklimek Jul 21, 2026
2c9996a
Merge branch 'fix/3968-wallet-review-findings' into fix/3968-storage-…
lklimek Jul 21, 2026
154b696
Merge branch 'fix/3968-ffi-review-findings' into fix/3968-storage-rev…
lklimek Jul 21, 2026
904e549
Merge remote-tracking branch 'origin/v4.1-dev' into fix/3968-storage-…
lklimek Jul 21, 2026
ebbd15c
Merge remote-tracking branch 'origin/v4.1-dev' into fix/3968-storage-…
lklimek Jul 22, 2026
40fedf1
fix(platform-wallet-storage): gate identity BLOB columns before mater…
lklimek Jul 22, 2026
74d4fee
docs(platform-wallet-storage): disclose vault-header corruption ambig…
lklimek Jul 22, 2026
ed74114
fix(platform-wallet-storage): make connection-mutex poisoning permane…
lklimek Jul 22, 2026
032f791
test(platform-wallet-storage): exercise account-zero fallback through…
lklimek Jul 22, 2026
9d7cfea
refactor(platform-wallet-storage): drop dead core_utxos.account_index…
lklimek Jul 22, 2026
2830822
docs(platform-wallet-storage): fix stale capability rationale, disclo…
lklimek Jul 22, 2026
5e20040
fix(platform-wallet-storage): require minimum passphrase length
lklimek Jul 22, 2026
0cc257f
docs(platform-wallet-storage): clarify floor-target and passphrase-gu…
lklimek Jul 22, 2026
cb0f647
docs(platform-wallet-storage): resolve V001-mutability contradiction …
lklimek Jul 22, 2026
c19a4db
fix(platform-wallet-storage): correct CLI exit-code classification
lklimek Jul 22, 2026
e4bbd96
docs(platform-wallet-storage): strip ephemeral review-finding IDs fro…
lklimek Jul 22, 2026
9964031
fix(platform-wallet-storage): exclude plain readers during restore, h…
lklimek Jul 22, 2026
63e160b
feat(platform-wallet-storage): persist shielded viewing keys natively
lklimek Jul 22, 2026
e75f259
feat(platform-wallet): add delete_wallet to PlatformWalletPersistence…
lklimek Jul 22, 2026
be89caa
chore(deps): bump rust-dashcore pin to dash-evo-tool branch head (18c…
lklimek Jul 23, 2026
4a1ba64
Merge remote-tracking branch 'origin/v4.1-dev' into merge/v4.1-dev-in…
lklimek Jul 23, 2026
e9c9b74
fix(platform): reconcile confirmed UTXO height after wallet restart (…
Claudius-Maginificent Jul 24, 2026
3bd0cc5
Merge remote-tracking branch 'origin/v4.1-dev' into feat/platform-wal…
lklimek Jul 24, 2026
0e644e8
Merge branch 'feat/platform-wallet-storage-rehydration' of https://gi…
lklimek Jul 24, 2026
288a6ca
Merge remote-tracking branch 'origin/v4.1-dev' into feat/platform-wal…
lklimek Jul 24, 2026
3636aff
Merge remote-tracking branch 'origin/v4.1-dev' into feat/platform-wal…
lklimek Jul 27, 2026
0ed8b4d
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Jul 28, 2026
debf67b
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Jul 28, 2026
4ca05f5
chore(deps): update rust-dashcore dash-evo-tool branch
lklimek Jul 30, 2026
a15b680
fix(platform-wallet): thread AssetLockFundingAccount/drain into build…
lklimek Jul 30, 2026
a18bd15
test(platform-wallet): scope broadcaster mutex guard to satisfy clipp…
lklimek Jul 30, 2026
762c66c
fix(platform-wallet-storage): stop one bad script row from bricking a…
lklimek Jul 31, 2026
65bdbb1
fix(platform-wallet-storage): park duplicate-index identities instead…
lklimek Jul 31, 2026
d78c4bd
docs(platform-wallet): document the parked-identity exception to the …
lklimek Jul 31, 2026
3cab9f5
Revert "docs(platform-wallet): document the parked-identity exception…
lklimek Jul 31, 2026
a402a88
Revert "fix(platform-wallet-storage): park duplicate-index identities…
lklimek Jul 31, 2026
6cb7f97
Revert "fix(platform-wallet-storage): stop one bad script row from br…
lklimek Jul 31, 2026
eec7c4d
fix(platform-wallet): derive spent UTXO scripts from the input's address
lklimek Jul 31, 2026
8c5ca08
fix(platform-wallet-storage): name auto-backups after their source da…
lklimek Jul 31, 2026
4b92230
fix(platform-wallet-storage): enforce key/identity co-ownership at th…
lklimek Jul 31, 2026
ae42330
fix(platform-wallet-storage): narrow identity_keys key to (identity_i…
lklimek Aug 1, 2026
0b5e2e1
feat(platform-wallet-storage): allow NULL identity_keys.wallet_id, gu…
lklimek Aug 1, 2026
3eb021a
feat(platform-wallet-storage): add load_unowned_identities accessor
lklimek Aug 1, 2026
c33807b
test(platform-wallet-storage): pin the unowned-scope guards nothing held
lklimek Aug 1, 2026
5931df7
chore(deps): update rust-dashcore dash-evo-tool branch
lklimek Aug 1, 2026
9d0dd5a
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Aug 20, 2026
026b1cb
chore(platform-wallet-storage): drop changes outside the storage crate
lklimek Aug 20, 2026
c5ff761
fix(platform-wallet): make the Drop-backstop wait valid on a multi-th…
lklimek Aug 20, 2026
69d21e3
test(platform-wallet): assert synchronous persister release on the gr…
lklimek Aug 20, 2026
69ed03b
revert(platform-wallet): stop reserving in next_unused_receive_address
lklimek Aug 20, 2026
125aff1
feat(platform-wallet-storage): add LoadPolicy, LoadCtx, and recovery-…
lklimek Aug 20, 2026
16a93e3
feat(platform-wallet-storage): make a recovery-mode persister read-only
lklimek Aug 20, 2026
9160fc4
refactor(platform-wallet-storage): thread &LoadCtx through the load r…
lklimek Aug 20, 2026
a5f054c
feat(platform-wallet-storage): fail closed on chain-lock and core-tx …
lklimek Aug 20, 2026
6bc2c64
feat(platform-wallet-storage): fail closed on an undecodable shielded…
lklimek Aug 20, 2026
7645953
feat(platform-wallet-storage): fail closed on orphaned identity rows
lklimek Aug 20, 2026
0296a7b
feat(platform-wallet-storage): fail closed on rehydration derivation …
lklimek Aug 20, 2026
386d1bb
feat(platform-wallet-storage): count the two ambiguous sites and prob…
lklimek Aug 20, 2026
3690837
docs(platform-wallet-storage): document the load policy across rustdo…
lklimek Aug 20, 2026
278b5c3
fix(platform-wallet-storage): stop inventing a derivation index for t…
lklimek Aug 20, 2026
d2e90d3
docs(platform-wallet-storage): state the load contract once, where it…
lklimek Aug 20, 2026
984007a
docs(platform-wallet-storage): mark the gap-limit derivation site as …
lklimek Aug 20, 2026
7fff2d3
fix(platform-wallet-storage): cap the implied work of a rehydration g…
lklimek Aug 20, 2026
06a1408
docs(platform-wallet-storage): reunite the address-reuse regression t…
lklimek Aug 20, 2026
92f6f04
refactor(platform-wallet-storage): split the stringly-typed rehydrati…
lklimek Aug 20, 2026
90df897
fix(platform-wallet-storage): put the remedy in the message the user …
lklimek Aug 20, 2026
1f411d9
fix(platform-wallet-storage): count tombstoned orphan rows one per row
lklimek Aug 20, 2026
c1fde0c
fix(platform-wallet-storage): make a tolerated site one joinable log …
lklimek Aug 20, 2026
8f18e94
fix(platform-wallet-storage): make one incident greppable under one name
lklimek Aug 20, 2026
c73f44d
refactor(platform-wallet-storage): give LoadDegradation's invariants …
lklimek Aug 20, 2026
a9ef3b6
refactor(platform-wallet-storage): stop exporting a type no caller ca…
lklimek Aug 20, 2026
a416a86
test(platform-wallet-storage): pin the unimplemented-table probe to t…
lklimek Aug 20, 2026
743b7ca
docs(platform-wallet-storage): say that a point read's tally is dropped
lklimek Aug 20, 2026
b4b540a
docs(platform-wallet-storage): mark the two unseedable sites NOTE, no…
lklimek Aug 20, 2026
1958a27
fix(platform-wallet-storage): cost an empty address pool as empty
lklimek Aug 20, 2026
f3ac199
fix(platform-wallet-storage): count every address a degraded site aff…
lklimek Aug 20, 2026
6bf10b8
test(platform-wallet-storage): pin the three snapshot promises nothin…
lklimek Aug 20, 2026
72395da
fix(platform-wallet-storage): reject duplicate (wallet_id, identity_i…
Claudius-Maginificent Aug 21, 2026
993584a
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Aug 21, 2026
05f6616
fix(platform-wallet-storage): let a store() own the flush of its own …
lklimek Aug 21, 2026
616963e
fix(platform-wallet-storage): keep pending writes when a delete abort…
lklimek Aug 21, 2026
7031fae
fix(platform-wallet-storage): judge identity slots on the state a cha…
lklimek Aug 21, 2026
2148788
docs(platform-wallet-storage): document that store_flush_seam is not …
lklimek Aug 21, 2026
86b4dd1
Merge remote-tracking branch 'origin/feat/platform-wallet-storage-reh…
lklimek Aug 21, 2026
17c022a
fix(platform-wallet-storage): purge legacy empty-script spent UTXO rows
lklimek Aug 21, 2026
4784de0
docs(platform-wallet): correct the derive_spent_utxos field notes
lklimek Aug 21, 2026
c86d237
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Aug 25, 2026
53c3d2d
fix(platform-wallet): keep the shielded changeset slot in every featu…
lklimek Aug 25, 2026
378d45a
fix(platform-wallet): surface unclean worker shutdown on rehydration …
lklimek Aug 25, 2026
4f0fd09
fix(platform-wallet-storage): drop the stale wallet_meta module decla…
lklimek Aug 25, 2026
cfc5c10
fix(platform-wallet): use dash-spv's own acceptance timeout instead o…
lklimek Aug 25, 2026
4dbf38f
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Aug 25, 2026
396977b
Merge branch 'fix/platform-wallet-broadcast-acceptance-timeout' into …
lklimek Aug 25, 2026
92f9681
fix(platform-wallet-storage): resolve two silent regressions from the…
lklimek Aug 26, 2026
aaab997
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Aug 27, 2026
e250391
fix(platform-wallet-storage): close six read-path and verification ga…
lklimek Aug 27, 2026
a844aec
docs(platform-wallet-storage): correct the duplicate-slot load claim
lklimek Aug 27, 2026
3f40708
fix(platform-wallet-storage): stop secret drop aborting on a shared l…
lklimek Aug 31, 2026
082f203
fix(platform-wallet-storage)!: give every secret its own guarded page…
lklimek Aug 31, 2026
62ee946
fix(platform-wallet-storage)!: close the memsec rework's review findings
lklimek Aug 31, 2026
67d4ef3
feat(platform-wallet-storage): let SecretString be edited in place
lklimek Aug 31, 2026
4a51102
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Sep 1, 2026
707ade4
fix(platform-wallet): move Drop impl above the test module
lklimek Sep 1, 2026
5ed3c58
fix(platform-wallet): retry a transient identity-scan verdict persist
lklimek Sep 1, 2026
8c141ba
fix(platform-wallet-storage): clear four clippy denials in test code
lklimek Sep 1, 2026
1931a76
feat(platform-wallet-storage): persist and restore the identity-scan …
lklimek Sep 1, 2026
a88b949
docs(rs-platform-wallet-ffi): fix non-ancestor merge SHAs in error-co…
lklimek Sep 1, 2026
6bc43a8
docs(rs-platform-wallet-storage): reconcile SecretStoreError enumerat…
lklimek Sep 1, 2026
7e1c9c4
docs(rs-platform-wallet-storage): fix identity_keys PK/FK/nullability…
lklimek Sep 1, 2026
3a4e2c9
docs(rs-platform-wallet-storage): reconcile SCHEMA.md gap disclaimer,…
lklimek Sep 1, 2026
0d88d9c
docs(rs-platform-wallet-storage): rename secret-serde to serde in SEC…
lklimek Sep 1, 2026
aa3b7fb
fix(platform-wallet-storage): refuse a host whose pages blow the lock…
lklimek Sep 1, 2026
3df58dd
refactor(platform-wallet-storage)!: drop three redundant Cargo features
lklimek Sep 1, 2026
135ebad
fix(platform-wallet): derive the shield-capacity regression fixture f…
lklimek Sep 1, 2026
efab0da
fix(platform-wallet-storage): raise the assumed page size to 16 KiB a…
lklimek Sep 1, 2026
68cb256
docs(rs-platform-wallet-storage): restate the locked-memory budget at…
lklimek Sep 1, 2026
b51cddc
chore(platform-wallet-storage): trim PR to storage-crate-only scope
lklimek Sep 2, 2026
c34e707
chore(platform-wallet-storage): drop asset-lock size gate, now its ow…
lklimek Sep 2, 2026
8fc62e0
docs(platform-wallet-storage): correct SCHEMA/SECRETS/README against …
lklimek Sep 3, 2026
1479d14
refactor(platform-wallet)!: drop delete_wallet from the persistence t…
lklimek Sep 3, 2026
ef32f6f
fix(platform-wallet-storage)!: rename retired Domain labels with a V0…
lklimek Sep 3, 2026
b9901bb
docs(platform-wallet-storage): state the database trust model and dro…
lklimek Sep 3, 2026
31eb272
Merge branch 'fix/3968-domain-label-rename' into chore/3968-integrate
lklimek Sep 3, 2026
e8df5ba
Merge branch 'docs/3968-schema-doc-accuracy' into chore/3968-integrate
lklimek Sep 3, 2026
d338055
fix(platform-wallet-storage): reject foreign-owned vaults and make se…
lklimek Sep 3, 2026
6ad7104
docs(platform-wallet-storage): fix the manifest feature wiring and st…
lklimek Sep 3, 2026
2b36843
fix(platform-wallet-storage): stop URI filename smuggling and harden …
lklimek Sep 3, 2026
07b1c1a
Merge branch 'fix/3968-secrets-hygiene' into chore/3968-integrate
lklimek Sep 3, 2026
3e75327
Merge branch 'fix/3968-misc-hygiene' into chore/3968-integrate
lklimek Sep 3, 2026
8c838bd
Merge branch 'docs/3968-schema-doc-accuracy' into chore/3968-integrate
lklimek Sep 3, 2026
201eaf3
fix(platform-wallet-storage): separate the fused load sites and stop …
lklimek Sep 3, 2026
dd60d32
Merge branch 'fix/3968-load-policy-cluster' into chore/3968-integrate
lklimek Sep 3, 2026
e280ffa
fix(platform-wallet-storage): tolerate an undecodable provider-pool s…
lklimek Sep 3, 2026
add5926
Merge branch 'fix/3968-load-policy-cluster' into feat/platform-wallet…
lklimek Sep 3, 2026
771a9e5
docs(platform-wallet-storage): correct apply_persisted_core_state cha…
lklimek Sep 4, 2026
cab6960
test(platform-wallet-storage): cover LoadSite::RehydrationMaintainGap…
lklimek Sep 4, 2026
36dc213
refactor(platform-wallet-storage): move rehydration engine out of util
lklimek Sep 4, 2026
2969cf7
refactor(platform-wallet-storage): wire up sqlite::rehydrate module
lklimek Sep 4, 2026
90a232d
fix(platform-wallet-storage): expose LoadSite explanations and render…
lklimek Sep 4, 2026
7e2698a
fix(platform-wallet-storage): wipe the Argon2 block matrix instead of…
lklimek Sep 4, 2026
bde4ce1
fix(platform-wallet-storage): pin the Tier-2 read ceiling to wire-sta…
lklimek Sep 4, 2026
0c52823
fix(platform-wallet-storage): stop rekey silently downgrading a harde…
lklimek Sep 4, 2026
e92b951
style(platform-wallet-storage): rustfmt the rekey header-ratchet test
lklimek Sep 4, 2026
122f167
fix(platform-wallet-storage): zeroize scheme-0 plaintext on every fai…
lklimek Sep 4, 2026
144a962
fix(platform-wallet-storage): close the write-path gaps that make a w…
lklimek Sep 4, 2026
7c5837e
merge: expose LoadSite explanations and render the CLI's full error c…
lklimek Sep 4, 2026
a6fb87c
merge: close the write-path gaps that make a wallet file un-loadable
lklimek Sep 4, 2026
84b20ff
merge: correct the chainlock rustdoc, cover the gap-limit site, move …
lklimek Sep 4, 2026
acf4c77
merge: wipe the Argon2 matrix, decouple the read ceiling, stop rekey …
lklimek Sep 4, 2026
35516cb
style(platform-wallet-storage): drop ephemeral review-finding IDs fro…
lklimek Sep 4, 2026
f7d7874
merge: bring feat/platform-wallet-storage-rehydration up to date with…
lklimek Sep 4, 2026
a32f408
fix(platform-wallet-storage): guard rehydration gap-limit input and e…
lklimek Sep 4, 2026
155a017
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Sep 4, 2026
8b635ac
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Sep 7, 2026
25fa274
Merge remote-tracking branch 'origin/v4.2-dev' into feat/platform-wal…
lklimek Sep 7, 2026
eafcff3
fix(platform-wallet-storage): stop reusing published migration versions
lklimek Sep 7, 2026
b3bba39
fix(platform-wallet-storage): restore published migrations and append…
lklimek Sep 7, 2026
ed1d93e
fix(platform-wallet-storage): admit the pre-split standard label inst…
lklimek Sep 7, 2026
894ac00
test(platform-wallet-storage): pin that a legacy standard row is not …
lklimek Sep 7, 2026
68bc412
fix(platform-wallet-storage): reconcile the pre-split standard row in…
lklimek Sep 7, 2026
9b32f1c
docs(platform-wallet-storage): state the reconciliation's real cost p…
lklimek Sep 7, 2026
28837e3
fix(platform-wallet-storage): isolate a failed wallet from the rest o…
lklimek Sep 7, 2026
9992476
fix(platform-wallet-storage): put the identity-key and contact reader…
lklimek Sep 7, 2026
33fb59c
fix(platform-wallet-storage): count the tables load() abandons instea…
lklimek Sep 7, 2026
095cf6d
fix(platform-wallet-storage): degrade balance-bearing rows by wallet,…
lklimek Sep 7, 2026
27cc030
fix(platform-wallet-storage): re-arm the compile-time guard on the ac…
lklimek Sep 7, 2026
c9c40d3
docs(platform-wallet-storage): name the subsystem and the constants t…
lklimek Sep 7, 2026
2cf9b46
test(platform-wallet-storage): name the colliding keys instead of dum…
lklimek Sep 7, 2026
23399c3
fix(platform-wallet-storage): restore InstantSend locks at load inste…
lklimek Sep 7, 2026
ef89a2b
refactor(platform-wallet-storage): make the public surface match what…
lklimek Sep 7, 2026
08252d1
fix(platform-wallet-storage): close four at-rest and open-path gaps i…
lklimek Sep 7, 2026
dbb8583
test(platform-wallet-storage): drop test-case IDs whose document the …
lklimek Sep 7, 2026
4e3a774
Merge fix/3968-round5 (2cf9b46773) into fix/3968-round5-wave3
lklimek Sep 7, 2026
5ec4761
Merge fix/3968-round5-wave3 into fix/3968-round5
lklimek Sep 7, 2026
41a2b2b
fix(platform-wallet-storage): make the secure-delete guard check the …
lklimek Sep 7, 2026
a3722d8
Merge wave 3's secure-delete guard fix into fix/3968-round5
lklimek Sep 7, 2026
64f763c
chore(ci): mark the dependency-audit gate as unreachable from pull re…
lklimek Sep 7, 2026
c887ef7
chore(platform-wallet-storage): merge v4.2-dev into rehydration branch
lklimek Sep 8, 2026
5690a07
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Sep 8, 2026
84d5335
test(platform-wallet-storage): make lock refusal coverage deterministic
lklimek Sep 8, 2026
a1efa24
test(platform-wallet): move platform-node pool entry tests to a follo…
lklimek Sep 8, 2026
3e0b232
test(platform-wallet): cover insert_platform_node_pool_entry and its …
lklimek Sep 8, 2026
4af855d
fix(wallet-storage): preserve legacy state during atomic migrations
lklimek Sep 8, 2026
c3cb94c
chore: merge latest PR branch into migration fixes
lklimek Sep 8, 2026
c01d229
refactor(wallet-storage): own provider rehydration helpers
lklimek Sep 8, 2026
3cab3e5
test(wallet-storage): adapt pool tests to updated storage base
lklimek Sep 8, 2026
459e062
Merge branch 'v4.2-dev' into feat/platform-wallet-storage-rehydration
lklimek Sep 9, 2026
8fab915
chore: cargo fmt
lklimek Sep 9, 2026
ec1e26f
fix(platform-wallet): align disabled shielded changeset traits
lklimek Sep 9, 2026
827d759
fix(platform-wallet-storage): reject unknown pool account labels
lklimek Sep 9, 2026
ee41927
refactor(platform-wallet-storage): use Zeroizing for Argon2 memory
lklimek Sep 9, 2026
0a61080
chore(platform-wallet): merge updated storage base into pool tests
lklimek Sep 9, 2026
31c8f94
chore(platform-wallet-storage): merge v4.2-dev persistence updates
lklimek Sep 9, 2026
16e0d47
chore(platform-wallet): merge latest typed persistence base into pool…
lklimek Sep 9, 2026
041a9d3
chore(platform-wallet): merge v4.2-dev after #3968 squash-merge
lklimek Sep 9, 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
180 changes: 180 additions & 0 deletions packages/rs-platform-wallet-storage/src/sqlite/provider_accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ pub(super) fn insert_platform_node_pool_entry(
mod tests {
use super::*;
use key_wallet::Network;
use platform_wallet::wallet::provider_key_at_index::derive_platform_node_public_keys;

fn provider_key_test_wallet() -> key_wallet::wallet::Wallet {
key_wallet::wallet::Wallet::from_seed_bytes(
Expand Down Expand Up @@ -227,4 +228,183 @@ mod tests {
.eddsa_account_of_type(AccountType::ProviderPlatformKeys)
.is_none());
}
#[test]
fn insert_used_platform_node_pool_entry_restores_used_bookkeeping() {
use dashcore::hashes::Hash;
use key_wallet::managed_account::address_pool::AddressPoolType;
use key_wallet::managed_account::managed_account_trait::ManagedAccountTrait;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

let wallet = provider_key_test_wallet();
let key = derive_platform_node_public_keys(&wallet, Network::Testnet, 8)
.expect("platform-node derivation")
.pop()
.expect("derived key");
let payload = dashcore::address::Payload::PubkeyHash(
dashcore::PubkeyHash::from_byte_array(key.node_id),
);
let address = dashcore::Address::new(Network::Testnet, payload);
let script_pubkey = address.script_pubkey();
let mut wallet_info = ManagedWalletInfo::from_wallet(&wallet, 0);

insert_platform_node_pool_entry(
&mut wallet_info,
Network::Testnet,
key.index,
address,
script_pubkey,
key.public_key,
true,
)
.expect("restore used platform-node row");

let account = wallet_info
.accounts
.provider_platform_keys
.as_ref()
.expect("managed platform-node account");
let pool = account
.managed_account_type()
.address_pools()
.into_iter()
.find(|pool| pool.pool_type == AddressPoolType::AbsentHardened)
.cloned()
.expect("AbsentHardened pool");
let restored = pool.addresses.get(&key.index).expect("restored entry");
assert!(restored.is_used());
assert!(pool.used_indices.contains(&key.index));
assert_eq!(pool.highest_used, Some(key.index));
}

#[test]
fn insert_platform_node_pool_entry_rejects_unmanaged_account() {
use dashcore::hashes::Hash;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

let wallet = provider_key_test_wallet();
let mut wallet_info = ManagedWalletInfo::from_wallet(&wallet, 0);
wallet_info.accounts.provider_platform_keys = None;
let address = dashcore::Address::new(
Network::Testnet,
dashcore::address::Payload::PubkeyHash(dashcore::PubkeyHash::from_byte_array(
[0x42; 20],
)),
);

let err = insert_platform_node_pool_entry(
&mut wallet_info,
Network::Testnet,
0,
address.clone(),
address.script_pubkey(),
[0x24; 32],
false,
)
.expect_err("an unmanaged account must not report a successful insert");

assert!(matches!(err, PlatformNodePoolError::NoManagedAccount));
}

#[test]
fn insert_platform_node_pool_entry_clears_stale_used_bookkeeping_on_downgrade() {
use dashcore::hashes::Hash;
use key_wallet::managed_account::address_pool::AddressPoolType;
use key_wallet::managed_account::managed_account_trait::ManagedAccountTrait;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

let wallet = provider_key_test_wallet();
let keys = derive_platform_node_public_keys(&wallet, Network::Testnet, 8)
.expect("platform-node derivation");
let mut wallet_info = ManagedWalletInfo::from_wallet(&wallet, 0);

for key in [&keys[2], &keys[7]] {
let payload = dashcore::address::Payload::PubkeyHash(
dashcore::PubkeyHash::from_byte_array(key.node_id),
);
let address = dashcore::Address::new(Network::Testnet, payload);
insert_platform_node_pool_entry(
&mut wallet_info,
Network::Testnet,
key.index,
address.clone(),
address.script_pubkey(),
key.public_key,
true,
)
.expect("insert used platform-node row");
}

for (key, expected_highest) in [(&keys[7], Some(keys[2].index)), (&keys[2], None)] {
let payload = dashcore::address::Payload::PubkeyHash(
dashcore::PubkeyHash::from_byte_array(key.node_id),
);
let address = dashcore::Address::new(Network::Testnet, payload);
insert_platform_node_pool_entry(
&mut wallet_info,
Network::Testnet,
key.index,
address.clone(),
address.script_pubkey(),
key.public_key,
false,
)
.expect("downgrade platform-node row to available");

let account = wallet_info
.accounts
.provider_platform_keys
.as_ref()
.expect("managed platform-node account");
let pool = account
.managed_account_type()
.address_pools()
.into_iter()
.find(|pool| pool.pool_type == AddressPoolType::AbsentHardened)
.expect("AbsentHardened pool");
assert!(!pool.used_indices.contains(&key.index));
assert_eq!(pool.highest_used, expected_highest);
}
}

#[test]
fn insert_platform_node_pool_entry_rejects_missing_hardened_pool() {
use key_wallet::managed_account::address_pool::AddressPoolType;
use key_wallet::managed_account::managed_account_trait::ManagedAccountTrait;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

let wallet = provider_key_test_wallet();
let keys = derive_platform_node_public_keys(&wallet, Network::Testnet, 1)
.expect("platform-node derivation");
let mut info = ManagedWalletInfo::from_wallet(&wallet, 0);
let account = info
.accounts
.provider_platform_keys
.as_mut()
.expect("managed platform-node account must exist");
for pool in account.managed_account_type_mut().address_pools_mut() {
pool.pool_type = AddressPoolType::Absent;
}

use dashcore::hashes::Hash;
let key = &keys[0];
let address = dashcore::Address::new(
Network::Testnet,
dashcore::address::Payload::PubkeyHash(dashcore::PubkeyHash::from_byte_array(
key.node_id,
)),
);
let result = insert_platform_node_pool_entry(
&mut info,
Network::Testnet,
key.index,
address.clone(),
address.script_pubkey(),
key.public_key,
false,
);
assert!(matches!(
result,
Err(PlatformNodePoolError::MissingHardenedPool)
));
}
}
33 changes: 33 additions & 0 deletions packages/rs-platform-wallet/src/wallet/provider_key_at_index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1043,6 +1043,39 @@ mod tests {
);
}

#[cfg(feature = "eddsa")]
#[test]
fn populate_platform_node_pool_validates_batch_before_mutating() {
use key_wallet::managed_account::address_pool::AddressPoolType;
use key_wallet::managed_account::managed_account_trait::ManagedAccountTrait;
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;

let wallet = seed_bearing_wallet(Network::Mainnet);
let mut keys = derive_platform_node_public_keys(&wallet, Network::Mainnet, 2)
.expect("platform-node derivation");
keys[1].index = 1 << 31;
let mut wallet_info = ManagedWalletInfo::from_wallet(&wallet, 0);

let result = populate_platform_node_pool(&mut wallet_info, &keys, Network::Mainnet);

assert!(matches!(result, Err(PlatformWalletError::KeyDerivation(_))));
let account = wallet_info
.accounts
.provider_platform_keys
.as_ref()
.expect("managed platform-node account");
let pool = account
.managed_account_type()
.address_pools()
.into_iter()
.find(|pool| pool.pool_type == AddressPoolType::AbsentHardened)
.expect("AbsentHardened pool");
assert!(
pool.addresses.is_empty(),
"an invalid later key must not leave earlier keys inserted"
);
}

/// The secp256k1 (owner / voting) families must derive at the DIP-3
/// account path applied EXACTLY once: `m/9'/coin'/3'/{2'|1'}/index`.
///
Expand Down
Loading