[Blockchain] 지갑, UTXO, 어카운트

yooni·2022년 3월 3일
1

Blockchain

목록 보기
9/36
post-thumbnail

1. 지갑 (Wallet)

비트코인, 이더리움 등의 암호화폐를 보관할 수 있는 계정으로 노드(Node)를 의미한다.

주소(공개키, Public Key)암호(개인키, Private Key)로 구성되어 있으며, 키와 관련된 모든 트랜잭션을 블록체인에 모니터링하고 유지하는 소프트웨어이다. 지갑의 주소는 암호화폐를 다른 사람으로부터 송금받기 위해 공개할 수 있지만, 개인 암호는 소유권을 증명하는 수단이므로 본인만 알고 있어야 한다.

데스크탑/모바일/하드웨어/웹 지갑이 있다.



2. 비트코인 UTXO (Unspent Transaction Outputs)

미사용 트랜잭션 출력 값 (미지출 거래 출력)

비트코인에서는 잔고 개념이 없고, 블록체인에 기록된 UTXO를 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.

마치 실물 화폐를 주고 받는 느낌이다. UTXO는 사용되어지지 않고(누군가에게 전송되지 않고) 내 지갑안에 남아있는 동전/지폐라고 생각할 수 있다. 거스름돈이 구현된다. 효율적이고 직관적이다.


🖍 UTXO의 장단점

➕ 이중 지불이 방지된다.

트랜잭션이 발생되면 해당 UTXO는 검증을 받은 후 TX Pool에 들어간다. 이중 지불이 발생한다면 채굴자들은 Pool에서 UTXO를 검사하여 사용 기록이 있다면 해당 거래를 무효화한다. 이러한 이중 지불 방지 기능 때문에 하이퍼레져 패브릭(Hyperledger Fabric)에서도 UTXO를 사용한다.

➕ 잔고 증명이 용이하다.

UTXO는 추적이 쉽다. 따라서 거래의 유효성을 검증하기가 쉽다. 이더리움 같은 경우 트랜잭션을 모두 검증/확인하여 최종적인 잔고를 유추하지만, UTXO는 해당 사용자의 UTXO만 확인하면 된다.

➕ 익명성과 보안성이 보장된다.

거래마다 새로운 UTXO를 형성하고, 인출이 발생할 때 바로 사라지므로 정확한 잔고 및 지출 금액을 파악하기 어렵기 때문에 프라이버시가 보장된다.

➖ UTXO마다 수수료가 부과되기 때문에 다량의 UTXO가 사용되는 경우 수수료가 높아진다.

이더리움의 경우, 결과적으로 잔고 하나만 점검하면 되지만 UTXO 방식에서는 흩어져 있는 UTXO를 모두 모아야 한다. 소액 결제를 자주 하거나, 채굴로 이자를 받게 된다면 과도한 UTXO로 인해 불필요한 수수료를 내야 할 수 있다. (100만원을 100원짜리 10000개로 가지고 있다면..?)



3. 이더리움 어카운트 (Account)

이더리움 주소(Address)개인키(Private Key)의 조합으로, 이더리움 어카운트는 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다. 은행의 계좌와 같은 개념이다.

이더리움은 비트코인의 UTXO보다 더 많은 상태 정보를 관리하기 위해 Account Object를 활용하고 있으며, 여기에 스마트 컨트랙트의 개념이 더해지며, 컨트랙트 계정(CA)이 추가되었다.


주소(Address)와 키(Key)

  • 주소 (Address)
    은행 고객의 계좌번호와 같은 개념이다. 이더리움 블록체인에서 사용자의 신분증에 해당한다.

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

이더리움 주소 생성 과정

이더리움의 지갑 생성의 시작은 '개인키'이다. 개인키는 지갑의 소유주임을 증명하는 수단이기 때문에 유출되면 안된다.

  1. 지갑 생성시 무작위 키인 개인키가 생성되고, 개인키로부터 공개키를 생성한다.
  2. Keccak-256 알고리즘으로 공개키의 해시값을 계산한다.
  3. 생성된 해시값의 뒤쪽 20byte만 남기고 제외후 이더리움 주소를 생성한다.

이더리움 2가지 계정 유형

"개인키(Private Key) 정보 소유 -> 트랜잭션 생성 가능"
트랜잭션을 생성하기 위해서는 전자 서명 정보가 필요하며, 전자 서명을 하기 위해서는 반드시 개인키 정보가 필요하다.

  • 외부 소유 계정 (EOA, 사용자 계정)
    공개 주소와 개인키의 조합이다. 개인키를 가지고 있기 때문에 다른 계정과 이더를 주고받고, 스마트 컨트랙트에 자체적으로 트랜잭션을 보낼 수 있다.

  • 컨트랙트 계정 (CA)
    컨트랙트 계정에는 개인키가 없다. 이 계정은 스마트 계약을 블록체인에 배포할 때 생성된다. 이 계정은 오직 EOA에 의해 실행될 수 있으며 자체적으로는 트랜잭션을 생성할 수 없다. 다른 CA 계정과 이더를 송수신할 수 있고(Internal Transaction), 관련 코드를 담아 EOA나 다른 CA의 호출을 받아 트랜잭션을 발생시키는 기능을 갖는다.


🖍 어카운트의 장단점

➕ 직관적이고 단순하다.

이더리움은 상태를 추적하여 상태를 기반으로 다른 작업을 수행하는 스마트 컨트랙트와 같은 직관적인 모델을 선택했다. 상태 비저장 모델인 UTXO의 경우, 트랜잭션에 상태 정보를 포함하도록 강제해야 하기 때문에 계약의 설계가 복잡해질 수 있다.

➕ 거래가 효율적이다.

전송 계정이 거래비용을 지불하기에 충분한 잔고를 가지고 있는지만 확인하면 되기 때문에 효율적이다.

➖ 이중 지불 공격에 노출될 수 있다.

이를 대비하기 위해 이더리움에서는 점증적 논스(Nonce)를 구현한다. 이더리움의 모든 계정은 공개적인 논스를 가지고 있고 거래가 이루어질 때마다 논스는 1씩 증가한다. 이로 인해 동일한 트랜잭션이 이중으로 제출되는 것을 방지할 수 있다.



4. 비트코인 (UTXO) vs 이더리움 (Account)

각각의 장단점이 있기 때문에 사용 목적과 기능, 사용하려는 역할에 따라 어떤 것이 더 좋을지 달라질 수 있다. 화폐의 역할에 충실해야 한다면, 한번 사용되고 사라져 익명성과 보안성이 강한 비트코인의 UTXO가 좋고 dApp등의 다양한 기능 구현을 원한다면 스마트 컨트랙트를 활용할 수 있는 이더리움 어카운트가 적절하다.

프라이빗 블록체인인 하이퍼렛져 패브릭에서는 서로간의 믿음이 전제되어 있기 때문에(인증된 사용자만 사용) 연산의 효율성 때문에 UTXO를 사용한다.



📌 Reference
https://steemit.com/coinkorea/@prosong77/utxo
https://steemit.com/kr/@yahweh87/eoa

profile
멋쟁이 코린이

0개의 댓글