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 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.

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 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.

In 2016, a Cornell University researcher stated that Solidity was partially to blame for The DAO hack that took place that year. He stated: "this was actually not a flaw or exploit in the DAO contract itself: technically the Ethereum Virtual Machine (EVM) was operating as intended, but Solidity was introducing security flaws into contracts that were not only missed by the community, but missed by the designers of the language themselves."

The developers community often cites Solidity requiring much of third party interfaces and APIs, and its inability to create critical information intensive smart contracts.

References

Domain-specific programming languages
Statically typed programming languages
Object-oriented programming
Ethereum
솔리디티(영어: Solidity)는 계약 지향 프로그래밍 언어로 다양한 블록체인 플랫폼의 스마트계약(Smart Contract) 작성 및 구현에 사용된다.

Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Liana Husikyan, Yoichi Hirai 와 이더리움 핵심 기여자들이 이더리움과 같은 블록체인 플랫폼 상에 스마트계약을 작성 할 수 있도록 개발하였다.

역사 
솔리디티는 2014년 8월에 Gavin Wood 에 의해 처음으로 제안되었으며, 제안 이후 이더리움 프로젝트의 Christian Reitwiessner 가 이끄는 솔리디티팀에 의해 개발되었다. Ethereum Virtual Machine (EVM) 을 목표로 설계된 4가지 언어중 하나이다.(Serpent, LLL, Viper (실험용), Mutan (미사용))
현재는 솔리디티가 이더리움의 주요 언어이며, 이더리움과 경쟁 중인 텐더민트를 합의알고리즘으로 사용하는 Monax나 Hyperledger 등 다른 Private 블록체인 플랫폼에서도 동작한다. SWIFT는 개념증명(Proof of Concept)에 솔리디티를 사용하기도 있다.

코넬 대학교의 한 연구원은 솔리디티(Solidity)가 부분적으로 2016년에 일어난 DAO 해킹에 책임이 있다고 했다. 이어 그는 "해킹사건은 실제로 DAO 계약 스스로의 결함이나 부당이용이 아니며, 기술적으로 EVM은 의도대로 작동을 했습니다. 하지만 솔리디티가 보안 허점을 나타냈고, 이는 커뮤니티만의 실수가 아닌 언어 자체의 설계자들의 실수입니다." 라고 밝혔다.

설명 
솔리디티는 정적타입(statically-typed)의 프로그래밍 언어로 EVM상에서 작동하는 스마트계약을 개발하기 위해 설계되었다. 솔리디티는 EVM에서 작동가능한 바이트코드로 컴파일된다. 개발자는 솔리디티를 통해서 스스로 실행되는 비즈니스 로직을 스마트계약에 담아서 Application을 구현할 수 있다. 스마트계약에 기록된 사항은 부인(否認) 할 수 없으며, 강권(強權)하게 수행된다. 솔리디티와 같은 구체적인 스마트계약용 언어를 사용한 스마트계약의 작성은 프로그래밍 기술을 보유한 사람들에게는 어렵지 않은 것으로 보인다.

솔리디티는 Gavin Wood의 설계대로 ECMAScript 문법을 기반으로 하였으며, 이는 기존 웹 개발자들로 하여금 친숙하게 만든다. 하지만 ECMAScript와 달리 정적입력과 지정 및 가변적인 반환 유형이 있다. Serpent와 Mutan 같은 당시의 다른 EVM 타겟팅 언어와 비교할 때 Solidity에는 몇 가지 중요한 차이점있다. 임의의 계층적 매핑을 포함하는 계약을 지원하기 위한 복잡한 멤버 변수가 지원됐다. 또한 계약은 상속을 지원한다. (C3 linearization 다중상속 포함)

하나의 계약내에서 다중 타입의 안전한 함수가 가능하게 하는 응용이진인터페이스(application binary interface ; ABI) 또한 솔리디티에 소개되었다. (추후 Serpent에 의해 지원됨)

메소드호출의 진행 상태에 대해서 사용자 중심으로 명세하기 위한 문서화 시스템과 관련된 내용이 Natural Language Specification로 제안서에 포함되었다.

Example of a Solidity program:
contract GavCoin
{
  mapping(address=>uint) balances;
  uint constant totalCoins = 100000000000;

  /// Endows creator of contract with 1m GAV.
  function GavCoin(){
      balances[msg.sender] = totalCoins;
  }

  /// Send $((valueInmGAV / 1000).fixed(0,3)) GAV from the account of $(message.caller.address()), to an account accessible only by $(to.address()).
  function send(address to, uint256 valueInmGAV) {
    if (balances[msg.sender] >= valueInmGAV) {
      balances[to] += valueInmGAV;
      balances[msg.sender] -= valueInmGAV;
    }
  }

  /// getter function for the balance
  function balance(address who) constant returns (uint256 balanceInmGAV) {
    balanceInmGAV = balances[who];
  }

}

솔리디티 개발 플랫폼 
 Remix, the official Solidity IDE
 Microsoft Visual Studio
 ConsenSys Enterprise Solidity is compiled to bytecode that is executable on the EVM. With Solidity, developers are able to write applications that implement self-enforcing business logic embodied in smart contracts, leaving a non-repudiable and authoritative record of transactions. Writing smart contracts in smart contract specific languages such as Solidity is referred to as easy (ostensibly for those who already have programming skills).

 Tendermint on Microsoft Azure by PWC
 ErisDB by AWS
 Hedera, Hedera hashgraph platform supports smart contracts written in Solidity™.

솔리디티 동작 블록체인 플랫폼 
솔리디티 사용가능 플랫폼 :
 Ethereum
 Tendermint & ErisDB (a version of Tendermint)
 Counterparty (which runs on Bitcoin)
 Klaytn

각주

외부 링크 
 Solidity home and documentation

도메인 특화 프로그래밍 언어
정적 타입 프로그래밍 언어