Source: http://se.ethz.ch/~meyer/publications/computer/contract.pdf