how to make a smart contract