이더리움 스마트 컨트랙 언어

이더리움은 제한된 일밖에 할 수 없는 비트코인 스크립트 언어와 달리 Turing-complete한 VM을 제공하는 것이 큰 특징입니다. 전산 전공이 아닌 분들은 complete라는 단어의 어감 때문에 막연히 어떤 계산이든 할 수 있는 강력한 언어 혹은 VM이라고 생각할 가능성이 큰데, Turing-complete한 언어는 강력한만큼 보장되는 것이 없는 언어이기도 합니다.

대표적인 예로 halting problem이 있습니다. computability theory에서 halting problem은 어떤 프로그램의 종료 여부를 실행 전에 알 수 있는지를 묻는 것인데, Turing complete한 언어는 종료 여부가 undecidable합니다.

이 문제는 생각보다 심각합니다. 어떤 스마트 컨트랙트를 종료되지 않고 무한히 실행되는 상태로 만들 수 있으면 이더리움 네트워크에 대한 DoS(Denial of Service) 공격이 가능하게 되고, 이더리움 네트워크의 가용성을 해칠 수 있기 때문입니다.

그래서 이더리움은 가스라는 개념을 만들고 각 EVM 바이트코드에 가스비를 부과하여 트랜잭션에 지정된 가스가 다 소진되면 Out of Gas 에러를 던지는 cost semantic을 만들었습니다.

바꿔 말해, 이더리움이 실제로 원했던 것은 종료 여부를 알 수 없는 Turing-complete한 언어가 아니라 종료를 보장 혹은 증명할 수 있는 total program이었던 셈입니다. 다만, 이미 탄탄한 이론적 배경이 있는 total functional programming이 아닌 Gas라는 adhoc한 방법을 사용한 것이 차이점입니다.

하지만 단순 종료 보장 정도로는 충분치 않습니다. correctness가 생명인 스마트 컨트랙트의 특성상 “specification”과 “implementation”이 같다는 걸 증명할 방법이 필요하기 때문입니다. 하지만 자바스크립트를 차용한 스마크 컨트랙트 언어 Solidity에서는 이것도 쉽지 않습니다. 여기에 Gas를 소모하는 EVM의 cost semantic이 결합되면서 온갖 종류의 버그가 나올 수 있는 최악의 프로그래밍 환경이 되었습니다.

이 문제를 해결하는 방법으로 많은 스마트 컨트랙트 프로젝트가 코드 리뷰를 크라우드-소싱하는 방법을 택했습니다. GitHub에 소스 코드를 올리고 스마트 컨트랙트 코드에 대한 동료 리뷰, 감사를 요청하는 방식입니다. 이미 코드 감사만 전문으로 수행하는 컨설턴시가 생기고 있고, 코드 감사를 크라우드-소싱하는 코드 감사 플랫폼에 개발이 진행되고 있습니다. 많은 돈이 걸려있는 만큼 관련 산업도 빠르게 발전하고 있습니다.

지난 수십 년간 연구된 프로그래밍 언어 이론, 검증 기술 등이 이미 존재하지만, 안타깝게도 이더리움의 인기를 등에 업은 EVM 기반의 언어가 당분간 스마트 컨트랙트의 주류 언어가 될 가능성이 매우 높습니다. 이미 Solidity는 다른 언어에 비해 우월한 지위를 누리고 있습니다. 분산 어플리케이션을 만들고 ICO을 통해 수백, 수천억원을 조달할 수 있는 상황에서 아무도 주목하지 않은 인프라 기술에 투자할 회사는 드물기 때문에 이런 상황은 쉽게 바뀌지 않을 겁니다.

앞으로 많은 개발자들이 애증을 가질 또 하나의 언어가 생겼습니다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s