용어집 / 라이트닝과 레이어 2
결제 시크릿
- 결제 시크릿이란 무엇입니까?
- 결제 시크릿은 수취인이 청구서마다 생성하고 최종 어니언 페이로드에서 다시 요구하는 32바이트 값으로, 결제 해시만 알아서는 지불인이 되지 못합니다.
라이트닝의 결제 시크릿은 수신 노드가 자금을 수락하기 전에 지불인이 그대로 되돌려 보내는 청구서별 비밀번호처럼 작동합니다. BOLT 11은 여기에 태그 문자 s를 부여하고 길이를 52개의 bech32 문자로 고정하며, 이것이 없이 도착하는 청구서는 실패 처리하라고 읽는 이에게 지시합니다. 귀하에게 이것은, 결제 해시를 본 라우팅 노드가 그 결제가 귀하의 지갑에서 끝났음을 알 수 없는 이유입니다.
작동 방식
결제 시크릿은 지불인이 아니라 수취인 지갑이 발행하며, 결제가 마지막 홉에 도달할 때까지 어니언 안에 봉인된 채로 남습니다.
BOLT 11은 이것을 태그 필드 유형 16으로 정의하고, 문자 s와 고정된 data_length 52로 표기합니다. 그 52개의 bech32 문자는 260비트, 즉 32바이트 값에 패딩을 더한 것을 담으며, 청구서 작성자는 이것을 정확히 하나 포함해야 합니다. 읽는 이는 고정 길이 필드의 길이가 틀리면 그 결제를 실패 처리해야 하고, 유효한 s 필드가 없을 때도 다시 실패 처리해야 합니다.
지불인은 이 값을 마지막 노드를 위한 어니언 페이로드에 복사하며, BOLT 4는 이것을 TLV 레코드 유형 8, payment_data라고 부릅니다. 여기에는 32바이트 시크릿과 total_msat 수치가 들어 있습니다. 그 계층은 목적지만 벗길 수 있으므로 중간 홉은 그것을 결코 보지 못하며, 모든 홉이 HTLC를 걸어 두는 결제 해시와는 다릅니다.
종단의 검사는 의도적으로 정보를 주지 않습니다. 해당 결제 해시에 대해 기대되는 값과 일치하지 않는 시크릿, 또는 필수인데 빠진 시크릿은 incorrect_or_unknown_payment_details, 즉 PERM|15 오류로 HTLC를 실패시키며, 알 수 없는 결제 해시가 받는 것과 같은 응답입니다. BOLT 4는 이 통합을 설명합니다. 이전의 두 짝인 PERM|16 incorrect_payment_amount와 17 final_expiry_too_soon은 전달 노드가 같은 해시로 훨씬 낮은 금액의 결제를 다시 보내고 그 응답을 읽어 목적지를 찾았음을 확인할 수 있게 했습니다.
지원 여부는 더 이상 협상되지 않습니다. BOLT 9는 기능 비트 14와 15, payment_secret을 ASSUMED로 나열하며, 비트 16과 17, basic_mpp는 이에 의존합니다.
확인할 수 있는 곳
현대적인 lnbc 문자열에서 결제 시크릿은 sp5로 시작해 bech32 52문자 동안 이어지는 부분으로 알아볼 수 있습니다.
BOLT 11 테스트 벡터에서 그 부분은 zyg3을 열두 번 반복한 뒤 zygs가 오는 형태이며, 32바이트가 모두 0x11인 시크릿을 인코딩합니다. 결제 시크릿을 직접 입력하는 일은 없습니다. 오직 청구서 작성자와 지불하는 지갑만이 그 값을 다룹니다.
이 필드가 제 역할을 하는 곳은 다중 분할 결제입니다. 단일 경로에 유동성이 충분치 않고 청구서가 basic_mpp를 제공할 때, BOLT 4는 지갑이 하나의 결제 해시를 공유하는 여러 HTLC에 금액을 나누도록 허용하며, 모든 부분은 시크릿을 담아야 하고 total_msat에 합의해야 합니다. 수취인은 총액이 도착할 때까지 아무것도 정산하지 않으며, 첫 HTLC 이후 최소 60초를 기다린 뒤에야 mpp_timeout으로 그 집합을 실패 처리해야 합니다. 따라서 Strike처럼 라이트닝을 우선하는 앱에서 더 큰 라이트닝 출금이 1분 동안 대기하다가 되돌아오는 것은 자금을 잃은 것이 아니라 불완전한 HTLC 집합이 만료된 것일 수 있습니다. Phoenix가 휴대폰에서 실제 라이트닝 노드를 실행해 그 부분들을 모으든, 귀하가 관리하지 않는 서버에서 수탁업자가 모으든, 시크릿은 그것들을 하나의 결제로 표시합니다.
결제 시크릿 vs 결제 해시
결제 해시와 결제 시크릿은 모두 하나의 BOLT 11 청구서 안에 있는 256비트 필드이며, 차이는 누가 그것을 볼 수 있느냐입니다. 모든 홉은 해시를 알게 되는데, 각자 전달하는 HTLC를 그것에 걸어 두기 때문이며, 반면 최종 노드 외에는 아무도 시크릿을 알지 못하는데, 그것은 가장 안쪽 어니언 계층을 타고 이동합니다. 해시는 결제가 정산되었는지에 답하고, 그것을 여는 프리이미지가 영수증입니다. 시크릿은 지불인이 귀하가 작성한 청구서를 근거로 움직이는지에 답하며, 해시는 경로상의 모든 이에게 보이므로 그렇게 할 수 없습니다. 인코딩에서는 둘이 쌍둥이처럼 보입니다. 태그 p와 태그 s, 둘 다 52문자이고, 둘 다 다른 길이에서는 거부됩니다.