솔리디티
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
솔리디티(Solidity)는 이더리움 가상 머신(EVM)을 목표로 설계된 스마트 계약 개발을 위한 정적으로 형식화된 프로그래밍 언어이다. 2014년 개빈 우드(Gavin Wood)에 의해 제안되었으며, 이더리움의 주요 언어로 사용된다. ECMAScript 문법을 기반으로 하며, 임의의 계층적 매핑 및 구조체를 포함하는 복잡한 멤버 변수 지원, 다중 상속 지원 등의 특징을 갖는다. 솔리디티는 Remix IDE, Microsoft Visual Studio, 젯브레인 IntelliJ 등 다양한 개발 플랫폼에서 지원되며, 이더리움, 바이낸스 스마트 체인, 폴리곤 등 여러 블록체인 플랫폼에서 동작한다. 그러나 솔리디티는 튜링 완전성으로 인해 보안 분석의 어려움, 직관적이지 않은 특성 등으로 비판을 받기도 한다.
더 읽어볼만한 페이지
- 도메인 특화 프로그래밍 언어 - 도메인 특화 언어
도메인 특화 언어(DSL)는 특정 문제 영역에 특화된 프로그래밍 언어로, 외부 DSL, 내부 DSL, 시각적 다이어그램 언어 등으로 분류되며, 생산성 향상에 기여하지만 새로운 언어 학습의 필요성과 적용 분야의 제한이라는 특징을 가진다. - 도메인 특화 프로그래밍 언어 - G-code
G-코드는 1950년대 MIT에서 처음 구현된 수치 제어 공작 기계를 제어하는 프로그래밍 언어로서, 다양한 표준과 구현을 거쳐 발전해왔으며 현대에는 매크로 기능과 CAD/CAM 응용 프로그램과의 연동을 지원한다. - 정적 타입 프로그래밍 언어 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - 정적 타입 프로그래밍 언어 - 핵 (프로그래밍 언어)
Hack은 페이스북에서 개발한 프로그래밍 언어이며, PHP와 상호 운용되도록 설계되었고, 정적 타이핑을 도입하여 타입 힌트를 확장하며 PHP 7에도 영향을 미쳤다.
솔리디티 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
![]() | |
용도 | 스마트 컨트랙트 개발 |
파일 확장자 | .sol |
최초 출시 | 2014년 8월 |
개발자 | 크리스티안 라이트비즈너, 알렉스 베레그사시, 여러 전 이더리움 핵심 기여자 |
구현 언어 | C++ |
최신 버전 출시일 | }} |
영향 받은 언어 | JavaScript, C++, Python |
라이선스 | GNU General Public License v3.0 |
웹사이트 | 솔리디티 공식 웹사이트 |
특징 | |
프로그래밍 패러다임 | 명령형 프로그래밍 |
2. 역사
솔리디티는 2014년 8월 개빈 우드에 의해 처음 제안되었으며[49], 이후 이더리움 프로젝트의 크리스티안 라이트비에스너가 이끄는 솔리디티 팀에 의해 개발되었다. 이더리움 가상 머신(EVM)[48]을 목표로 설계된 4가지 언어(Serpent, LLL, Viper (실험용), Mutan (미사용)) 중 하나이다.
솔리디티는 이더리움의 주요 언어이며, Monax나 Hyperledger 등 텐더민트를 합의 알고리즘으로 사용하는 다른 Private 블록체인 플랫폼에서도 동작한다. SWIFT는 개념증명(Proof of Concept)에 솔리디티를 사용하기도 했다.[44][50]
2. 1. 개발 배경
솔리디티는 개빈 우드(Gavin Wood)가 ECMAScript 문법을 기반으로 설계하여, 기존 웹 개발자들이 친숙하게 접근할 수 있도록 하였다.[16] 하지만 ECMAScript와 달리 정적 타입 및 가변적인 반환 유형을 지원하는 등 차별점을 둔다. Serpent와 Mutan 같은 당시의 다른 EVM 타겟팅 언어와 비교할 때, 솔리디티에는 임의의 계층적 매핑을 포함하는 계약을 지원하기 위한 복잡한 멤버 변수 지원, C3 선형화를 포함한 다중 상속 지원과 같은 몇 가지 중요한 차이점이 있다.[17]또한, 하나의 계약 내에서 다중 타입의 안전한 함수가 가능하게 하는 응용이진인터페이스(application binary interface; ABI)가 솔리디티에 소개되었다. (이는 추후 Serpent에서도 지원되었다.)[17]
2. 2. 주요 사건
2016년, 코넬 대학교 연구원은 솔리디티가 그해 발생한 더 다오 해킹의 부분적인 원인이라고 언급했다. 그는 "사실 이것은 DAO 계약 자체의 결함이나 악용이 아니었습니다. 기술적으로 이더리움 가상 머신(EVM)은 의도한 대로 작동했지만, 솔리디티는 커뮤니티에서 놓쳤을 뿐만 아니라 언어 설계자들 스스로도 놓친 보안 결함을 계약에 도입했습니다."라고 말했다.[51][52]3. 설명
솔리디티는 스마트 컨트랙트 개발을 위해 설계된 정적 타입 프로그래밍 언어로, 이더리움 가상 머신(EVM)에서 실행 가능한 바이트코드로 컴파일된다.[53][54] 개발자는 솔리디티를 통해 비즈니스 로직을 스마트 컨트랙트에 담아 자체 실행되는 애플리케이션을 구현할 수 있으며, 여기에 기록된 내용은 부인할 수 없고 강제적으로 수행된다.[55][56]
솔리디티와 같은 스마트 컨트랙트용 언어를 사용하는 것은 프로그래밍 기술을 가진 사람들에게는 어렵지 않은 것으로 보인다.[57]
3. 1. 특징
솔리디티는 개빈 우드(Gavin Wood)가 설계했으며, ECMAScript 문법을 기반으로 하여 기존 웹 개발자들이 친숙하게 접근할 수 있다.[16] 하지만 ECMAScript와 달리 정적 타입 지정 및 가변적인 반환 유형을 가진다. Serpent와 Mutan 같은 당시의 다른 EVM 타겟팅 언어와 비교할 때 솔리디티에는 몇 가지 중요한 차이점이 있는데, 임의의 계층적 매핑을 포함하는 계약을 지원하기 위한 복잡한 멤버 변수를 지원하며, 계약은 상속(C3 선형화 다중 상속 포함)을 지원한다.하나의 계약 내에서 다중 타입의 안전한 함수를 가능하게 하는 응용 이진 인터페이스(application binary interface ; ABI) 또한 솔리디티에 소개되었다. (추후 Serpent에 의해 지원됨)
메소드 호출의 진행 상태에 대해서 사용자 중심으로 명세하기 위한 문서화 시스템과 관련된 내용이 Natural Language Specification로 제안서에 포함되었다.[17]
4. 솔리디티 개발 플랫폼
- Remix 온라인 에디터는 공식 솔리디티 IDE이다.[19]
- 마이크로소프트 비주얼 스튜디오[60][61]
- ConsenSys Enterprise[62][63]
- 마이크로소프트 비주얼 스튜디오 코드
- 젯브레인 IntelliJ
- EthFiddle 온라인 에디터[20]
솔리디티를 사용할 수 있는 웹 기반 개발 환경으로는 Remix IDE와 EthFiddle이 있다.[36]
5. 솔리디티 동작 블록체인 플랫폼
솔리디티는 다음 플랫폼에서 사용할 수 있다.
플랫폼 | 설명 |
---|---|
이더리움 | |
바이낸스 스마트 체인[23] | |
이더리움 클래식 | |
트론 | |
아발란체 C-체인 | |
카운터파티 | 비트코인에서 실행[24][25] |
Tendermint[67] & ErisDB | |
헤데라 해시그래프 | |
폴리곤 | |
메티스 | |
아비트럼 | |
옵티미즘 | |
Klaytn | |
Milkomeda | Cardano, Solana, Algorand의 사이드 체인 |
6. 다른 스마트 컨트랙트 언어와의 비교
솔리디티는 이더리움 가상 머신(EVM) 기반 스마트 컨트랙트 개발에 주로 사용되는 언어이다. 러스트 등 다른 스마트 컨트랙트 언어도 있다.
6. 1. Solidity vs. Rust
솔리디티는 이더리움 가상 머신(EVM)에서 스마트 컨트랙트를 개발하기 위한 주요 프로그래밍 언어이다.[29] 하지만 러스트는 블록체인 생태계에서 강력한 대안으로 부상했으며, 특히 웹 어셈블리(Wasm)를 지원하는 폴카닷, 클레버, 솔라나 등에서 사용된다.6. 1. 1. 메모리 안전성
러스트는 솔리디티에서 엄격하게 적용되지 않는 널 포인터 역참조 및 버퍼 오버플로우와 같은 일반적인 프로그래밍 오류를 방지하는 내장 메모리 안전 기능을 제공한다. 이는 러스트 컨트랙트가 스마트 컨트랙트 환경에서 악용될 수 있는 보안 취약점에 덜 노출될 수 있게 한다.6. 1. 2. 동시성
러스트는 동시 프로그래밍을 지원하여 개발자가 여러 작업을 동시에 처리할 수 있는 고성능 코드를 작성할 수 있게 해준다. 이는 초당 수천 건의 트랜잭션을 처리해야 하는 솔라나[30]와 같은 고성능 블록체인에 특히 유용하다. 반면 솔리디티는 기본적으로 동시성을 지원하지 않아 특정 애플리케이션에서 성능이 제한될 수 있다.[31]7. 비판
스마트 계약의 보안 속성은 직접 추론하기 어렵고, 솔리디티의 튜링 완전성은 임의의 속성에 대한 검증을 결정적으로 자동화하기 어렵게 만든다.[26] 솔리디티는 직관적이지 않은 특성, 블록체인 도메인별 측면을 처리할 구조 부재, 알려진 취약점에 대한 중앙 집중식 문서화 부재 등으로 인해 이더리움 스마트 계약 오류 발생의 원인으로 지목되기도 한다.[27]
2016년, 코넬 대학교 연구원은 솔리디티가 그해 발생한 더 다오 해킹의 부분적인 원인이라고 언급했다. 그는 "사실 이것은 DAO 계약 자체의 결함이나 악용이 아니었습니다. 기술적으로 이더리움 가상 머신(EVM)은 의도한 대로 작동했지만, 솔리디티는 커뮤니티에서 놓쳤을 뿐만 아니라 언어 설계자들 스스로도 놓친 보안 결함을 계약에 도입했습니다."라고 말했다.[28]
개발자 커뮤니티는 종종 솔리디티가 많은 타사 인터페이스와 API를 필요로 하고, 중요한 정보 집약적인 스마트 계약을 생성할 수 없다는 점을 지적한다.
8. 예제 코드
solidity
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];
}
}
```[59]
```solidity
pragma solidity >= 0.7.0 <0.8.0;
contract Coin {
// "public" 키워드는 다른 컨트랙트에서 변수에 접근할 수 있도록 합니다.
address public minter;
mapping (address => uint) public balances;
// 이벤트는 클라이언트가 선언한 특정 컨트랙트 변경에 반응할 수 있도록 합니다.
event Sent (address from, address to, uint amount);
// 컨트랙트가 생성될 때만 생성자 코드가 실행됩니다.
constructor() public {
minter = msg.sender;
}
// 새로 생성된 코인의 양을 주소로 보냅니다.
// 컨트랙트 생성자만 호출할 수 있습니다.
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// 기존 코인의 양을 모든 호출자로부터 주소로 보냅니다.
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "잔액 부족.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent (msg.sender, receiver, amount);
}
}
```[35]
참조
[1]
웹사이트
Contributors to ethereum/solidity
https://github.com/e[...]
2023-03-30
[2]
웹사이트
Contributors to ethereum/solidity
https://github.com/e[...]
2023-03-30
[3]
웹사이트
Build software better, together
https://github.com/
2023-03-30
[4]
간행물
The Solidity Contract-Oriented Programming Language
https://github.com/e[...]
ethereum
2023-03-30
[5]
웹사이트
Ethereum Is The Second Most Valuable Digital Currency, Behind Bitcoin
2017-07-17
[6]
뉴스
SOFE Berlin: Swift unveils blockchain proof-of-concept
https://www.finextra[...]
2016-11-24
[7]
잡지
Someone Just Stole $50 Million from the Biggest Crowdfunded Project Ever. (Humans Can't Be Trusted)
https://www.wired.co[...]
[8]
간행물
The Solidity Contract-Oriented Programming Language
https://github.com/e[...]
ethereum
2023-03-30
[9]
웹사이트
Created Solidity
https://github.com/e[...]
2024-03-23
[10]
웹사이트
List of contributors
https://github.com/e[...]
[11]
서적
Blockchain & Cryptocurrency Technology with Solidity Level 1
https://books.google[...]
Advanced Micro Systems Sdn Bhd
2022-11-01
[12]
웹사이트
Gavin Wood
https://gavwood.com/
2023-03-30
[13]
arXiv
Finding The Greedy, Prodigal, and Suicidal Contracts at Scale
2018-03-14
[14]
웹사이트
Westpac joins SWIFT's blockchain proof of concept
https://www.zdnet.co[...]
2022-07-13
[15]
웹사이트
Hyperledger Fabric Tutorial - Create a blockchain app for loyalty points
https://developer.ib[...]
2019-04-10
[16]
웹사이트
Language Influences — Solidity 0.8.17 documentation
https://docs.solidit[...]
2023-03-30
[17]
웹사이트
Ethereum Natural Specification Format
https://github.com/e[...]
[18]
웹사이트
Introduction to Smart Contracts — Solidity 0.8.19 documentation
https://docs.solidit[...]
2023-03-30
[19]
웹사이트
Remix - Ethereum IDE
https://remix.ethere[...]
2023-03-30
[20]
웹사이트
EthFiddle - Solidity in the Browser. Powered By Loom Network
https://ethfiddle.co[...]
2023-03-30
[21]
웹사이트
solidity - Visual Studio Marketplace
https://marketplace.[...]
2023-03-30
[22]
웹사이트
Solidity - IntelliJ IDEs Plugin {{!}} Marketplace
https://plugins.jetb[...]
2023-03-30
[23]
웹사이트
Binance Smart Chain
https://github.com/b[...]
2021-10-26
[24]
뉴스
BitBeat: Bitcoin 2.0 Firm Counterparty Adopts Ethereum's Software
https://blogs.wsj.co[...]
2021-04-16
[25]
서적
Blockchain : blueprint for a new economy
https://www.worldcat[...]
2015
[26]
서적
Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security
Association for Computing Machinery
2018-10-15
[27]
서적
Principles of Security and Trust, 6th International Conference, 2017, Proceedings
2017
[28]
잡지
A $50 Million Hack Just Showed That the DAO Was All Too Human
https://www.wired.co[...]
2016-06-18
[29]
서적
Ethereum Smart Contract Development in Solidity
https://books.google[...]
Springer Nature
2020-08-31
[30]
웹사이트
Developing with Rust {{!}} Solana
https://solana.com/d[...]
2024-08-16
[31]
웹사이트
Rust Official Documentation
https://www.rust-lan[...]
[32]
웹사이트
Solidity Lang
https://soliditylang[...]
[33]
서적
マスタリング・イーサリアム ―スマートコントラクトとDAppの構築
https://www.worldcat[...]
オイラリージャパン
2019
[34]
웹사이트
Hyperledger Fabric code pattern - Create a blockchain app for loyalty points
https://developer.ib[...]
2021-12-29
[35]
웹사이트
Introduction to Smart Contracts — Solidity 0.5.14 documentation
https://docs.solidit[...]
2021-12-29
[36]
서적
マスタリング・イーサリアム ―スマートコントラクトとDAppの構築
https://www.worldcat[...]
オイラリージャパン
2019
[37]
간행물
binance-chain/bsc
https://github.com/b[...]
binance-chain
2021-12-29
[38]
웹사이트
What is Tendermint {{!}} Tendermint Core
https://docs.tenderm[...]
2021-12-29
[39]
뉴스
BitBeat: Bitcoin 2.0 Firm Counterparty Adopts Ethereum’s Software
https://www.wsj.com/[...]
Wall Street Journal
2014-11-12
[40]
서적
Blockchain : blueprint for a new economy
https://www.worldcat[...]
2015
[41]
웹사이트
What is Avalanche? {{!}} Avalanche Docs
https://docs.avax.ne[...]
2021-12-29
[42]
문서
https://dcspark.gitb[...]
[43]
뉴스
PwC blockchain expert pinpoints sources of ambiguity in smart contracts
http://www.ibtimes.c[...]
IBTimes
2016-12-14
[44]
뉴스
SOFE Berlin: Swift unveils blockchain proof-of-concept
https://www.finextra[...]
Finextra
2016-11-24
[45]
웹인용
Blockchain Veterans Unveil Secure Smart Contracts Framework
http://www.coindesk.[...]
CoinDesk
2016-12-14
[46]
웹인용
Counterparty Brings Ethereum Smart Contracts to the Bitcoin Blockchain
https://www.cryptoco[...]
CCN
2016-12-14
[47]
뉴스
In Formal Verification Push, Ethereum Seeks Smart Contract Certainty
http://www.coindesk.[...]
CoinDesk
2016-12-12
[48]
서적
Digital Siege: Why Young Entrepreneurs Are Winning
https://books.google[...]
2017-01-08
[49]
웹인용
StackEdit Viewer
https://stackedit.io[...]
stackedit.io
2018-06-26
[50]
뉴스
Blockchain’s Smart Contracts: What’s Smart, What’s Not
http://finops.co/ope[...]
Finops
2016-12-14
[51]
뉴스
Ethereum’s Solidity Flaw Exploited in DAO Attack Says Cornell Researcher
https://www.cryptoco[...]
CryptocoinNews
2016-12-14
[52]
뉴스
A $50 MILLION HACK JUST SHOWED THAT THE DAO WAS ALL TOO HUMAN
https://www.wired.co[...]
Wired
2017-02-18
[53]
서적
The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology
https://books.google[...]
Wiley Publishing
2016-04-26
[54]
웹인용
Microsoft adds Ethereum language Solidity to Visual Studio
http://www.ibtimes.c[...]
International Business Times
2016-05-11
[55]
웹인용
Ethereum's Solidity Now Available in Microsoft Visual Studio
https://www.cryptoco[...]
Cryptocoinnews
2016-05-11
[56]
웹인용
Microsoft adds Ethereum language Solidity to Visual Studio
http://www.ibtimes.c[...]
""
2016-05-11
[57]
서적
The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology Hardcover
https://books.google[...]
Wiley Publishing
2017-01-09
[58]
웹인용
Ethereum Natural Specification Format
https://github.com/e[...]
GitHub
[59]
문서
RJ Catalano, one of the core developers, see VoR0220 on github
[60]
웹인용
Ethereum's Solidity Now Available in Microsoft Visual Studio
https://www.cryptoco[...]
CCN: Financial Bitcoin & Cryptocurrency News
2016-05-01
[61]
웹인용
Microsoft Adds Ethereum to Windows Platform For Over 3 Million Developers
http://www.coindesk.[...]
CoinDesk
2016-05-01
[62]
서적
The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology
https://books.google[...]
Wiley Publishing
2016-04-26
[63]
웹인용
Microsoft adds Ethereum language Solidity to Visual Studio
http://www.ibtimes.c[...]
International Business Times
2016-05-11
[64]
웹인용
Ethereum's Solidity Now Available in Microsoft Visual Studio
https://www.cryptoco[...]
Cryptocoinnews
2016-05-11
[65]
웹인용
Microsoft adds Ethereum language Solidity to Visual Studio
http://www.ibtimes.c[...]
""
2016-05-11
[66]
서적
The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology Hardcover
https://books.google[...]
Wiley Publishing
2017-01-09
[67]
웹인용
Tendermint CEO on Powering Blockchains with Speed, Security, Scalability
http://allcoinsnews.[...]
AllCoinNews
2016-12-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com