Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs which govern the behaviour of accounts within the Ethereum state.
Solidity is a curly-bracket language. It is influenced by C++, Python and JavaScript, and is designed to target the Ethereum Virtual Machine (EVM). You can find more details about which languages Solidity has been inspired by in the :doc:`language influences <language-influences>` section.
Solidity is statically typed, supports inheritance, libraries and complex user-defined types among other features.
With Solidity you can create contracts for uses such as voting, crowdfunding, blind auctions, and multi-signature wallets.
When deploying contracts, you should use the latest released version of Solidity. This is because breaking changes as well as new features and bug fixes are introduced regularly. We currently use a 0.x version number to indicate this fast pace of change.
Warning
Solidity recently released the 0.8.x version that introduced a lot of breaking changes. Make sure you read :doc:`the full list <080-breaking-changes>`.
Ideas for improving Solidity or this documentation are always welcome, read our :doc:`contributors guide <contributing>` for more details.
1. Understand the Smart Contract Basics
If you are new to the concept of smart contracts we recommend you to get started by digging into the "Introduction to Smart Contracts" section, which covers:
- :ref:`A simple example smart contract <simple-smart-contract>` written in Solidity.
- :ref:`Blockchain Basics <blockchain-basics>`.
- :ref:`The Ethereum Virtual Machine <the-ethereum-virtual-machine>`.
2. Get to Know Solidity
Once you are accustomed to the basics, we recommend you read the :doc:`"Solidity by Example" <solidity-by-example>` and “Language Description” sections to understand the core concepts of the language.
3. Install the Solidity Compiler
There are various ways to install the Solidity compiler, simply choose your preferred option and follow the steps outlined on the :ref:`installation page <installing-solidity>`.
Hint
You can try out code examples directly in your browser with the Remix IDE. Remix is a web browser based IDE that allows you to write, deploy and administer Solidity smart contracts, without the need to install Solidity locally.
Warning
As humans write software, it can have bugs. You should follow established software development best-practices when writing your smart contracts. This includes code review, testing, audits, and correctness proofs. Smart contract users are sometimes more confident with code than their authors, and blockchains and smart contracts have their own unique issues to watch out for, so before working on production code, make sure you read the :ref:`security_considerations` section.
4. Learn More
If you want to learn more about building decentralized applications on Ethereum, the Ethereum Developer Resources can help you with further general documentation around Ethereum, and a wide selection of tutorials, tools and development frameworks.
If you have any questions, you can try searching for answers or asking on the Ethereum StackExchange, or our Gitter channel.
Community volunteers help translate this documentation into several languages. They have varying degrees of completeness and up-to-dateness. The English version stands as a reference.
Note
We recently set up a new GitHub organization and translation workflow to help streamline the community efforts. Please refer to the translation guide for information on how to contribute to the community translations moving forward.
- French (in progress)
- Italian (in progress)
- Japanese
- Korean (in progress)
- Russian (rather outdated)
- Simplified Chinese (in progress)
- Spanish
- Turkish (partial)
:ref:`Keyword Index <genindex>`, :ref:`Search Page <search>`
.. toctree:: :maxdepth: 2 :caption: Basics introduction-to-smart-contracts.rst installing-solidity.rst solidity-by-example.rst
.. toctree:: :maxdepth: 2 :caption: Language Description layout-of-source-files.rst structure-of-a-contract.rst types.rst units-and-global-variables.rst control-structures.rst contracts.rst assembly.rst cheatsheet.rst grammar.rst
.. toctree:: :maxdepth: 2 :caption: Compiler using-the-compiler.rst analysing-compilation-output.rst
.. toctree:: :maxdepth: 2 :caption: Internals internals/layout_in_storage.rst internals/layout_in_memory.rst internals/layout_in_calldata.rst internals/variable_cleanup.rst internals/source_mappings.rst internals/optimizer.rst metadata.rst abi-spec.rst
.. toctree:: :maxdepth: 2 :caption: Additional Material 050-breaking-changes.rst 060-breaking-changes.rst 070-breaking-changes.rst 080-breaking-changes.rst natspec-format.rst security-considerations.rst smtchecker.rst resources.rst path-resolution.rst yul.rst style-guide.rst common-patterns.rst bugs.rst contributing.rst brand-guide.rst language-influences.rst