Ethereum white paper 톺아보기

Downy·2023년 3월 27일
0

이더리움 백서에 담긴 내용 중 비트코인 백서와 중복되는 부분을 제외하고 간단히 정리해 보았다.

Alternative Blockchain Application

블록체인 기술을 이용한 몇가지 응용 사례에는 네임코인, 컬러드 코인, 메타코인 등이 있다.

이 코인들의 특징을 간단히 요약해 보자면,

먼저 네임코인은 탈중앙화된 자율조직 프로토콜을 이용할 때 사용자를 구분하기 위해 선출원방식을 이용한 명칭 등록 시스템의 일종이다.
컬러드 코인은 사용자가 자기 자신만의 디지털 토큰을 발행하는 프로토콜 역할을 한다. 이 프로토콜에서 사용자는 특정 비트코인 UTXO에 공개적으로 색을 부여함으로써 화폐를 발행하고, 특정 색을 통해 사용자를 구별한다.
마지막으로 메타코인은 비트코인 거래를 메타코인 거래 저장에 이용하되, 상태 이동 함수 APPLY'를 다르게 가짐으로써, 비트코인 시스템 위에서 운영되는 프로토콜을 갖는다. 이때 무효 거래를 방지하기 위해 APPLY(S, TX)가 에러를 리턴하면 프로토콜은 APPLY'(S, TX) = S로 정해진다.

이러한 합의 프로토콜을 만드는 데에는 두가지 접근 방법이 있다.
1. 독립적인 네트워크 구축
2. 비트코인 시스템과 연관되는 프로토콜 구축

1의 방법을 따르기에 대다수 어플리케이션은 규모가 너무 작다. 개별 실행주체가 모든 상태변환과 네트워킹 코드를 건설 및 점검해야 하며 독립적인 블록체인을 구동시켜야 한다.
2의 방법은 비트코인의 단순 지불 검증(SPV)특징을 물려받지 못한다는 단점이 있다. 블록체인에 기반한 Meta-protocol은 무효 거래가 블록체인에 포함되지 않도록 막을 방법이 자기 자신의 프로토콜에는 없기 때문에, 거래의 유효성을 검증하기 위해서는 비트코인 블록체인의 원점까지 돌아가 훑어보는 작업이 필요하다. 즉 비트코인에 기반한 meta-protocol의 라이트한 클라이언트 구현은 믿을만한 서버에 의지할 수 밖에 없다.
암호화폐의 가장 중요한 의의가 제 3의 신용기구의 필요성을 없애는 것. 즉 탈중앙화인 점을 되새겨 본다면 이것은 본질을 흐리게 만들 수 있다.

Scripting

기본적으로 비트코인 프로토콜은 낮은 수준의 스마트 컨트랙트 구현이 가능하다. 비트코인의 UTXO는 공개키만으로 획득할 수 있을 뿐만 아니라, 단순 스택 기반 프로그래밍 언어로 표현되는 더 복잡한 스크립트로도 획득할 수 있다.

여기서

Script?
비트코인 생태계에서 쓰이는 언어로 비트코인의 모든 거래를 유효화시키는 역할을 한다.
핵심 key로는 잠금 스크립트와 해제 스크립트가 있다.

  1. 잠금 스크립트 (Scriptpubkey)
    : 비트코인 소비조건.
    출력값을 소비하기 위해 충족되어야 하는 요건을
    스크립트로 작성한 것으로 UTXO를 소비하기 위한 조건 및 공개키, 비트코인 주소를 포함.
  1. 해제 스크립트 (Scriptsig)
    : 해당 'UTXO를 소비하기 위한 조건'을 충족시키는 유일한 서명.
    잠금 스크립트가 출력값에 걸어둔 조건을 해결해 출력값이 소비될 수 있도록 하는 스크립트.

다시 본론을 돌아와서,

서명을 input으로 받고 스트립트를 통해 해당 거래와 UTXO를 가진 주소를 검증하고 검증 성공시 1을, 검증 실패시 2를 output으로 내놓는, 또는 더 복잡한 스크립트 구현도 가능하다.

그러나 비트코인에 구현된 스크립트 언어에는 몇가지 중요한 한계가 있다.

  1. 튜링불완전성
    비트코인 스크립트는 모든 경우의 프로그래밍을 다 지원하지 않는다. 거래 증명 시 무한 순환에 빠지는 것을 막기 위해 while이나 for같은 순환(loop) 명령 카테고리가 빠져있다. 이것을 사실 단순히 하위코드를 if 구문과 함께 반복함으로써 구현이 가능한 동시에 아주 비효율적인 프로그램이 된다.

  2. 가치무지
    UTXO 스크립트만으로는 인출 액수를 세밀하게 통제할 방법이 없다. UTXO는 세부 작은 단위 거래가 불가능하여 인출액 전부가 송금되거나 말거나 밖에 선택할 수가 없다.

  3. 상태표현제한
    UTXO가 표현할 수 있는 상태는 사용되었거나 안 되었거나 두 가지 뿐이다. 이 두 상태 이외의 다른 내부적 상태를 가지는 다중 단계 계약이나 스크립트 구현이 불가능하다. 즉 UTXO는 단순한 1회적 계약에만 이용될 뿐, 메타 프로토콜을 적용하기 어렵다.

  4. 블록체인 무지
    UTXO는 논스, 타임스탬프, 이전 블록해시같은 블록체인 자료를 해독하지 못한다. 이로 인해 다른 여러 분야의 어플리케이션을 구현하는 데 한계가 있다.

따라서 메타 프로토콜을 구현하는 데 3가지 접근법이 있다고 정리할 수 있다.

  1. 독립적 블록체인 구현 - 자유로운 프로그램을 구축할 수 있지만 개발 기간, 초기 셋업 작업, 보안 등의 비용 문제
  2. 비트코인에 이미 내제된 스크립트 이용 - 실행이 간단하고 표준화, 이용범위가 제한적임
  3. 비트코인 상에서 작동되는 메타 규약 건설 - 확장성의 결함

따라서

이더리움을 통해 개발이 용이하고 더 강력한 라이트 클라이언트 기능을 가지는 동시에 경제적인 개발 환경과 블록체인 보안을 공유하는 어플리케이션을 만들 수 있는, 대안 프레임 워크를 건설하고자 한다.

이더리움(Ethereum)

이더리움의 목적은 분산 어플리케이션 제작을 위한 대체 프로토콜을 만드는 것이다.

이더리움은 어떤 값을 저장하고, 특정한 조건들을 만족했을때만 그 값을 얻게 해주는 일종의 암호 상자인 스마트 컨트랙트를 구현할 수 있다는 점에서 비트코인과 큰 차별성을 둔다.

이전의 비트코인은 화폐거래의 기능만 수행했다면, 이더리움은 단순한 화폐거래만 가능했던 코인에 다양한 계약을 적용할 수 있게 해주었다. 예금, 대출, 선물, NFT, P2E 등이 이에 속한다.

이것은 비트코인의 스크립팅(Scripting)이 제공하는 것보다 훨씬 강력한 기능들이 제공되기 때문에 가능한 것으로, 튜링-완전(Turing-completeness), 가치 인지능력(value-awareness), 블록체인 인지능력(blockchain-awareness), 상태(state)개념 등이 포함된다.

이더리움 어카운트(Ethereum Accounts)

이더리움에서, 상태(state)는 어카운트라(account)고 하는 오브젝트(object)들로 구성되어 있다. 각각의 어카운트는 20bytes의 주소와 어카운트 간 값과 정보를 직접 전달해주는 상태변환(state transition)을 가지고 있다.

이더리움 어카운트는 다음 네개의 필드를 가지고 있다.

  • 논스(nonce)
  • 어카운트의 현재 이더(ether)잔고
  • 어카운트의 계약 코드(if exist)
  • 어카운트의 저장 공간(default값 - undefined)

** ether - 이더리움의 기본 내부 암호-연료, 트랜잭션 수수료를 지불하는데 사용

이더리움에는 두가지 종류의 어카운트가 존재한다.

  1. 외부소유 어카운트(Externally Owned Account)
  • 가장 일반적인 계정 유형
  • 계정의 주소를 통제할 수 있는 개인키 존재
  • EOA는 트랜잭션을 발생시키고, 이를 다른 EOA나 CA에 전송할 수 있다.
    ex) Meta Mask에서 생성한 계정은 EOA이다.
  1. 컨트랙트 어카운트(Contract Account)
  • 컨트랙트 코드에 의해 통제되는 계정
  • 컨트랙트를 네트워크에 배포할 때 생성
  • EOA와 달리 계정의 주소를 통제할 수 있는 개인키가 존재하지 않는다.
  • 특정 조건을 충족했을 때 실행되는 컨트랙트 코드 존재 (직접 트랜잭션 발생X)

메세지와 트랜잭션 (Message and Transaction)

이더리움에서 transaction은 EOA가 보낼 메세지를 가지고 있는 서명된 데이터 패키지를 말한다.

이 트랜잭션은 다음을 포함한다

  • 메세지 수신처
  • 발신처를 확인할 수 있는 서명
  • 발신처가 수신처로 보내는 이더의 양
  • 선택적 데이터 필드
  • STARTGAS 값
  • GASPRICE 값, 매 계산 단계마다 발신처가 지불하는 수수료

컨트랙트는 다른 컨트랙트들에게 '메세지'를 전달할 수 있다. 메세지는 따로 저장될 필요가 없는 이더리움의 실행환경에서만 존재하는 가상의 오브젝트이고 다음의 것들을 포함한다.

  • 메세지 발신처
  • 메세지 수신처
  • 메세지와 함께 전달되는 이더
  • 선택적 데이터 필드 (메세지가 실행되기 위한 조건 등)
  • STARTGAS 값

메세지는 외부 실행자가 아닌 컨트랙트에 의해 생성된다는 부분을 제외하면 트랜잭션과 유사하다.

이더리움 상태변환 함수

이더리움 상태전이 함수 APPLY(S,TX) -> S'는 다음처럼 정의될 수 있다.

  1. 거래가 올바르게 구성되어 있는지(알맞은 수의 값들을 가지고 있는지 등), 서명이 유효한지, 논스(Nonce) 값이 발신자의 계정에 있는 논스(Nonce) 값과 일치하는지를 확인한다. 아닌 경우, 에러를 반환한다.

  2. STARTGAS * GASPRICE 값을 거래 수수료로 하고, 서명으로부터 발신자 주소를 확인한다. 발신자 계정의 잔고는 수수료만큼 줄이고 논스(Nonce) 값은 1 증가시킨다. 만약 잔고가 충분하지 않다면 에러를 반환한다.

  3. GAS = STARTGAS를 초기화하고 트랜잭션의 바이트에 대해 지불하기 위해 바이트당 일정량의 가스를 제거한다.

  4. 발신자 계정에서 수신자 계정에 거래 값을 전송한다. 만약 수신자 계정이 존재하지 않는 경우, 신규 생성한다. 만약 수신 계정이 계약 계정이라면 해당 계약의 코드에 대해 실행 완료될 때까지 또는 가스를 모두 사용할 때까지 실행한다.

  5. 만약 발신자가 충분한 잔고가 없어서 값 전송에 실패하거나, 혹은 가스 부족으로 코드 실행이 중지된다면, 그 때까지 이루어진 모든 상태 전환(단, 수수료 제외)을 다시 되돌리고, 수수료는 채굴자의 계정에 추가한다.

  6. 그렇지 않으면, 가스 잔액은 발신자에 다시 되돌리고, 수수료는 채굴자에 전송한다.

블록체인과 채굴(Blockchain and Mining)

이더리움 블록체인은 여러면에서 비트코인 블록체인과 유사하나, 어느정도 차이점이 존재한다.

  1. 참조된 이전 블록이 존재하고 유효한지 확인한다.

  2. 해당 블록의 타임스탬프가 앞선 블록의 타임스탬프보다 크고(나중이고), 그 이후로 15분 이내인지 확인한다.

  3. 블록 번호, 난이도, 거래 루트, 삼촌 루트, 가스 리밋(이더리움만의 다양한 로우 레벨 개념들)이 유효한지 확인한다.

  4. 해당 블록의 작업 증명이 유효한지 확인한다.

  5. S[0]를 앞선 블록의 마지막에 있는 상태라고 하자.

  6. TX는 블록의 거래 리스트, n는 거래라고 하자. 모든 i in 0...n-1, set S[i+1] = APPLY(S[i],TX[i]) 대하여. 만약 어느 애플리케이션이라도 오류를 반환한다거나, 소비된 가스 양이 GASLIMIT을 초과하는 경우 에러를 반환한다.

  7. S_FINAL를 S[n]로 하자, 다만 채굴자에게 지불되는 블록 보상을 추가한다.

  8. S_FINAL의 머클트리 루트의 상태가 블록 헤더에 저장된 최종 상태와 일치하는지 확인한다. 그렇다면, 블록은 유효하다; 그렇지 않다면, 블록은 유효하지 않다.

탈중앙화된 자율조직 (DAO, Decentralized Autonomous Organization)

특정한 중앙집권 주체의 개입없이 개인들이 모여 자율적으로 제안과 투표 등의 의사표시를 통해 다수결로 의결하고 이를 통해 운용되는 조직이다.

DAO의 구성요소는 다음과 같다.

Developers - 이더리움 블록체인 위의 자율조직 시스템을 설계

Proposal - DAO 플랫폼을 통해 진행할 내용들을 제안하는 제도

Voting - 위의 제안들을 실행하거나 실행하지 않도록 결정

DAO Tokenholders - 프리세일에 참여한 대부분의 투자자들이 여기에 속한다. 이들은 자신이 가진 토큰 수에 따라 투표권을 행사할 수 있으며, 수익을 통해 배당을 받게
된다.

Contractor - DAO에 Proposal들을 직접 제안하기도 하고 투표 결과를 실제로 수행한다.

Curators - 코드가 다 할 수 없는 부분들을 수행한다. Contractor(계약인)들을 DAO상에 등록하고 ETH를 받을 수 있도록 한다. 계약인의 이행 여부와 코드를 검토하고, 51%의 공격이 성공하지 않도록 막는 역할을 한다. 비탈릭을 포함하여 11명으로 이루어져 있다.

DAO만의 특장점은 블록체인을 통한 익명성과 탈중앙성이다.
블록체인의 성격을 상당부분 그대로 가져가기 때문에, 익명성과 탈중앙성이 확보되는데, 이는 non-legal 사업, P2P, 공유경제 등의 분야에서 강점을 발휘한다.

스네일 블록

  • 블록생성에 성공하였고, 검증 작업 시 오류가 없어서 네트워크를 통해 전파되었으나, 더 빨리 전파된 다른 채굴자에 의한 블록에 순위가 밀려 주체인에 산입되지 못한 블록.

  • 이더리움에서는 이러한 탈락 블록도 주체인블록 보상의 87.5% 만큼의 보상을 주어 보안성을 강화하는 역할을 수행하게 한다.

0개의 댓글