Solidity is not the only language to work on Ethereum smart contracts; prior to solidity, there were other languages that were not as successful. Here is a brief list of languages currently (as of August 2018) compatible with Ethereum:
- Mutan: Inspired from Golang and deprecated in March 2015.
- LLL: Short for lisp-like language. While it is still supported, it is rarely used.
- Serpent: While this language is similar to Python, it is no longer recommended for use.
- Solidity: The fourth language introduced by the Ethereum foundation, and so far the most successful language for developing smart contracts. It is the most documented, stable, and has a large community support.
- Vyper: Newly introduced, much simpler and easier than Solidity, although it does not have much community support yet. It is influenced by Python.
Solidity is also known as a contract-oriented language, since contracts are similar to classes in object-oriented languages. The Solidity language is loosely based on ECMAScript (JavaScript); hence, a prior knowledge of the same would be helpful in understanding Solidity. Here are some tools required to develop, test, and deploy smart contracts programmed in Solidity:
- TestNet: The choice of TestNet to work on, the specified network ID to be used.
- Compiler: Choosing the required compiler, for example solc, is a solidity compiler; it is included in most of the nodes and also available as a standalone package.
- Web3.js: The library that helps in the connection between the Ethereum network and our DApp via HTTP or the IPC network connection.
- Framework: It is important to choose a framework from those available for contract compilation and the deployment and other tasks. Some of the frameworks used are Truffle, Embark, Dapple, and others.
Apart from the crucial tools we've already mentioned, there are also various other tools that help in the development of a smart contract to be run on an Ethereum blockchain for tasks such as understanding the contract flow, finding security vulnerabilities, running the test application, writing documentation, and so on. Take a look at the following diagram:
