상세 컨텐츠

본문 제목

[Mastering the Lightning Network] 9 - 채널 운영과 결제 전달(Channel Operation and Payment Forwarding)

IT.About/라이트닝 네트워크

by zNine 2022. 4. 12. 17:57

본문

728x90
반응형

  • 장에서는 지불 채널과 HTLC(해시 시간 잠금 계약) 다룬다.
    • HTLC 지불 채널에서 어떻게 관리되는지,
    • HTLC 채널 상태에 어떻게 커밋되는지,
    • 채널 잔액(balace) 업데이트를 위한 정산이 어떻게 되는지
  • 로컬(단일 채널) vs 라우팅(다중 채널)
    • 프로토콜 디자인을 유지하기 위해 단일 , 멀티 상관없이 모든 형태의 라이트닝 결제는 HTLC 사용함
  • .HTLC 지불 전달 약정 업데이트 (Forwarding Payments and Updating Commitments with HTLCs)
    • Alice Bob Chan 통해 HTLC Dina에게 지불
    • HTLC Commitment Message 흐름
      • 채널 파트너간 HTLC 확약을 위한 메시 흐름
      •  
    • HTLC 결제 전달 (Forwarding Payments with HTLCs)
      • Alice Bob 각각 70,000sat 잔액이 있는 지불 채널로 시작
      •  거래전 CT
      • HTLC 추가
        • A B Dina에게 50,200sat 전달에 대한 HTLC 수락하기를 원한다고 , A 지불 해시 금액을 포함한 HTLC 정보를 B에게 보내야함.
        • HTLC 추가하기 위해 A update_add_htlc 메세지를 B에게 전송하여 위에서 보았던 flow 진행하게 된다.
        • updateadd_HTLC 메시지
          • [channel_id:channel_id]
            [u64:id]
            [u64:amount_msat]
            [sha256:payment_hash]
            [u32:cltv_expiry]
            [1366*byte:onion_routing_packet]
            • channel_id
              • HTLC 추가하려는 채널
            • id
              • HTLC 카운터, 0부터 시작해서 증가됨
            • amount_msat
              • 밀리사토시, ( 예에서는 50,200,000 밀리사토시(=50,200 사토시)
            • payment_hash
              • D 인보이스에서 제공된 결제 해시, H=RIPED160(SHA-256( R ))
            • cltv_expiry
              • HTLC 만료 시간
            • onion_routing_packet
              • B에게 HTLC 전달할 위치를 알려주는 onion 암호화 경로.
      • 약정 거래의 HTLC (HTLC in Commitments Transactions)
        • # Revocation (1)
          OP_DUP OP_HASH160 <RIPEMD160(SHA256(revocationpubkey))> OP_EQUAL
          OP_IF
              OP_CHECKSIG
          OP_ELSE
              <remote_HTLCpubkey> OP_SWAP OP_SIZE 32 OP_EQUAL
              OP_IF
                  # Redemption (2)
                  OP_HASH160 <RIPEMD160(payment_hash)> OP_EQUALVERIFY
                  2 OP_SWAP <local_HTLCpubkey> 2 OP_CHECKMULTISIG
              OP_ELSE
                  # Refund (3)
                  OP_DROP <cltv_expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP
                  OP_CHECKSIG
              OP_ENDIF
          OP_ENDIF
        • OP_IF 문의 번째 절은 A 해지 키를 사용해 금액을 요구할 있음 ( CT 취소될 경우  A 전체 채널 잔액을 가져오는 패널티 TX에서 output 요구하는 취소키를 갖게 )
        • 번째, preimage(payment secret, 여기서는 D secret) 공개될 경우, 이것으로 금액을 요구할 있고, 이는 D에게 지불을 전달했음을 의미.
        • 번째, HTLC 만료되는 경우, A에게 환불한다
      • HTLC Output 대한 새로운 약정 (New Commitment with HTLC Output)
        • B A에게 받은 메세지의 내용으로 Commitment#3 구성.
          • HTLC output 50,200sat, 그리고 output A 잔액에서 나오므로 A 잔액은 19,800sat .
      • Alice 커밋
        • update_add_htlc 보낸 직후 채널의 상태를 커밋하여 B HTLC 안전하게 추가할 있게 한다.
        • A 약정과 그안의 HTLC 대한 서명과 함께 commit_signed 메세지를 B에게 보낸다.
          • [channel_id:channel_id]
            [signature:signature]
            [u16:num_htlcs]
            [num_htlcs*signature:htlc_signature]
            • num_htlcs
              • 미결 상태인 HTLC , 여기서는 A 제공한 1개의 HTLC.
            • htlc_signature
              • HTLC output들을 위한 서명이 담겨있는 서명의 배열.
        • 이제 B 새로운 서명된 CT 가지게 되었음
        • Bob 약정을 인정하고, 기존 약정을 취소
          • revoke_and_ack 보냄
            • [channel_id:channel_id]
              [32*byte:per_commitment_secret]
              [point:next_per_commitment_point]
          • A B 이전 약정을 사용할 , 패널티 TX 만들기 위한 해지 키를 구성할 있도록하는 per_commitment_secret 보냄
          • B A 이전 약정을 취소했는지 확인해야 .
          • A 역시 HTLC 포함하는 CT 구성했지만 아직 B 서명이 없음.
        • Bot 커밋
          • B A에게 서명을 제공(commit_signed)하고, 채널 상태는 A 서명된 약정이 있음이 표시
          • A 이전 약정을 취소하고, revoke_and_ack B에게 보냄. 채널 상태는 A 이전 커밋을 취소
    • 다중 HTLC (Multiple HTLCs)
      • 어느 시점에서든 A B 단일 채널에 수십, 수백 개의 HTLC 보유할 있으며, HTLC 추가output으로 제공되고, CT 추가 .
      • 따라서 약정 TX에는 항상 채널 파트너 잔액에 대한 개의 output HTLC 하나씩 ouput 있음.
      • 여러 HTLC 커밋이 동시에 전송될 있도록 HTLC 서명을 위한 배열이 있음(commit_signed 메세지)
      • 채널에서 허용되는 최대 HTLC 수는 최대 비트코인 TX 크기에 의해 483개로 설정.
        • 최대값을 보류중인 HTLC에만 해당(충족되거나, 타임아웃/오류로 인한 실패는 CT에서 제거 )
    • HTLC 이행 (HTLC Fulfillment)
      • 이제 B A 추가 HTLC output 있는 약정 TX 갖고 있으며, 채널 업데이트를 위한 주요 과정을 완료하였음.
      • 아직은 A B에게 50,200sat 보냈다는 것이 반영하지 않았음
      • HTLC 전파 (HTLC Propagation)
        • B A 했던 과정과 동일한 방식으로 50,100sat 대해 Chan 함께 HTLC 설정하고, CT 구성.
        • C D 동일한 작업을 수행. (50,000sat 제공, 커밋, 취소)
        • D HTLC 최종 수신자(payment secret 아는) 이므로, C 함께 HTLC 즉시 수행할 있음!
      • Dina Chan 함께 HTLC 수행
        • D update_fulfill_htlc 메세지를 C에게 전송하여 HTLC 정산할 있다.
        • update_fulfill_htlc
          • [channel_id:channel_id]
            [u64:id]
            [32*byte:payment_preimage]
            • channle_id
              • HTLC 커밋된 채널 ID
            • id
              • HTLC ID (0 ~ N)
            • payment_preimage
              • 결제가 이루어지고 HTLC 상환했음을 증명하는 비밀. (D A 대한 인보이스의 지불 해시를 생성하기 위해 해시된 R)
        • C 메세지를 받은 즉시 R 지불 해시가 생성되는지 확인한다.
          • H = RIPEMD160(SHA-256( R ))
        • H HTLC 지불 해시와 일치하면, 이것으로 지불 채널 체인을 따라 Alice에게 전달되어 D 대한 지불의 일부였던 모든 HTLC 해결 .
      • Bob Alice 함께 HTLC 완료
        • B A에게 update_fulfill_htlc 보낼때 D 보낸 payment_preimage 포함.
        • A B에게서 받은 payment_preimage 확인하고, D 돈을 받았음을 확인.
        • 이제 A B CT에서 HTLC 제거하고, 채널 잔액을 업데이트할 있음.
        • HTLC 제거되고, 잔액이 업데이트된 Commitment#4 생성.
        • 다음으로 A commit_signed 전송하여 약정에 서명하고, B revoke_and_ack 보내 이전 약정을 취소.
        • 마지막으로 B commit_signed 메세지로 A 약정에 서명하고, Arevoke_and_ack 이전 약정을 취소
    • 에러 or 만료로 인한 HTLC 제거
      • HTLC 이행할 없는 경우 동일한 약정 취소 프로세스를 사용해 채널 약정에서 제거할 있음.
      • update_fulfill_htlc 대신 B update_fail_htlc 또는 update_fail_malformed_htlc 보냄.
      • update_fail_htlc 메시지
        • [channel_id:channel_id]
          [u64:id]
          [u16:len]
          [len*byte:reason]
      • 위의 프로세스와 거의 동일한 방식으로 진행되며, 파트너는 HTLC 제거하고, CT 생성하고, 서명, 취소 단계를 거침.
      • 잔액은 HTLC 없는 상태로 돌아가 A에게 HTLC 값을 환불함.
    • 현지 결제하기 (A B에게 커피값을 지불 )
      • A B 상점 페이지에서 커피를 주문
      • B's shop 지불 해시가 포함된 송장을 display
      • A 해당 지불 해시에서 HTLC 구성
      • A update_add_htlc 사용해 B에게 HTLC 제공
      • A B 약정 CT HTLC 추가하여 약정 취소를 교환
      • B payment preimage 함께 update_fulfill_htlc A에게 보냄
      • A B HTLC 제거하고, 채널 잔액을 업데이트하는 약정 취소를 교환
728x90
반응형

관련글 더보기