용어집 / 라이트닝과 레이어 2
BOLT11 인보이스
별칭은 라이트닝 인보이스, BOLT 11입니다.
- BOLT11 인보이스란 무엇입니까?
- BOLT11 인보이스는 라이트닝 지갑이 결제를 요청하기 위해 생성하는, lnbc로 시작하는 긴 문자열이며, 금액, 결제 해시, 만료 시각, 서명을 인코딩합니다.
모든 라이트닝 결제는 이 인보이스에서 시작합니다. 인보이스는 수신자만이 풀 수 있는 256비트 결제 해시를 확정하며, 발행자가 따로 정하지 않는 한 1시간 후에 만료됩니다. 그래서 오래된 QR 코드를 캡처한 화면은 쓸모가 없습니다. 결제는 돈이 지목된 노드에 도착하거나 본인에게 돌아온다는 점에서 안전합니다.
작동 방식
BOLT11 인보이스는 네트워크를 표시하는 접두사와 태그가 붙은 필드로 구성된 본문을 가진 bech32 문자열입니다.
사람이 읽을 수 있는 부분이라고 하는 접두사는 메인넷에서 lnbc, 테스트넷에서 lntb, 시그넷에서 lntbs, 레그테스트에서 lnbcrt입니다. 바로 뒤에 금액이 오는데, 숫자와 배수 문자로 표기합니다. m은 비트코인의 1,000분의 1, u는 100만분의 1, n은 10억분의 1, p는 1조분의 1입니다. 따라서 lnbc2500u는 0.0025 비트코인을 요청합니다. 금액을 아예 빼면 지불자가 채우는 개방형 인보이스가 됩니다.
본문은 태그가 붙은 필드의 나열이며, 각 필드는 한 글자 태그, 길이, 값으로 이루어집니다. 두 가지는 필수입니다. 결제 해시는 태그 p로, 256비트를 52개의 bech32 문자로 쓴 것이고, 결제 시크릿은 태그 s로, 지불자가 최종 어니언 페이로드에서 그대로 되돌려 보내야 하는 또 다른 52개의 문자입니다. BOLT 11은 인보이스를 작성하는 쪽에 둘을 각각 정확히 하나씩 포함하라고 지시하고, 읽는 쪽에는 유효한 s 필드가 없으면 결제를 즉시 실패시키라고 지시합니다. 다음은 선택 필드입니다. 설명 또는 긴 설명의 경우 설명의 해시, 기본값이 3600초인 만료, 기본값이 18블록인 최소 최종 CLTV 만료 델타(수신자가 마지막 홉에서 원하는 안전 여유분입니다), 수취 노드 ID, 온체인 대체 주소, 그리고 채널이 공개되지 않은 노드에 도달하는 방법을 지불자에게 알려 주는 라우팅 힌트입니다.
전체가 서명됩니다. 서명은 520비트로, 64바이트 값에 복구 바이트 하나를 더한 것이며, 이것이 노드 ID 필드가 없어도 지갑이 인보이스에서 지불 목적지를 도출할 수 있게 해 줍니다. 끝에는 6자리 bech32 체크섬이 붙어 있어, 잘못 입력한 문자가 있으면 돈이 아무 데도 아닌 곳으로 가기 전에 잡아냅니다.
결제 해시는 인보이스를 단순한 텍스트 파일 이상으로 만드는 장치입니다. 수신자는 무작위 프리이미지를 생성하고 이를 해시하여 인보이스에 넣습니다. 경로의 모든 홉은 전달하는 금액을 같은 해시에 걸어 잠그며, 프리이미지를 공개해야만 돈이 풀립니다. 따라서 결제가 완료되면 지불자는 인보이스의 해시와 일치하는 프리이미지를 손에 쥐게 되고, 이는 어떤 판매자도 그럴듯하게 부인할 수 없는 암호학적 영수증입니다.
비트코인을 구매할 때 이것이 중요한 이유
거래소에서 출금할 때 피할 수 있는 실수 몇 가지가 인보이스에서 일어납니다.
첫째는 만료입니다. 거래소 출금 절차는 처리에 몇 분이 걸릴 수 있고, 느린 절차의 시작에 생성된 인보이스는 결제될 때쯤이면 이미 만료되었을 수 있습니다. 라이트닝 출금이 뚜렷한 이유 없이 실패하면 거래소가 고장 났다고 단정하기 전에 지갑에서 인보이스를 다시 생성하십시오. 기본값은 1시간이지만, 빠른 결제를 기대하는 지갑은 흔히 10분이나 15분으로 정합니다.
둘째는 금액입니다. 금액이 들어 있는 인보이스는 그 금액으로만 지불할 수 있고, 이는 0을 하나 더 입력할 가능성을 없애 주므로 바로 원하는 바입니다. 금액이 없는 인보이스는 개방형 또는 금액 0 인보이스라고도 하는데, 기부에는 편리하지만 출금 절차에서는 위험합니다. 숫자가 미리 박혀 있는 쪽을 선호하십시오.
셋째는 재사용입니다. BOLT11 인보이스는 설계상 한 번만 쓸 수 있습니다. 기부 페이지에 하나를 게시하면 두 번째 기부자의 결제는 실패하거나, 수신 쪽이 잘못 만들어졌다면 첫 번째 기부자의 해시로 다시 지불됩니다. 이것이 바로 BOLT12 오퍼가 해결하도록 설계된 문제이며, 그래서 그 사양이 2024년 9월에 라이트닝 표준에 병합되었습니다. 2017년 이후 첫 번째 새 BOLT입니다. 지갑과 상대방이 모두 오퍼를 지원할 때까지는 라이트닝 주소가 재사용 가능한 목적지를 게시하는 실용적인 방법입니다.
마지막으로, 라이트닝을 전제로 계획을 세우기 전에 거래소가 실제로 라이트닝을 지원하는지 확인하십시오. 이 사이트에서 리뷰한 Strike는 라이트닝과 온체인 양쪽으로 출금을 지원합니다. 이 사이트의 거래소 비교에 실린 플랫폼 중 상당수는 이를 지원하지 않으며, 그런 곳에서 소액을 옮기는 가장 저렴한 방법은 자주 옮기지 않는 것입니다.
인보이스를 필드별로 읽기
짧은 인보이스를 하나 분해해 보면 더 이상 잡음처럼 보이지 않습니다.
lnbc1500n으로 시작하는 문자열은 해독하기 전에 두 가지를 알려 줍니다. 메인넷 인보이스이고, 1500 나노비트코인, 즉 0.0000015 비트코인 또는 150 사토시를 요청한다는 것입니다. 그다음은 타임스탬프이고, 이어서 태그가 붙은 필드가 옵니다. d 필드는 "table 4" 같은 짧은 설명을 담고, x 필드가 600이면 만료를 기본 1시간 대신 10분으로 정하며, c 필드는 수신자가 더 큰 안전 여유분을 원할 경우 18블록 최종 CLTV 델타를 덮어씁니다.
수신자의 노드에 공개 채널이 없으면 r 필드가 라우팅 힌트를 담습니다. 잘 연결된 상대의 노드 ID, 사용할 짧은 채널 ID, 그리고 그 상대의 수수료와 델타입니다. 이것이 없으면 지갑은 공개 그래프를 살피고 경로를 찾지 못해 포기합니다. 그래서 모바일 지갑의 인보이스가 대형 공개 노드의 인보이스보다 눈에 띄게 긴 경우가 많습니다.
BOLT11 인보이스 vs Bitcoin URI
BOLT11 인보이스는 라이트닝 결제 요청이고, Bitcoin URI는 온체인 결제 요청입니다. URI 형식은 bitcoin: 뒤에 주소와 선택적 매개변수를 붙인 것으로, 블록체인을 가리키며 어떤 지갑에서든 몇 번이고 어떤 금액으로든 지불할 수 있습니다. 인보이스는 노드를 가리키고, 만료되며, 한 번 지불되도록 만들어졌습니다. 지갑은 점점 더 둘을 함께 담은 통합 QR 코드를 표시해 지불자가 선택하게 하지만, 두 페이로드는 각기 다른 실패 방식을 가진 별개의 표준입니다.
BOLT11 인보이스 vs 라이트닝 주소
BOLT11 인보이스는 결제 요청 자체이고, 라이트닝 주소는 그러한 인보이스를 가져오는 방법입니다. you@example.com 같은 주소를 지갑에 입력하면 그 도메인으로 HTTPS 요청이 전송되고, 도메인은 사용자가 고른 금액에 대해 새로 생성한 BOLT11 인보이스로 응답합니다. 주소는 재사용할 수 있고 사람이 읽을 수 있는데, 이는 결제 요청이 전혀 아니기 때문입니다. 주소는 필요할 때 인보이스를 발행해 줄 서버를 가리키는 포인터입니다.