사랑하애오

비트코인에서 사용되는 2가지 통신 방법과 차이점은?


비트코인에서는 노드간의 통신과 노드와 사용자의 통신 2가지로 구분된다.

노드간의 통신 Gossip 프로토콜로 TCP를 이용한 통신이다.
노드간의 통신은 신규로 생성된 블록과 트랜잭션을 서로 전파한다.

노드와 사용자간의 통신은 JSON-RPC 기반으로 HTTP를 이용한 통신이다.
사용자가 블록체인 내에 거래를 전달하거나 데이터를 조회하는 경우에는 JSON-RPC를 통해서 진행된다.

 

비트코인 네트워크 최초 참여 시 네트워크 통신 과정은?


Node 설치 후 실행을 하게 되면 , 최초로 연결될 노드 주소를 찾는다.
이는 DNS에 저장된 주소 리스트를 받아 연결을 시도하고, 이에 모두 실패한 경우 하드코딩된 주소 리스트에서 접속을 시도.

첫 번째 노드와 연결이 완료되게 되면 전체 블록체인을 다운로드 하기 위해서 Block Sync를 진행하게 된다.
Block Sync는 Block Header 전체를 먼저 다운받은 뒤,
블록을 하나씩 다운 받으면서 검증을 진행하고 정상 블록인 경우 노드에 저장한다.

 

비트코인 블록 검증 과정은?


노드가 신규 블록을 수신받게 되면, 먼저 블록의 구조가 정상인지 확인한다.
그리고 블록 헤더에 있는 Field 데이터들을 검증한다.

필드에 있는 모든 데이터를 Hash한 값이 Block Header Hash값과 동일한지 확인하여 필드값의 위변조가 없는지 확인한다.
Header에 있는 데이터들이 정상적인 확인한다.
그리고 블록 내에 있는 트랜잭션을 하나씩 이중 지불 정상 검증을 진행한다.

모든 트랜잭션이 정상인 경우 Merkle Tree를 구성하여 Block Header의 Merkle Root의 값과 비교하여,
저장된 트랜잭션 위변조 여부를 확인한다.

 

비트코인의 트랜잭션 검증 과정은?


노드가 신규 트랜잭션을 받게 되면, 트랜잭션의 구조가 정상적인지 확인한다.
그리고 이미 전달받은 트랜잭션인지 MemPool과 DB내에서 확인한다.
그리고 Input의 이중 지불 여부를 확인한다.

Input이 Coinbase인 경우 생성된지 100블록이 지났는지 확인한다.
그리고 서명 데이터가 정상적인지 script를 확인하고 정상적인 거래인 경우에는 memPool상에 저장한다.

 

비트코인 블록 헤더의 구성요소와 각 요소의 의미는?


블록 헤더에는 총 6개의 필드가 존재한다.

version : 현재 생성된 블록체인 네트워크에서 이용되는 블록 구조의 version이 저장된다.

previous block hash : 바로 이전의 블록의 헤더 해시값이 저장된다.

merkle root : 블록 내에 포함된 트랜잭션의 전체 해시 데이터가 입력된다.

timestamp : 블록의 생성시간이 unix타임형식으로 저장된다.

difficulty : 타겟에는 현재 블록 생성 난이도가 들어간다.

nonce : PoW(Proof Of Work)를 통해 얻어진 블록 생성에 필요한 정답값이 들어간다.

 

비트코인 데이터가 무결성을 보장하는 방법은?


비트코인에서 생성된 트랜잭션 거래데이터는 블록 내에 포함되어 무결성을 보장한다.

먼저 트랜잭션은 ECDSA를 통해서 거래 소유자의 위변조를 막게 된다.
그리고 해당 트랜잭션은 머클트리를 통해 블록 내에 저장되며 위변조를 탐지할 수 있게 한다.
블록은 이전 블록 해시를 통해서 이전 데이터의 검증 데이터를 현재 블록위에 쌓으며 과거 데이터의 신뢰성을 높이게 된다.

전체 블록체인 데이터는 합의 알고리즘을 통하여 모든 노드가 동일한 데이터를 가지는 것을 보장하여,
최종적으로 트랜잭션 데이터를 안전하게 블록체인 네트워크 상에서 활용할 수 있게 한다.

 

UTXO의 의미는?


UTXO(Unspent Transaction Output)

트랜잭션에는 보내는 사람 정보인 input과 받는 사람의 정보인 output으로 구성되어 있는데,
input은 그 이전 트랜잭션 output과 연결된다.

이와 같이 새로운 거래의 인풋과 연결된 아웃풋을 spent로 이미 사용된 거래로 보게 되며,
연결되지 않은(아직 사용되지 않은) 아웃풋을 UTXO라고 부르게 된다.

 

비트코인의 트랜잭션 인풋 구조는?


Input에는 locking script 정보가 저장된 transaction hash, output index를 통해 locking script 정보를 가져온다.

그리고 이 locking script에 포함된 비트코인을 사용할 수 있게 unlock을 진행하는 unlocking-script로 구성된다.

또한 거래의 timelock을 세팅할 수 있는 sequence number가 있다.

 

비트코인의 채굴자들이 채굴 보상을 받는 방법은?


채굴자(miner)는 신규 블록을 생성하고 이에 대한 보상을 얻게 된다.
이를 위해서 mempool에 있는 transaction들 중 block 내에 포함될 거래들을 선택한다.

그리고 거래들에 포함된 tx fee 모두와 블록 보상 정보를 모두 포함한 coinbase 거래를 생성하여,
block의 가장 첫번째에 포함한뒤 PoW를 진행한다.

 

P2P(Pay To PublicKey hash)의 서명 검증 방법은?


Input에 있는 scriptsig에 포함된 서명값과 publicKey순서로 stack에 쌓는다.
그리고 복사한 pulicKey를 가져와 hash를 진행하고 output에 scriptPubKey에 있는 publicKeyHash값과 비교한다.

동일하다면 현재 input과 output의 소유자가 동일한 것으로 판단하고,
stack에 남아 있는 서명값과 publicKey를 통하여 서명검증을 진행한다.

profile

사랑하애오

@사랑하애

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!