기본적인 비트코인 통신 방법
header값 체크
1. 신규 블록 수신
2. 블록 구조 일치 여부
3. Block Header의 Hash 값 비교
- nonce 값(pow의 결과) 비교
4. Block timestamp 의 시간 체크
5. Block Size 체크
-------------
거래 검증
6. 채굴자의 보상에 대한 내용 확인(Coinbase Transaction Check)
7. Tx Check
-------------
데이터 베이스 업데이트
8. Mempool update
9. LevelDB에 새로운 블록 추가
10. Block 전파
1. Ping/Pong
2. Block을 전달 받음
3. 전달 받은 Block Header를 다른 Node에게 전달
4. 전달 받은 Node가 없는 Block인 경우 해당 Node에서 getdata와 headers를 요청
- 자신의 Block이 없는 만큼 전달받기 위함
5. 새로운 Block과 그 사이 Block을 노드에게 전달
1. Tx를 다른 노드에게서 전파 받음
2. 이미 받은 Tx인지 확인
3. 없는 경우 다른 노드에게 전파
- inv(msg_tx)
4. 상대 노드가 전파받은 거래가 없는 경우 getdata를 요청
5. 새로운 거래 전달
6. 연결된 모든 Node에게 전달될 때까지 수행
1. 신규 Tx 수신
2. Tx 구조 일치 여부 확인
3. In, Out List 존재 여부 확인
4. Tx 크기 확인
5. Output 값 확인(< 2100만)
6. Mempool 존재 여부 확인
7. Block 존재 여부 확인(이미 승인된 거래)
8. Input Check(이중 지불 확인)
9. Input Check(이미 처리되었지만 승인되지 않은 거래인지 확인)
10. Input Check(채굴자 보상 Tx인지 확인)
- 일정 수 이상의 Block 이후에 사용 가능
11. Input Check(UTXO가 아닌 경우)
12. Input > Output
13. Input Script Check(서명 확인)
14. Add Mempool
15. Tx 전파
한 번에 끝내는 블록체인 개발 A to Z