내부 바이트 순서 (Internal Byte Order)
내부 바이트 순서(Internal Byte Order)는 비트코인에서 해시 다이제스트를 해시 함수가 출력한 바이트 순서 그대로 다루는 방식으로, 직렬화된 블록과 트랜잭션 안에 해시가 저장될 때 쓰는 순서입니다. 이와 반대로 바이트를 뒤집어 표시하는 방식을 RPC 바이트 순서라고 합니다.
자세히 알아보기
비트코인의 블록 해시와 트랜잭션 ID(txid)는 데이터를 SHA-256으로 두 번 해시(SHA256d)한 32바이트 값입니다. 해시 함수가 내놓은 바이트를 첫 바이트부터 순서대로 16진수 문자열로 적은 것이 내부 바이트 순서입니다. 블록 헤더 안의 이전 블록 해시와 머클 루트, 트랜잭션 입력이 참조하는 이전 txid, 머클 트리를 계산할 때 이어 붙이는 txid는 모두 이 순서로 저장되고 계산됩니다.
그런데 Bitcoin Core의 RPC, 대부분의 블록 탐색기와 여러 소프트웨어는 같은 해시를 바이트 순서를 뒤집어 보여 줍니다. 이를 RPC 바이트 순서라고 합니다. 이렇게 뒤집는 이유는 비트코인이 해시를 작업 증명 목표값과 비교할 때 리틀 엔디언 정수로 해석하기 때문입니다. 뒤집어 표시하면 큰 자릿수가 앞에 오므로, 작업 증명을 만족한 블록 해시가 앞부분에 0이 늘어선 모습으로 보입니다.
따라서 같은 해시라도 두 가지 문자열이 존재하며, 서로 바이트 단위로 정확히 역순입니다. 16진수 문자 하나씩이 아니라 두 글자(1바이트) 단위로 뒤집는다는 점에 주의해야 합니다. 개발자가 RPC나 탐색기에서 복사한 txid를 원시 트랜잭션에 직접 넣거나, 반대로 원시 데이터에서 읽은 해시로 탐색기를 검색하면 순서를 바꿔야 합니다. 블록 헤더의 버전이나 타임스탬프 같은 숫자 필드는 해시와 별도로 리틀 엔디언 정수로 저장됩니다.
블록체인·암호화폐에서는
블록 탐색기에서 txid로 트랜잭션을 찾을 때 쓰는 문자열은 RPC 바이트 순서입니다. 원시 트랜잭션을 직접 만들거나 분석하는 지갑·라이브러리·인덱서는 내부 바이트 순서를 다루므로, 두 순서를 혼동하면 「존재하지 않는 트랜잭션」을 참조하는 오류가 생깁니다. 비트코인에서 갈라져 나온 여러 체인도 같은 관례를 따릅니다.
쉽게 말하면
같은 전화번호를 장부에는 뒷자리부터 적고 명함에는 앞자리부터 적는 사무실과 비슷합니다. 번호 자체는 같지만, 장부에서 옮겨 적을 때 순서를 뒤집지 않으면 엉뚱한 곳으로 전화가 갑니다.
예시
비트코인 제네시스 블록 헤더를 SHA256d로 해시하면 내부 바이트 순서로 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000이 나옵니다. 블록 탐색기와 RPC는 이를 뒤집은 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f로 표시합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.