inheriting smart contracts