/smart-contract-languages

A curated collection of resources on smart contract programming languages

OtherNOASSERTION

Overview

This is a curated collection of resources on specialized programming languages executed by decentralized peer-to-peer networks, also known as blockchains.

Let us define a smart contract, or simply contract, as a piece of code created by a blockchain user and executed by a blockchain node. A smart contract language (SCL) is a programming language that is either used to write a smart contract directly, or is compiled to it.

Programming languages differ on multiple dimensions, such as paradigm and type system. Due to a very unusual execution environment, SCLs have a different set of trade-offs compared to earlier languages. This spawned multiple attempts at creating secure and expressive SCLs.

Pre-Bitcoin

Bitcoin

  • Bitcoin Script - a stack-based non Turing complete Forth-like language used to write script that determine whether a UTXO can be spent.
  • Ivy - a non Turing complete higher-level language that compiles to Bitcoin Script (announcement)
  • Simplicity - a typed functional programming language utilizing combinators blog post, another one
  • Rootstock - do they use their own language?
  • BitML - a process calculus based language, compiles to Bitcoin script

Ethereum

  • Ethereum bytecode - a Turing complete stack-based language executed by the Ethereum virtual machine (EVM)
  • Solidity - a high-level imperative statically typed language compiled to EVM (docs)
  • LLL - a "low-level Lisp-like language" compiled to EVM bytecode (blog post, series of blog posts)
  • Viper - a high-level language compiled to EVM (announcement of formal tools from RV)
  • Bamboo - a high-level "formal-verification-friendly" language compiled to EVM
  • functional-solidity-language - pretty much self-descriptive :)
  • eWASM - a restricted subset of WebAssembly for Ethereum contracts
  • Serpent - a Python-like high-level language compiled to EVM (deprecated due to security issues with the compiler)
  • Mutan - a C-like language compiled to EVM (deprecated)
  • Idris - a pure functional language with dependent types; Pettersson and Edström used it to write contracts that compile to EVM via Serpent
  • JULIA (IULIA?) - an intermediate low-level language (blog post)
  • Babbage - "a mechanical smart contract language"
  • Pyramid - An EVM backend for SICP Scheme
  • L4 - a language "based on deontic modal logic", presented at Devcon 2 (Sep 2016)
  • SolidityX - a typed-superset of Solidity

DSLs

  • Findel - a non Turing complete financial DSL inspired by a S.P.Jones' work
  • the language from the paper by Egelund-Müller et al
  • Chorus - a financial contractual markup language by Firmo network
  • ADICO - a domain-specific language to support the contract modeling process

Other blockchains

Other links