라이트닝 네트워크 이해 --- 비트코인을 위한 양방향 결제 채널 구축

원래 제목: "대중 과학 | 라이트닝 네트워크 이해, 1부: 비트코인을 위한 양방향 결제 채널 구축", 저자 AARON VAN WIRDUM
라이트닝 네트워크는 아마도 비트코인 블록체인에서 가장 기대되는 혁신일 것입니다(편집자 주: 원래 2016년에 작성됨). 이 결제 방식은 1년여 전에 Joseph Poon과 Tadge Dryja가 처음 제안했으며, 사용자가 오프체인에서 무제한 거래를 보낼 수 있도록 지원한다고 주장하며 비용이 매우 낮고 비트코인 네트워크에서 제공하는 보안도 빌릴 수 있습니다.
Poon과 Dryja의 Lightning, Blockstream, Blockchain 등 최소 3개 회사가 이 기술 구현을 개발하고 있습니다. 그러나 "소액 결제의 미래"가 어떻게 비트코인의 잠재력을 발휘할 수 있는지 이해하는 좁은 범위의 기술자 외에는 거의 없습니다.
이 일련의 기사에서 Bitcoin Magazine은 Lightning Network의 가장 기본적인 구성 요소를 열거하고 이러한 요소를 결합하여 곧 출시될 프로토콜인 Lightning Network를 형성하는 방법을 보여줍니다.
이 시리즈의 첫 번째 기사에서는 필요한 모듈을 나열하고 라이트닝 네트워크의 첫 번째 전제인 양방향 지불 채널을 이해하는 데 사용할 수 있는 개념인 "스마트 계약"을 생성하기 위해 결합하는 방법을 보여줍니다.
(힌트: Bitcoin에 매우 익숙한 독자는 이 모듈에 대한 소개를 건너뛸 수 있습니다.)
모듈 #1: 확인되지 않은 트랜잭션
비트코인 프로토콜의 핵심에는 소위 "트랜잭션"이라는 개념이 있습니다. 일반적으로 트랜잭션은 항상 이전의 다른 트랜잭션과 연결되며 향후 트랜잭션에서 사용될 수 있습니다. 각 트랜잭션은 비트코인이 전송되는 주소를 가리키는 입력과 비트코인을 받는 주소를 가리키는 출력으로 구성됩니다. 또한 비트코인을 보내기 위해서는 입력이 입력 주소의 "소유권"을 가지고 있음을 증명하기 위해 디지털 서명을 제공하는 등의 특정 조건을 충족해야 합니다. 동시에 출력은 이러한 비트코인이 미래에 사용될 새로운 조건을 설정하며 후속 거래가 발행될 때 충족되어야 합니다.
(번역자 주: 비트코인을 액면가가 있는 수표로 생각하십시오. 사용하면 수표 자체가 자금의 출처를 제공하고 사용 후 새 수표가 형성됩니다. 따라서 각 수표에 대해 이 수표를 형성하는 거래가 있습니다. 즉, 이전 트랜잭션이며 이러한 수표를 다시 사용하면 해당 트랜잭션을 후속 트랜잭션이라고 할 수 있습니다.)
이미지 설명

- (번역자 주: 그림과 같이 비트코인은 수표처럼 분할될 수 있으며, 그 순환은 명확한 사슬을 형성할 것입니다.) -
모듈 #2: 이중 지출 보호
라이트닝 네트워크에서 요구하는 두 번째 모듈은 아마 많은 설명이 필요하지 않을 것입니다. 아마도 비트코인 프로토콜 자체의 존재 이유인 다중 지불에 대한 보호 장치이기 때문입니다. 두 트랜잭션(또는 입력)이 동일한 출력에 의존하는 경우 전체 네트워크에서 그 중 하나만 확인됩니다.
참고: 확인되지 않은 트랜잭션 사이에 충돌이 있어도 결국 하나만 확인됩니다.

모듈 #3: 멀티시그
번개 네트워크의 세 번째 모듈인 다중 서명 주소도 잘 알려져 있습니다. (더 광범위하게: P2SH 주소(스크립트 해시 주소).)
이름에서 알 수 있듯이 다중 서명 주소는 비트코인을 "잠금 해제"하고 사용하기 위해 여러 개인 키가 필요한 주소입니다. 다중 서명 주소의 조건은 다양하게 설정할 수 있습니다. 예를 들어, 3개의 개인 키 중 2개가 비트코인 전송에 참여하거나 기타 수량 요구 사항(예: 2/5, 3/4 등)이 필요할 수 있습니다.
라이트닝 네트워크는 일반적으로 2-2 다중 서명 요구 사항을 사용합니다. 이러한 주소에서 비트코인을 전송하려면 이 두 개인 키와 관련된 두 개의 서명을 제공해야 하며 그 중 하나는 작동하지 않습니다.

모듈 #4: 타임락
네 번째 모듈은 시간 잠금입니다. 타임록 기능은 출력에 잠금 조건을 설정하여 이러한 비트코인이 미래의 특정 시간 이후에만 사용될 수 있도록(즉, 트랜잭션에 대한 입력으로 사용) 합니다.
시간 잠금에는 두 가지 유형이 있습니다: 1) CheckLockTimeVerify(CLTV)라는 절대 시간 잠금, 2) 상대 시간 잠금, CheckSequenceVerify(CSV). CLTV는 미래의 특정 날짜(특정 시간 및 날짜 또는 특정 블록 높이)까지 비트코인을 잠그는 반면 CSV는 상대적인 시간만 사용합니다. CVS 출력이 체인에 업로드되면 출력이 사용되기 전에 특정 수의 블록을 기다려야 합니다.

모듈 #5: 해시 및 비밀
다섯 번째이자 마지막 모듈인 암호화는 비트코인 자체의 가장 기본적인 모듈이기도 합니다. 그러나 라이트닝 네트워크에서는 사용법이 다릅니다.
간단히 말해서 "비밀 값"은 컴퓨터가 셀 수 없이 많은 폭력적인 계산을 수행하더라도 거의 추측할 수 없는 매우 길고 고유한 숫자 문자열입니다. 그리고 특별한 계산을 통해 이 비밀 값을 "해시 값"이라고 하는 다른 숫자로 "분할"할 수 있습니다. 여기에서 흥미로운 점이 있습니다. 비밀 값을 아는 사람은 해시 값을 쉽게 계산할 수 있지만 그 반대는 사실이 아닙니다. 비밀 값을 해시 값으로 되돌릴 수는 없습니다.
비트코인 블록체인에서 이 메커니즘은 다시 "비트코인 잠금"에 사용될 수 있습니다(실제로 비트코인 잠금은 비트코인 프로토콜이 작동하는 방식입니다). 예를 들어 출력에 해시 값을 포함하고 해시 값에 해당하는 비밀 값을 포함하는 경우에만 후속 트랜잭션이 출력을 사용하도록 요구할 수 있습니다.

첫 번째 과제: 양방향 결제 채널
라이트닝 네트워크 이전에는 이미 "결제 채널"이라는 개념이 있었습니다. 표준 결제 채널은 목적에 따라 제작되었기 때문에 제한적입니다. 즉, 일방통행 채널입니다. Alice는 Bob 오프체인에 대한 Dobby 지불을 시작할 수 있지만 Bob은 동일한 채널을 사용하여 Alice에게 지불할 수 없습니다.
라이트닝 네트워크의 핵심 기능은 Poon과 Dryja가 제안한 무신뢰 양방향 결제 채널입니다.
열린 채널
양방향 지불 채널을 설정하려면 관련된 양 당사자가 먼저 채널을 열기 위한 거래에 대한 합의에 도달해야 합니다. 이 개시 거래는 각자가 이 채널에 예치할 비트코인의 양을 결정합니다.
Alice가 Bob에게 1btc를 보내고 싶어한다고 가정합니다. 두 사람 모두 앞으로 잦은 교류가 있을 것으로 예상해 양방향 결제 채널을 열기로 했다. (채널에서 1 btc를 전송하는 것은 아마도 너무 많을 것입니다. 모든 채널이 소액 결제에 더 유용할 수 있지만 완전히 가능합니다.)
채널을 열기 위해 Alice와 Bob은 각각 5 btc를 2-2 다중 서명 주소로 보냅니다. 이것이 "채널 개설 트랜잭션"입니다. 이 주소의 돈은 Alice와 Bob이 동일한 트랜잭션에 서명하는 경우에만 사용할 수 있습니다.
또한 Alice와 Bot은 각각 비밀 값(즉, 숫자 문자열)을 생성한 다음 해시를 교환합니다.
이제 Alice는 채널 개설 트랜잭션의 후속 트랜잭션을 생성하며 이것이 "커밋 트랜잭션"입니다. 이 커밋 트랜잭션에서 Alice는 4 btc를 자신에게 보내고 6 btc를 두 번째 다중 서명 주소로 보냅니다. 체인에서 Bob은 그 안에 돈을 쓸 수 있습니다(이것은 상대적인 시간 잠금입니다) Alice는 또한 Bob이 그녀에게 준 선물에 해당하는 해시 값을 가지고 있다면 이 주소를 단독으로 열 수 있습니다. (물론 Alice는 이 비밀 값에 대해 완전히 무지합니다. 그녀가 가진 모든 것은 Bob이 그녀에게 준 해시 값뿐이므로 표면상으로만 가능합니다.) (역자 주: 즉, 이 두 번째 다중 서명 주소는 시간 잠금과 해시 잠금이 모두 있습니다. .)
Alice는 커밋 트랜잭션에 서명합니다. 그러나 그녀는 거래를 방송하지 않을 것입니다! 대신 그녀는 트랜잭션을 Bob에게 보낼 것입니다.
동시에 Bob은 정확히 대칭 작업도 수행합니다. 그는 또한 6btc를 자신에게 보내고 4btc를 새로운 다중 서명 주소로 보내는 커밋 트랜잭션을 생성했습니다. Alice는 1000 블록을 기다린 후 단독으로 주소를 잠금 해제하거나 Bob은 Alice의 비밀 값으로 주소를 잠금 해제할 수 있습니다.
Bob은 트랜잭션에 서명하고 Alice에게 보냅니다.
이러한 커밋 트랜잭션과 해시 값을 교환한 후 함께 서명하고 채널 개설 트랜잭션을 브로드캐스트하여 체인에 업로드할 수 있습니다. 이제 양방향 결제 채널이 열립니다.
채널을 연 후 Alice와 Bob은 로컬에서 받은 부분적으로 유효한 커밋 트랜잭션에 서명하고 브로드캐스트할 수 있습니다. Alice가 브로드캐스트하면(Bob이 그녀에게 약정 거래를 보냄) Bob은 즉시 6 btc를 받습니다. Bod가 브로드캐스트하면 Alice는 즉시 4 btc를 받습니다. 그러나 트랜잭션을 서명하고 브로드캐스트하는 사람은 후속 다중 서명 주소의 잠금을 해제하고 나머지 비트코인을 가져가기 위해 1000 블록을 기다려야 합니다.

그러나 이것이 지불 채널의 핵심 트릭입니다. 그들이 받는 약정 거래에 서명하고 공개하지 않는 것입니다.
(번역자 주: 먼저 약정 거래와 상호 작용한 다음 채널 개설 거래를 방송하는 목적은 상대방의 사기를 피하기 위한 것입니다. 약정 거래를 얻은 후에는 방송할 필요가 없으며 보안 보증도 얻을 수 있습니다. )
업데이트 채널
나중에 Bob은 1btc를 Alice에게 되돌려 보내고 이 채널의 상태를 업데이트하여 5:5 상태로 되돌리려고 합니다. 이를 달성하기 위해 Alice와 Bob은 두 가지 작업을 수행해야 합니다.
우선 양 당사자는 위에서 설명한 과정을 다시 거쳐야 합니다(체인에 기록되었기 때문에 트랜잭션을 여는 부분은 제외). 이번에는 Alice와 Bob이 서로에게 5 btc를 할당하고 둘 다 해당 다중 서명 주소에 5 btc를 할당합니다. 이러한 후속 다중 서명 주소에 대한 조건은 모두 새 비밀 값을 생성해야 한다는 점을 제외하면 비슷합니다. Alice와 Bob 모두 새 해시 값을 제공합니다. 둘 다 자신의 새로운 커밋 거래에 서명하고 서로에게 보냅니다.
둘째, Alice와 Bob은 서로에게 첫 번째 비밀 값(첫 번째 커밋 트랜잭션에서 사용된 값)을 전달합니다.
이 시점에서 Alice와 Bob은 모두 최신 커밋 트랜잭션에 서명하고 브로드캐스트할 수 있습니다. 그들의 상대는 즉시 5 btc를 얻을 것이며, 자신을 방송하는 동안 1000 블록을 기다려야 합니다. 마찬가지로 채널의 상태가 업데이트됩니다.
그러나 Bob이 이전 커밋된 트랜잭션을 브로드캐스팅하지 못하도록 막는 것은 무엇입니까? 그 커밋 거래는 그에게 5 btc보다 많은 6 btc를 할당할 것입니다...
물론 Bob을 멈추게 하는 것은 그가 이미 Alice에게 준 그의 첫 번째 비밀 값입니다.
왜냐하면 Alice는 이미 Bob의 첫 번째 비밀 값을 알고 있기 때문입니다. Bob이 서명하고(Alice가 그에게 준 것) 오래된 커밋 트랜잭션을 방송한다면 그는 즉시 4 btc를 Alice에게 보낼 것입니다... 그리고 그는 그것을 받기 위해 1000 블록을 기다려야 하지만 Alice는 이미 그가 비밀을 알고 있었습니다. 그만한 가치가 있으므로 그녀는 이 시간을 사용하여 나머지 6 btc를 선제적으로 인출할 수 있습니다!
그리고 Bob도 Alice의 비밀 값을 가지고 있기 때문에 Bob도 마찬가지입니다! Alice가 이전 커밋 트랜잭션에 서명하고 브로드캐스트하려는 경우 Bob은 채널에 넣은 모든 btc를 훔칠 수 있습니다!
이는 Alice와 Bob 모두 트릭을 사용하지 않고 가장 최근 상태만 브로드캐스트하도록 인센티브를 재구성한다는 것을 의미합니다.

자, 쌍방향 결제 채널을 확보한 후 결제 네트워크로 확장해야 합니다. 이것이 두 번째 기사의 주제입니다.
Rusty Russell과 Joseph Poon의 헌신적인 피드백에 감사드립니다.


