{"id":13567405,"url":"https://github.com/s-tikhomirov/smart-contract-languages","last_synced_at":"2025-04-04T01:32:00.008Z","repository":{"id":151095199,"uuid":"116435337","full_name":"s-tikhomirov/smart-contract-languages","owner":"s-tikhomirov","description":"A curated collection of resources on smart contract programming languages","archived":false,"fork":false,"pushed_at":"2023-06-29T09:48:22.000Z","size":107,"stargazers_count":239,"open_issues_count":3,"forks_count":28,"subscribers_count":30,"default_branch":"master","last_synced_at":"2024-11-04T22:37:02.398Z","etag":null,"topics":["programming-languages","smart-contracts"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/s-tikhomirov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-01-05T22:58:13.000Z","updated_at":"2024-10-01T11:19:34.000Z","dependencies_parsed_at":"2024-01-21T21:12:51.776Z","dependency_job_id":"3231a898-e9b2-41a6-9942-ac1d69e2fd13","html_url":"https://github.com/s-tikhomirov/smart-contract-languages","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-tikhomirov%2Fsmart-contract-languages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-tikhomirov%2Fsmart-contract-languages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-tikhomirov%2Fsmart-contract-languages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-tikhomirov%2Fsmart-contract-languages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s-tikhomirov","download_url":"https://codeload.github.com/s-tikhomirov/smart-contract-languages/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247107816,"owners_count":20884793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["programming-languages","smart-contracts"],"created_at":"2024-08-01T13:02:30.645Z","updated_at":"2025-04-04T01:31:54.975Z","avatar_url":"https://github.com/s-tikhomirov.png","language":null,"funding_links":[],"categories":["Misc"],"sub_categories":[],"readme":"# Overview\n\nThis is a curated collection of resources on specialized programming languages executed by decentralized peer-to-peer networks, also known as blockchains.\n\nLet 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.\n\nProgramming languages differ on multiple dimensions, such as [paradigm](https://en.wikipedia.org/wiki/Programming_paradigm) and [type system](https://en.wikipedia.org/wiki/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.\n\n# Pre-Bitcoin\n\n* [A formal language for analyzing contracts](http://nakamotoinstitute.org/contract-language/) - an essay by Nick Szabo\n* [E](http://www.erights.org/) - referenced by Szabo\n\n# Bitcoin\n\n* [Bitcoin Script](https://en.bitcoin.it/wiki/Script) - a stack-based non Turing complete Forth-like language used to write script that determine whether a UTXO can be spent.\n* [Ivy](https://github.com/ivy-lang/ivy-bitcoin) - a non Turing complete higher-level language that compiles to Bitcoin Script ([announcement](https://blog.chain.com/ivy-for-bitcoin-a-smart-contract-language-that-compiles-to-bitcoin-script-bec06377141a))\n* [sCrypt](https://scrypt.io/) - a TypeScript-based DSL that compiles to Bitcoin Script running on Bitcoin SV\n* [Simplicity](https://github.com/ElementsProject/simplicity) - a typed functional programming language utilizing combinators [blog post](https://medium.com/@danrobinson/understanding-simplicity-implementing-a-smart-contract-language-in-30-lines-of-haskell-827521bfeb4d), [another one](https://iohk.io/blog/simplicity-and-michelson/)\n* [BitML](https://github.com/bitml-lang/bitml-compiler) - a process calculus based language, compiles to Bitcoin script ([article](https://eprint.iacr.org/2018/122))\n* [BALZaC](https://blockchain.unica.it/balzac/docs/) - a high-level language based on the formal model proposed in [[AB+18FC]](https://eprint.iacr.org/2017/1124.pdf)\n* [Miniscript](http://bitcoin.sipa.be/miniscript/) - a language for writing (a subset of) Bitcoin Scripts in a structured way, enabling analysis, composition, generic signing and more\n    * [Policy Language](http://diyhpl.us/wiki/transcripts/stanford-blockchain-conference/2019/miniscript/) - nicer language that compiles to Miniscript\n* [Sapio](https://www.coindesk.com/this-new-coding-language-could-help-unlock-bitcoins-smart-contract-potential)\n* [Minsc](https://min.sc/) - a high-level scripting language for expressing Bitcoin Script spending conditions based on Miniscript Policy\n\n\n# Ethereum\n\nActive:\n* [Ethereum bytecode](https://ethervm.io/) - a Turing complete stack-based language executed by the Ethereum virtual machine (EVM)\n* [Solidity](https://github.com/ethereum/solidity) - a high-level imperative statically typed language compiled to EVM. [Docs](https://solidity.readthedocs.io/en/latest/)\n* [Vyper](https://github.com/vyperlang/vyper) - a high-level language compiled to EVM ([announcement of formal tools from RV](https://runtimeverification.com/blog/?p=617)). [Docs](https://vyper.readthedocs.io/en/latest/)\n* [Fe](https://github.com/ethereum/fe) - a language inspired by Vyper aiming to achieve its goals. [Docs](https://fe.ethereum.org/docs/index.html)\n* [eWASM](https://github.com/ewasm/design) - a restricted subset of [WebAssembly](http://webassembly.org/) for Ethereum contracts. [Docs](https://ewasm.readthedocs.io/en/mkdocs/)\n* [Idris](https://github.com/idris-lang/Idris2) - a pure functional language with dependent types. [Docs](http://docs.idris-lang.org/en/latest/)\n* [Flint](https://github.com/flintlang/flint) - a type-safe, contract-oriented programming language specifically designed for writing robust smart contracts on Ethereum\n* [Formality](https://github.com/MaiaVictor/Formality) - an efficient programming language featuring formal proofs\n* [Huff](https://github.com/AztecProtocol/huff) - an efficient low-level language with macros\n* [Lira](https://github.com/etoroxlabs/lira) - a declarative domain-specific language for defining simple yet highly complex financial contracts for EVM\n* [Zinc](https://github.com/matter-labs/zinc) - a language to write zero-knowledge circuits and ZKP-based smart contracts. [Docs](https://zinc.zksync.io/)\n* [Sway](https://www.youtube.com/watch?v=S52ZsZ7rNOo) - a Rust-based Smart Contract Language\n\nNo updates after 2018:\n* [Bamboo](https://github.com/pirapira/bamboo) - a high-level \"formal-verification-friendly\" language compiled to EVM\n* [Pyramid](https://github.com/MichaelBurge/pyramid-scheme) - An EVM backend for SICP Scheme\n* [Lolisa](https://arxiv.org/abs/1803.09885) - subset of Solidity\n* [Logikon](https://github.com/logikon-lang/logikon) - an experimental language for smart contracts\n\nNo updates after 2017:\n* [LLL](https://lll-docs.readthedocs.io/en/latest/) - a \"low-level Lisp-like language\" compiled to EVM bytecode ([discontinued](https://github.com/ethereum/solidity/blob/9abaa35d579ac982e77c811bbd007008f66cfd2e/Changelog.md#062-2020-01-27))\n* [functional-solidity-language](https://github.com/raineorshine/functional-solidity-language) - pretty much self-descriptive :)\n* [Serpent](https://github.com/ethereum/serpent/tree/ad53fa2a8a496448d58ef9137959b4a1e86b14d7) - a Python-like high-level language compiled to EVM (deprecated due to [security issues with the compiler](https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929))\n* [Babbage](https://medium.com/@chriseth/babbage-a-mechanical-smart-contract-language-5c8329ec5a0e) - \"a mechanical smart contract language\"\n* [SolidityX](https://github.com/loomnetwork/solidityx-js) - a typed-superset of Solidity\n\nNo updates after 2016:\n* [L4](https://youtu.be/Ufy8oM-Ou90) - a language \"based on deontic modal logic\", presented at Devcon 2 (Sep 2016)\n* [Mutan](https://github.com/obscuren/mutan) - a C-like language compiled to EVM (deprecated)\n\n## IRs\n* [Yul](https://solidity.readthedocs.io/en/latest/yul.html) (ex JULIA, ex IULIA) - an intermediate language that can be compiled to bytecode for different backends.\n* [Yul+](https://github.com/FuelLabs/yulp) - a low-level, highly efficient extension to Yul\n* [SlithIR](https://github.com/crytic/slither/wiki/SlithIR) - an intermediate representation that is used by Slither to enable high-precision analysis via a simple API. It supports taint and value tracking to enable detection of complex patterns.\n* [Elle](https://elle.readthedocs.io/en/latest/syntax.html#) - The Elle source language, also known as Elle-Core, captures structured programming abstractions and enables their translation to Ethereum EVM bytecode through a verified [compiler](https://elle.readthedocs.io/en/latest/implementation.html).\n\n## DSLs\n\n* [Alacrity](https://github.com/AlacrisIO/alacrity) - a DSL for simple, formally-verified DApps\n* [Ergo](https://github.com/accordproject/ergo) - Domain specific language for smart legal contracts\n* [Sandcastle](https://pegasys.tech/sandcastle-brings-sql-to-ethereum-smart-contracts/) - a SQL Ethereum smart contract language\n* [FSolidM](https://github.com/anmavrid/smart-contracts/tree/FSMGenerator) - framework for [visual programming](https://cps-vo.org/group/smartcontracts) of Finite State Machines\n* [Findel](https://github.com/cryptolu/findel) - a non Turing complete financial DSL inspired by a [S.P.Jones' work](https://www.microsoft.com/en-us/research/publication/composing-contracts-an-adventure-in-financial-engineering/)\n* the language from [the paper](https://link.springer.com/article/10.1007/s12599-017-0507-z) by Egelund-Müller et al\n* [Chorus](https://firmo.network/) - a financial contractual markup language by Firmo network\n* [ADICO](https://papers.christopherfrantz.org/pdf/FrantzNowostawski2016_Smart_Contracts_nADICO.pdf) - a domain-specific language to support the contract modeling process\n* [ink!](https://github.com/paritytech/ink) - an embedded DSL for writing WebAssembly based smart contracts using the Rust programming language and targeting Substrate blockchains. [Documentation](https://substrate.dev/docs/en/contracts/)\n* [Reach](https://github.com/reach-sh/reach-lang) - a DSL for trustworthy DApps that enables junior developers without years of experience. [Documentation](https://docs.reach.sh/)\n\n# Other blockchains\n\n* [Move](https://developers.libra.org/docs/move-paper) - a safe and flexible programming language for the Libra Blockchain \n* [Michelson](http://www.michelson-lang.com/) - a stack based and strongly typed domain-specific language (Tezos)\n* [Liquidity](http://www.liquidity-lang.org/) - a high-level typed smart-contract language that strictly complies to Michelson security restrictions (Tezos)\n* [fi](https://github.com/TezTech/fi) (Tezos)\n* [LIGO](https://medium.com/tezos/introducing-ligo-a-new-smart-contract-language-for-tezos-233fa17f21c7) (Tezos)\n* [Plutus](https://github.com/input-output-hk/plutus) - a pure functional language with user-defined data types and polymorphism (Cardano); compiles to Plutus Core ([video](https://youtu.be/IqA-mI2olFA)) \n* [Marlowe](https://iohk.io/en/blog/posts/2018/12/11/marlowe-financial-contracts-on-blockchain/) - a domain-specific language for smart contract language embedded in Plutus (Cardano)\n* [Rholang](https://github.com/rchain/rchain/tree/master/rholang) - a reflective higher-order process calculus language (RChain)\n* [Obsidian](https://mcoblenz.github.io/Obsidian/) - a state-oriented language with linear types\n* [DAML](https://daml.com/) - a smart contract language of Digital Asset\n* [Simvolio](https://apla.io/) (Apla blockchain platform)\n* [RIDE](https://wavesplatform.com/files/docs/white_paper_waves_smart_contracts.pdf) - a non Turing complete [language](https://docs.wavesplatform.com/en/technical-details/ride-language.html) infulenced by Scala and F# (Waves)\n* [Scilla](https://scilla-lang.org) - an intermediate level language for verified smart contracts (Zilliqa)\n* [TxVM](https://github.com/chain/txvm) (Chain)\n* [IELE](https://github.com/runtimeverification/iele-semantics) - a variant of LLVM specialized to execute smart contracts on the blockchain\n* [Pact](https://pact-language.readthedocs.io/en/stable/) - a smart contract language with a Lisp syntax but Haskell-like types (Kadena)\n* [Ledger Design Language](https://eprint.iacr.org/2018/416) - a modeling language for describing public ledgers\n* [Sigma-State](https://github.com/ScorexFoundation/sigmastate-interpreter) (Ergo)\n* [Sophia](https://github.com/aeternity/protocol/blob/master/contracts/sophia.md) - a strongly typed language in the ML family (Æternity)\n* [Varna](https://github.com/aeternity/protocol/blob/master/contracts/varna.md) - a non Turing complete high-level language (Æternity)\n* [Fift](https://test.ton.org/fiftbase.pdf) - a stack-based general purpose programming language optimized for TON Blockchain smart contracts (TON)\n* [Clarity](https://blog.blockstack.org/introducing-clarity-the-language-for-predictable-smart-contracts/) (Blockstack)\n* [Ethermint](https://github.com/cosmos/ethermint) (Cosmos)\n* [Secure EcmaScript](https://www.coindesk.com/cosmos-will-have-3-coding-languages-heres-why-that-matters-for-ethereum) (Cosmos)\n* [Kadenamint](https://www.coindesk.com/cosmos-will-have-3-coding-languages-heres-why-that-matters-for-ethereum) (Cosmos)\n* [Rell](https://rell.chromia.com/en/master/) (Chromia)\n* [Solang](https://github.com/hyperledger-labs/solang) - a new Solidity compiler written in rust which uses llvm as the compiler backend. [Solang](https://solang.readthedocs.io/en/latest/) targets Substrate, Solana, ewasm, and Sawtooth. It is source compatible with Solidity 0.7\n* [Convex Lisp](https://convex.world/cvm/data-types) - a Clojure-inspired decentralised smart contract language (ConvexVM)\n\n# Other links\n\n* https://github.com/pirapira/fp-ethereum - a collection of links related to function programming for Ethereum\n* [Smart Contract Languages Development to Follow](https://blog.comae.io/smart-contract-languages-development-to-follow-992e30774b39) - a post by Matt Suiche, Comae (Dec 2017)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-tikhomirov%2Fsmart-contract-languages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs-tikhomirov%2Fsmart-contract-languages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-tikhomirov%2Fsmart-contract-languages/lists"}