이더리움은 가장 인기 있는 암호화폐 중 하나이지만, 그 이상의 가치를 지니고 있습니다. 알고리즘 덕분에 암호화폐는 완전히 자율적으로 관리될 수 있습니다. 그렇다면 '스마트 콘트랙트'는 어떻게 작동하며, 우리는 어디까지 발전했을까요?
이더리움에서 스마트 콘트랙트는 어떻게 작동하나요?
이더리움에서 스마트 콘트랙트의 원리를 이해하려면 먼저 프로그래밍 언어의 세계로 잠시 여행을 떠나야 합니다. 현재 프로그래밍 언어는 기본적으로 해석 언어와 컴파일 언어의 두 그룹으로 나뉩니다. 첫 번째 그룹에서는 프로그램이 고수준 언어로 작성된 다음 인터프리터가 실행합니다. 대표적인 두 가지 예로 Python과 JavaScript가 있습니다. 인터프리터 언어는 바로 시작할 수 있기 때문에 웹과 같은 많은 애플리케이션 영역에서 흔히 사용됩니다. 또한 매우 보편적이며 추가 도구 없이도 다양한 플랫폼에서 사용할 수 있습니다.
이와는 대조적으로 컴파일러가 먼저 프로그램 텍스트를 다른 언어(주로 바이너리 머신 코드)로 변환하는 컴파일 언어가 있습니다. 이 바이너리 코드는 플랫폼에 따라 다르며 프로세서에서 직접 실행됩니다. 컴파일러는 프로세서 명령어 집합(예: ARM 또는 Intel 호환 CPU)에 대한 사용자 지정 코드를 생성할 수 있으며, 생성해야 합니다. 이 유형의 대표적인 예로 C와 Rust가 있습니다.
그러나 현실은 항상 그렇듯이 이러한 단순한 범주에서 제시하는 것보다 더 복잡합니다. 한동안 Java와 같은 하이브리드 형태가 존재해 왔습니다. Java 컴파일러는 Java 코드를 '실제' 머신 코드로 직접 변환하지 않고 특수한 중간 형식으로 변환합니다. 이 중간 형식은 다시 프로세서의 구체적인 아키텍처에서 인터프리터인 자바 가상 머신에 의해 실행됩니다.
이더리움의 스마트 콘트랙트도 비슷한 방식으로 작동합니다. 이더리움에서 트랜잭션의 유효성을 검사하고 새로운 화폐를 추출하는 모든 노드에는 이더리움 가상 머신(EVM)의 인스턴스가 포함되어 있습니다. 이더리움의 기술 사양인 옐로 페이퍼에는 EVM을 지원하는 지침과 그 실행 방법이 자세히 정의되어 있습니다.
이는 여러 가지 특별한 기능을 갖춘 독점적인 개발입니다:
외부 세계와의 상호 작용이 불가능합니다. 모든 알고리즘 결정은 블록체인과 그 트랜잭션에서 비롯되어야 합니다.
산술은 256비트 값을 기반으로 하여 더 큰 주소와 금액을 더 쉽게 처리할 수 있습니다.
해시 함수와 같은 특수 연산이 통합되어 성능을 향상시킵니다.
모든 명령어에는 필요한 실행 시간과 필요한 메모리 양에 대략적으로 해당하는 비용 함수(연료)가 할당됩니다. 미터링이라는 용어는 일반적으로 영어로 사용됩니다.
EVM에서 프로그래밍하기
Java 에코시스템과 마찬가지로 EVM 컴파일러를 사용할 수 있는 프로그래밍 언어는 여러 가지가 있습니다. 가장 일반적인 언어는 솔리디티로, 표면적으로 (구문상) 자바스크립트와 유사합니다. 2020년 말, 이더리움 문서에는 파이썬을 기반으로 하는 바이퍼와 완전히 독립적으로 개발된 율 플러스라는 두 가지 언어가 추가되었습니다.
이 모든 언어의 공통점은 범용 언어와 달리 특정 특성, 특히 특수 실행 엔진인 EVM으로 틈새 시장을 차지하고 있기 때문에 도메인에 특화되어 있다는 것입니다. 물론 이러한 도메인별 언어(DSL)는 기본적으로 애플리케이션의 복잡성을 줄이는 데 좋은 아이디어입니다.
하지만 EVM의 경우에는 그다지 의미가 없어 보입니다. 결국, 블록체인 외부 세계와 상호 작용할 수 있는 기능이 부족하더라도 임의의 알고리즘을 실행할 수 있으므로 (간단히 말하자면) 튜링 완전형입니다.
기존 언어와 실행 환경을 사용하지 않는 이유는 무엇인가요?
필요한 경우 일부 기능을 제거해야 하지만, 오랜 경험과 더 안정적인 도구, 그리고 훨씬 더 중요한 것은 더 넓은 프로그래머 기반을 활용할 수 있다는 점입니다. 실제로 오늘날 프로그래밍 언어의 인기는 특히 간결하고 형식이 안전하며 동적인지 여부뿐만 아니라 기존의 많은 라이브러리와 패키지에 얼마나 쉽게 액세스할 수 있는지에 따라 결정된다는 것은 상식적인 사실입니다. 이러한 시대적 변화는 조잡한 의미론으로 종종 비판을 받기도 하지만, 백만 번째 NPM 패키지 이후 가장 인기 있는 프로그래밍 언어로 꼽히는 JavaScript가 가장 잘 설명해줍니다.
보편적인 중급 언어, 웹어셈블리
이더리움 사양을 만든 사람들은 맞춤형 개발을 포기하고 보편적인 언어를 사용하면 특정 문제를 해결할 수 있다는 결론에 도달했습니다. 현재 웹에서 자바스크립트의 대안을 마련하기 위한 개발이 진행 중입니다: 웹어셈블리(WASM)입니다. 이것은 범용 중간 언어이자 바이너리 형식이며 인터프리터를 위한 사양과 결합되어 있습니다. 이름에서 알 수 있듯이 이 개방형 표준은 원래 웹용으로 설계되었습니다. 그 동안 다른 애플리케이션 영역(예: 스마트폰 애플리케이션)을 검토해 왔습니다.
WASM의 개발은 마이크로소프트, 구글, 애플과 같은 거대 기업이 주도하고 있습니다. 이 언어의 주요 특징은 처음부터 이식성을 염두에 두고 설계되었다는 점입니다. 이는 Rust, C++ 또는 Go와 같은 기존의 많은 프로그래밍 언어가 이미 웹 어셈블리용으로 컴파일할 수 있다는 사실에서도 알 수 있습니다.