58645bd7a7
Three improvements to WalletLock integration: 1. OpenExisting acquires the lock before decrypting the file — no point attempting a potentially expensive PBKDF2 derivation for a wallet already held by another instance. 2. OpenFromPath acquires the lock before CloseWallet — if the new wallet is unavailable, the current session stays intact instead of being silently destroyed. 3. OpenLoaded now receives an already-acquired WalletLock from the caller instead of acquiring it internally; TryAcquireWalletLock is removed. Callers that fail to open (wrong password, I/O error) dispose the lock in their catch blocks. Also fix CoinAmount.Of() to throw ArgumentException for unknown units instead of silently falling back to PLM.