지갑(Wallet)
블록체인에서 암호화폐를 보관할 수 있는 계정을 뜻한다. 개인키와 공개키를 저장하고 관련된 모든 트랜잭션을 모니터링하는 소프트웨어로 노드가 바로 지갑을 의미한다.
지갑은 주소(공개키)와 암호(개인키)로 구성되어 있다.
지갑의 종류
- 데스크탑(PC)지갑
- 모바일 지갑
- 하드웨어 지갑
- 웹 지갑
비트코인과 이더리움에서는?
1. 비트코인 - UTXO(Unspent Transaction Outputs)
UTXO는 미사용 트랜잭션 출력값을 의미한다. 블록체인에 기록된 소비되지 않은 출력값을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.
장점
- 이중 지불 방지 : 트랜잭션을 발생시키면 해당 UTXO는 검증을 받은 후 TX Pool에 들어가므로 이중지불 발생 시 채굴자들은 UTXO 검사 후 사용기록이 있다면 해당 거래를 무효화할 수 있다.
- 잔고의 증명 : 해당 사용자의 UTXO만 확인하면 되기 때문에 거래에 대한 유효성을 검증하기가 매우 쉽다.
단점
- UTXO가 너무 과하게 생성 될 경우 문제가 발생한다. 소액 결제를 자주 하거나, 채굴로 이자를 받게 되면 과도한 UTXO로 불필요한 수수료를 내야한다.
2. 이더리움 - 어카운트(Account)
이더리움 주소와 개인키의 조합을 계정(Account)이라고 한다.
주소(Address)와 키(Key)
블록체인과 상호 작용 하려면 주소 + 개인키의 쌍이 필요하다.
주소(Address)
사용자의 신분증에 해당하여 각 주소는 개인키를 가지며 001d3f1ef827552ae1114027bd3ecf1f086ba0f9 과 같은 형태를 띈다.
키(key)
키는 무작위로 생성되며 비밀 키로써 유지해야 하는 개인키(Private Key)와 개인키를 연산하여 생성되며 계정을 식별하는 요소로 사용되는 공개키(Public Key)가 있다.
이더리움 주소의 생성 과정
1) 개인 키를 생성하고, 파생된 공개 키를 생성.
2) keccak256 알고리즘으로 공개 키의 해시값을 계산.
3) 생성된 해시값의 뒤쪽 20byte만 남기고 제외 후 이더리움 주소를 생성
이더리움의 계정 유형
- 외부 소유 계정(EOA)
공개 주소와 개인키의 조합. 다른 계정과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
- 컨트랙트 계정(CA)
컨트랙트 계정에는 개인키가 없으며 스마트 계약을 블록체인에 배포할 때 생성된다. 컨트랙트 계정은 EOA처럼 이더를 송수신 할 수 있으며, 추가적으로 관련 코드를 담고 EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시키는 기능을 담고 있다.
어카운트의 장점
- 단순성 : UTXO 방식에 비해 단순하다
- 효율성 : 전송 계정이 거래 비용만큼의 잔액을 가지고 있는지 확인만 하면 되므로 효율적이다
어카운트의 단점
- 이중 지불 : Account는 이중 지불 공격에 쉽게 노출될 수 있다. 이러한 유형의 공격에 대응하기 위해 점증적인 nonce를 구현하여 동일 트랜잭션이 2번 수행되는 것을 방지한다.
3. UTXO vs Account
비트코인의 UTXO와 이더리움의 Account는 각각의 장단점이 있다.
UTXO는 한번 사용되고 사라져 익명성과 보안성이 강하기 때문에 화폐의 역할에 충실할 수 있다. 반면 이더리움의 Account는 스마트 컨트랙트를 활용해 DApp과 같이 다양한 기능을 구현할 수 있다.