지갑과 어카운트
지갑(Wallet)
지갑(Wallet)이란?
블록체인 지갑은 블록체인에서 실행되고 개인 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 블록체인에 모니터링하고 유지하는 소프트웨어이다. 즉 비트코인, 이더리움 등의 암호화폐를 보관할 수 있는 계정을 뜻한다.
채굴(Mining)과 노드(Node)에서 노드가 바로, 지갑(Wallet)이다.
지갑의 종류
- 데스크톱(PC) 지갑
- 모바일 지갑
- 하드웨어 지갑
- 웹 지갑
지갑의 구조
지갑은 주소(공개키, Public Key)와 암호(개인키, Private Key)로 구성되어 있다. 지갑의 주소(공개키)는 다른 사람들이 암호화폐를 송금할 수 있도록 공개해도 되지만, 개인 암호(개인키)는 오직 지갑 소유자 본인만 알고 있어야 한다.
비트코인 - UTXO(Unspent Transaction Outputs)
UTXO(Unspent Transaction Outputs)는 미사용 트랜잭션 출력값(미지출 거래 출력)을 뜻한다.
비트코인은 이더리움의 어카운트(Account) 모델과 달리 계정이나 잔고가 없고, 블록체인에 기록된 소비되지 않은 출력값을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다. 즉, 코인이 지갑(Wallet)에 저장되는 것이 아니라, UTXO(Unspent Transaction Outputs)에 저장된다고 보면 된다.
UTXO의 장단점
- 장점
- 이중 지불 방지
- 트랜잭션을 발생시키면 해당 UTXO는 검증받은 후 TX Pool에 들어간다. 그러므로 이중 지불이 발생하면 채굴자들은 Pool에서 UTXO 검사 후 사용 기록이 있다면 해당 거래를 무효화할 수 있다. 같은 이유로 하이퍼레저 패브릭(Hyperledger Fabric)에서도 UTXO를 사용한다.
- 잔고의 증명
- UTXO는 추적하기가 용이한 장점이 있다. 즉, 거래에 대한 유효성을 검증하기가 매우 쉽다. 일반적으로 이더리움 같은 경우는 트랜잭션들을 모두 검증 및 확인하여 최종적으로 잔고를 유추하지만 UTXO는 해당 사용자의 UTXO만 확인하면 되기 때문에 그럴 필요가 없다.
- 이중 지불 방지
이더리움 - 어카운트(Account)
어카운트(Account)란?
이더리움 주소(Address)와 개인키(Private Key)의 조합을 어카운트(Account)라고 한다. 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다.
주소(Address)와 키(Key)
이더리움 블록체인에서 주소와 키는 이더리움의 소유권과 전송을 나타내는 데 주로 쓰인다.
- 주소(Address)
- 이더리움 블록체인에서 사용자의 신분증에 해당하는 것이 주소이다. 이더리움 주소는
001d3f1ef827552ae1114027bd3ecf1f086ba0f9
과 같은 형태를 가지게 되며, 각 주소에 해당 개인키가 있다. 개인키는 사용자가 알고 일종의 암호로 간주할 수 있으며, 블록체인과 상호 작용하려면주소 + 개인키
쌍이 필요하다.이더리움의 주소(Address)와 어카운트(Account)의 차이
은행을 예시로, 주소(Address)는 계좌 번호를 나타내고, 어카운트(Account)는 송금&이체(트랜잭션)를 할 수 있는 계좌라고 이해할 수 있다.
- 이더리움 블록체인에서 사용자의 신분증에 해당하는 것이 주소이다. 이더리움 주소는
- 키(Key)
- 키는 개인키(Private Key)와 공개키(Public Key)로 구분되어 사용된다. 개인키(Private Key)는 무작위로 생성되며 비밀 키로써 유지해야 하는 반면, 공개키(Public Key)는 개인키를 연산하여 생성되며 계정을 식별하는 요소로 사용된다.
이더리움 주소 생성 과정
지금은 간단하게 생성되는 과정에 대해 알아본다.
- 개인 키를 생성하고, 개인 키로부터 공개 키를 생성한다.
- Keccak-256 알고리즘으로 공개 캐의 해시값을 계산한다.
- 생성된 해시값의 뒤쪽 20byte만 남기고 제외 후 이더리움 주소로 생성하게 된다.
왜
3
에서 생성된 해시값의 20byte만 남기고 제외할까? 20byte로 줄여도 누구나 쉽게 계정 주소를 만들 수 있게 만든 것이다. 즉, 암호화 알고리즘이 이후에 생서된 계정과 중복이 되지 않아 검증이 필요하지 않기 때문에 20byte만 남겨도 문제가 안된다.
이더리움의 2가지 유형 계정
- 외부 소유 계정(EOA)
- 위에서 언급한, 공개 주소와 개인 키의 조합을 말한다. 외부 소유 계쩡, 또는 외부 계정을 사용하면 다른 계쩡과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
- 컨트랙트 계정(CA)
- 컨트랙트 계정에는 상응하는 개인 키가 없다. 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성된다. 컨트랙트 계정 대신 컨트랙트(Contract)로만 표시되기도 한다.
- 컨트랙트(계정)는 다른 계정과 이더를 송수신하고(EOA와 동일), 관련된 코드를 담고(EOA와 다름), EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시키는 기능을 갖고 있다.
어카운트(Account)의 장단점
- 장점
- 단순성(Simplicity)
- 이더리움은 복잡한 스마트 컨트랙트 개발자, 특히 국가 정보가 필요하거나 여러 당사자가 참여하는 개발자의 이익을 위해 보다 직관적인 모델을 선택했다. 예를 들어 상태를 추적하여 상태를 기반으로 다른 작업을 수행하는 스마트 컨트랙트가 있다. UTXO의 상태 비저장 모델이 트랜잭션에 상태 정보를 포함하도록 강제하므로 계약의 설계가 불필요하게 복잡해지는 것과 대비를 보인다.
- 효율성(Efficiency)
- 이더리움의 어카운트는 단순성과 더불어 전송 계정이 거래 비용을 지불할 만큼 충분한 잔액을 가지고 있는지 확인하기만 하면 되므로 더욱 효율적이다.
- 단순성(Simplicity)
- 단점
- 이중 지불
- 이더리움과 어카운트의 단점은 이중 지불 공격에 노출된다는 점이다. 이러한 유형의 공격에 대응하기 위해 점증적인 논스(Nonce)를 구현한다. 이더리움에서, 모든 계정은 공개적으로 볼 수 있는 논스를 가지고 있고, 거래가 이루어질 때마다 논스는 하나씩 증가하게 된다. 이는 동일한 트랜잭션이 두 번 이상 제출되는 것을 방지할 수 있다.
- 이중 지불
비트코인과 이더리움 비교
비트코인의 UTXO, 이더리움의 어카운트는 각각의 장단점이 있어 어느 것이 더 나은 것인지는 사용하려는 목적과 기능, 사용하려는 역할에 따라 달라질 수 있다.
화폐의 역할에 충실해야 한다면 비트코인의 UTXO가 한 번 사용되고 사라져 익명성과 보안성이 강하기 때문에 더 훌륭하지만, DApp과 같이 다양한 기능을 구현하고 싶다면 스마트 컨트랙트를 활용할 수 있는 이더리움의 어카운트가 적절하다.