Testing smart contracts with QuickCheck by John Hughes