{"id":"solidity","hidden":false,"ipfs":"QmNpHCYACXd6Z95FqfU9Uv3mMmVVPmTGMsMmzof4wmnLRB","language":"en","transactionHash":"0x8288884ac472031f12685beca5d02599febd4f7d733547ac5db141457c0cf3f1","created":"2024-09-14T12:48:35.654Z","updated":"2024-12-06T04:22:54.925Z","title":"Solidity","summary":"Solidity is a contract-oriented programming language created by the Ethereum Network team for developing smart contracts and DApps on blockchain networks.","content":"**Solidity** is a curly-bracket, high-level, and object-oriented programming language created for designing and implementing [smart contracts](https://iq.wiki/wiki/smart-contract).[[3]](#cite-id-8lzu4eoyf8d)​[[6]](#cite-id-0rcwcvdwb0uo)​\n\n## Overview\n\nSolidity is a curly-bracket language that has been influenced and inspired by several well-known programming languages. Solidity is most profoundly influenced by C++, but also borrowed concepts from languages like Python, JavaScript, and others.[\\[6\\]](#cite-id-0rcwcvdwb0uo)​\n\nSolidity is a contract-oriented programming language designed by the [Ethereum](https://iq.wiki/wiki/ethereum) Network team for implementing [smart contracts](https://iq.wiki/wiki/smart-contract). It draws inspiration from programming languages like C++, Python, and JavaScript. Solidity source code is compiled for the [Ethereum Virtual Machine](https://iq.wiki/wiki/ethereum-virtual-machine-evm) and is used to write [smart contracts](https://iq.wiki/wiki/smart-contract) for [Ethereum](https://iq.wiki/wiki/ethereum) and EVM-compatible networks.[\\[1\\]](#cite-id-qgz50lbbhf)​[\\[2\\]](#cite-id-mnurm2k06hs)​\n\nThe basic concepts of Solidity revolve around enabling developers to create [decentralized applications (DApps) ](https://iq.wiki/wiki/decentralized-application)and self-executing contracts on [blockchain](https://iq.wiki/wiki/blockchain) networks.\n\n### Historical Development of Solidity\n\nIn August 2014, [Gavin Wood](https://iq.wiki/wiki/gavin-wood), co-founder of [Ethereum](https://iq.wiki/wiki/ethereum), proposed the idea for Solidity. Later, the Solidity team of the [Ethereum](https://iq.wiki/wiki/ethereum) project, under Christian Reitwiessner, created and developed the language.[\\[7\\]](#cite-id-6gka3cr40zx)​[\\[8\\]](#cite-id-1lcjtosg1dz)​\n\nSolidity was first released on August 7, 2015, with version 0.1.0. Initially, the language had basic and limited features, but over time, Solidity has undergone numerous improvements and developments.\n\nSolidity quickly gained popularity among [Ethereum](https://iq.wiki/wiki/ethereum) developers, becoming the primary language for developing [smart contracts](https://iq.wiki/wiki/smart-contract). With Solidity, developers could write code that would be executed on the [Ethereum](https://iq.wiki/wiki/ethereum) [blockchain](https://iq.wiki/wiki/blockchain) to perform various functions and services.\n\nSolidity has been used in various [blockchain](https://iq.wiki/wiki/blockchain) projects and [decentralized applications (dApps)](https://iq.wiki/wiki/decentralized-application). [Smart contracts ](https://iq.wiki/wiki/smart-contract)written in Solidity can serve multiple purposes, including [ERC-20 ](https://iq.wiki/wiki/erc-20)tokens, voting systems, time-locked funds, and more.[\\[9\\]](#cite-id-eew2heu0g6q)​\n\n#### Compiler Developments\n\n##### 2024\n\nSolidity Compiler v0.8.27 was released on September 4, 2024.[\\[4\\]](#cite-id-u0z4xq9d1ir) Solidity v0.8.28, released on October 9, 2024, added full support in both compiler pipelines for transient-storage state variables of value types. It also reduced IR compilation memory use by up to 80% and running time by up to 25% in certain benchmarks.[\\[11\\]](#cite-id-2fddlspcrc)​\n\n##### 2025\n\nSolidity v0.8.31, released on December 3, 2025, made Osaka the default EVM target, added support for the CLZ opcode, which counts leading zero bits in a 256-bit word, and extended storage-layout specifiers to allow constant variables. It also began issuing deprecation warnings for features planned for removal in the breaking 0.9.0 release, signaling compatibility changes for developers to address.[\\[12\\]](#cite-id-n4pxp0bnzh)​\n\n##### 2026\n\nSolidity v0.8.34, released on February 18, 2026, fixed a high-severity IR code-generator bug affecting versions 0.8.28 through 0.8.33. When compiled with `--via-ir`, code using `delete` on a transient state variable could cause the compiler to emit the wrong storage opcode when clearing persistent and transient variables of the same type.[\\[13\\]](#cite-id-icwxx6oykm)​\n\nSolidity v0.8.35, released on April 29, 2026, added `erc7201`, a compile-time builtin for ERC-7201 namespaced storage, and formalized experimental mode through the `--experimental` option. It also introduced an experimental SSA-form control-flow-graph code generator intended to address stack-too-deep errors and slow IR compilation. The SSA generator remained early-stage and was not the default `--via-ir` pipeline. The release also described deprecation warnings for identifiers planned to become keywords in 0.9.0.[\\[14\\]](#cite-id-65h7r1s3m5)​\n\nSolidity v0.8.36, released on July 9, 2026, added stack-to-memory spilling to the still-experimental, non-default SSA generator and fixed an unsound spill issue involving recursive functions. It also removed the experimental EOF backend after EOF was rejected for the Fusaka upgrade and had no [mainnet](https://iq.wiki/wiki/mainnet) support.[\\[15\\]](#cite-id-lnawkfavdq)​\n\nSolidity v0.8.37, released on September 10, 2026, was the latest stable compiler release as of October 21, 2026. It added support for the Amsterdam EVM `SLOTNUM` opcode, available as `[block](https://iq.wiki/wiki/block).slotnum` in Solidity and `slotnum()` in Yul when compiling for Amsterdam; Amsterdam targeting remained experimental. The release also replaced the experimental SSA generator’s greedy stack shuffler with a planning algorithm.[\\[16\\]](#cite-id-hxbamtb6jm)​\n\nVersion 0.8.37 also fixed several important compiler errors with differing affected ranges and conditions. In the legacy pipeline, `delete` on an element of a memory `bytes` array could zero as many as 31 following bytes; this affected versions through 0.8.36. In the IR pipeline, stack-to-memory spilling could collide in certain mutually recursive functions in versions 0.7.2 through 0.8.36 when using `--via-ir`. The release also fixed incorrect argument ordering in revert data when named arguments to custom errors were passed to `require` in the IR pipeline.[\\[16\\]](#cite-id-hxbamtb6jm)​\n\n### Influences by Other Languages\n\nThe influence from C++ can be seen in the syntax for variable declarations, for loops, the concept of overloading functions, implicit and explicit type conversions and many other details.[\\[6\\]](#cite-id-0rcwcvdwb0uo)​\n\nSolidity used to be partly influenced by JavaScript. This was due to function-level scoping of variables and the use of the keyword 'var'. The JavaScript influence was reduced starting from version 0.4.0. Now, the main remaining similarity to JavaScript is that functions are defined using the keyword 'function'. [\\[6\\]](#cite-id-0rcwcvdwb0uo)​\n\nSolidity also supports import syntax and semantics that are similar to those available in JavaScript. Besides those points, Solidity looks like most other curly-bracket languages and has no major JavaScript influence anymore.[\\[6\\]](#cite-id-0rcwcvdwb0uo)​\n\nAnother influence to Solidity was Python. Solidity’s modifiers were added trying to model Python’s decorators with a much more restricted functionality.[\\[6\\]](#cite-id-0rcwcvdwb0uo)​\n\n[YOUTUBE@VID](kdvVwGrV7ec)\n\n### Main Characteristics\n\n* **Statically-typed:** Solidity prevents mistakes, such as syntax and type errors, by verifying that every variable in the source code has a data type before it is executed to ensure that the application operates smoothly.\n* **Contract-oriented:** The programming language is designed to create [smart contracts,](https://iq.wiki/wiki/smart-contract) which are self-executing contracts containing terms of agreement written into lines of code. These contracts can be used to create [decentralized applications (DApps) ](https://iq.wiki/wiki/decentralized-application)and execute transactions on the [Ethereum](https://iq.wiki/wiki/ethereum) network.\n* **Object-oriented:** Solidity uses objects (data structure or self-contained units of code) to present data and their behavior to allow developers to organize code in a structured and modular way.[\\[1\\]](#cite-id-qgz50lbbhf)\n\n### Fundamental Concepts\n\nFollowing are some fundamental concepts of Solidity.[\\[3\\]](#cite-id-8lzu4eoyf8d)​\n\n* [**Smart Contracts**](https://iq.wiki/wiki/smart-contract)[Smart contracts](https://iq.wiki/wiki/smart-contract) are self-executing agreements with the terms of the contract written in code. Solidity is used to create these contracts, defining their rules, conditions, and actions.\n* **Data Types**Solidity supports various data types, including integers, booleans, addresses, and more, similar to other programming languages. Developers use these types to declare and manipulate data in smart contracts.\n* **Functions**Smart contracts consist of functions that define the contract’s behavior. These functions can be called internally or externally, enabling interaction with the contract.\n* **Variables**Solidity allows the declaration of state variables to store data permanently on the [blockchain](https://iq.wiki/wiki/blockchain). These variables maintain their values across function calls.\n* **Transient Storage**Transient storage is transaction-scoped storage distinct from persistent storage: its values are available during a transaction rather than stored permanently across transactions. Solidity v0.8.28 introduced support for transient-storage state variables of value types. Transient state variables use a layout separate from persistent storage.[\\[11\\]](#cite-id-2fddlspcrc)\n* **Events**Events are a way for contracts to communicate with external applications, allowing them to subscribe to and react to specific occurrences within the contract.\n* **Inheritance**Solidity supports contract inheritance, enabling the creation of modular and reusable code.\n* **Ethereum-specific Concepts**Solidity integrates Ethereum-specific concepts like [gas](https://iq.wiki/wiki/gas) (transaction fees), ether ([cryptocurrency](https://iq.wiki/wiki/cryptocurrency)), and the [Ethereum Virtual Machine (EVM)](https://iq.wiki/wiki/ethereum-virtual-machine-evm), which is responsible for executing [smart contracts](https://iq.wiki/wiki/smart-contract).\n* **Security**Security is a critical consideration in Solidity. Developers must understand vulnerabilities like reentrancy, integer overflow, and more to write secure contracts.\n\nSolidity is available on smart contracts including:[\\[5\\]](#cite-id-p5mqp9ax5n)​\n\n* [Ethereum](https://iq.wiki/wiki/ethereum)\n* [Avalanche](https://iq.wiki/wiki/avalanche) C-Chain\n* [Binance](https://iq.wiki/wiki/binance) Smart Chain\n* [Counterparty](https://iq.wiki/wiki/counterparty)\n* [Ethereum Classic](https://iq.wiki/wiki/ethereum-classic)\n* [Tron](https://iq.wiki/wiki/tron)\n* [Hedera](https://iq.wiki/wiki/hedera) Hashgraph\n* [Polygon](https://iq.wiki/wiki/polygon)\n* [Metis](https://iq.wiki/wiki/metis)\n* [Arbitrum](https://iq.wiki/wiki/arbitrum)\n* [Optimism](https://iq.wiki/wiki/optimism)\n\n## Ethereum and Solidity\n\nThe combination of [Ethereum](https://iq.wiki/wiki/ethereum) and Solidity made it possible for developers to create a wide range of complex applications. With [Ethereum](https://iq.wiki/wiki/ethereum) providing a decentralized platform and Solidity providing a robust programming language, developers have the tools they need to create secure, efficient, and transparent [smart contracts](https://iq.wiki/wiki/smart-contract). \n \nDevelopers write [smart contracts](https://iq.wiki/wiki/smart-contract) in Solidity and then deploy them on the [Ethereum](https://iq.wiki/wiki/ethereum) [blockchain](https://iq.wiki/wiki/blockchain). Once a [smart contract](https://iq.wiki/wiki/smart-contract) is deployed, it exists independently from any other contracts or applications. It has its own Ethereum address and balance, and it can make and receive transactions just like any other participant on the Ethereum network. \n \nWhen a smart contract is triggered by a transaction, the Ethereum network executes the contract's code. This code can perform a wide range of actions, from transferring funds to interacting with other contracts.[[10]](#cite-id-anb8zxgfqgf) \n \n\n## Advantages\n\n* Enables flexibility by allowing developers to create custom data structures, functions, and complex [smart contracts](https://iq.wiki/wiki/smart-contract). \n* Provides an interface, known as Application Binary Interface (ABI), that allows type safety to signal that there’s an error whenever there’s a mismatch in the data type of a variable. ABI is a set of rules and specifications that define how a [smart contract](https://iq.wiki/wiki/smart-contract) can interact with other smart contracts. \n* Translates user-oriented requirements and specifications into a language that can be understood by machines. \n \n \n\n## Drawbacks & Challenges\n\n* **Security:** The language is vulnerable to reentrancy attacks, which occur when a contract allows a malicious user to repeatedly call a function in such a way that the contract’s state is exploited. \n* **Irreversibility:** A deployed contract’s implementation code is not rewritten in place. However, proxy patterns can preserve a contract-facing address and state while routing calls to a different implementation. Upgrading through a proxy introduces risks around authorization and storage-layout compatibility.[[17]](#cite-id-w6yqw6z1v) \n* **Precision:** Solidity has arithmetic precision issues, where the language does not support fixed or floating-point values. \n \nAnother challenge was to cope with the scalability and efficiency issues of [Ethereum](https://iq.wiki/wiki/ethereum), which limited the throughput and speed of [smart contracts,](https://iq.wiki/wiki/smart-contract) and increased the costs of [gas](https://iq.wiki/wiki/gas), the fee required to execute transactions on the network.[[8]](#cite-id-1lcjtosg1dz) \n \nAnd also, keeping up with the innovation and competition in the [blockchain](https://iq.wiki/wiki/blockchain) space was another challenge as new platforms and languages emerged, offering different features and trade-offs for [smart contract](https://iq.wiki/wiki/smart-contract) development. \n \nTo address these challenges and meet the needs and expectations of the community, Solidity is constantly evolving and improving over the years, through regular updates and enhancements. \n \nSome of the most significant changes include the introduction of new types, such as structs, enums, and mappings, the support for inheritance, interfaces, and libraries, the addition of modifiers, events, and error handling, the implementation of security checks and best practices, such as the require and revert functions, the optimization of [gas](https://iq.wiki/wiki/gas) usage and bytecode generation, and the integration with external sources and systems, such as oracles and inter-blockchain communication.[[8]](#cite-id-1lcjtosg1dz)","recentActivity":null,"operator":{"id":"0x1E23b34d3106F0C1c74D17f2Cd0F65cdb039b138"},"categories":[{"id":"projects-and-protocols","title":"Projects & Protocols"}],"tags":[{"id":"Layer 1"},{"id":"Infrastructure"}],"images":[{"id":"QmYYEgXv7146gL6tRt3E8wYcJZhtYJZdQZcrFhPFkZFKH1","type":"image/jpeg, image/png"}],"media":[{"name":"kdvVwGrV7ec","id":"https://www.youtube.com/watch?v=kdvVwGrV7ec","size":"0","type":null,"source":"YOUTUBE"},{"name":"MnSmc7Hto2k","id":"https://www.youtube.com/watch?v=MnSmc7Hto2k","size":"0","type":null,"source":"YOUTUBE"}],"linkedWikis":{"founders":[],"blockchains":[],"speakers":[]},"events":[],"founderWikis":[],"blockchainWikis":[],"metadata":[{"id":"website","value":"https://soliditylang.org/"},{"id":"reddit_profile","value":"https://www.reddit.com/r/solidity/"},{"id":"words-changed","value":"145"},{"id":"percent-changed","value":"10.94"},{"id":"blocks-changed","value":"content, tags, events"},{"id":"wiki-score","value":"87"},{"id":"references","value":"[{\"id\":\"qgz50lbbhf\",\"url\":\"https://www.ledger.com/academy/glossary/solidity\",\"description\":\"Ledger- Solidity Meaning\",\"timestamp\":1726317826804},{\"id\":\"mnurm2k06hs\",\"url\":\"https://www.dappuniversity.com/articles/solidity-tutorial\",\"description\":\"Dappuniversity - Solidity for Beginners · Smart Contract Development Crash Course\",\"timestamp\":1726317944247},{\"id\":\"8lzu4eoyf8d\",\"url\":\"https://medium.com/@blockchain4link/solidity-is-a-high-level-programming-language-designed-for-writing-smart-contracts-on-blockchain-89a1fe188806\",\"description\":\"Medium - What is Solidity basic concepts?\",\"timestamp\":1726318088365},{\"id\":\"u0z4xq9d1ir\",\"url\":\"https://soliditylang.org/\",\"description\":\"SolidityLang.org\",\"timestamp\":1726323532866},{\"id\":\"p5mqp9ax5n\",\"url\":\"https://www.alchemy.com/overviews/solidity\",\"description\":\"Alchemy - What is Solidity?\",\"timestamp\":1726325021848},{\"id\":\"0rcwcvdwb0uo\",\"url\":\"https://docs.soliditylang.org/en/latest/language-influences.html\",\"description\":\"Soliditylang.org - Language influences\",\"timestamp\":1728184321688},{\"id\":\"6gka3cr40zx\",\"url\":\"https://codedamn.com/news/solidity/who-created-solidity-should-i-learn-solidity-in-2022\",\"description\":\"Codedamn.com - Who created solidity? Should I learn solidity in 2022?\",\"timestamp\":1728185533387},{\"id\":\"1lcjtosg1dz\",\"url\":\"https://www.linkedin.com/advice/0/how-did-solidity-emerge-dominant-language-smart-contracts\",\"description\":\"LinkedIn - How did Solidity emerge as the dominant language for smart contracts on Ethereum?\",\"timestamp\":1728185753224},{\"id\":\"eew2heu0g6q\",\"url\":\"https://medium.com/@WayangArt/solidity-programming-language-history-7cfcbb81ba59\",\"description\":\"Medium - Solidity Programming Language History\",\"timestamp\":1728186645145},{\"id\":\"anb8zxgfqgf\",\"url\":\"https://www.linkedin.com/pulse/ethereum-solidity-building-blocks-smart-contracts-mosaia-web3-1e/\",\"description\":\"Linkedin - Ethereum and Solidity: The Building Blocks of Smart Contracts\",\"timestamp\":1728194221169},{\"id\":\"2fddlspcrc\",\"url\":\"https://www.soliditylang.org/blog/2024/10/09/solidity-0.8.28-release-announcement/\",\"description\":\"Solidity v0.8.28 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"n4pxp0bnzh\",\"url\":\"https://www.soliditylang.org/blog/2025/12/03/solidity-0.8.31-release-announcement/\",\"description\":\"Solidity v0.8.31 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"icwxx6oykm\",\"url\":\"https://www.soliditylang.org/blog/2026/02/18/solidity-0.8.34-release-announcement/\",\"description\":\"Solidity v0.8.34 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"65h7r1s3m5\",\"url\":\"https://www.soliditylang.org/blog/2026/04/29/solidity-0.8.35-release-announcement/\",\"description\":\"Solidity v0.8.35 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"lnawkfavdq\",\"url\":\"https://www.soliditylang.org/blog/2026/07/09/solidity-0.8.36-release-announcement/\",\"description\":\"Solidity v0.8.36 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"hxbamtb6jm\",\"url\":\"https://www.soliditylang.org/blog/2026/09/10/solidity-0.8.37-release-announcement/\",\"description\":\"Solidity v0.8.37 Release Announcement\",\"timestamp\":1792596671208},{\"id\":\"w6yqw6z1v\",\"url\":\"https://docs.openzeppelin.com/contracts/5.x/learn/upgrading-smart-contracts\",\"description\":\"OpenZeppelin - Upgrading Smart Contracts\",\"timestamp\":1792596671208}]"},{"id":"previous_cid","value":"QmNpHCYACXd6Z95FqfU9Uv3mMmVVPmTGMsMmzof4wmnLRB"},{"id":"commit-message","value":"Expand Solidity wiki article and add tags"},{"id":"previous_cid","value":"QmNpHCYACXd6Z95FqfU9Uv3mMmVVPmTGMsMmzof4wmnLRB"}],"user":{"id":"0x8af7a19a26d8fbc48defb35aefb15ec8c407f889"},"author":{"id":"0x1E23b34d3106F0C1c74D17f2Cd0F65cdb039b138"},"views":2004}