This post originally appeared on Medium as part of a three-part series on Bitcoin smart contracts, and we republished with permission from Xiaohui Liu. Read part 1 here and part 2 here. We introduce a generic approach to skip on-chain computation in Bitcoin smart contracts, while ensuring security in the presence of malicious parties. In this approach, honest contracting parties can reach agreements peer to peer off chain and opportunistically decide to short-circuit complex computational alternative. Outsource example Alice asks Bob to compute an input\/witness\u00a0x\u00a0which makes\u00a0function\u00a0f(x)\u00a0return true. For example,\u00a0f\u00a0can be a hash puzzle, a solution to\u00a0a Sudoku puzzle\u00a0or\u00a0a Travelling Salesman Problem\u00a0(TSP). If Bob can provide\u00a0x, he is paid in\u00a0Tx1\u00a0as shown below. Otherwise, Alice can cancel and get her fund back in\u00a0Tx2\u00a0after time\u00a0t, which is pre-signed by Bob. This is dual to\u00a0Timed Commitment Scheme\u00a0(TCS) we introduced before, in the sense that Bob has to respond in time, not Alice. Outsource Tx Graph Outsource with cooperation Now let us modify the above contract\/protocol slightly. Bob, instead of redeeming Alice\u2019s fund by broadcasting\u00a0Tx1, shares his witness\u00a0x\u00a0with Alice directly. Alice can validate it off chain and ensure it is expected (i.e.,\u00a0f(x)\u00a0evaluates to true). Afterwards, she has two choices: \tShe refuses to sign even though she obtains Bob\u2019s secret\u00a0x. \tShe signs a new transaction\u00a0Tx3\u00a0without timelock\u00a0and sends it to Bob, who signs and broadcasts it to take the fund, as shown below. This is possible because the onchain part of the contract, in the form of Bitcoin Script\u00a0Outsource(alice), can be cancelled as long as Alice and Bob both sign, regardless of timelock.\u00a0Outsource(alice), having identical code structure as\u00a0TCS,\u00a0simply does not check locktime of the transaction spending the UTXO it resides in. Outsource Tx Graph with Cooperation Option In choice 1, Bob can still create\u00a0Tx1\u00a0and redeem Alice\u2019s fund. Alice cannot cheat and does not gain anything. In choice 2, Alice chooses to be honest and can enjoy significant benefits. Privacy Often, Alice does not want\u00a0x\u00a0to be public. Maybe it is the preimage in a hash puzzle, acting as token to access her rental car, or the answer to the TSP\u2019s problem is secret of her logistics company\u2019s route. x would be exposed in\u00a0Tx1\u00a0and be shielded in\u00a0Tx3. Efficiency f\u00a0can be a computationally intensive function, which has to be evaluated by all miners if\u00a0Tx1\u00a0is used. If\u00a0Tx3\u00a0is used,\u00a0f\u00a0is not evaluated by miners at all, since a contract function is only called when it is used in the spending transaction to unlock. Instead, only two signatures have to be checked, which can be many orders of magnitude smaller and independent of the complexity of\u00a0f. From Alice\u2019s perspective, she is incentivized to act honestly and choose 2 to gain privacy. Her honesty also offloads heavy computation off chain, reducing overall tasks on the Bitcoin network. Generalization The idea is applicable to all types of smart contracts where multiple parties can reach mutual agreements off chain, thus avoid heavy on-chain computation and gain additional privacy by following the contract\/protocol honestly. This is achieved with no loss of security and fairness, even if some parties try to cheat. It is expected to gain wide adoption in practice.