Smart contracts are computer programs that can be consistently
executed by a network of mutually distrusting nodes,
without the arbitration of a trusted authority.
Because of their resilience to tampering,
smart contracts are appealing in many scenarios,
especially in those which require transfers of money
to respect certain agreed rules
(like in financial services and in games).
Over the last few years many platforms for smart contracts have been proposed,
and some of them have been actually implemented and used.
We study how the notion of smart contract is interpreted
in some of these platforms.
Focussing on the two most widespread ones, Bitcoin and Ethereum,
we quantify the usage of smart contracts
in relation to their application domain.
We also analyse the most common programming patterns
in Ethereum, where the source code of smart contracts is available.