본문으로 건너뛰기
buybitcoinsmart

용어집 / 노드와 소프트웨어

Neutrino

별칭은 Neutrino, 뉴트리노, BIP157, 압축 블록 필터입니다.

Neutrino란 무엇입니까?
Neutrino는 지갑이 각 블록마다 작은 필터를 내려받아 기기에서 직접 검사하고, 관련이 있을 수 있는 블록만 전체로 가져오는 경량 클라이언트 설계입니다.

BIP-157에 명시되어 있습니다.

기존 방식을 뒤집는 것이 이 설계의 핵심입니다. 어떤 주소를 감시할지 서버에 알려 주는 대신, 지갑은 모든 블록의 압축된 요약을 받아 자체 하드웨어에서 대조합니다. Bitcoin Core는 2019년 11월의 버전 0.19.0부터 이러한 필터를 만들 수 있었고, 0.21.0부터는 피어에게 제공할 수 있었으므로, 이제 이 메커니즘은 단일 제공자를 신뢰하는 데 의존하지 않습니다.

작동 방식

Neutrino는 하나의 작업을 나누어 맡는 두 가지 명세에 기반합니다.

BIP158은 필터 자체를 정의합니다. 각 블록마다 해당 블록이 생성하는 모든 출력 스크립트와 소비하는 모든 출력 스크립트를 담은 집합을 Golomb-Rice 부호화 구조로 압축합니다. 두 매개변수는 명세에서 고정되며, P는 19, M은 784,931이고, 이는 검사하는 요소마다 약 784,931분의 1의 거짓 양성 비율을 줍니다. 실제로 수십 개의 스크립트를 감시하는 지갑은 1년에 불필요한 블록을 몇 개만 내려받습니다.

BIP157은 이러한 필터를 주고받는 메시지를 정의합니다. 필터에는 getcfilters와 cfilter, 필터 헤더 체인에는 getcfheaders와 cfheaders, 주기적 체크포인트에는 getcfcheckpt를 사용합니다. 필터 헤더는 이름보다 중요합니다. 각 헤더는 이전 헤더를 확정하므로, 클라이언트는 여러 독립 피어에게 체크포인트를 요청하고 그중 하나가 나머지와 다른 필터 집합을 제공하면 블록을 내려받지 않고도 즉시 알아챌 수 있습니다.

그다음 지갑의 절차는 단순합니다. 블록 헤더를 동기화하고, 모든 필터를 내려받고, 각 필터를 자신이 보유한 스크립트와 대조하고, 필터가 일치할 가능성을 알릴 때만 전체 블록을 요청합니다. 그 블록을 제공하는 피어는 여러분이 912,345번 블록을 원했다는 것만 알게 되며, 이는 여러분의 주소 목록보다 훨씬 약한 신호입니다. Bitcoin Core 노드에서는 blockfilterindex로 인덱스를 활성화하며, 기능이 출시되었을 때 디스크 약 4 GiB를 사용했고, peerblockfilters로 피어에게 제공합니다.

확인할 수 있는 곳

Neutrino는 서버 실행을 거부하는 모바일 라이트닝 지갑의 체인 백엔드입니다.

이 이름은 우선 Lightning Labs의 Go 구현을 가리키며, lnd가 전체 노드 대신 사용할 수 있고, 대부분의 사람이 여기서 접합니다. 자체 블록체인을 보유하지 않으면서 채널을 열고 인보이스를 지불하는 휴대폰 지갑입니다. Breez와 여러 다른 모바일 지갑도 같은 방식을 택합니다.

대가는 대역폭과 인내입니다. Neutrino 클라이언트는 일치하는 것이 있든 없든 모든 필터를 내려받으므로, 서버에 잔액만 물어보는 지갑보다 훨씬 많은 데이터를 사용합니다. 또한 오래된 백업을 복원하려면 한 번의 질의로 답을 받는 대신 지갑 생성 시점의 높이부터 필터를 앞으로 따라가야 합니다. 데이터 요금이 부과되는 모바일 연결에서는 이 맞바꿈이 형식적인 것이 아니라 실제 결정입니다.

Neutrino vs BIP37 블룸 필터

Neutrino는 클라이언트가 블록을 필터링하게 하고, BIP37은 클라이언트가 자신의 필터를 서버에 넘기게 했는데, 이는 거꾸로 된 방식입니다. BIP37 블룸 필터는 여러분 자신의 주소로 만들어져 피어에게 전송되며, 연구자들은 거짓 양성이 그 안의 내용을 숨기는 데 거의 도움이 되지 않는다는 것을 반복해서 보여 주었습니다. 또한 저렴한 서비스 거부 공격이기도 했습니다. 어떤 피어든 노드에 임의의 필터로 전체 체인을 다시 스캔하도록 요청할 수 있었기 때문입니다. Bitcoin Core는 압축 필터 인덱스를 도입한 바로 그 릴리스인 버전 0.19.0에서 기본적으로 BIP37 제공을 중단했으며, 여전히 이에 의존하는 지갑은 마침 연결된 노드에 자신의 주소 집합을 노출하고 있는 것입니다.

Neutrino vs Electrum 서버

Neutrino는 작업과 지식을 여러분의 기기로 옮기고, Electrum 서버는 둘 다 보유합니다. 서버에 질의하는 데는 킬로바이트가 들고 즉시 답을 받을 수 있어 데스크톱 지갑이 이를 선호하지만, 운영자가 결국 여러분의 주소 내역을 보유하게 됩니다. Neutrino는 지갑 수명 동안 기가바이트를 소비하여 그 내역을 대신 여러분의 휴대폰에 보관합니다.

혼동하기 쉬운 용어

자주 묻는 질문

Neutrino 지갑은 전체 노드를 실행하는 것만큼 프라이버시가 보호됩니까?

거의 비슷하지만 같지는 않습니다. 대조가 여러분의 기기에서 이루어지므로 누구도 여러분의 주소를 알지 못합니다. 그러나 여러분에게 블록을 제공하는 피어는 여러분이 그 특정 블록을 요청했다는 것을 알게 됩니다. 여러분이 관리하는 전체 노드는 아무것도 노출하지 않습니다.

모바일 지갑은 왜 이렇게 많은 데이터를 사용합니까?

압축 필터 클라이언트는 여러분과 관련이 있는지와 무관하게 모든 블록의 필터를 내려받고, 필터가 일치할 때마다 전체 블록도 내려받기 때문입니다. 이것은 서버에 여러분이 보유한 주소를 알려 주지 않는 대가이며, 데이터 요금이 부과되는 연결에서 동기화하기 전에 확인해 볼 가치가 있습니다.

관련 용어

노드와 소프트웨어 분야의 다른 용어

이 페이지를 영어로 읽기