비트코인 트랜잭션 ID 만들기 Create Bitcoin TXID

in #kr6 years ago (edited)

지난 포스팅을 통해 우리는 Block의 Hash를 직접 생성해보았다.
( https://steemit.com/kr/@niipoong/create-bitcoin-block-hash-value )

그리고 Block 내부를 확인해보니 편의상 Header와 Body로 구분할수 있으며
Header의 6가지 정보를 조합하여 Block의 Hash값을 만들어냈다.
추가로 Body정보를 확인해 보니 여러가지 항목들이 존재하는데 그중 Transaction 목록들이 리스트로 존재하고 있었다. 그리고 Transaction에는 각각의 Hash로된 ID가 존재했다.

Transaction 이라는 단어만 놓고 보면 꽤 여러가지의 의미가 존재한다. 거래, 처리, 업무 등 다양한 의미가 있는데 비트코인에서 Transaction이란 거래를 의미한다. 따라서 Transaction ID (하위부터 TXID로 표기) 는 비트코인 거래 단위의 식별값이라고 할 수 있겠다.

A라는 사람이 B라는 사람에게 BTC를 전송할때, 이 거래에 대한 Transaction이 발생하게 되고, 이 거래에 필요한 몇가지 항목들을 통해 TXID가 구해지게된다.

이번 포스팅을 통해 TXID를 직접 구해보자.

대상 트랜잭션은 Genesis Block인  #0번 Block의 거래로 정했다.
Blockchain.info 를 통해 블록의 정보를 확인해보자.

맨 하단에 거래 목록을 보면 0번 Block에는 단 하나의 거래만 존재한다. 이전 포스팅에서 언급했듯 2009년 1월 3일 생선된 최초의 블록이다. 

거래를 보면 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b 을 확인할 수 있을텐데, 이것이 바로 TXID이며 오늘 우리가 구해 볼 값이다.

이어서 해당 TXID를 찾아가보자.

아래와 같은 정보를 확인 할 수 있는데, 이 HTML화면에서는 Transaction 항목들이 모두 표현되어 있지 않다. 따라서 지난 포스팅과 마찬가지로 BlockInfo API를 통해 확인을 해 볼 것이다. 굳이 Blockchain.info를 통해 확인 해 본 이유는 비 개발자 분들의 이해를 돕기 위함이다. API를 통해 확인하면 훨씬더 많은 데이터를 확인해 볼 수 있다는 사실만 알아두면 되겠다.

API를 통해 확인해보면 아래와 같은 꽤 많은 데이터를 확인할 수 있다.

이 데이터들 중 TXID를 생성하는데 필요한 항목은 아래 정보이다.

ver : 소프트웨어 버전 정보

input_count : 입력값 개수

prevout_hash : 이전 트랜잭션 Hash

sequence : 현재 장애가 있는 Tx-대체기능, 0xffffffff로 설정

lockTime : 잠금시간

scriptSig : 해제 스크립트

value : BTC가치

scriptPubKey : 잠금 스크립트

위의 API데이터에서 우리가 필요한 데이터만 추렸을 때 아래와 같은 값으로 정리 할 수 있다.

hex값이 아닌 value나 version은 hex값으로 변환후 little endian Byte ordering을 해주어야 한다.

scriptSig와 scriptPubKey앞에 4d, 43이 붙은 것은 데이터 길이를 의미한다.

이제 해야할 일은 items라는 변수에 순서대로 Byte를 연결한다.

1. Hex디코딩

2. SHA256 더블 해시

3. Hex인코딩

이후 지난 포스팅떄 블록 Hash값을 찾았던 것 처럼 위의 3단계를 진행해 준다.

그러면 아래와 같은 트랜잭션을 확인할 수 있을 것이다.

한번씩 따라 해보기 바란다. 보는 것보다 한번 해보는것이 훨씬 기억에 오래 남을 것이다.

질문이나 추가 의견이 있으면 댓글바란다.