본 글은 비트코인의 작동 원리를 이해하기 쉽게 설명해 놓은 해외 사이트 Learn me a bitcoin 내에 있는 TXID 페이지를 번역한 글입니다. 읽은 것을 개인적으로 이해하기 쉽게 정리하여 작성한 글이다 보니, 어색한 부분이 있을 수도 있습니다. 원문을 읽고자 하시는 분은 위의 링크를 참조해 주세요. 😀
TXID ?
- 트랜잭션 데이터의 해시 값입니다.
TXID(트랜잭션 ID)는 비트코인 트랜잭션 식별을 위한 숫자입니다. (ID 역할)
TXID는 항상 32 Bytes입니다. (16진수 값으로 64글자)
Example
- f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 - 사람과 사람 사이의 최초의 비트코인 트랜잭션입니다. 해당 트랜잭션에서 사토시 나카모토(Satoshi Nakamoto)가 할 핀니(Hal Finney)에게 10비트코인을 보냈습니다.
- a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d - 유명한 피자 트랜잭션입니다. 2010년 5월 22일 현물 상품에 대한 비트코인의 첫 거래가 이루어졌습니다. 라스즐로 핸예츠(Laszlo Hanyecz)는 비트코인 관련 포럼에 참석한 사람들에게 줄 피자 두 판을 사기 위해 1만 BTC를 냈습니다. (글 쓰는 시점 기준 업비트 거래소 비트코인 가격을 기준으로 1만 BTC = 약 2,830억원)
- 4ce18f49ba153a51bcda9bb80d7f978e3de6e81b5fc326f00465464530c052f4 - Learn me a bitcoin 의 작성자 Greg Walker가 처음으로 도네이션을 받은 트랜잭션.
TXID는 어떻게 만들어지나요?
- 트랜잭션 데이터를 SHA256🔑 해시 함수를 2번 실행하여 얻을 수 있습니다.
0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000
= 169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4
블록체인에서 해당 트랜잭션을 찾기를 원한다면, Byte order를 Little endian으로 변경해야 합니다! (Swap Endian Link)
Little endian으로 스왑 하면 아래와 같이 결과가 나옵니다.
= f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
해당 TXID를 Blockchain Explorer에서 검색해보면(Click), 해당 트랜잭션 정보가 잘 나오는 것을 확인할 수 있습니다. 😁
블록체인에서의 TXID 검색
만약 당신이 어떤 트랜잭션 데이터를 해시하고, 블록체인에서 해당 TXID를 검색하고 싶다면, 당신은 그것을 역순의 바이트(Reverse byte order)로 검색해야 합니다.
- TXID (원래 값):
169e1e83e930853391bc6f35f605c6754cfead57cf8387639d3b4096c54f18f4 - TXID (검색할 때):
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
Why?
왜냐하면, 비트코인이기 때문입니다. (Because welcome to Bitcoin.) 😁
"과거의 사고로 인해, 비트코인 코어에서 사용하는 트랜잭션 및 블록 해시는 바이트 반전(byte-reversed)되어 사용됩니다. 왜 그런지 정확히 모르겠지만, openssl bignum을 사용하여 해시를 저장하고 숫자로 출력하는 것과 관련이 있을 수 있습니다." - 블라디미르 반 더 라안(블록체인 기술인 비트코인 코어의 개발자) -
다시 말해, 이것은 비트코인 초기 개발 단계에서의 작은 실수였지만, 현재는 표준이 된 것입니다. 😁
TXID는 어디서 사용되나요?
1. 블록체인 검색
- 만약 당신이 방금 트랜잭션을 생성한다면, 당신은 블록체인에서 TXID를 사용하여 트랜잭션을 찾을 수 있습니다.
bitcoin-cli getrawtransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098
- Bitcoin Core Wallet에서의 TXID 검색
2. output 찾아오기
기존 output을 새로운 트랜잭션의 input으로 사용하려는 경우 TXID를 사용할 수 있습니다.
기존 output이 생성된 TXID로 해당 트랜잭션을 찾아온 뒤, VOUT로 사용하려는 output을 찾아서 해당 output을 사용합니다.
TXID는 트랜잭션의 고유한 식별자(unique identifier)이기 때문입니다.
✅ SHA256🔑 과 같은 해시 함수는 모든 데이터 문자열을 가져와 항상 짧지만 고유한 결과를 내놓기 때문에 식별 번호를 생성하는 데 적합합니다.
기타
⚠️ 코인베이스 트랜잭션(Coinbase transaction)이 똑같은 TXID를 가졌던 적이 있습니다.
두 개의 "다른" 코인베이스 트랜잭션의 TXID가 동일한 상황이 발생했었습니다.
이러한 코인베이스 트랜잭션은 서로 다른 두 블록에서 신규 블록 보상(Block reward)를 청구할 때, 동일한 주소를 사용했습니다. 이 말은 즉, 그 2개 트랜잭션의 데이터가 같았기 때문에 TXID도 마찬가지로 같았던 것입니다. (SHA256 해시 함수에 넣는 값 자체가 같았기 때문에, 마찬가지로 결과도 동일했던 것이죠)
아래에서 사례를 살펴보겠습니다.
Block 91,722 : 00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e
Block 91,880 : 00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721
- 위 2개 블록의 코인베이스 트랜잭션 ID를 살펴보면 동일한 TXID를 갖고 있습니다.
(e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468)
Block 91,812: 00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f
Block 91,842: 00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec
- 위 2개 블록의 코인베이스 트랜잭션 ID를 살펴보면 동일한 TXID를 갖고 있습니다.
(d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599)
해결 방법
- 처음에 BIP 30은 블록이 이미 존재하는 TXID를 포함하지 못하도록 하는 규칙을 도입했습니다. 나중에 BIP 34에서는 코인베이스 트랜잭션이 트랜잭션 데이터에 블록의 높이값을 포함하도록 하여 코인베이스 트랜잭션이 동일하지 않도록 하였습니다.
'블록체인 > 비트코인' 카테고리의 다른 글
VOUT (0) | 2023.04.07 |
---|---|
코인베이스 트랜잭션(Coinbase transaction) (0) | 2023.04.07 |
블록 해시(Block hash) (0) | 2023.04.07 |
넌스 (Nonce) (0) | 2023.04.07 |
비츠(Bits) (0) | 2023.04.07 |