Solidity is an object-oriented programming language for implementing smart contracts on various blockchain platforms, most notably, Ethereum. Solidity is licensed under GNU General Public License v3.0. Solidity was designed by Gavin Wood and developed by Christian Reitwiessner, Alex Beregszaszi, and several former Ethereum core contributors. Programs in Solidity run on Ethereum Virtual Machine or on compatible virtual machines.

History

Solidity was proposed in August 2014 by Gavin Wood The language was later developed by the Ethereum project's Solidity team, led by Christian Reitwiessner.

Solidity

Solidity is the primary language on Ethereum as well as on other private blockchains, such as the enterprise-oriented Hyperledger Fabric blockchain. SWIFT deployed a proof of concept using Solidity running on Hyperledger Fabric.

Solidity

Description

Solidity is a statically typed programming language designed for developing smart contracts that run on the Ethereum Virtual Machine (EVM) or compatible virtual machines.

Solidity

Solidity uses ECMAScript-like syntax which makes it familiar for existing web developers; however unlike ECMAScript it has static typing and variadic return types. Solidity is different from other EVM-targeting languages such as Serpent and Mutan in some important ways. It supports complex member variables for smart contracts, including arbitrarily hierarchical mappings and structs. Solidity smart contract support inheritance, including multiple inheritance with C3 linearization. Solidity introduces an application binary interface (ABI) that facilitates multiple type-safe functions within a single smart contract (this was also later supported by Serpent). The Solidity proposal also includes "Natural Language Specification", a documentation system for specifying user-centric descriptions of the ramifications of method-calls.

Example of a Solidity program: // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4;

contract Coin {

// The keyword "public" makes variables

// accessible from other contracts

address public minter; mapping(address => uint) public balances;

// Events allow clients to react to specific

// contract changes you declare

event Sent(address from, address to, uint amount);

// Constructor code is only run when the contract

// is created

constructor() {

minter = msg.sender; }

// Sends an amount of newly created coins to an address

// Can only be called by the contract creator

function mint(address receiver, uint amount) public {

require(msg.sender == minter); balances[receiver] += amount; }

// Errors allow you to provide information about

// why an operation failed. They are returned

// to the caller of the function. error InsufficientBalance(uint requested, uint available);

// Sends an amount of existing coins

// from any caller to an address

function send(address receiver, uint amount) public {

if (amount > balances[msg.sender]) revert InsufficientBalance({ requested: amount, available: balances[msg.sender] });

balances[msg.sender] -= amount; balances[receiver] += amount; emit Sent(msg.sender, receiver, amount); } }

Development IDEs

Microsoft Visual Studio Code

JetBrains IntelliJ

Remix Online Editor

EthFiddle Online Editor

Editor extensions

Solidity Support for Visual Studio Code

Solidity Support For IntelliJ

Blockchain platforms

Solidity is available on: Avalanche C-Chain Binance Smart Chain Counterparty (which runs on Bitcoin) Ethereum Ethereum Classic Tron Hedera Hashgraph Polygon

Criticism

Many security properties of smart contracts are inherently difficult to reason about directly, and the Turing-completeness of Solidity means that verification of arbitrary properties cannot be decidably automated. Current automated solutions for smart contract security analysis can miss critical violations, produce false positives, and fail to achieve sufficient code coverage on realistic contracts. Solidity has been blamed for the error-prone implementation of Ethereum smart contracts due to its counterintuitive nature, its lack of constructs to deal with blockchain domain-specific aspects, and its lack of centralized documentation of known vulnerabilities.