@@ -14,13 +14,17 @@
 //  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.Crypto;
+
 namespace Nethermind.Core.Caching
 {
     public interface ICache<in TKey, TValue>
     {
         void Clear();
         TValue Get(TKey key);
+        bool TryGet(TKey key, out TValue value);
         void Set(TKey key, TValue val);
         void Delete(TKey key);
+        bool Contains(TKey key);
     }
 }
//  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/>.

namespace Nethermind.Core.Caching
{
    public interface ICache<in TKey, TValue>
    {
        void Clear();
        TValue Get(TKey key);
        void Set(TKey key, TValue val);
        void Delete(TKey key);
    }
}
something smells here - we currently do not differentiate null and lack of value so this interface implementations will not behave properly? (or maybe?)