Require a validated cipher for wallet key operations The wallet store primitives that consume the wallet key re-unlocked the store internally and asserted on failure, while their callers gated on a separate valid_password check. A lock landing between the check and the assert aborted the node; wallet_lock concurrent with account_create or wallet_change_seed made this reachable over RPC. The primitives now take a wallet_cipher, obtainable only through unlock(), so an unauthenticated call cannot be expressed. Entry points unlock once and thread the cipher through, move and import unlock both stores up front, and change_seed reports a locked wallet through its result instead of relying on the racy is_locked pre-checks in the RPC, CLI and Qt callers. The insert_lock_race test flips the lock state while hammering inserts; against the old check-then-act pattern it crashes on the first run.
__________
Type: commit
Hash: eb1c140ed41001c812f8487b69e0492d62d80cd9
Created: yesterday
__________
gr0v1ty/nano-node:eb1c140ed41001c812f8487b69e0492d62d80cd9
| Test Case | Status | Duration | Median Deviation | Log | Graph |
|---|---|---|---|---|---|
| 5n4pr_conf_10k_bintree | PASS | 118 s | 4.0 s | - | Show |
| 5n4pr_conf_10k_change | PASS | 152 s | -6.0 s | - | Show |
| 5n4pr_conf_change_dependant | PASS | 115 s | 1.0 s | - | - |
| 5n4pr_conf_change_independant | PASS | 117 s | 1.0 s | - | - |
| 5n4pr_conf_send_dependant | PASS | 113 s | -3.0 s | - | - |
| 5n4pr_conf_send_independant | PASS | 117 s | 3.0 s | - | - |
| 5n4pr_rocks_10k_bintree | PASS | 124 s | 0.0 s | - | - |
| 5n4pr_rocks_10k_change | PASS | 163 s | -3.0 s | - | - |