비트코인 네트워크는 p2p 네트워크이다.
비트코인 네트워크를 구성하는 개체를 '노드' 라고 하며, 이 '노드'는 적절한 하드웨어 + 비트코인 프로그램이다.
간단히 말하면 컴퓨터에서 돌아가는 비트코인 프로그램을 노드라고 한다고 보면 된다.
그리고 대표적인 비트코인 프로그램이 사카시 나카모토가 만든 '비트코인 코어' 이다.
(참고로 지금은 비트코인 코어 프로젝트에서 사카시 나카모토는 빠졌고, 20명도 안되는 개발자 그룹에 의해 유지되고 있다.
우리도 다양한 이슈를 제기하는 방식으로 프로젝트에 간접적으로 참여할 수도 있다.)
노드의 종류는 다음과 같다.
- Full Node
비트코인을 통해서 모든 것을 다 할 수 있는 노드
제네시스 블록부터 지금까지 생성된 모든 블록 체인과 트랜잭션 정보를 갖고 있는 노드이다.
따라서 Full Node 는 어떤 트랜잭션이든 이 트랜잭션이 유효한지 유효하지 않은지 확인할 수 있다.
- Pruning Node
어떤 Unspent Transaction Output (UTXO) 이 사용되었다면, 더 이상 그 트랜잭션을 관리하지 않는 노드이다.
적절히 트랜잭션을 잘라내는(pruning) 노드라고 볼 수 있다.
- Lightweight Node
일반 사용자에게 가장 적합한 노드이다.
내가 비트코인 네트워크에는 참여하고 싶은데 full node를 돌리기에는 부담스러운 경우 (full node는 거의 서버급 컴퓨터를 돌려야한다.)
비트코인 트랜잭션을 주고 받을 때 내 트랜잭션에 관련된 것만 갖고 있는 노드이다.
따라서 UTXO 중에서도 내가 현재 사용하지 않은 UTXO 만 기억한다.
다른 이름으로는 Simplified Payment Verification (SPV) node 라고도 한다.
(강의록에는 블록체인 헤더만 갖고 있는 노드라고 표현하였다.)
노드들 중에서는 작업 증명을 수행하고, 새로운 블록을 생성하는 노드들이 있다.
이런 노드들을 가리켜 'Miners' 라고 한다.
(흔히 '채굴한다' 라고 하는 표현이 여기서 나온다.)
이런 비트코인 마이너 노드들은 꼭 full node 일 필요는 없지만, 대부분의 경우 마이너는 full node를 운용한다고 보면 된다.
(내가 포함하려는 트랜잭션이 유효한 트랜잭션인지 빠르게 확인하려면 지금까지의 모든 트랜잭션 기록을 갖고 있어야 할 것이다.)
비트코인을 사용하려면 누군가 내 주소로 보낸 비트코인이 있어야하고, 그런 비트코인에 대한 정보는 UTXO (사용되지 않은 트랜잭션 아웃풋) 정보로 남아있게 된다.
마이너들은 모두 UTXO 집합을 관리하면서 누군가 뿌린 트랜잭션을 받았을 때 이들을 모아 블록으로 만든 다음 블록의 해시값을 결정하는 퍼즐을 풀게 되고, 퍼즐을 1등으로 풀면 상금(보상)을 비트코인으로 받는다.
이때 내가 포함한 트랜잭션 중에 유효하지 않은 트랜잭션이 있다면 다른 채굴자들이 이 블록을 인정하지 않기에 퍼즐을 풀어도 의미가 없다. 따라서 내가 돈을 벌려면 유효한 트랜잭션만을 집어넣어야 하고, 이를 빠르게 검증하려면 UTXO 집합에 이 트랜잭션이 있는지를 확인하고, 각 트랜잭션에 들어있는 서명을 검증하여 유효한 서명이라고 확인이 되면 자신이 원하는 트랜잭션을 담아 블록으로 채굴한다.
(서명에 사용된 비밀키와 트랜잭션 output 에 있는 공개키가 한 쌍인지 체크하면 서명을 검증할 수 있다.)
그런데 이 UTXO는 지금까지 사용되지 않은 모든 트랜잭션 Output 에 대한 집합이므로, 그 크기가 매우 크다.
빠르게 트랜잭션을 검증해서 채굴하려면 이 UTXO 정보를 갖고 있어야 하므로 비트코인을 채굴하려면 높은 컴퓨팅 파워가 필요하다.
이 UTXO 데이터를 저장할 때는 구글에서 만든 levelDB 라는 데이터베이스를 이용한다.
이 데이터베이스는 특별하게 하나의 컴퓨터 로컬 디스크에서 DB를 운영할 수 있도록 만들어둔 시스템이다.
비트코인 코어라는 소프트웨어는 이 데이터베이스를 사용해서 UTXO 상태를 저장한다.
비트코인 지갑 (wallet) 은 비트코인을 지불할 때 사용하는 사용자 인터페이스 프로그램이다.
다양한 비트코인 주소들을 wallet 프로그램이 관리한다.
따라서 이론적으로는 월렛이 해킹당하면 월렛 내에 들어있는 모든 비밀키를 알아낼 수 있다.
그러면 이 사용자가 소유한 비트코인이 위험하다.
그래서 고가의 비트코인을 갖고 있는 사람들은 인터넷에 연결되어 있지 않은 오프라인 월렛을 사용하기도 한다.
이를 가리켜 '콜드 월렛' 이라고 부른다.
또 Mem Pool 이라는 것이 있다.
Mem Pool은 아직 confirm되지 않은 트랜잭션들을 모아두는 pool 이다.
(나중에 트랜잭션과 관련된 내용을 정리할 때 자세히 정리할 예정이다.
'CS > 블록체인' 카테고리의 다른 글
[블록체인] 9. 암호학 개념들 (0) | 2024.10.24 |
---|---|
[블록체인] 8. 비트코인 스크립트 (0) | 2024.10.17 |
[블록체인] 6. Proof-of-Work (Consensus Protocol & Native Currency) (0) | 2024.10.11 |
[블록체인] 5. 트랜잭션 포맷 (0) | 2024.10.10 |
[블록체인] 4. 디지털 서명과 비트코인 주소 (0) | 2024.10.10 |