UTXO VS Account

taeheeyoon·2022년 8월 4일
4

Blockchain 이론

목록 보기
6/14
post-thumbnail

시작하며

블록체인이라고 해서 모든 블록체인이 같은 방식으로 동작하는 것은 아닙니다.
예를들면 비트코인과 이더리움은 각자 트랜잭션 처리 방식이 상이합니다. 비트코인은 UTXO를, 이더리움은 Account 방식을 채택했습니다. 이 글에서는 이 두가지 방식을 살펴보고 장단점까지 알아보는 시간을 갖겠습니다.

UTXO based Model

UTXO(미사용 트랜잭션 출력값) 방식을 채용한 가장 대표적인 암호화폐는 비트코인입니다. UTXO 기반 원장에서는 이더리움과 같은 계정이나 지갑이 없습니다. 대신 블록체인에 기록된 "소비되지 않은 출력값"을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인합니다. 트랜잭션이 발생하면 기존 UTXO를 소비하고 그 자리에 새로운 UTXO를 생성하여 저장합니다.

마치 오프라인에서 하는 거래와 비슷합니다.
예를 들어, A와 B로부터 각각 1비트코인과 3비트코인을 받아 총 4비트코인을 갖게 되었으면, 지갑에는 4비트코인이 한꺼번에 묶여 있지 않고 1비트코인, 3비트코인을 각각 UTXO로 저장합니다. 다시 UTXO 안에 있는 금액을 송금할 때는 새로운 UTXO을 생성하기 때문에 기존 UTXO는 파기합니다. 예를 들어, 4비트코인이 있는 UTXO에서 2비트코인을 타인에게 송금하면 2비트코인을 송금한 UTXO와 남겨진 2비트코인에 대한 UTXO가 새로 생성됩니다.

장점

  • 이중 지불 방지 : 트랜잭션을 발생시키면 해당 UTXO는 검증을 받은 후 TX Pool(트랜잭션 풀)에 들어갑니다. 그러므로 이중지불이 발생하면 채굴자들은 Pool에서 UTXO 검사 후 사용 기록이 있다면 해당 거래를 무효화 할 수 있습니다.
  • 잔고의 증명 : UTXO는 추적하기가 용이한 장점이 있습니다. 즉, 거래에 대한 유효성을 검증하기가 매우 쉽습니다. 일반적으로 이더리움 같은 경우는 트랜잭션들을 모두 검증 및 확인하여 최종적으로 잔고를 유추하지만 UTXO는 해당 사용자의 UTXO만 확인하면 되기 때문에 그럴 필요가 없습니다. 이더리움처럼 어느 계좌에 귀속이 된 기록이 아니라 흩어져 있는 UTXO의 객체들로 특정 소유자의 계좌를 유추하는 방식입니다. 그래서 특정 계좌의 잔고를 알기가 힘들 수 있지만, 수많은 애플리케이션들이 이러한 기능들을 모두 제공하고 있어서(특정 사용자의 UTXO를 모아주는 기능)잔고를 확인하는 데 큰 불편함이 없습니다.

단점

  • UTXO의 가장 큰 단점은 UTXO가 너무 과하게 생성이 될 경우입니다. 이더리움은 결과적으로 잔고 하나만 확인하면 끝이지만, UTXO 방식을 채용하는 코인은 흩어져 있는 UTXO를 모두 모아야 되며 소액 결제를 엄청 자주 하거나, 채굴로 이자를 받게 되면 과도한 UTXO로 인해서 불필요하게 과도한 수수료를 내야 하는 단점이 생깁니다.

  • UTXO 모델 기반 블록체인은 프로그래밍 가능성이 약하고 복잡한 계산이 거의 불가능합니다. UTXO 모델 기반 블록체인에 대한 복잡한 논리 또는 상태 저장 계약의 구현은 복잡하여 높은 비용과 낮은 상태 공간 활용도를 초래합니다.

Account based Model

이더리움은 스마트 계약을 위해 비트코인의 UTXO 방식대신 계정(Account) 방식을 채택하기로 결정했습니다. 계정 방식에서 상태는 블록으로 전송되지 않고 로컬로 노드에 저장됩니다. 노드는 StateRoot(글로벌 상태의 Merkle 루트)를 비교하여 상태에 대한 합의에 도달합니다.

UTXO 기반 블록체인과 계정 기반 블록체인의 중요한 차이점 중 하나는 UTXO는 트랜잭션이 결과 상태를 확정 짓는다는 것입니다. 트랜잭션을 발생할 때 결과가 어떻게 될지 알고있습니다. 코인의 위치는 트랜잭션 자체에 포함됩니다. 계정 기반 시스템에서는 그렇지 않습니다. 계정 기반 시스템의 트랜잭션은 기존 상태에 의존하므로 스테이트풀(Stateful)이라고도 합니다.

계정 기반 모델은 UTXO와 다르게 코인을 분할하거나 합쳐서 트랜잭션을 발생시킬 수 있습니다. A의 계정의 잔고에 100ETH가 있으면 B한테 5ETH만 보낼 수 있으며 A의 잔고는 95ETH가 남고 트랜잭션에 포함된 값은 5ETH입니다.

주소(Address)와 키(Key)

이더리움 블록체인에서 주소와 키는 이더리움의 소유권과 전송을 나타내는 데 주로 쓰입니다.

  • 주소(Address)
    이더리움 블록체인에서 사용자의 신분증에 해당하는 것이 주소입니다. 이더리움 주소는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 과 같은 형태를 가지게 되며, 각 주소에는 해당 개인키가 있습니다.
    개인키는 사용자가 알고 있는 일종의 암호로 간주할 수 있으며, 블록체인과 상호 작용하려면 주소 + 개인키 쌍이 필요합니다.

이더리움의 주소(Address)어카운트(Account)의 차이
은행을 예시로, 주소(Address)는 계좌번호를 나타내고, 어카운트(Account)는 송금&이체(트랜잭션)를 할 수 있는 계좌라고 이해할 수 있습니다.

  • 키(Key)
    키는 개인키(Private Key)와 공개키(Public Key)로 구분되어 사용됩니다. 개인키(Private Key)는 무작위로 생성되며 비밀 키로써 유지해야 하는 반면, 공개키(Public Key)는 개인키를 연산하여 생성되며 계정을 식별하는 요소로 사용됩니다.

이더리움 주소 생성 과정

지금은 간단하게 생성되는 과정에 대해 알아봅니다.
1) 개인 키를 생성하고, 개인 키로부터 공개 키를 생성합니다.
2) Keccak-256 알고리즘으로 공개 키의 해시값을 계산합니다.
3) 생성된 해시값의 뒤쪽 20byte만 남기고 제외 후 이더리움 주소를 생성하게 됩니다.

3)에서 생성된 해시값의 20byte만 남기고 제외할까요?
20byte로 줄여도 누구나 쉽게 계정 주소를 만들 수 있게 만든 것입니다. 즉, 암호화 알고리즘이 이후에 생성된 계정과 중복이 되지 않아 검증이 필요하지 않기 때문에 20byte만 남겨도 문제가 안됩니다.

이더리움의 2가지 유형 계정

  • 외부 소유 계정(EOA)
    위에서 언급한, 공개 주소와 개인키의 조합을 말합니다. 외부 소유 계정, 또는 외부 계정을 사용하면 다른 계정과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있습니다.

  • 컨트랙트 계정(CA)
    컨트랙트 계정에는 상응하는 개인키가 없습니다. 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성됩니다. 컨트랙트 계정 대신 컨트랙트(Contract)로만 표시되기도 합니다.
    컨트랙트(계정)은 다른 계정과 이더를 송수신하고(EOA와 동일), 관련된 코드를 담고(EOA와 다름), EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시키는 기능을 갖고 있습니다.

장점

  • 단순성(Simplicity) : 이더리움은 복잡한 스마트 컨트랙트 개발자, 특히 국가 정보가 필요하거나 여러 당사자가 참여하는 개발자의 이익을 위해 보다 직관적인 모델을 선택했습니다. 예를 들어 상태를 추적하여 상태를 기반으로 다른 작업을 수행하는 스마트 컨트랙트가 있습니다. UTXO의 상태 비저장 모델이 트랜잭션에 상태 정보를 포함하도록 강제하므로 계약의 설계가 불필요하게 복잡해지는 것과 대비를 보입니다.

  • 효율성(Efficiency) : 대량 거래가 더 효율적입니다. 트랜잭션이 결과 상태를 명시적으로 포함하지 않아 트랜잭션의 크기가 작습니다. UTXO 모델 에서 각 입력에는 단일 감시 스크립트가 필요하고 각 출력에는 단일 잠금 스크립트가 필요합니다. 많은 주소로 전송하면 많은 양의 거래 데이터가 생성되고 이 데이터의 검증/저장 비용이 많이 듭니다. 계정 방식에서 마이닝 풀은 마이닝 이익을 공유하기 위해 하나의 계약을 생성할 수 있으며 단 하나의 트랜잭션(하나의 서명만 필요)으로 많은 트랜잭션을 생성할 수 있습니다.

단점

  • 이중 지불 : 스마트 계약 코드가 제대로 설계되어 있지 않으면 해당 트랜잭션이 반복되어 A가 트랜잭션을 한 번만 실행하려는 의도에도 불구하고 A는 90ETH를 갖고 B는 10ETH를 갖게 될 수 있습니다.(이중 지불 문제) 이를 방지하려면 트랜잭션이 여러 번 처리되지 않도록 논스(nonce)를 포함하여를 증가시켜야 합니다. 논스는 중복되지 않고 순차적이기 때문에, 같은 논스에 여러 트랜잭션 전송이 발생하였다면 해당 논스 중 제일 높은 가스비(Gas Price)를 지불한 트랜잭션이 처리됩니다. 하지만 이 방법은 이중 지불 문제를 해결하지만 사용자가 병렬로 트랜잭션을 생성할 수 없습니다. 특정 계정의 여러 트랜잭션 중 첫 번째 트랜잭션이 실패하고 블록에 포함되지 않으면 후속 트랜잭션도 실패하게됩니다.

  • 이더리움의 계정 모델 트랜잭션은 지정된 입력 및 출력 상태가 아닌 이벤트만 포함하기 때문에 EVM 및 위에 구축된 프로토콜에 의해 정확성(이전 블록체인 상태가 주어짐)에 대해 합의되어야 합니다. 복잡성을 추가하는 것 외에도 이 접근 방식은 제안된 상태 전환이 상태 머신에 의해 합의되기 전에 유효할 것이라는 확신을 사용자에게 제공하지 않습니다. 따라서 상태 전환 유효성을 증명하기 위한 새로운 증명 검증 메커니즘이 필요하며 UTXO 방식에서는 필요하지 않습니다.

  • 계정 기반 모델은 계정 자체가 단일 소유자와 거래를 하기때문에 개인 정보가 취약해질 위험이 있습니다.(Doxing의 위험)

UTXO VS Account

UTXO 방식에서 트랜잭션 계산은 클라이언트에 의해 오프체인으로 수행되고 트랜잭션은 기존 UTXO에 연결됩니다. 이 모델에서 모든 트랜잭션에는 기존 UTXO를 사용하는 증명이 포함되며 병렬 계산이 가능합니다. 이 모델에는 '계정'이라는 개념이 없기 때문에 1회성 주소 사용을 권장하여 프라이버시를 강화합니다.

이와 대조적으로 계정 방식은 프로토콜 내 계정 잔액과 지속적인 스크립팅을 제공하여 뛰어난 프로그래밍 가능성을 제공하고 UTXO 모델에서는 불가능한 방식으로 새로운 애플리케이션을 온체인에 구축할 수 있습니다. 계정 모델은 또한 상태 시스템에 이벤트를 제안하는 서명된 메시지만 필요로 하는 대량 트랜잭션의 효율적인 처리를 허용합니다. 이 구성을 통해 UTXO 트랜잭션보다 훨씬 적은 입출력 데이터 전송으로 많은 수의 트랜잭션이 네트워크를 통해 전파될 수 있습니다.

마치며

비트코인의 UTXO, 이더리움의 Account는 각각의 장단점이 있어 어느 것이 더 훌륭하다고 판단하는 것은 기능과 역할에 따라 달라집니다. 화폐의 역할에 충실해야 한다면 비트코인의 UTXO가 한번 사용되면 사라져 익명성과 보안성이 강하기 때문에 더 훌륭하지만, DApp과 같이 다양한 기능을 구현하고 싶다면 스마트 계약를 활용할 수 있는 이더리움의 Account 방식이 좋습니다.

참고자료

UTXO-해시넷
Intro to Blockchain: UTXO vs Account based
UTXO vs Account model
Comparison between the UTXO and Account Model

profile
생각하는 대로 살지 않으면, 사는 대로 생각하게 된다.

0개의 댓글