브로드캐스팅
개인키로 거래에 서명하는 도구인 서명 장치에서 거래를 준비해 보내면 특정 본사나 접수 창구로 전달되는 것처럼 보일 수 있습니다. 하지만 비트코인에는 모든 거래가 모이는 단일 접수처가 없습니다. 브로드캐스팅은 내가 만든 거래를 연결된 이웃 컴퓨터에 알리고, 그 거래가 네트워크 전체로 퍼져 나가게 하는 과정입니다.
접수 창구 없이 퍼지는 거래
은행 앱은 보통 은행 서버라는 정해진 접수처로 거래를 보냅니다. 그 서버를 막으면 이용자는 거래를 전달하기 어렵습니다. 비트코인에서는 노드가 여러 이웃과 연결되어 있고, 거래를 어느 한 곳에만 제출하지 않아도 됩니다. 한 이웃에게 건네면 그 이웃이 확인한 뒤 다시 자기 이웃에게 전달합니다.
동네 소문이 방송국 없이 퍼지는 모습을 떠올릴 수 있습니다. 한 사람이 옆 사람에게 말하고, 들은 사람이 다시 다른 사람에게 옮기면 몇 단계를 거쳐 많은 사람이 같은 소식을 알게 됩니다. 비트코인 거래는 소문과 달리 받은 쪽이 먼저 내용을 확인한다는 점이 다릅니다.
노드는 거래의 서명이 맞는지, 거래가 규칙에 어긋나지 않는지 살펴봅니다. 확인을 통과한 거래만 다음 이웃에게 넘깁니다. 말이 되지 않는 거래는 첫 이웃에서 거부될 수 있으므로 더 멀리 퍼지지 않습니다.
이웃 노드를 거치는 과정
서명 장치가 직접 네트워크 피어 연결을 유지하지 않을 수도 있습니다. 서명한 거래는 함께 쓰는 앱이나 연결된 노드가 네트워크에 제출하고 전파합니다. 노드는 여러 이웃과 연결을 유지하며, 거래를 전달받아 검증한 뒤 자기 이웃들에게 다시 전달합니다. 연결 수의 기본값은 구현, 버전, 연결 유형과 설정에 따라 달라지므로 하나의 숫자로 일반화하기 어렵습니다.
한 단계 건널 때마다 그 소식을 아는 컴퓨터의 수가 크게 늘어날 수 있습니다. 거래는 이웃 노드의 검증과 전달을 거쳐 퍼지며, 실제 전파 시간은 네트워크 연결과 노드 상태에 따라 달라질 수 있습니다. (Bitcoin Developer Guide의 거래 전파 설명)
노드는 이미 받은 거래를 계속 되풀이해 전달하지 않습니다. 최근에 본 거래를 기억해 같은 소식이 네트워크 안에서 끝없이 맴도는 일을 줄입니다. 먼저 거래가 있다는 알림만 보내고, 필요한 이웃에게 본문을 전달하는 방식도 사용됩니다.
전파와 블록 기록은 다르다
거래를 받은 노드는 검증한 뒤 해당 거래를 멤풀이라는 대기 공간에 보관할 수 있습니다. 이때 거래는 네트워크에 퍼졌지만 아직 블록에 기록된 것은 아닙니다. 채굴자가 다음 블록을 만들 때 멤풀에서 거래를 골라 담고, 블록에 포함된 뒤에야 확인이 시작됩니다.
따라서 서명 장치 앱에 전송 완료가 표시되었다고 해서 네트워크 전체의 전파가 끝났거나 거래가 전체장부에 실렸다는 뜻은 아닙니다. 그 표시는 앱 구현에 따라 연결된 서버나 노드에 제출이 성공했다는 의미일 수 있습니다. 다른 노드가 실제로 받았는지, 블록에 포함되었는지는 별도로 확인해야 합니다.
이미 여러 노드의 대기 공간에 들어간 거래를 없던 일로 만들기는 어렵습니다. 수수료를 높여 같은 입력을 사용하는 대체 거래를 시도할 수 있지만, 대체가 허용되는 조건이 맞아야 하며 원래 거래의 취소를 보장하지도 않습니다. 자식 거래의 수수료를 이용해 부모 거래의 확인을 촉진하는 CPFP는 원래 거래를 취소하거나 대체하는 방법이 아니라 확인을 돕는 방법입니다. 한 번 내보낸 거래는 손으로 쉽게 거둬들이기 어렵다는 점이 핵심입니다.
개인정보와 검열 저항성
내가 처음 거래를 건넨 이웃은 그 거래가 나에게서 시작되었다고 짐작할 수 있습니다. 거래 내용이 네트워크에 퍼지는 방식이 개인정보 측면에서 약점이 될 수 있는 이유입니다.
풀노드는 자신의 거래와 다른 사람의 거래를 함께 전달하므로, 거래를 전달한 노드가 곧 최초 발신자라고 단정할 수는 없습니다. 다만 자신의 노드를 써도 연결 상대에게 IP 주소가 드러날 수 있습니다. Bitcoin.org의 개인정보 보호 설명은 거래 중계와 IP 주소 노출의 관계를 설명합니다.
거래가 퍼지는 길은 인터넷 하나뿐이지 않습니다. 위성 방송이나 아마추어 무선을 이용해 거래를 보내는 실험도 있습니다. 통신 경로가 여럿이면 한 경로를 막더라도 다른 경로가 남을 수 있으므로, 이런 구조는 검열을 견디는 방법의 하나로 설명됩니다.
브로드캐스팅은 접수 창구가 없는 네트워크에서 거래를 이웃에게 전달하고, 각 노드가 검증한 뒤 다시 퍼뜨리는 과정입니다. 거래가 퍼지는 일과 블록에 기록되는 일은 다르며, 여러 경로와 분산된 확인 절차가 네트워크의 개방성과 검열 저항성에 영향을 줍니다.
관련 개념은 멤풀, 노드, 브로드캐스팅 이후 블록에 포함되는 과정에서 이어서 볼 수 있습니다.