본문 바로가기

공부하는 삶/암호화폐 101

이더리움 논문 리뷰 04 스크립팅, 스마트 계약 (Scripting, Smart Contracts)

안녕하세요. 이번 글에서는 이더리움을 본격적으로 설명하기에 앞서 논문의 서론 부분 중 "스크립팅 (Scripting)" 섹션을 공부해보겠습니다.

 

이전 글
비트코인 논문 리뷰
이더리움 논문 리뷰 01 Bitcoin As A State Transition System
이더리움 논문 리뷰 02 채굴 (마이닝, Mining)
이더리움 논문 리뷰 03 머클 트리 (해시 트리, Merkle Trees)

다음 글
이더리움 논문 리뷰 05 이더리움 디자인 철학 (Ethereum Design Philosophy)

 

목차
스마트 계약과 스크립트 (Smart Contracts and Scripts)
스마트 계약으로 본 비트코인 거래 (Bitcoin Transactions as Smart Contracts)
비트코인 스마트 계약의 한계점 (Limitations)
다양하고 복잡한 어플리케이션을 만들기 위해 필요한 요소들

출처: https://ethereum.org

 

스마트 계약과 스크립트 (Smart Contracts and Scripts)

먼저 "스마트 계약"이라는 표현이 논문에 본격적으로 언급되기 시작합니다. 스마트 계약이라는 개념 자체는 1994년 Nick Szabo에 의해 도입된 것으로, 개인이나 단체 간에 계약 조건을 이행하기 위해서 어떤 규칙, 프로토콜 등을 디지털의 형태로 기록한 것으로 용어가 정의되었습니다. 스마트 계약은 일종의 프로그램 코드로 이해할 수 있는데, 그 코드를 실행함으로써 주어진 계약의 조건 등이 성립되는지 확인할 수 있습니다. 여기서 코드, 혹은 코드를 포함한 문서를 "스크립트(Script)"로 생각하면 될 것 같습니다.

 

스마트 계약으로 본 비트코인 거래  (Bitcoin Transactions as Smart Contracts)

비트코인의 거래 체계는 이미 어느 정도 "스마트 계약"의 개념이 반영된 것으로 볼 수 있습니다. 비트코인에서 코인을 거래하는 과정을 스마트 계약의 형태로 볼 수 있습니다. 보다 구체적으로는, 어떤 UTXO(Unspent Transaction Outputs, 이전 글 참고)를 보내는 거래 내역이 유효하기 위해서는, "비트코인 스크립트 언어"로 쓰여진 스크립트를 통과할 수 있는 특정 데이터가 거래 내역과 함께 제공되어야 합니다.

 

예를 들어, 비트코인에서 코인을 송금하는 과정을 UTXO와 스마트 계약의 패러다임을 이용해서 설명해보겠습니다. 아래 그림에서 거래 TX가 성립하기 위해서는 비트코인 스크립트 언어로 쓰여진 어떤 스크립트를 실행해서 통과해야 합니다. 그 스크립트는, A의 디지털 서명과 인풋 UTXO a을 비교하여 A가 a를 소유하고 있는 것이 맞는지 확인을 한 뒤, 맞으면 1을 리턴하고 그렇지 않으면 0을 리턴하는 내용을 포함합니다.

 

출처: 이전 포스트 "이더리움 논문 리뷰 01 Bitcoin As A State Transition System"

 

비트코인 스마트 계약의 한계점 (Limitations)

하지만 비트코인 거래 체계를 구현하는 비트코인 스트립트 언어는 몇 가지 한계점이 있습니다.

  • Lack of Turing-completeness
  • Value-blindness
  • Lack of state
  • Blockchain-blindness

튜링 불완전 (Lack of Turing-completeness)

먼저, 비트코인 스크립트 언어로 구현이 불가능한 연산들이 있는데, 가장 큰 예시로 루프(loops, 반복 구문)가 있습니다. 물론 반복적인 코드로 루프를 구현하는 것이 가능은 하지만, 이를 위해선 수많은 반복적인 연산을 코드로 명시해야하기 때문에 비효율적인 측면이 있습니다.

 

정밀한 단위의 금액을 표현할 수 없음 (Value-blindness)

이전 글에서 설명한 것과 같이 UTXO라는 것은 가치가 쪼개질 수가 없고 하나의 UTXO를 전부 사용하거나, 하지 않거나, 두 가지 선택밖에 없습니다. 이러한 이유로, 세부적인 단위의 금액을 표현하는 데 있어 한계가 있고 비효율적일 수밖에 없습니다.

 

지나치게 단순한 UTXO의 바이너리 특성 (Lack of state)

앞서 말했듯이 UTXO에는 두 가지 상태만이 존재합니다. 사용되었거나 안 되었거나. 이처럼 지나치게 단순한 바이너리 특성때문에, 다중계약과 같은 더 다양하고 복잡한 형태의 스마트 계약을 구현하는데 적합하지 않습니다.

 

블록체인 데이터에 접근할 수 없음. (Blockchain-blindness)

UTXO 자체만으로는 블록체인 블록 데이터에 저장된 논스(nonce)나 타임스탬프, 이전 블록 해시 등을 알 수가 없습니다. 이러한 데이터는 randomness를 손쉽게 얻을 수 있는 유용한 방법이 될 수도 있는데, 이러한 randomness가 필요한 어플리케이션에서는 비트코인 스크립트 언어의 사용이 불가능합니다.

 

다양하고 복잡한 어플리케이션을 만들기 위해 필요한 요소들

암호화폐 어플리케이션을 만들기 위해서는 세 가지 요소들이 필요합니다. 새로운 블록체인 구축해야하고, 코인 거래 시 사용될 스크립트 언어와 메타 프로토콜이 정의되어야 합니다. 기존 비트코인의 경우, 새로운 블록체인을 구축하기 위해서는 많은 시간과 비용이 필요하고, 스크립트 언어와 메타 프로토콜에는 비효율적이거나 구현 불가능 등의 한계점이 있습니다.

 

본 논문에서는, 이러한 한계점들을 극복하고 보다 다양하고 복잡한 어플리케이션을 만들기 위해 새로운 "이더리움"이라는 프레임워크를 제시합니다.

 

다음 글 부터는 드디어 본격적인 이더리움에 대해 공부해보겠습니다.

 

레퍼런스

Smart Contracts: https://www.investopedia.com/terms/s/smart-contracts.asp
Ethereum Whitepaper: https://ethereum.org/en/whitepaper

 


 

 

 

반응형