  Some blockchain programs (smart contracts) have included serious security
vulnerabilities. Obsidian is a new typestate-oriented programming language that
uses a strong type system to rule out some of these vulnerabilities. Although
Obsidian was designed to promote usability to make it as easy as possible to
write programs, strong type systems can cause a language to be difficult to
use. In particular, ownership, typestate, and assets, which Obsidian uses to
provide safety guarantees, have not seen broad adoption together in popular
languages and result in significant usability challenges. We performed an
empirical study with 20 participants comparing Obsidian to Solidity, which is
the language most commonly used for writing smart contracts today. We observed
that Obsidian participants were able to successfully complete more of the
programming tasks than the Solidity participants. We also found that the
Solidity participants commonly inserted asset-related bugs, which Obsidian
detects at compile time.
