By design, smart contracts' data and computations are public to all participants. In this paper, we study how to create smart contracts with parameters that need to stay secret. We propose a way to keep some of the parameters off-chain, while guaranteeing correctness of the computation, using a combination of a commitment scheme and a zero-knowledge proof system. We describe an implementation of our construction, based on ethereum smart contracts and zk-SNARKS. We also provide a small example and a cost analysis of our approach.