How to write smart contract