Test Details Overview

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 Results

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 - -