mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			182 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| Solidity
 | |
| ========
 | |
| 
 | |
| 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 <https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages>`_ designed to target the Ethereum Virtual Machine (EVM).
 | |
| It is influenced by C++, Python and JavaScript. 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. Apart from exceptional cases, only the latest version receives
 | |
| `security fixes <https://github.com/ethereum/solidity/security/policy#supported-versions>`_.
 | |
| Furthermore, breaking changes as well as
 | |
| new features are introduced regularly. We currently use
 | |
| a 0.y.z version number `to indicate this fast pace of change <https://semver.org/#spec-item-4>`_.
 | |
| 
 | |
| .. 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.
 | |
| 
 | |
| .. Hint::
 | |
| 
 | |
|   You can download this documentation as PDF, HTML or Epub by clicking on the versions
 | |
|   flyout menu in the bottom-left corner and selecting the preferred download format.
 | |
| 
 | |
| 
 | |
| Getting Started
 | |
| ---------------
 | |
| 
 | |
| **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 <https://remix.ethereum.org>`_. 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 <https://ethereum.org/en/developers/>`_
 | |
| 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 <https://ethereum.stackexchange.com/>`_, or
 | |
| our `Gitter channel <https://gitter.im/ethereum/solidity/>`_.
 | |
| 
 | |
| .. _translations:
 | |
| 
 | |
| Translations
 | |
| ------------
 | |
| 
 | |
| Community contributors help translate this documentation into several languages.
 | |
| Note that they have varying degrees of completeness and up-to-dateness. The English
 | |
| version stands as a reference.
 | |
| 
 | |
| You can switch between languages by clicking on the flyout menu in the bottom-left corner
 | |
| and selecting the preferred language.
 | |
| 
 | |
| * `Chinese <https://github.com/solidity-docs/zh-cn-chinese/>`_
 | |
| * `French <https://docs.soliditylang.org/fr/latest/>`_
 | |
| * `Indonesian <https://github.com/solidity-docs/id-indonesian>`_
 | |
| * `Japanese <https://github.com/solidity-docs/ja-japanese>`_
 | |
| * `Korean <https://github.com/solidity-docs/ko-korean>`_
 | |
| * `Persian <https://github.com/solidity-docs/fa-persian>`_
 | |
| * `Russian <https://github.com/solidity-docs/ru-russian>`_
 | |
| * `Spanish <https://github.com/solidity-docs/es-spanish>`_
 | |
| * `Turkish <https://github.com/solidity-docs/tr-turkish>`_
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    We set up a GitHub organization and translation workflow to help streamline the
 | |
|    community efforts. Please refer to the translation guide in the `solidity-docs org <https://github.com/solidity-docs>`_
 | |
|    for information on how to start a new language or contribute to the community translations.
 | |
| 
 | |
| Contents
 | |
| ========
 | |
| 
 | |
| :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
 | |
|    ir-breaking-changes.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
 |