용어집 / 라이트닝과 레이어 2
LNURL
- LNURL이란 무엇입니까?
- LNURL은 인코딩된 링크 1개를 따라 라이트닝 지갑이 서버에서 새로운 인보이스, 출금 또는 로그인 챌린지를 가져오게 하는 소규모 웹 프로토콜 모음입니다.
라이트닝 인보이스는 만료되며 한 번만 결제할 수 있기 때문에 인쇄하거나 게시하기에 불편합니다. LNURL은 인보이스 앞에 HTTPS 요청을 두어 이 문제를 해결합니다. 지갑은 결제하려는 시점에 서버에서 결제 요청을 받아옵니다. 명세는 BOLT 외부에 있으며 LUD-01부터 번호가 매겨집니다.
작동 방식
LNURL은 정적인 링크를 지갑과 서버 사이의 실시간 대화로 바꿉니다.
링크 자체가 핵심입니다. 원래 형태인 LUD-01에서는 HTTPS URL을 lnurl 접두사와 함께 bech32로 인코딩하여, QR 코드로 인쇄되거나 채팅 창에 입력되어도 견디는 문자열을 만듭니다. 더 새로운 LUD-17 형태는 인코딩을 생략하고 일반 URL 앞에 lnurlp: 같은 평범한 스킴 접두사를 사용하므로 더 짧고 디버깅하기 쉽습니다. 어느 쪽이든 지갑은 링크를 디코딩하고 GET 요청을 수행한 뒤, 어떤 종류의 상호작용인지 알려주는 JSON을 받습니다.
그 JSON의 tag 필드가 이후의 모든 것을 결정합니다. LUD-06은 결제 흐름인 payRequest를 정의합니다. 서버는 콜백 URL과 밀리사토시 단위의 minSendable 및 maxSendable, 그리고 지갑이 표시하는 메타데이터 문자열을 반환합니다. 사용자가 금액을 선택하면 지갑이 그 금액으로 콜백하고, 서버는 정확히 그 금액에 대한 BOLT11 인보이스를 새로 발행하여 반환합니다. LUD-03은 반대 방향으로 작동하는 withdrawRequest를 정의합니다. 서버가 돈을 제공하고 지갑이 이를 받을 인보이스를 제공합니다. LUD-02는 피어에게 채널을 요청합니다. LUD-04는 auth를 정의하며, 지갑이 도메인별로 파생된 키로 챌린지에 서명하는데, 일부 라이트닝 사이트가 비밀번호 없이 로그인하는 방식이 이와 같습니다.
이해할 가치가 있는 안전성 속성은 좁습니다. LNURL은 인보이스가 링크의 도메인에서 왔고 그 금액이 사용자가 승인한 금액과 일치함을 보장합니다. 지갑이 결제 전에 반환된 인보이스를 확인하기 때문입니다. 그 도메인을 누가 통제하는지에 대해서는 아무것도 보장하지 않습니다. 시장 노점에서 실제 코드 위에 붙여 놓은 LNURL 코드를 스캔하면 공격자의 서버로 결제되며, 결제는 설계된 대로 정확히 성공합니다.
사용되는 곳
대부분의 사람은 LNURL이라는 단어를 본 적 없이 LNURL을 접합니다.
팁 및 기부 페이지는 QR 코드 뒤에서 LNURL-pay를 사용하므로, 같은 인쇄 코드가 서로 다른 100명의 고객에게, 100가지의 서로 다른 금액으로 작동합니다. 비트코인 콘퍼런스의 경품과 faucet 카드는 LNURL-withdraw를 사용합니다. 스캔하면 지갑이 조용히 인보이스를 생성하고, 사토시는 눈에 보이는 인보이스 없이 도착합니다. 일부 라이트닝 지갑과 웹 서비스는 LNURL-auth를 로그인 시스템 전체로 사용합니다.
가장 큰 도입은 간접적입니다. user@domain 형태인 라이트닝 주소는 LUD-16에 정의되어 있으며 LNURL-pay 위에 직접 구축됩니다. 주소는 잘 알려진 HTTPS 경로로 변환되고, 그 이후의 흐름은 일반적인 LUD-06입니다. 지갑이 라이트닝 주소를 지원한다면 이미 LNURL을 지원하는 것입니다.
주된 유의점은 가용성입니다. 중간에 웹 서버가 있기 때문에 LNURL 코드의 신뢰성은 그 서버와 TLS 인증서의 신뢰성을 넘지 못합니다. BOLT11 인보이스는 한 번 생성되면 서버가 오프라인이어도 결제할 수 있지만, LNURL 링크는 그렇지 않습니다.
LNURL vs BOLT11 인보이스
LNURL은 결제 요청을 얻는 방법이고, BOLT11 인보이스는 결제 요청 그 자체입니다. 이 단 하나의 차이가 두 가지의 속성을 설명합니다. 인보이스는 자체 완결적이며 수취인 노드가 서명하고 정해진 시간 동안 유효하며 한 번만 결제할 수 있습니다. LNURL 링크는 금액도, 결제 해시도, 서명도 포함하지 않으며 무기한 유효하고, 각 결제자가 새로운 인보이스를 유발하므로 몇 명의 결제자에게든 작동합니다. 인보이스를 인쇄하면 한 시간 안에 만료됩니다. LNURL 코드를 인쇄하면 해당 도메인이 그 역할을 그만둘 때까지 계속 작동합니다.