Simplicity: A new language for crypto-currencies and blockchains
© Shutterstock / dencg
Simplicity is a new cryptocurrency language which promises to further improve on existing cryptocurrency languages, offer improved safety and help you build useful smart contracts. Curious yet? Let’s have a look at it.
There’s a new language in town! Who knows, maybe Simplicity becomes the go-to language for crypto-currencies and blockchain applications. However, you should know from the very beginning that it is designed as a low-level language for executing smart contracts.
[Simplicity] aims to improve upon existing crypto-currency languages, such as Bitcoin Script and Ethereum’s EVM, while avoiding some of the problems they face. Simplicity comes with formal denotational semantics defined in Coq, a popular, general purpose software proof assistant.
This language also brings operational semantics defined with an abstract machine called the Bit Machine. This tool is used for measuring the computational space and time resources needed to evaluate Simplicity programs.
Owing to its Turing incompleteness, Simplicity is amenable to static analysis that can be used to derive upper bounds on the computational resources needed, prior to execution. While Turing incomplete, Simplicity can express any finitary function, which we believe is enough to build useful “smart contracts” for blockchain applications.
The design goals for Simplicity are:
- Create an expressive language that provides users with the tools needed to build novel programs and smart contracts.
- Enable static analysis that provides useful upper bounds on the amount of computation required.
- Minimize bandwidth and storage requirements and enhance privacy by removing unused code at redemption time.
- Maintain Bitcoin’s design of self-contained transactions whereby programs do not have access to any information outside the transaction.
- Provide formal semantics that facilitate easy reasoning about programs using existing off-the-shelf proof-assistant software.
Warning: “Simplicity is designed as a low-level language for executing smart contracts, rather than as a language for programmers write directly.”
It’s important to understand that Simplicity is a typed combinator language. Each well-typed Simplicity expression is associated with two types, an input type and an output type. Every expression denotes a function from its input type to its output type, according to the paper.
If you want to learn more about types, terms, and semantics, read the paper here.
“Simplicity is best characterized by what features it leaves out rather than what features it contains”
First of all, this language has no state and no named variables. It has no function types (which means no higher-order functions) and no unbounded loops or recursion — one can build smart contracts with state carried through loops using covenants without requiring unbounded loops within Simplicity itself.
Furthermore, Simplicity is designed as a low-level language interpreted by blockchain software.
It could be deployed in new blockchain applications, including sidechains, or possibly in Bitcoin itself. Simplicity has the potential to be used in any application where finitary programs need to be transported and executed under potentially adversarial conditions.
Right now, Simplicity is still a Blockstream Research & Development project, but there’s potential for its use in Blockstream products in the future, according to the blog post announcing the language.
The next step will be the release of a Simplicity SDK.