유효성 검사 규칙 (Validation Rules)

중급블록체인수정일

유효성 검사 규칙은 풀 노드가 새로 받은 블록과 트랜잭션을 받아들일지 거부할지 판단할 때 적용하는 규칙입니다. 모든 노드가 같은 규칙으로 검사하기 때문에 중앙 관리자 없이도 하나의 원장에 합의할 수 있습니다.

자세히 알아보기

블록체인에는 "이 블록이 맞다"고 선언해 주는 기관이 없습니다. 대신 각 노드가 스스로 모든 데이터를 검사합니다. 검사 항목은 대체로 다음과 같습니다.

  • 트랜잭션 형식과 크기가 올바른가
  • 서명이 유효하고, 사용하려는 출력이 아직 쓰이지 않았는가(이중 지불 방지)
  • 입력 금액이 출력 금액보다 크거나 같은가
  • 블록 헤더의 작업 증명이 현재 난이도를 만족하는가
  • 블록 보상이 프로토콜이 정한 양을 넘지 않는가

규칙 하나라도 어긴 블록은 채굴자가 아무리 많은 해시 파워를 들였더라도 정직한 노드가 거부합니다. 그래서 유효성 검사 규칙은 채굴자나 검증자의 권한을 제한하는 장치이기도 합니다.

규칙은 두 종류로 나눌 수 있습니다. 합의 규칙은 어기면 블록 자체가 무효가 되는 규칙이고, 정책(표준성) 규칙은 노드가 멤풀에 받아들이거나 다른 노드에 전달할 트랜잭션을 고르는 기준입니다. 정책 규칙을 어긴 트랜잭션도 블록에 포함되기만 하면 유효할 수 있습니다.

블록체인·암호화폐에서는

비트코인에서는 Bitcoin Core 같은 노드 소프트웨어가 규칙을 구현합니다. 규칙을 바꾸려면 포크가 필요합니다. 규칙을 더 엄격하게 만드는 변경은 소프트 포크, 이전에 무효였던 것을 허용하는 변경은 하드 포크가 됩니다. 이더리움, 트론 같은 네트워크도 각자의 클라이언트가 블록과 트랜잭션, 스마트 컨트랙트 실행 결과를 검사합니다. 사용자가 직접 풀 노드를 운영하면 거래소나 다른 서비스를 믿지 않고도 받은 코인이 규칙에 맞는지 스스로 확인할 수 있습니다.

왜 모든 노드가 직접 검사할까

노드가 다른 노드의 판단을 그대로 믿는다면, 거짓 정보를 퍼뜨리는 노드 하나로 네트워크 전체가 속을 수 있습니다. 각 노드가 받은 데이터를 처음부터 스스로 검사하면 누가 보냈는지와 관계없이 규칙에 맞지 않는 블록은 걸러집니다. 새로 참여한 노드가 초기 블록 다운로드(IBD) 과정에서 제네시스 블록부터 모든 블록을 다시 검증하는 이유도 여기에 있습니다.

검사에는 비용이 듭니다. 블록이 커지고 트랜잭션이 많아질수록 검증에 필요한 계산량, 저장 공간, 대역폭이 늘어나 개인이 노드를 운영하기 어려워집니다. 그래서 비트코인 개발자들은 블록 크기나 서명 검사 비용 같은 한도를 규칙에 포함해, 일반 컴퓨터로도 검증이 가능하도록 관리합니다.

규칙이 서로 다르면

노드 소프트웨어마다 규칙 해석이 조금이라도 다르면 같은 블록을 두고 어떤 노드는 받아들이고 어떤 노드는 거부해 체인이 갈라질 수 있습니다. 실제로 비트코인 초창기에는 구현 차이 때문에 의도하지 않은 체인 분할이 일어난 적이 있습니다. 그래서 합의 규칙과 관련된 코드는 매우 보수적으로 변경하며, 변경할 때는 BIP 같은 공개 제안 절차와 충분한 검토를 거칩니다.

쉽게 말하면

모든 선수가 같은 규칙집을 들고 있어서, 심판이 없어도 반칙한 수를 각자 바로 무효로 처리하는 경기와 같습니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.