MSTR Cat

블록체인/레벨 V · 레이어/5.1 Lightning/수업 3

인보이스: BOLT11 및 BOLT12

일회용 문자열에서 재사용 가능한 오퍼까지, 그리고 그 간극을 메운 웹 서버들

준비물인보이스를 디코딩할 수 있는 라이트닝 지갑브라우저를 통해 접근 가능한 공개형 BOLT11 디코더 도구BOLT11 인보이스 샘플과 BOLT12 오퍼 문자열

호기심

  1. 1시간 뒤 만료되는 결제 요청은 왜 판매자가 끊임없이 새로 생성하게 만들까요?
  2. 정적 QR 코드는 어떻게 수년 동안 유효하면서도 거래마다 고유하고 안전한 인보이스를 만들어 낼 수 있을까요?
  3. 지갑이 자금을 보내기 전에 인보이스가 변조되지 않았음을 검증할 수 있게 해 주는 데이터 필드는 구체적으로 무엇일까요?

탐구

  1. BOLT11 인보이스는 'lnbc'로 시작하는 bech32 문자열로, 결제에 필요한 모든 파라미터를 담고 있습니다. 여기에는 선택적 금액(비트코인 단위에 배수 문자를 붙여 사토시 미만 단위까지 표현), 비밀 프리이미지에서 도출된 고유한 결제 해시, 기본값이 1시간인 만료 타임스탬프가 인코딩됩니다. 수취인 노드의 공개 키가 목적지를 식별하며, 직접 연결된 채널이 없을 때는 선택적 경로 힌트가 지불자를 안내합니다. 문자열 전체는 수취인이 서명하므로 무결성이 보장됩니다.
  2. 이 구조 때문에 BOLT11 인보이스는 엄격하게 일회용입니다. 송신자가 해당 결제 해시에 대금을 지불하면 인보이스는 정산되어 다시 사용할 수 없습니다. 같은 인보이스에 두 번 지불하는 것은 안전하지 않습니다. 첫 결제 후에는 그 경로의 모든 노드가 프리이미지를 알게 되므로, 두 번째 결제 경로에도 있는 노드라면 누구든 그 결제를 가로챌 수 있기 때문입니다. 이 제약 때문에 소매 현장에서는 동적 QR 코드가 필요하며, 판매자는 고객마다 새 문자열을 생성해야 하므로 POS 하드웨어가 복잡해집니다.
  3. 커뮤니티 개발자들은 외부 웹 서버에 기반한 LNURL과 라이트닝 주소(Lightning Address)로 이 불편을 해결했습니다. 사용자가 서버 엔드포인트를 가리키는 정적 URI를 스캔하면, 지갑은 결제를 시작하기 전에 그 서버에서 새 BOLT11 인보이스를 받아옵니다. 이렇게 공개 주소와 개별 거래 데이터를 분리하면, 하나의 링크로 무제한 결제를 받으면서도 내부적으로는 고유한 일회용 인보이스의 보안성을 유지할 수 있습니다.
  4. Rusty Russell이 설계하고 2024년 사양에 추가된 BOLT12 '오퍼(offers)'는 이 흐름을 프로토콜 내부로 가져왔습니다. 이 재사용 가능한 결제 코드는 'lno'로 시작하며 수취인 노드의 정적 식별자 역할을 합니다. 오퍼를 스캔하면 지불자의 지갑이 라이트닝 네트워크를 통해 직접 어니언 메시지를 보내 오퍼 생성자로부터 새 인보이스를 받아옵니다. 이로써 외부 웹 서버 의존성이 사라지고, 요청 생성이 핵심 프로토콜에 통합됩니다.
  5. BOLT12 오퍼는 BOLT11에 없는 기능을 지원하는데, 환불이나 출금처럼 판매자가 사용자에게 지급하는 흐름이 대표적입니다(정기 결제는 초안에 포함되었으나 병합된 사양에서는 제외되었습니다). 또한 오퍼는 수신 노드의 공개 키를 공개하는 대신 블라인디드 경로(blinded path)를 사용해 채널 그래프 안에서 수신 노드를 숨길 수 있습니다. 이 설계는 경로 힌트나 대체(fallback) 주소를 그대로 노출하는 일반 인보이스에 비해 프라이버시 노출을 줄여 줍니다.
  6. 자발적 결제(spontaneous payment)는 keysend나 AMP(Atomic Multi-Path) 프로토콜을 사용해 인보이스를 아예 거치지 않으며, 송신자는 사전 요청 없이 알려진 노드 키로 자금을 보냅니다. 직접 확인해 보려면 아무 라이트닝 인보이스나 공개 BOLT11 디코더에 붙여 넣으십시오. 사람이 읽을 수 있는 접두사, 금액, 결제 해시, 만료 시간, 수취인 서명을 찾아보십시오. 그런 다음 'lno' 문자열과 비교해 보십시오. 이 문자열에는 결제 해시가 없고, 지불자가 인보이스를 요청하는 데 필요한 정보, 즉 노드 ID나 해당 노드로 가는 블라인디드 경로만 들어 있습니다.

핵심 사실

  • BOLT11 인보이스는 'lnbc'로 시작하는 일회용 bech32 문자열로, 금액, 해시, 서명이 인코딩되어 있습니다.
  • LNURL과 라이트닝 주소(Lightning Address)는 웹 서버를 이용해 정적 링크에서 새 BOLT11 인보이스를 받아옵니다.
  • BOLT12 오퍼는 'lno'로 시작하며, 라이트닝 네트워크상의 어니언 메시지를 통해 고유한 인보이스를 생성합니다.
  • BOLT12 오퍼는 재사용할 수 있으며, BOLT11이 지원하지 않는 환불 같은 판매자-사용자 방향 결제를 지원합니다.
  • BOLT11 인보이스의 기본 만료 시간은 1시간(3600초)입니다.
  • Keysend를 사용하면 인보이스 없이 노드 공개 키로 자발적 결제를 보낼 수 있습니다.

연습 아홉, 여섯, 셋, 하나

9모으기기존 은행 송금 코드부터 최신 암호화폐 표준까지, 디지털 금융에서 쓰이는 서로 다른 결제 요청 형식이나 식별자 9가지를 나열하십시오. 각각이 일회용인지 재사용 가능한지도 기록하십시오.
6묶기9개를 고유성 처리 방식에 따라 정적 재사용형, 동적 일회용, 서버 경유 신규 발급형, 프로토콜 네이티브 신규 발급형, 키 기반 자발적 결제형, 기타의 6가지 범주로 분류하십시오.
3추리기6개 그룹을 사용자 편의성(정적 코드)과 암호학적 보안(고유 해시) 사이의 3가지 근본적인 트레이드오프로 압축하십시오.
1결정화재사용 가능한 결제 흐름에서 BOLT12 오퍼가 외부 웹 서버를 필요 없게 만드는 이유를 한 문장으로 설명하십시오.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS