Neutrino는 Lightning Labs가 Go로 만든 Bitcoin 경량 클라이언트이며, Lightning Network를 사용하는 모바일 앱도 염두에 두고 설계됐습니다. BIP 157과 BIP 158의 압축 블록 필터를 사용합니다. 특정 소프트웨어 라이브러리의 이름이지 경량 지갑 전체를 뜻하는 말이나 모든 규칙을 직접 검사하는 Full Node의 대체물은 아닙니다.
Anna는 지갑을 열어 받은 결제가 보이기를 기대합니다. 올바른 상태를 표시하려면 앱은 Bitcoin 네트워크의 데이터를 가져와 처리해야 합니다. Neutrino는 휴대전화에 전체 블록체인을 영구 저장하지 않고 이 부분을 맡을 수 있습니다. 블록은 Bitcoin 네트워크의 공동 기록에 추가된 거래 묶음입니다. 프로그램에서 이 서비스는 ChainService라고 하며 연결, 로컬 데이터베이스, 헤더 동기화를 관리합니다. 헤더는 블록의 기본 정보를 짧게 정리한 데이터입니다. 개인키는 자금 사용을 승인하는 디지털 서명을 만드는 데 쓰이는 비밀 숫자입니다. 다만 Neutrino를 쓴다는 사실만으로 Anna의 개인키를 누가 보관하고 누가 송금을 승인하는지는 알 수 없습니다. 키 관리, 화면, 사용자 백업은 이 라이브러리를 쓰는 지갑의 역할입니다. [1]
압축 필터를 한 블록의 작은 검색 색인이라고 생각하면 됩니다. 지갑은 이를 내려받고 자기 기기에서 찾는 항목과 일치하는지 검사합니다. 실제로 비교하는 것은 스크립트, 즉 특정 Bitcoin 출력을 사용하기 위한 조건입니다. 출력은 거래에서 금액과 그 돈을 나중에 쓰기 위한 조건을 정하는 부분입니다. 지갑은 상대에게 주소 목록 전체를 보낼 필요가 없습니다. 일치하면 해당 블록을 가져와 실제 거래를 찾습니다. 올바르게 만든 필터도 거짓 양성을 낼 수 있습니다. 찾는 항목이 실제로는 없어 불필요한 블록을 받게 되는 것입니다. 따라서 일치했다는 사실만으로 입금, 금액, 지갑이 그 돈을 쓸 수 있는지를 입증하지는 못합니다. [1] [2] [3]
Anna가 휴대전화를 바꾸고 지갑을 복원합니다. 이전에도 돈을 받았다면 오늘의 블록부터 찾는 것만으로는 부족합니다. 앱은 정확한 감시 대상 스크립트와 충분히 과거로 잡은 시작점을 제공해야 합니다. 문서에 따르면 시작 블록을 지정하지 않은 Rescan은 마지막으로 알려진 블록에서 시작하며, 전체 역사 처음부터 자동으로 찾지 않습니다. 정상 필터라도 지갑이 찾지 않는 주소나 건너뛴 구간의 과거 결제는 찾을 수 없습니다. 복원이 끝난 상태와 검색이 진행 중인 상태를 구분해야 합니다. 복원 도중 목록이 비었다는 이유만으로 자금이 사라졌다고 볼 수 없습니다. [1]
Neutrino는 블록 헤더와 필터 헤더를 동기화합니다. 블록 헤더로는 연결 관계와 Proof of Work, 즉 수행한 계산 작업의 증거를 확인하고 누적 작업량이 가장 큰 체인을 따를 수 있습니다. 서버가 알려 준 잔액을 무조건 믿는 것보다는 훨씬 많은 검증이지만, Full Node처럼 모든 거래와 규칙을 독립적으로 검사하는 것보다는 적습니다. 두 헤더 체인 역시 서로 다릅니다. Bitcoin 블록 헤더는 이 필터들의 정확성을 직접 확약하지 않습니다. 암호학적 지문인 해시만 검사해서는 내부적으로 일관된 가짜 필터 집합을 배제할 수 없습니다. 작업을 줄이는 데에는 구체적인 신뢰의 한계가 따릅니다. [2] [4]
피어는 클라이언트가 데이터를 받는 네트워크의 다른 컴퓨터입니다. BIP 157은 응답을 비교하고 적어도 하나의 정직한 피어가 있다는 전제 아래 잘못된 필터를 발견합니다. 같은 공격자가 모든 연결을 통제한다면 컴퓨터 수만 많아도 소용없습니다. 같은 거짓 답을 주거나 더 최신 상태를 숨길 수 있기 때문입니다. 정직한 정보원에서 고립시키는 이런 상황은 Eclipse Attack과 관련됩니다. 지갑에는 단순한 연결이 아니라 접근 가능하고 충분히 독립적인 정보원이 필요합니다. 녹색 연결 아이콘은 결제 기록이 완전하고 최신이라는 증거가 아닙니다. [2]
Jan이 방금 Anna에게 돈을 보냈다고 합시다. 거래는 채굴자가 블록에 넣기 전까지 어떤 노드의 미확정 거래 모음인 Mempool에서 기다릴 수 있습니다. Neutrino 문서에 나오는 recvtx와 redeemingtx 알림은 Mempool에 들어갈 때가 아니라 블록에서 확정될 때 도착합니다. 아직 확정되지 않은 입금도 보여 주려는 앱에는 별도의 적절한 장치가 필요합니다. 아직 없는 블록의 필터로는 이를 알 수 없습니다. 전송, 피어의 수락, 블록 확정은 각각 다른 사건입니다. 알림이 없다는 것만으로 Jan이 아무것도 보내지 않았다고 단정할 수 없습니다. [1]
필터가 일치해도 필요한 블록까지 얻어야 쓸모가 있습니다. 네트워크가 당장 제공하지 못하면 올바른 결론은 “아직 데이터가 없다”이지 “잔액이 없다”가 아닙니다. 체인 재구성으로 상태가 바뀔 수도 있습니다. 네트워크가 누적 작업량이 더 큰 다른 가지를 채택하면서 이전 블록을 떼어 내는 경우입니다. Rescan은 블록 연결과 분리를 모두 알려 앱이 기록을 다시 계산하도록 합니다. 사생활 보호도 절대적이지 않습니다. 피어는 검색 주소 목록을 받지 않지만 특정 블록 요청과 연결의 네트워크 정보를 볼 수 있습니다. 데이터를 어떤 방식으로 얻는지는 여전히 중요합니다. [1] [2]
Lightning Network는 Bitcoin 위에 구축된 결제 네트워크입니다. 결제 채널에서는 두 참여자가 매번 Bitcoin 블록에 결제를 기록하는 대신 공동 자금을 서로 어떻게 나눌지 갱신합니다. Neutrino는 체인 데이터를 공급할 뿐, 현재 채널 상태를 복구할 데이터를 사용자 대신 직접 보관하지 않습니다. 따라서 지갑 이력 복구와 채널 복구는 서로 다른 일입니다. README는 요청한 필터를 저장하고 블록은 가져오되 영구 보관하지 않는다고 설명하지만, 실제 요구 사항은 앱 버전과 설정에 따라 확인해야 합니다. 이런 지갑에 의존하기 전에 해당 지갑의 백업과 복구 절차, 데이터 공급원이 멈췄을 때의 동작을 알아야 합니다. 휴대전화 데이터베이스가 작아져도 이러한 책임은 사라지지 않습니다. [1] [4]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Compact Block Filters, Compact Block Filters, Full Node, Lightning Network, Eclipse Attack, Bitcoin. 다음 항목에서도 이 글을 참조합니다 Compact Block Filters, Compact Block Filters.