용어집 / 노드와 소프트웨어
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는 지갑 수명 동안 기가바이트를 소비하여 그 내역을 대신 여러분의 휴대폰에 보관합니다.