용어집 / 라이트닝과 레이어 2
짧은 채널 ID
별칭은 scid입니다.
- 짧은 채널 ID란 무엇입니까?
- 짧은 채널 ID는 라이트닝 네트워크가 채널을 지칭하는 데 사용하는 8바이트 포인터로, 자금 조달 트랜잭션의 블록 높이, 그 블록 안에서의 인덱스, 그리고 출력 인덱스를 함께 담습니다.
라이트닝 네트워크는 공개 채널을 임의의 이름이 아니라 자금 조달 출력이 블록체인에서 차지하는 위치로 지칭합니다. 3바이트는 블록 높이를, 3바이트는 트랜잭션 인덱스를, 2바이트는 출력 인덱스를 담아 총 64비트이며, 사람이 읽을 수 있도록 539268x845x1과 같이 표기합니다. 이 좌표 덕분에 누군가의 대시보드를 신뢰하지 않고도 지갑이 경유하는 채널을 체인과 대조해 확인할 수 있습니다.
작동 방식
짧은 채널 ID의 세 구성 요소는 최상위 바이트부터 차례로 이어 붙입니다. 자금 조달 트랜잭션의 블록 높이, 그 블록 안에서 트랜잭션의 인덱스, 채널에 자금을 대는 출력의 인덱스입니다. 고정된 너비 때문에 높이와 트랜잭션 인덱스는 16,777,215, 출력 인덱스는 65,535로 제한됩니다.
사람이 읽는 형태에서는 숫자를 십진수로 인쇄하고 소문자 x로 이어 붙입니다. 따라서 높이 539,268인 블록에서 인덱스 845인 트랜잭션의 출력 1에 있는 채널은 539268x845x1입니다. 명세가 밝힌 이유는 다음과 같습니다. 대부분의 글꼴에서 소문자 x는 숫자보다 눈에 띄게 작아 눈이 각 부분을 구분할 수 있고, 더블클릭 한 번으로 식별자 전체가 선택됩니다.
패킹하면 단순한 64비트 숫자이며, BOLT 11의 테스트 벡터가 이를 보여 줍니다. 라우트 힌트 66051x263430x1800은 바이트 순서대로 01 02 03 04 05 06 07 08의 바이트 열입니다. 66051은 0x010203이고, 263430은 0x040506이며, 1800은 0x0708이기 때문입니다.
해시가 아니라 위치이기 때문에, 짧은 채널 ID는 지칭하는 블록이 바뀌면 더 이상 사실이 아닙니다. 그래서 채널은 자금 조달 트랜잭션이 최소 6회의 확인을 받기 전까지 공지되지 않으며, 노드는 출력의 확인 수가 그보다 적은 공지를 무시해야 합니다. 스플라이싱도 식별자를 옮깁니다. 스플라이스된 채널은 스플라이스 트랜잭션의 짧은 채널 ID로 다시 공지되며, 노드는 여전히 이전 식별자를 사용하는 결제를 계속 중계합니다.
아무도 공지하지 않은 채널에는 공개 식별자가 없으므로, 상대 노드끼리는 대신 별칭을 주고받습니다. 별칭을 담은 업데이트는 dont_forward 플래그를 설정해야 하며, 프라이버시를 위해 절대 전달되어서는 안 됩니다.
확인할 수 있는 곳
짧은 채널 ID는 라이트닝 네트워크 가십의 주소 지정 계층이며, 특정 채널 하나에 관한 모든 메시지에 나타납니다.
메시지 유형 259인 announcement_signatures는 두 상대 노드가 채널 공개에 합의할 때 이를 담습니다. 유형 256인 channel_announcement는 다른 모든 노드가 체인에서 자금 조달 출력을 찾는 데 사용하는 값을 담습니다. 유형 258인 channel_update는 수수료나 만료가 바뀔 때마다 방향별로 한 번씩 이를 반복합니다. 유형 261인 query_short_channel_ids는 짧은 채널 ID 목록에 해당하는 공지를 상대에게 요청하며, 인코딩 바이트 0 아래의 오름차순 배열로 전송됩니다. 인코딩 바이트 1은 한때 zlib 압축을 뜻했으나 이제 완전히 금지되어 있습니다. 노드는 어느 방향이든 최신 업데이트가 2주, 즉 1,209,600초보다 오래된 채널을 정리할 수 있습니다.
일반 사용자가 이를 마주치는 유일한 곳은 결제 요청입니다. BOLT 11 인보이스의 r 필드는 라우트 힌트를 담으며, 각 홉은 노드 공개 키, 64비트 짧은 채널 ID, 두 개의 수수료 수치, 만료 델타로 이루어집니다. 명세의 예시는 589390x3312x1을 가리킵니다.
짧은 채널 ID vs 아웃포인트
짧은 채널 ID와 아웃포인트는 모두 트랜잭션 출력 하나를 지칭하며, 서로 반대 방향에서 지칭합니다. 아웃포인트는 36바이트로, 32바이트 트랜잭션 ID 뒤에 4바이트 인덱스가 붙은 형태이며, 출력을 만든 트랜잭션으로 출력을 지칭합니다. 짧은 채널 ID는 8바이트이며, 출력이 자리한 위치로 같은 출력을 지칭합니다.
이 맞바꿈은 크기와 안정성 사이의 거래입니다. 아웃포인트는 트랜잭션이 존재하는 순간 유효하며, 미확인 상태도 포함되고 결코 바뀌지 않습니다. 짧은 채널 ID는 트랜잭션이 블록에 들어가기 전까지 존재하지 않으며, 트랜잭션을 다른 높이나 위치에서 다시 채굴하는 재구성이 일어나면 같은 채널에 다른 식별자가 생깁니다. 라이트닝 네트워크가 이를 받아들이는 이유는 좌표가 출력을 찾는 지침 역할을 겸하기 때문이며, 채널 하나를 가십으로 전파하는 데 8바이트가 36바이트보다 훨씬 저렴합니다.