블록체인/비트코인

비트코인 거래와 채굴

개발정리 2024. 3. 26. 21:34

비트코인 이전에 디지털 경제에서는 '위조'와 '이중지불' 문제를 어떻게 해결할 것인가에 대한 고민이 있었다. 과거 그리고 현재 이를 해결하기 위해서는 중앙 주체인 정부, 은행 등에 개입이 있어야만 한다. 하지만 비트코인은 블록체인과 채굴(보상)이라는 시스템으로 이 문제를 해결하였다.

 

 

1. 채굴 시스템을 이해하기 전에 비트코인 시스템을 이용하는 주체에 대한 이해가 필요하다. 

 

 

비트코인 시스템은 두 가지 주체가 있다. 사용자와 채굴자이다. 사용자와 채굴자 이 두 주체는 비트코인 네트워크에서 다른 목적을 가지며 서로 다른 시스템을 이용하게 된다.

 

 

사용자의 경우, 비트코인 송수신 즉 거래를 목적으로 이용한다. 이 때 개인 지갑(라이트 노드)을 이용하며 비트코인 네트워크 소비자가 된다.

채굴자는 비트코인 거래내역 기록과 검증, 저장을 해준다. 비트코인 채굴용 소프트웨어인 풀노드 시스템을 이용한다. 이들은 비트코인 네트워크의 생산자로써의 역할을 하게 된다.

 

 

사용자가 이용하는 개인 지갑은 라이트 노드에 속하게 되는데, 라이트 노드에는 본인의 거래와 관련된 것들만 저장하게 된다. 채굴자가 사용하는 풀 노드는 비트코인이 처음 탄생했을 때 부터 지금까지의 거래 내역 전부를 저장한다. 그래야만 예전 거래를 대조할 수 있게되어 내가 검증하게 될 거래가 참인지 거짓인지를 전부 판단 할 수 있게된다.

 

 

채굴자들의 시장은 엄청나게 커지고 있다. 과거엔 개인용 컴퓨터로 풀노드를 설치하여 채굴을 하였다. 현재는 기업, 사업체 형태의 여러 채굴 회사들이 ASIC 이라는 고급장비로 채굴을 하고 있다. 거대한 사업이 된 것이다. 거대 업체들이 경쟁을 하며 검증을 하고 있는 것이다.

 

 

....

 

 

2. 채굴을 이해하려면 Broadcast 의 개념와 개인 지갑의 기능도 알아야 한다.

 

 

만약, A가 B에게 비트코인을 전송한다고 가정해보자. 이 때 A와 B는 각자 주소와 개인키를 가지고 있을것이다. 

- A는 비트코인 전송 시 모든 노드들에게 자신의 비트코인 일부를 전송할 것을 알린다. 이를 Broadcast 라 한다.

- Broadcast는 A의 '개인 지갑 시스템이 진행' 해준다. 거래의 시작이 진행되는 것이다.

- 이를 방송한다, 거래를 일으킨다라고 표현하기도 한다. 

- 비트코인 네트워크에서 거래란 '송금을 의미하는 서명된 데이터 구조' 이다.

 

 

지갑 또한 하는 일이 많다. 

 

암호 기술을 바탕으로 블록체인 네트워크 상에서 '저 암호화폐는 내거야'라고 기록되어 있는것을 인증하기 위해서는 키가 필요하다. 그 키를 관리하는 도구가 개인 지갑이다. 즉 암호화폐가 소유자 것이라고 인증해주는 키를 관리해주는 도구라 정의할 수 있다.

 

 

지갑의 기능은 아래와 같다. 

 

1) SHA256 알고리즘을 통한 개인 키 생성

2) 비대칭 키 알고리즘을 통해 개인키로 공개키 생성

3) 공개키를 통해 주소를 생성 (지갑은 여러개의 주소를 생성하고 관리할 수 있다.)

4) 거래를 1차적으로 승인하고 서명. 

- 개인 키로부터 특별한 서명을 만든다.

- 이 서명을 가지고 거래의 진위를 판별한다. 

5) 위에서 생성된 정보 (서명까지 포함)를 블록체인 네트워크에 공유/전파

 

 

....

 

 

3. Broadcast는 지갑이 데이터를 전파하는 것이다. 전파된 데이터들에는 어떤것들이 있을까

 

 

1) 수신자의 주소

 

2) 송신 액

 

3) 송신자의 서명

- A의 개인키로부터 얻은 암호 서명

- 지갑의 네번째 기능인 '거래를 일차적으로 승인하고 서명'이 이곳에 기록된다.

 

4) 입력

- 과거 거래의 출력으로 부터 비트코인을 받는 것을 나타냄. 

 

5) 출력

- 비트코인을 받는 주소와 그 주소에 보내지는 금액들 

 

6) 수수료 

- 채굴자에게 내 거래를 검증해달라고 보내는 수수료

- 거래가 체결되기 위해 체굴자에게 지불되는 수수료인 것이다.

 

7) 거래의 해시

- 위의 1~6 데이터를 일정한 길이의 데이터로 압축

- 거래의 고유 식별자로 사용된다.

- 거래 데이터를 해싱하고 이를 채굴자들에게 전파한다.

- 채굴자들이 검증할 수 있게 되는 하나의 단서가 제공되는 것이다.

 

 

위와 같은 거래 데이터는 Broadcast 후 Mempool 이라는 대기열에 쌓이게 된다. 이 때 채굴자가 등장한다. 

 

 

채굴자는 Mempool에 있는 '거래' 를 블록이라는 데이터 저장소에 담는다. 그리고 거래를 담은 데이터 셋과 함께 전기를 사용하여 연산을 푼다. 이 문제에 대한 논스 값을 가장 빨리 찾는 채굴자가 거래 데이터 셋과 논스 값을 대입해서 만든 해시 값을 전부 담아서 블록을 만든다. 

 

 

즉, 채굴은 컴퓨터 연산 작업을 수행하는 것이다. 데이터 셋을 데이터 저장소에 담고, 논스 값을 찾아 해시 값을 만든다. 이것이 블록이 만들어지는 과정이다. 그리고 이전 블록에 연결하고 연결을 풀었다는 것을 다른 채굴자들에게 전파하는 것이 채굴 과정이다. 

 

 

다시 채굴 과정을 정리해보면, 

 

1) 거래내역을 블록에 포함

2) 연상 과정을 통해 블록에 포함기 위한 조건으로서의 수학 문제를 품

3) 그 문제를 푼 사람이 풀었다고 다른 채굴자에게 전파하고 블록체인에 연결

4) 다른 채굴자들은 푼 문제가 맞는지, 포함된 거래가 유효한지 검증

5) 새로 블록을 생성한 채굴자는 블록보상 + 수수료 보상을 받음

 

 

정리

 

1) 위조와 이중지불 문제는 채굴 시스템으로 해결하였다. 

 

2) 비트코인 사용 주체는 사용자와 채굴자이며 이 두 주체가 사용하는 시스템은 다르다. 

 

3) 사용자는 개인 지갑을 사용하며, 채굴자는 풀 노드를 사용한다.

 

4) 지갑은 라이트 노드에 속하며 본인 거래와 관련된 것들만 저장하고 있다.

 

5) 지갑의 기능은 다양하다. 

- 개인키, 공개키, 주소 생성

- 거래를 1차적으로 서명 

- Broadcast 진행

 

6) Broadcast 가 된 데이터에는 아래 데이터로 구성되어 있다.

- 수신자 주소, 송신 액, 송신자 서명, 입력, 출력, 수수료, 거래의 해시

 

7) Broadcast 가 되면 Mempool 에 데이터가 쌓이게 된다. 

 

8) 채굴자는 Mempool 에서 데이터들을 꺼내어 데이터 셋과 함께 연산 문제를 푼다. 

 

9) 연산 문제를 풀어 얻은 논스 값과 데이터 셋을 대입하여 해시 값을 만들고 블록을 생성한다. 

 

10) 이전 블록과 연결한 후 모든 채굴자들에게 전파한다. 그리고 채굴자들은 푼 문제가 맞는지, 포함된 거래가 유효한지 검증한다.