@@ -23,6 +23,7 @@ namespace Nethermind.Wallet
     public interface IBasicWallet
     {
         Signature Sign(Keccak message, Address address);
+        bool IsUnlocked(Address address);
         
         void Sign(Transaction tx, int chainId)
         {
//  Copyright (c) 2018 Demerzel Solutions Limited
//  This file is part of the Nethermind library.
// 
//  The Nethermind library is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
// 
//  The Nethermind library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//  GNU Lesser General Public License for more details.
// 
//  You should have received a copy of the GNU Lesser General Public License
//  along with the Nethermind. If not, see <http://www.gnu.org/licenses/>.

using Nethermind.Core;
using Nethermind.Core.Crypto;
using Nethermind.Serialization.Rlp;

namespace Nethermind.Wallet
{
    public interface IBasicWallet
    {
        Signature Sign(Keccak message, Address address);
        
        void Sign(Transaction tx, int chainId)
        {
            Sign(this, tx, chainId);
        }
        
        protected static void Sign(IBasicWallet @this, Transaction tx, int chainId)
        {
            Keccak hash = Keccak.Compute(Rlp.Encode(tx, true, true, chainId).Bytes);
            tx.Signature = @this.Sign(hash, tx.SenderAddress);
            tx.Signature.V = tx.Signature.V + 8 + 2 * chainId;
        }
    }
}
This look like a common case when we decide to move only one of a group of transactions but truly we should move ll of them or none. I think that if you need to check whether address is unlocked then you should use IWallet instead. IBasicWallet does not include locking / unlocking.