add contract abstraction with its own storage