이더리움(Account based model)과 비트코인(UTXO)

민정·2023년 1월 29일
0

핀테크(Fintech)

목록 보기
1/7
post-thumbnail

이더리움이란?

블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼이자 플랫폼의 자체 통화명

이더리움에서 제공하는 이더(Ether)는 비트코인과 마찬가지로 암호화폐의 일종으로 거래되고 있으며 이더리움의 화폐 단위는 ETH 로 표시한다.

비탈릭 부테린이 개발하였고 가상화폐인 비트코인에 사용된 핵심 기술인 블록체인에 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에서 이더리움 가상 머신(EVM)을 만들고, 이 플랫폼을 이용하여 다양한 정보를 기록하는 시스템을 창안하였음 . 이더리움은 C++, 자바, 파이썬, GO 등 주요 프로그래밍 언어를 지원한다.

🍎 가상 머신(EVM)
스마트 계약을 처리하기 위한 가상 머신은 모든 형태의 알고리즘을 처리할 수 있는 튜링 기계로 먼저 들어온 데이터를 우선적으로 처리하는 큐 구조를 가진다. EVM 은 저수준의 기계어에 가까운 바이트 코드만을 실행할 수 있기 때문에 고급 프로그래밍 언어를 실행하기 위해서는 바이트 코드로 컴파일 과정을 거쳐야함. 이 가상머신을 이용할때 ‘가스’라는 대가를 지불해야한다.

이더리움의 목적

  • 분산 어플리케이션 제작을 위한 대체 프로토콜을 만드는 것
  • 분산 어플리케이션에 유용할 것이라 생각되는 다른 종류의 제작 기법을 제공

비트코인- UTXO 모델(Unspent Transaction Output)

UTXO 모델이란?

Unspent Transaction Outputs 의 약자로서, 미사용 트랜잭션 출력값을 말한다.

계정이나 잔고가 없고, 블록체인에 기록된 “소비되지 않은 출력값” 을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.

  • 비트코인의 “상태(state)”는 UTXO의 집합
  • 블록체인은 아직 쓰여지지 않은 비트코인을 관리한다.
  • UTXO는 단 한번만 쓰여질 수 있다 . 트랜잭션이 발생하면 기존 UTXO를 소비하고 그 자리에 새로운 UTXO를 생성하여 저장

A,B가 E에게 각각 1BTC, 2BTC 을 송금, C와 D가 F에게 각각 3BTC,10BTC 을 송금해준다고 하면 각 UTXO 는 2개, 2개가 되어 총 4개가 생성된다. 이후에 F가 H에게 9BTC 를 송금해준다고하면 F의 UTXO 중 9BTC을 송금해줄 수 있는 UTXO 를 찾아 송금하여준다. 이때 UTXO 는 4개에서 5개로 늘어난다.

위 과정에서 본 것 처럼 UTXO 는 합치거나 찢어서 사용할 수 없고 비트코인 지갑이 사용할 수 있는 UTXO 찾아 데이터를 전송하는 역할을 해준다

UTXO 의 장점

  • 이중 지불 방지 : 트랜잭션을 발생시키면 해당 UTXO는 검증을 받은 후 TX Pool(트랜잭션 풀)에 들어간다. 따라서 이중 지불이 발생하면 채굴자들은 Pool에서 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 이다.

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

  • 논스(nonce) : 각 트랜잭션이 오직 한 번만 처리되게 하는 일종의 카운터 ( 트랜잭션의 순서 파악, 이중지불을 막기 위한 수단)
  • 어카운트의 현재 이더(Ether) 잔고
  • 어카운트의 계약 코드
  • 어카운트의 저장 공간

주소(Address)와 키(Key)

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

  • 주소(Address) 이더리움 블록체인에서 사용자의 신분증처럼 해당되는 것이 주소이다.
    이더리움 주소는 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 와 같은 형태를 가지게 되며 각 주소에는 해당 개인키가 있다. 개인키는 사용자가 알고 있는 일종의 암호로 간주할 수 있으며, 블록체인과 상호 작용하려면 주소+개인키의 쌍이 필요하다.
    이더리움의 주소와 어카운트의 차이 → 주소는 계좌 번호,
    카운트는 트랜잭션을 할 수 있는 계좌라고 이해하면 된다.

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

이더리움 어카운트

외부 소유 어카운트(Externally owned Accounts) 와 컨트랙트 어카운트(Contract Account)

외부 소유 어카운트 (EOA)

공개 주소와 개인키의 조합. 외부 소유 계정, 또는 외부 계정을 사용하면 다른 계정과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.

외부 소유 어카운트는 Private Key로 서명하여 다른 계정들로 메시지를 전송할 수 있다,

컨트랙트 계정 (CA)

컨트랙트 계정에는 상응하는 개인키가 없다. 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성된다. 컨트랙트 계정은 다른 계정과 이더를 송수신하고, 관련된 코드를 담고 EOA 나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시키는 기능을 가지고 있다.

컨트랙트 어카운트는 자체적으로 트랜잭션 생성이 불가능하며, 외부 소유 어카운트에서 받은 메시지에 대한 응답으로 트랜잭션을 실행 !

트랜잭션과 메시지

→ 트랜잭션이란 외부 소유 어카운트가 보낼 메시지를 가지고 있는 서명된 데이터 패키지를 말함

  • 메시지 수신처
  • 발신처를 확인할 수 있는 서명
  • 발신처가 수신처로 보내는 이더의 양
  • 선택적 데이터 필드
  • STARTGAS 값, 트랜잭션 실행이 수행되도록 허용된 최대 계산 단계수
  • GASPRICE 값, 매 계산마다 발신처가 지불하는 수수료

Account based model 의 장점

단순성(Simplicity)
이더리움은 복잡한 스마트 컨트랙트 개발자, 국가 정보가 필요하거나 여러 당사자가 참여하는 개발자의 이익을 위해 보다 직관적인 모델을 선택하였다. UTXO의 상태 비저장 모델은 트랜잭션에 상태 정보를 포함하도록 되어있어 계약의 설계가 불필요하게 복잡해지해는데 반해 단순하다.

효율성(Efficiency)
Account based model은 전송 계정이 거래 비용을 지불하기에 충분한 잔액을 가지고 있는지 확인만 하면 되므로 효율적이다.

Account based model 의 단점

  • 이중 지출 공격에 노출
    스마트 계약 코드가 제대로 설계되어 있지 않으면 해당 트랜잭션이 반복되어 이중 지불 문제가 발생할 수 있다. 이를 방지하기 위해 트랜잭션이 여러 번 처리되지 않도록 논스(nonce)를 포함하여 증가시켜야 한다. 논스는 중복되지 않고 순차적이기 때문에 같은 논스에 여러 트랜잭션 전송이 발생하였다면 해당 논스 중 제일 높은 가스비를 지불한 트랜잭션이 처리된다. (하지만 이 방법은 이중 지불 문제를 해결하지만 사용자가 병렬로 트랜잭션을 생성할 수 없다)

참고자료

UTXOvsAccount
이더리움
UTXO 개념의 이해
비트코인 개념 - UTXO란?

profile
공부 기록장

0개의 댓글