본문으로 건너뛰기

간편 지불 검증(SPV)

간편 지불 검증(Simplified Payment Verification, SPV)은 비트코인 전체 장부를 내려받지 않고도 거래가 블록에 포함되었는지 확인하는 방식입니다. SPV를 구현한 경량 지갑에서는 휴대폰처럼 저장 공간과 통신량이 제한된 기기에서도 가볍게 사용할 수 있습니다. 다만 가벼운 지갑 앱이라고 해서 모두 SPV를 수행하는 것은 아니며, 서버의 조회 결과에만 의존하는 앱과 구별해야 합니다.

전체 장부 대신 블록 헤더를 받는다

비트코인 장부 전체는 수백 기가바이트에 이르고 계속 커집니다. 반면 블록 헤더만 모으면 수십 메가바이트 수준입니다. 블록 하나의 헤더는 80바이트이며, 휴대폰이나 작은 기기에도 저장하기가 훨씬 쉽습니다.

블록 헤더에는 앞 블록의 해시와 작업증명을 확인할 수 있는 정보가 들어 있습니다. 따라서 헤더만 이어 보아도 블록체인의 연결 관계를 따라가고, 어느 체인이 더 많은 누적 작업량을 쌓았는지 비교할 수 있습니다.

다만 헤더만으로는 블록 안에 담긴 거래의 구체적인 내용이나 그 내용이 모든 규칙에 맞는지까지 알 수 없습니다. 목차만으로 책의 장과 순서는 알 수 있지만 본문을 읽을 수는 없는 것과 비슷합니다. (Bitcoin Developer Guide)

거래가 포함되었는지 확인하는 방법

SPV 지갑은 서버에 자신의 거래가 어느 블록에 포함되었는지 묻습니다. 서버는 거래의 위치와 함께 블록에 포함되었다는 것을 보여 주는 증명 자료를 보냅니다.

지갑은 이 자료를 직접 계산해 블록 헤더에 기록된 값과 대조합니다. 결과가 맞으면 해당 거래가 그 블록에 포함되었다고 확인할 수 있습니다. 이후 헤더 위에 몇 개의 블록이 더 쌓였는지도 세어 거래가 얼마나 묻혔는지 확인합니다.

이 과정은 도서관의 목차와 사서를 함께 이용하는 일과 닮았습니다. 사서에게 내 이름이 어느 장에 있는지 묻되, 사서가 알려 준 쪽수가 내가 가진 목차와 맞는지는 직접 대조하는 방식입니다.

풀노드와 확인 범위가 다르다

SPV는 풀노드와 같은 범위의 검증을 하지 않습니다.

  • 풀노드는 전체 장부를 내려받아 거래와 블록이 규칙에 맞는지 직접 검사합니다.
  • SPV는 블록 헤더와 증명 자료를 이용해 거래가 블록에 포함되었는지 확인합니다.
  • SPV는 거래 내용 자체가 모든 규칙에 맞는지까지 독립적으로 검증하지 않습니다.

따라서 SPV는 가벼움을 얻는 대신 검사 범위를 좁힌 선택입니다. 포함 여부와 확인 횟수는 직접 확인하지만, 거래 내용의 정당성에 대해서는 네트워크와 정보를 제공하는 서버에 일정 부분 의존합니다.

편리함에 따르는 비용

SPV를 구현한 경량 지갑은 휴대폰에서도 실행할 수 있고 처음 동기화하는 부담도 작습니다. 다만 경량 지갑이라고 해서 모두 SPV를 수행하는 것은 아닙니다. 어떤 앱이 헤더와 포함 증명을 직접 검증하는지, 아니면 서버의 조회 결과에 의존하는지는 해당 앱의 기술 문서를 확인해야 합니다.

대신 지갑은 자신의 주소와 거래 내역을 조회 서버에 알려야 할 수 있습니다. 서버가 거짓 답을 하거나 응답을 끊을 가능성도 남습니다. 여러 서버에 물어보는 방식으로 한 서버에 대한 의존을 줄이기도 하지만, 완전한 독립 검증과는 다릅니다.

선택의 중간 지점

모든 것을 외부 서버에 맡기는 방식과 전체 장부를 직접 검증하는 방식 사이에는 여러 선택지가 있습니다. 집에 풀노드를 두고 휴대폰 지갑을 그 노드에 연결하면, 휴대폰의 가벼움과 자신의 노드에 기반한 조회를 함께 추구할 수 있습니다.

어떤 방식을 사용할지는 저장 공간, 편리함, 사생활, 직접 확인하려는 범위를 어떻게 정하느냐에 따라 달라집니다.

간편 지불 검증을 한 문장으로 정리하면

SPV는 SPV를 구현한 경량 지갑에서 블록 헤더와 증명 자료를 직접 검증해 거래가 블록에 포함되었는지 확인하는 방식입니다. 전체 장부를 직접 검증하지 않는 대신 적은 저장 공간으로 사용할 수 있습니다. 단순히 가벼운 지갑 앱이라는 이유만으로 SPV라고 할 수는 없으므로, 실제로 해당 검증을 수행하는지 여부는 사용하는 지갑의 구현을 확인해야 합니다.

관련 개념은 풀노드, 블록, 전체 장부에서 이어서 볼 수 있습니다.

링크 복사하기X에 공유페이스북에 공유쓰레드에 공유