용어집 / 라이트닝과 레이어 2
기능 비트
- 기능 비트란 무엇입니까?
- 기능 비트는 해당 노드가 특정 프로토콜 확장을 지원한다는 사실을 다른 라이트닝 노드에 알려 주며, 홀수 번호는 선택 사항, 짝수 번호는 필수 사항을 뜻합니다.
라이트닝에는 피어가 비교할 버전 번호가 없으므로, 두 노드는 연결되는 순간 비트필드를 주고받아 서로 함께 무엇을 할 수 있는지 확인합니다. BOLT 9는 비트 0부터 비트 67까지 25개의 이름 붙은 쌍을 할당하며, 어느 누구도 한 쌍의 두 비트를 모두 설정해서는 안 됩니다. 사용자의 지갑이 다른 지갑이 지불하는 인보이스를 거부한다면, 빠진 기능 비트가 확인해 볼 사항 중 하나입니다.
작동 방식
기능 비트는 비트필드의 최하위 비트부터 세며, 비트 0에서 시작합니다. 이 비트의 값은 0x1이고 짝수로 계산됩니다.
기능 비트는 쌍 단위로 부여되며, 이 짝짓기가 핵심입니다. 홀수 비트는 노드가 해당 기능을 지원한다는 뜻이고, 짝수 비트는 해당 기능을 요구한다는 뜻입니다. 따라서 어떤 기능은 선택 사항으로 출시되어 조용히 퍼진 뒤 나중에 필수 사항으로 승격될 수 있습니다. BOLT 9에 따르면 구버전 노드는 이를 거부하므로, 불일치는 지불 도중이 아니라 두 노드가 만날 때 드러납니다. 요구 사항은 나머지를 분명히 밝힙니다. 발신 노드는 한 쌍의 두 비트를 모두 설정해서는 안 되며, 그럼에도 두 비트를 모두 받은 수신 노드는 해당 기능을 필수로 취급합니다.
일부 기능은 다른 기능에 의존하며, 발신자가 의존 사슬 전체를 함께 실어 보냅니다. 기본 다중 분할 지불은 비트 16과 17을 차지하고 payment_secret에 의존합니다. 제로컨프 채널은 50과 51을 차지하고 option_scid_alias에 의존합니다. 66과 67의 option_onion_messages_only_channels는 일반 어니언 메시지에 의존합니다. 발신 노드는 모든 전이적 의존성을 설정해야 하므로, 단일 기능 게이트 뒤의 코드는 지원 비트를 다시 검증하지 않고 존재한다고 가정할 수 있습니다.
이제 25개 쌍 가운데 5개는 ASSUMED로만 읽힙니다. 0/1, 8/9, 12/13, 14/15, 44/45입니다. 각 쌍은 너무 널리 퍼져 모든 노드가 이를 갖춘 것으로 간주되며, 그 의미는 명세서의 이전 개정판에만 남아 있습니다. 표에는 번호 공백도 있는데, 2/3, 20/21, 30/31, 32/33, 52부터 59까지, 64/65에는 아무것도 할당되지 않았으므로 공백은 정상입니다.
확인할 수 있는 곳
기능 비트는 여러 별개의 위치를 오가며, BOLT 9 표의 Context 열은 각 쌍이 그중 어디에 속하는지 알려 주고, 25개 행 가운데 6개에서는 이 열이 비어 있습니다.
I는 두 피어가 연결 시 주고받는 init 메시지를, N은 가십 그래프로 브로드캐스트되는 node_announcement를, C는 channel_announcement를, 9는 BOLT 11 인보이스를, B는 블라인드 경로의 allowed_features 필드를, T는 채널을 열 때 합의되는 channel_type을 나타냅니다. 많은 비트가 한 컨텍스트에만 나타납니다. 비트 48과 49의 option_payment_metadata는 인보이스에만 나타나며, 22와 23의 option_anchors는 init, 가십, 채널 유형에는 나타나지만 인보이스에는 결코 나타나지 않습니다.
두 컨텍스트가 어긋날 때는 인보이스가 우선합니다. BOLT 9의 근거는 node_announcement와 BOLT 11 양쪽에 실린 플래그에 대해 인보이스 값이 발표된 값을 덮어쓴다고 밝힙니다. 그래서 지갑은 목적지가 몇 시간 전에 가십 네트워크에 광고한 내용이 아니라, 사용자가 붙여 넣은 인보이스에서 기능을 읽습니다.
ACINQ가 자사의 Eclair 구현으로 만든 Phoenix는 휴대폰에서 실제 노드를 실행하므로, 다중 분할 지불이나 블라인드 경로를 받아들이는지는 홍보 페이지가 아니라 피어와 교환한 비트필드로 결정됩니다. Muun은 온체인과 라이트닝을 하나의 잔액으로 보여 주며, 라이트닝 지불 역시 인보이스의 비트로 귀결됩니다.
기능 비트 vs 버전 비트
기능 비트는 두 라이트닝 피어 사이의 기능을 협상하고, 버전 비트는 비트코인 블록 헤더에서 소프트 포크를 알립니다. BIP-9는 채굴업자에게 헤더 버전 필드의 비트 0부터 28까지를 부여하고, 메인넷에서 2,016개 블록 창 가운데 1,916개 블록에서 배포를 확정하며, 그 뒤로는 이어지는 모든 블록에 적용됩니다. 기능 비트는 누구도 구속하지 않습니다. 두 피어 사이의 주장일 뿐이며, 한 연결에서는 참이고 다음 연결에서는 거짓이고, 임계값도 타임아웃도 네트워크 전체 활성화도 없습니다. 라이트닝은 두 노드가 서로를 위해 무엇을 할지 협상하고, 비트코인은 모두가 무엇을 받아들여야 하는지를 정합니다.