용어집 / 라이트닝과 레이어 2
인보이스 만료
- 인보이스 만료란 무엇입니까?
- 인보이스 만료는 BOLT11 결제 요청의 x 필드로, 인보이스 자체의 타임스탬프부터 계산한 초 단위의 숫자이며, 이 시간이 지나면 지불인과 수취인 모두 이를 거부해야 합니다.
모든 라이트닝 인보이스에는 기한이 있으며, 카운트다운은 인보이스가 서명된 시점에 시작되고, 인보이스가 귀하에게 도달한 시점에 시작되는 것이 아닙니다. x 필드가 없으면 기본값은 3600초, 즉 1시간입니다. 따라서 대화 스레드에서 그 1시간의 대부분을 머문 인보이스는 귀하에게 도달한 뒤 몇 분 만에, 눈에 보이는 이유 없이 실패할 수 있습니다.
작동 방식
인보이스 만료는 태그 필드 유형 6으로 전달되며, 문자 x로 표기되고, 빅 엔디언 방식의 초 단위 카운트를 담습니다.
BOLT11 문자열은 1970년 1월 1일 UTC 이후의 초를 세는 35비트 타임스탬프로 시작하고, 그 다음 태그 필드들이 오고, 마지막으로 서명이 옵니다. 만료는 그러한 필드 중 하나이며 상대적입니다. 기한은 그 타임스탬프에 만료를 더한 값이므로, 인보이스 어디에도 읽을 수 있는 시각이 명시되지 않습니다. BOLT11은 지불인에게 그 합이 지나면 결제를 시도하지 말라고 지시하고, 수취인에게도 결제를 받지 말라고 지시합니다.
두 지시 모두 MUST가 아니라 SHOULD이므로, 만료된 인보이스가 암호학적으로 죽은 것은 아닙니다. 결제 해시는 여전히 유효합니다. 결제를 막는 것은 잠금이 아니라 양쪽 끝의 정책입니다. 귀하의 지갑은 시도를 거부하고, 프리이미지를 폐기한 노드는 어차피 정산할 수 없습니다.
값은 5비트 그룹으로 묶이며, 선행하는 0 그룹 없이 값을 담을 수 있는 가장 짧은 길이를 사용해야 합니다. 사양 자체의 예시가 그 범위를 보여 줍니다. 60초는 그룹 두 개를 차지하며 pu로 표기되고, 604800초는 네 개를 차지하며 jw5q로 표기됩니다. 필드를 채워 넣는 인코더는 단지 지저분한 것에 그치지 않습니다. 인보이스를 해독하는 쪽은 x, c 또는 9 필드가 최소 길이가 아닌 인보이스를 유효하지 않은 것으로 취급하라는 지시를 받습니다.
인보이스는 한 번 발행되면 누구도 연장할 수 없습니다. 서명은 사람이 읽을 수 있는 접두부와 데이터 부분 전체를 덮으므로, 만료의 문자 하나만 고쳐도 서명이 깨집니다. 귀하에게 더 긴 시간을 주고 싶은 가맹점은 새 요청을 발행하고 다시 서명해야 합니다.
1시간이라는 기본값은 무작위로 정해진 것이 아닙니다. 사양의 근거 설명에 따르면 이 값은 f 필드가 담을 수 있는 대체 주소를 통해 온체인으로 결제할 시간을 남겨 둡니다.
확인할 수 있는 곳
인보이스 만료는 QR 코드를 둘러싼 카운트다운 링으로 나타나고, 모든 디코더에서 expiry로 표시된 줄로 나타나며, 만료된 것을 붙여 넣었을 때 지갑이 보이는 거부로 나타납니다.
사양의 테스트 벡터는 그 범위의 양 끝을 보여 줍니다. 1 cup coffee로 설명된 2500 마이크로비트코인 인보이스는 만료를 60초로 설정하는데, 계산대에서 3 달러 가격을 고정하기 때문입니다. Ledger Nano S를 포함한 88.85 USD 상당의 상품에 대한 Blockstream Store의 인보이스는 만료를 604800초, 즉 7일로 설정하는데, 주문 확인은 계산대가 아니라 청구서이기 때문입니다.
인보이스가 어디에서 생성되는지가 그 숫자를 누가 선택했는지를 결정합니다. 이 사이트에서 리뷰하는 Phoenix는 서버의 계정이 아니라 휴대폰에서 실제 라이트닝 노드를 실행하므로, 수신 요청의 만료는 그 자체의 노드 설정입니다. 수탁형 앱에서는 그 숫자가 운영자로부터 나오며, 그 인보이스 중 하나를 디코딩하는 것이 보통 그 값을 알 수 있는 유일한 방법입니다.
인보이스 만료 vs CLTV 만료 델타
인보이스 만료와 CLTV 만료 델타는 모두 라이트닝 결제 위의 시계이며, 서로 다른 단위로, 문제의 서로 다른 절반에서 작동합니다.
인보이스 만료는 인보이스 타임스탬프부터 센 실제 시각 기준 초이며, 결제를 시도할 수 있는지 자체를 결정합니다. CLTV 만료 델타는 블록 단위로 측정되며, 같은 인보이스의 c 필드는 마지막 홉에 대한 수취인의 최솟값을 담고, 필드가 없을 때 지불인은 이를 최소 18블록으로 취급해야 합니다. 하나는 시작할지 여부를 알려 주고, 다른 하나는 시작한 뒤 귀하의 자금이 HTLC에 얼마나 오래 잠긴 채 있을 수 있는지를 알려 줍니다.