본문으로 건너뛰기
buybitcoinsmart

용어집 / 트랜잭션과 수수료

트랜잭션 ID

별칭은 Txid, 트랜잭션 해시, Transaction ID입니다.

트랜잭션 ID란 무엇입니까?
트랜잭션 ID는 비트코인 트랜잭션을 SHA-256으로 두 번 해시하여 만들어지는 64자리 16진수 지문이며, 해당 결제를 가리키는 데 모든 사람이 사용하는 방식입니다.

식별자를 부여하는 사람은 없습니다. 식별자는 트랜잭션 자체의 내용에서 나오기 때문에 사토시 1개만 바꿔도 완전히 다른 식별자가 됩니다. 값의 길이는 32바이트이고 64개의 16진수 문자로 표시되며, 모든 탐색기에서 바이트 순서를 뒤집어 보여 줍니다. 나와 거래소 고객 지원 담당자가 같은 결제를 함께 확인할 수 있게 해 주는 유일한 문자열입니다.

작동 방식

트랜잭션 ID를 도출하는 데는 두 단계가 필요하며 비밀은 없습니다. 트랜잭션을 원시 바이트 형태로 직렬화한 다음 SHA-256을 두 번 적용하면, 그 결과로 나온 32바이트가 식별자가 됩니다. 원시 바이트를 가진 사람은 누구나 같은 결과를 계산합니다. 그래서 식별자는 예약하거나 요청하거나 위조할 수 없습니다.

사람들이 가장 먼저 헷갈리는 것은 표시 순서입니다. 비트코인은 내부적으로 한 방향으로 해시하고 다른 방향으로 표시하므로, 탐색기에 보이는 바이트는 파일에 있는 바이트의 역순입니다. 개발자 도구가 거꾸로 된 것처럼 보이는 문자열을 보여 준다고 해서 잘못된 것은 아닙니다.

SegWit은 식별자를 둘로 나눴습니다. BIP141이 2017년 8월 24일 블록 481,824에서 활성화된 이후로, 트랜잭션 ID는 위트니스 데이터를 제외한 트랜잭션에 대해 계산되며, 두 번째 식별자인 wtxid는 서명을 포함한 모든 것을 포괄합니다. 그 이유는 가단성(malleability)입니다. 예전에는 트랜잭션을 중계하는 사람이라면 누구나 서명을 다시 인코딩할 수 있었고, 그러면 자금이 가던 곳은 그대로인 채 식별자만 바뀌었습니다. Mt. Gox는 2014년 2월에 사라진 코인의 원인을 가단성이라고 주장했지만, Decker와 Wattenhofer의 연구는 실제 공격을 측정한 결과 거래소가 출금을 중단하기 전까지 가단성에 기인할 수 있었던 것은 386 BTC뿐이었으며, 거래소가 잃은 수십만 개의 코인과는 비교되지 않는다는 사실을 밝혔습니다.

식별자는 블록이 커밋하는 대상이기도 합니다. 블록 안의 모든 트랜잭션 ID는 블록 헤더에 저장된 머클 루트로 해시되므로, 채굴업자는 사후에 결제 하나를 다른 결제로 조용히 바꿔치기할 수 없습니다.

비트코인을 구매할 때 이것이 중요한 이유

트랜잭션 ID는 두 회사 사이의 틈을 넘어 살아남는 유일한 증거입니다. Coinbase 또는 Bitstamp에서의 출금이 도착하지 않았을 때, 트랜잭션 ID를 제시하기 전까지는 지원 요청이 진전되지 않으며, 일단 ID를 확보하면 지원 요청은 더 이상 필요하지 않습니다. 그 문자열을 아무 블록 탐색기에 붙여 넣으면 출력, 수수료, 확인 수를 직접 볼 수 있습니다. 지연이 거래소의 대기열 때문인지 네트워크 때문인지 알아내는 가장 빠른 방법이기도 합니다.

위험한 것은 반대의 경우입니다. 트랜잭션 ID는 결제가 존재한다는 것을 증명할 뿐, 그 결제가 나에게 보내졌다는 것도, 확인될 것이라는 것도, 발신자가 자신이 주장하는 사람이라는 것도 증명하지 않습니다. 개인 간 거래(P2P) 장터의 판매자들은 흔히 탐색기 페이지의 스크린샷을 제시받고, 그 트랜잭션의 출력이 자신이 관리하는 주소로 지급되는지 확인하기도 전에 물건을 넘깁니다. 주소를 확인하고, 금액을 확인하고, 확인 수를 확인하십시오. 이 순서대로 하십시오.

확인되지 않은 식별자는 사라질 수도 있습니다. 전체 replace-by-fee는 최신 Bitcoin Core의 기본 중계 정책이므로, 발신자는 같은 결제의 경쟁 버전을 브로드캐스트할 수 있으며 그 버전은 식별자가 다릅니다. Bitcoin Core는 또한 336시간, 즉 14일 넘게 보관한 트랜잭션을 버립니다. 탐색기가 "transaction not found"라고 표시하는 것은 보통 이 두 가지 중 하나가 일어났다는 뜻이며, 코인이 사라졌다는 뜻이 아닙니다.

제네시스 블록의 트랜잭션 ID 읽기

비트코인에서 가장 오래된 트랜잭션 ID는 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b이며, 2009년 1월 3일에 채굴된 블록에 들어 있는 유일한 트랜잭션입니다. 그 블록에는 트랜잭션이 하나뿐이고 다른 것은 없으므로, 블록의 머클 루트가 바로 같은 문자열입니다. 이것이 커밋이 어떻게 작동하는지 보여 주는 가장 명확한 예입니다.

그 트랜잭션은 공개 키에 50 BTC를 지급하는데, Bitcoin Core는 이 출력을 미사용 출력 집합에 추가한 적이 없으므로, 이 식별자는 결코 이동할 수 없는 자금을 가리킵니다. 또한 코인베이스 필드 안에 신문 헤드라인 "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"를 담고 있습니다.

의존 관계는 한 방향으로만 흐릅니다. 그 헤드라인의 글자 하나만 바꿔도 트랜잭션 ID와 머클 루트가 모두 알아볼 수 없게 됩니다. 그래서 식별자는 이름표가 아니라 지문입니다. 식별자를 마음대로 고를 수 없고, 트랜잭션을 수정하면 반드시 새로운 식별자가 생깁니다.

트랜잭션 ID vs 비트코인 주소

주소는 목적지이고 트랜잭션 ID는 사건의 기록입니다. 주소는 미리 건네주고 재사용할 수 있지만, 식별자는 트랜잭션이 구성된 뒤에야 존재합니다. 트랜잭션 ID로 코인을 보내는 것은 불가능하며, 그 문자열은 주소 체크섬 검증을 통과하지 못하므로 지갑이 시도를 거부합니다. 지원 사칭범은 이런 혼동을 악용해 "고객님의 트랜잭션 ID"를 요구한 뒤 자신들의 주소를 알려 줍니다.

트랜잭션 ID vs 아웃포인트

트랜잭션 ID는 트랜잭션 전체를 가리키며, 그 트랜잭션은 하나의 거래소 배치에서 300명의 서로 다른 사람에게 지급할 수 있습니다. 아웃포인트는 그 안의 출력 하나를 가리키며, 식별자, 콜론, 출력 인덱스의 형태로 표기합니다. 코인 컨트롤 화면, 하드웨어 지갑 확인, PSBT 파일은 모두 아웃포인트 단위로 작동하므로, 식별자만으로는 어떤 코인을 말하는지 알 수 없습니다.

혼동하기 쉬운 용어

자주 묻는 질문

트랜잭션 ID를 찾을 수 없다는 것은 무엇을 의미합니까?

보통 해당 트랜잭션이 확정되지 않았고 더 이상 어떤 멤풀에도 남아 있지 않다는 의미입니다. Bitcoin Core는 미확정 트랜잭션을 14일 후에 버리며, replace-by-fee 방식의 수수료 인상은 다른 식별자를 게시하므로 원래 식별자는 어디에도 더 이상 존재하지 않습니다.

트랜잭션 ID가 누군가 나에게 지급했다는 증거입니까?

아닙니다. 그것은 트랜잭션이 존재한다는 것만 증명합니다. 블록 탐색기에서 해당 트랜잭션을 열어 출력이 본인 지갑의 주소로 지급되는지, 금액이 일치하는지, 확인 수가 있는지 확인하십시오. 스크린샷은 아무것도 증명하지 못합니다.

브로드캐스트된 후에 트랜잭션 ID가 바뀔 수 있습니까?

확정된 트랜잭션이라면 바뀌지 않습니다. SegWit 이전에는 제3자가 서명을 다시 인코딩하여 미확정 결제의 식별자를 바꿀 수 있었으며, 이것이 BIP141이 2017년 8월에 segwit 입력에 대해 해결한 가단성(malleability) 문제입니다.

다음에 읽을 글

관련 용어

트랜잭션과 수수료 분야의 다른 용어

이 페이지를 영어로 읽기