거래는 짧은 데이터 한 덩어리
거래는 생각보다 단순한 구조입니다. 크게 네 칸입니다.
- 버전 — 어떤 규칙으로 읽을지.
- 입력 — 쓸 UTXO들. 각 입력은 앞선 거래의 ID와 몇 번째 출력인지, 그리고 그 출력을 열 서명과 공개키를 담습니다.
- 출력 — 새로 만들 UTXO들. 각 출력은 금액과 그것을 열 조건인 잠금 스크립트를 담습니다.
- 잠금 시간(locktime) — 이 블록 높이(또는 시각) 전에는 블록에 넣지 말라는 표시. 보통 0입니다.
수수료는 따로 적혀 있지 않습니다. 입력 합계에서 출력 합계를 뺀 나머지가 수수료입니다.
방금 들어간 거래를 펼쳐 보기
아래는 최근 모빅 블록에서 찾아온 실제 거래입니다. 채굴 보상이 아닌, 사람이 사람에게 보낸 거래입니다. 입력과 출력을 눌러 보세요.
입력 — 쓰는 UTXO
출력 — 새로 생기는 UTXO
입력이나 출력을 누르면 그 안의 스크립트를 풀어 설명합니다.
잠금과 열쇠
출력의 잠금 스크립트는 작은 프로그램입니다. 가장 흔한 1… 주소(P2PKH)의 스크립트는 이렇게 읽습니다.
OP_DUP OP_HASH160 <공개키 해시 20바이트> OP_EQUALVERIFY OP_CHECKSIG
“공개키를 내놓아라. 그 해시가 이 20바이트와 같아야 한다. 그리고 그 공개키로 서명을 확인한다.” 이 출력을 쓰려는 다음 거래의 입력은 서명과 공개키를 내놓고, 노드는 둘을 합쳐 스크립트를 돌려 봅니다. 끝까지 통과하면 그 UTXO는 쓰이고, 하나라도 틀리면 거래 전체가 거절됩니다.
움직이는 해설 노드가 거래를 검사하는 순서
공개키는 맞고 서명은 다른 거래에서 베껴 왔을 때, 이 거래는?
해설 노드가 거래를 검사하는 순서
1 / 4 · 잠금
출력은 받는 사람의 공개키 해시로 잠깁니다 — “이 해시에 맞는 공개키와, 그 키로 한 서명을 가져와라”
89ab…3f 잠김
2 / 4 · 열쇠
쓰려는 거래가 서명과 공개키를 내놓으면 — 노드가 두 가지를 차례로 검사합니다
둘 다 통과 — 이 동전은 쓰입니다 — 하나라도 틀리면 거래 전체가 거절됩니다
89ab…3f 쓰임
공개키를 해시하면 89ab…3f 인가?
✓
그 공개키로 확인하면, 서명이 이 거래에 맞나?
✓
3 / 4 · 예측
누군가 공개키는 맞게 냈지만, 서명은 예전의 다른 거래에서 베껴 왔습니다.
생각해 본 뒤 답 보기
답: 거절됩니다.
①은 통과하지만 — 서명은 원래 거래의 내용에 묶여 있어 ②에서 틀립니다
거래 전체가 거절됩니다 — 동전은 그대로 잠겨 있습니다
89ab…3f 그대로 잠김
공개키를 해시하면 89ab…3f 인가?
✓
그 공개키로 확인하면, 서명이 이 거래에 맞나?
✗
4 / 4 · 그래서
개인키가 없으면 이 동전을 쓸 수 없습니다 — 모든 노드가 모든 거래를 이렇게 검사합니다
89ab…3f 그대로 잠김
공개키를 해시하면 89ab…3f 인가?
✓
그 공개키로 확인하면, 서명이 이 거래에 맞나?
✗
대본 읽기 — 해설 전체 글
- 잠금. 거래의 출력은 받는 사람의 공개키 해시로 잠깁니다. 이 해시에 맞는 공개키와, 그 키로 한 서명을 가져오라는 자물쇠입니다.
- 열쇠. 이 동전을 쓰려는 거래가 서명과 공개키를 내놓으면, 노드는 두 가지를 차례로 검사합니다. 첫째, 공개키를 해시하면 잠금의 값과 같은가. 둘째, 그 공개키로 확인하면 서명이 이 거래에 맞는가. 둘 다 통과했으니, 이 동전은 쓰입니다. 하나라도 틀리면 거래 전체가 거절됩니다.
- 예측. 예측해 보세요. 누군가 공개키는 맞게 냈지만, 서명은 예전의 다른 거래에서 복사해 왔습니다. 이 거래는 어떻게 될까요? 답: 거절됩니다. 첫째 검사는 통과하지만, 서명은 원래 거래의 내용에 묶여 있어서, 둘째 검사에서 틀립니다. 그래서 거래 전체가 거절됩니다. 동전은 그대로 잠겨 있습니다.
- 그래서. 개인키가 없으면, 누구도 이 동전을 쓸 수 없습니다. 모든 노드가 모든 거래를 이렇게 검사합니다.
해설 음성은 음성 합성으로 만들었습니다.
bc1q… 주소(P2WPKH)는 같은 일을 하되, 서명과 공개키를 입력의 증인(witness) 칸에 따로 담습니다. 증인 데이터는 무게를 덜 쳐 주기 때문에 같은 거래라도 **가상 크기(vB)**가 작아지고 수수료가 덜 듭니다. 거래 정보의 ‘크기 B · vB’가 다른 이유입니다.
정리
- 거래 = 버전 + 입력(쓸 UTXO와 서명) + 출력(금액과 잠금 스크립트) + locktime.
- 잠금 스크립트는 “이 공개키 해시의 주인만 열 수 있다”는 작은 프로그램이다.
- 수수료는 입력 합계 − 출력 합계. 채굴자는 수수료율(sat/vB)로 고른다.
확인 문제
맞히면 내 체인에 블록이 하나 쌓입니다
-
Q1거래의 ‘입력’에 들어 있는 것은?
입력은 “어느 UTXO를 쓰는가”와 “내가 그 주인이다”라는 증명입니다. 받는 주소와 금액은 출력에 있습니다.
-
Q2P2PKH 출력의 잠금 스크립트가 요구하는 것은?
OP_DUP OP_HASH160 <20바이트> OP_EQUALVERIFY OP_CHECKSIG. 그 주소의 개인키를 가진 사람만 열 수 있다는 뜻입니다.
근거 자료
틀린 곳이나 바뀐 정책을 찾으셨나요? 메일로 알려 주기 →