얼마 전, 이더리움의 작업 증명(PoW) 기반의 채굴에서 지분 증명(PoS) 기반의 채굴로 이전하는 머지 업그레이드를 진행하였습니다. 머지 업그레이드는 기존 이더리움이 가지는 확장성 문제를 해결해 줄 것으로 기대되고 있습니다. 머지않은 미래에 우리는 실생활에서 블록체인 기반 기술들을 체감하며 살아갈 수도 있습니다. 블록체인 기반 서비스들을 구현하기 위한 언어, Solidity를 알아봅시다.
Solidity란?
Solidity 공식 문서에 따르면 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는 스마트 컨트랙트 구현을 위한 고수준 객체 지향 언어이며, 스마트 컨트랙트는 이더리움 State의 account들의 동작을 제어하는 프로그램이라는 것입니다.
스마트 컨트랙트에 대해 간단히 설명하자면, 블록체인 상에서 작동되는 일종의 코드입니다. 'Alice가 Bob에게 1 이더를 주면, Bob은 Alice에게 물건을 전송한다.' 와 같은 현실의 계약이 코드로 작성되어, 조건이 맞는 경우 자동으로 집행되게 하는 것이죠. 그래서 컨트랙트, 즉 '계약'이라는 명칭이 붙었습니다.
Solidity의 등장 배경
그렇다면 Solidity는 무엇을 위해 등장하였을까요?
1세대 블록체인 기술이라 부를 수 있는 비트코인의 경우, 간단한 스크립트 언어를 지원하였습니다. 스크립트 언어는 이름 그대로 단순하게 일부 연산자들만 지원하였고, 이로 인해 간단한 송금 기능 이상을 지원하기는 어려웠습니다. 물론 추후에 일부 기능이 추가되고 응용 방법이 등장하여 해시타임락 등 다소 복잡한 기능이 지원되기는 했지만, 결국 튜링 불완전성이라는 한계를 극복하지는 못하였습니다.
튜링 완전 언어란 쉽게 말해 반복문을 지원하는 언어를 말합니다. 비트코인은 공격자가 의도적으로 무의미한 연산을 하는 반복문을 삽입하여 DoS(Deinial of Service)를 유발하는 것을 막기 위해 반복 실행을 지원하지 않았습니다. 이러다 보니 현실의 다양한 문제들을 코드 형태로 작성하는 데에 어려움이 있었습니다.
2세대 블록체인 기술이라 할 수 있는 이더리움은, 비트코인에서 구현하지 못한 튜링 완전성을 블록체인 상에 구현하는 데 성공합니다. Solidity라는 튜링 완전 언어와, EVM이라는 스택 기반 가상 머신을 구현함으로써 코드의 반복 실행이 가능한, 소위 World wide computer를 만들어 냅니다. 이렇게 함으로써 현실 세계의 다양한 계약들을 블록체인 상에서 공증을 서줄 수 있게 된 것입니다.
Solidity는 정적 타입을 가지며, 상속을 지원하고, 라이브러리나 구조체와 같은 복잡한 사용자 정의 타입을 지원합니다. 말 그대로 C++과 같은 다른 고수준 언어들과 거의 비슷한 형태를 가진다는 뜻이죠. Solidity를 이용하면 투표, 크라우드세일, 다중 서명 지갑 등의 다양한 dApp에 필요한 스마트 컨트랙트들을 작성할 수 있습니다.
Solidity의 작동 원리
Solidity로 작성된 코드를 컴파일하면 EVM 상에서 작동할 수 있는 바이트코드로 변환됩니다. 이 바이트코드들은 EVM 내에서 여러 Opcode들과 인자들로 해석됩니다. 각 Opcode 들은 정해진 가스를 사용하며 실행되게 됩니다.
Solidity 현황
요즘은 보다 간결한 python에서 영향을 받은 또 다른 언어인 vyper도 급부상하고 있습니다. 하지만 아직 vyper는 베타 단계에 가깝고, 여전히 Solidity의 점유율은 압도적이며, 대부분의 오픈 소스들 역시 Solidity로 작성되고 있습니다.
스마트 컨트랙트 개발과 관련된 여러 표준들을 정의하고 제공하는 큰 규모의 프로젝트인 OpenZeppelin 역시 Solidity로만 코드를 제공하고 있습니다.
마치며
만약 Solidity에 관심이 있으시다면, Remix IDE에서 별도의 환경 구성 없이 직접 개발해 보실 수 있습니다. 기회가 된다면 Solidity 기본 문법이나 여러 패턴들도 차후에 다룰 예정입니다.
'블록체인' 카테고리의 다른 글
[블록체인] Solidity(솔리디티) 강의 - function visibility: external, public, internal, private의 차이 (0) | 2022.09.19 |
---|
댓글