비트코인 라이트닝 네트워크(Lightning Network) (1/2) 강의 내용정리


강의 링크 https://www.youtube.com/watch?v=4yUd8pL8JMI





라이트닝 네트워크란?


- 2015년 Joseph Poon과 Thaddeus Dryja에 의해 소개

- 비트코인의 확장성(Scalability) 문제를 해결하기 위한 솔루션

//이더리움의 샤딩, 코스모스 및 폴카닷 텐더민트등의 인터 블록체인, IOTA나 EOS같이 블록체인을 병렬화 시키거나 1차원적인 구조에서 2차원적인 구조로 만드는 솔루션 등등 여러 솔루션등이 있다. 비트코인은 초당 3~5개의 Transaction만 처리가 가능하기 때문에 글로벌하게 사용하기 어렵다는 문제가 있다.


- 블록체인 외부(Off blockchain)에서 결제 채널의 네트워크를 통해 낮은 수수료로 다량의 소액거래(micropayment)를 처리할 수 있도록 하는 시스템

// On은 블록체인 자체의 용량을 증가시키는 방법으로 하는것. Off blockchain으로 분류되는 이유는 블록체인 위에 결제채널을 만들어서 블록체인 외부에서 해결하는 방법이기 때문이다. 이론적으로는 Lightening Network는 약 초당 10억건 이상의 거래를 처리할 수 있다고 한다.


- 거래 가변성(Transaction Melleablilty)문제가 해결되어야 구현가능. 세그윗(SegWit) 구현 필요

// 현재 비트코인 네트워크에서는 구현이 안된다. 그 이유가 거래 가변성(혹은 거래 ID의 가변성, 동일한 내역의 거래가 다른 여러 ID를 가질 수 있다. 나는 한명인데 여러 ID를 가질 수 있다는 문제, 필수 조건, 이 문제를 해결하는 것이 SegWit이다. )




White Paper을 읽을 수 있다. 59페이지 내용이기 때문에 나중에 시간이 있으면 읽을 예정이다.


// 라이트코인같은 경우에는 비트코인과 유사한 구조에서 SegWit을 구현하여 Lightening Network를 구현하였다. 


참고자료1. Lightening Network에 대한 Joseph Poon 해외 강의

https://www.youtube.com/watch?v=8zVzw912wPo


참고자료2.

Raiden Network라는 이더리움의 라이트닝 네트워크에 대한 자료


참고자료3.

Plasma: Scalable Autonomous Smart Contracts (이더리움에 스마트 컨트랙트로 또 다른 블록체인을 생성해서 블록체인에 Child 블록체인을 만든다?)



"Bitcoin Doesn't Scale"


- 1MB blocks: // 현재 비트코인 블록의 사이즈

-- 7transaction per second @ 250 bytes/tx

-- ~220 million transaction per year  // 1년에 처리되는 트랜잭션의 양

-- Not enough for a city, let alone the world // 하나의 도시에서 사용되기에도 너무 부족하다


- 1 Billion transaction per day:  // 하루 10억건의 거래가 발생한다는 가정이하

-- 1.6 GB blocks(1655 MB)  // 블록마다 1.6GB의 용량이 필요

-- 87 Terabytes/year (87029089 MB)  // 1년에 약 87 TB의 용량

-- Maybe enough for one large metro area?

-- Centralization(mining!)  // 이렇게 되면 발생하는 문제가 채굴의 중앙화의 문제가 발생한다.


● 7 billion people doing 2 blockchain transactions per day // 만약 전세계 70억명이 매일 2건씩의 Blockchain 거래를 진행한다면

○ 24 GB blocks //블록 사이즈

○ 3.5 TB/day // 하루에 증가되는 용량

○ 1.27 PB/year // 연간 증가되는 용량


● Bigger blocks = Centralization // 블록이 커지면 중앙화가 발생할 것이다.

○ Very few full nodes // full node의 수가 줄어들고

○ Very few miners  // 채굴자도 줄어들고

○ De facto inability to validate blockchain  // 이러할 경우 누구나 검증할 수는 있지만 누구도 검증하려고 하지 않을 것이다.



결제 채널(payment channel)의 형성 기본 절차


output script: 2<Alice_pubkey><Bob_pubkey> 2 CHECKMULTISIG



Alice와 Bob이 결제 채널을 형성하고자 할 때의 기본 절차는 다음과 같다.


1. Funding Tx(F) 생성 //Alice와 Bob이 결제채널을 형성한다고 한다면 먼저 Funding Tx를 생성한다. 얼마를 넣을지 결정, 


output script:  2 <Alice_pubkey> <Bob_pubkey> 2 CHECKMULTISIG

//이 출력값으로 Funding Tx를 생성한다. 이 의미는 Alice와 Bob이 넣은 돈은 Alice와 Bob 둘의 서명을 모두 넣어야 사용이 가능하다.


2. Commitment Transaction 생성

// Funding Tx를 생성해놓고 서명하기 전에, Alice와 Bob이 0.5 씩 넣은것을 refund하는 Transaction을 생성한다.


3. Commitment Transaction 서명

// 이 Commitment Tx를 먼저 서명한다.


4. Commitment Transaction 서명교환

// 서명을 교환한다. 이러면 Commitment Tx이 유효한 Tx가 된다.


5. Funding Transaction 서명


6. Funding Transaction 서명교환


7. Funding Transaction Broadcast


- Commitment Transaction은 블록체인에 공개되지 않으며 거래 당사자간의 현재 잔고(current Balance)를 나타냄


- Alice와 Bob은 자신이 원할 때에 Commitment Transaction을 블록체인 상에 공개함으로써 자신의 잔고를 환불받고 결제채널을 닫을 수 있다.



- Alice가 Bob에게 0.1 BTC 송금 (Alice: 0.4 BTC, Bob: 0.6 BTC)

// 엘리스와 Bob이 Commitment Tx를 생성한다.


- 업데이트된 장부에 따라 새로운 Commitment Transaction을 생성한다.


문제점: Alice의 경우 이전 Commitment Transaction을 블록체인 상에 공개하는 것이 유리하다.


1. 두 거래중 어떠한 것이 유효한 것인지 구분하고


2. 이전의 거래를 무효화 해야 한다.



핵심: 어떻게 이전 Commitment Transaction을 무효화 시킬 것인가?


- 비트코인의 Timelock 기능을 사용하여 Commitment Transaction의 출력값을 취소할 수 있는 거래(revocable transaction)로 만들고


- 특정 당사자가 이전 Commitment Transaction을 블록체인에 공개하는 경우 해당 당사자를 식별하고


- 취소할 수 있는 거래를 취소하고 Breach Remedy Transaction을 통해 계약을 어기는 거래 참가자의 예치금을 몰수하는 방식으로 벌금을 부과




누가 잘못했는가? (Ascribing Blame)



- 항상 Commitment Tx을 생성할 때 Commitment 1a, Commitment 1b이렇게 똑같은 Commitment를 2개씩 한쌍으로 만든다.

- 한쪽에는 Bob만 서명하고 한쪽에는 Alice만 서명하고 상대방에게 넘긴다.

- 만약 Commitment 1a가 공개된 경우 이미 Bob의 서명이 기록되었기 때문에 Alice만이 서명하여 Broadcast할 수 있기 때문에 Alice가 공개한 Commitment Tx인지 알 수 있는것이다.

- 즉, 누가 어겼는지 확인하는 방법은 이렇게 반만 서명된 Transaction을 나눠가졌기 때문에 어떤 Transaction인지 보고 확인할 수 있다.


2. 취소할 수 있는 거래(Revocable Transaction)


- 만약에 Alice가 이전 거래(본인에게 0.5 BTC를 돌려주는 거래)를 등록하였을 경우 이 거래를 취소할 수 있어야 한다.


- 보라색은 Bob이 서명을 해서 Alice만이 등록할 수 있는 Transaction들이다. 1a의 경우 Locktime이 걸려있다 보면 1000 confirmations라고 되어있다.

- Alice가 C1a를 공개하면 0.5 BTC를 받는다. 받기는 받는데 이게 1000 block confrimation이 난 후에 받는다.

- 반면에 Bob같은 경우에는 바로 0.5 BTC를 받는다. 



- Alice가 Bob에게 0.1 BTC 송금 (Alice: 0.4 BTC, Bob: 0.6 BTC)

- 새로운 거래가 일어날 때마다 Commitment Tx 한쌍을 생성



- Funding(F) 는 Alice와 Bob이 0.5 BTC 씩 결제 채널에 예치금을 넣어놓는 형태로 그 안에서 자유롭게 Fund를 왔다갔다 할 수 있게하는 약속이다.

- C2 까지 양쪽이 모두 동의를 하여 Alice가 Bob에게 0.1 BTC를 줘야하는데 Alice가 C1a를 Broadcast한 경우를 가정한다.

- 이 경우 Bob에게는 바로 0.5 BTC가 전송되고 아래의 빨간 트랜잭션 RD1a가 발행되어 Alice는 1000 Confirmation 이후에 이 0.5 BTC를 가져갈 수 있다.

- 그 전에 Breach Remedy(벌금을 부과하는 Tx)를 Alice와 Bob모두 합의한다. BR1a는 "만약에 Alice가 C1a를 발행한다면 Alice의 0.5 BTC를 모두 Bob에게 몰수 한다" 라는 내용이다.

- 이 BR1a와 BR1b는 C2a,b가 생성되기 바로 이전에 먼저 서명을 하고 C2를 발행하는 것이다.

- 때문에 C2a,b가 나온 다음에 C1a가 Broadcast가 되면 Alice는 모든 예치금을 Bob에게 모두 잃는것이 된다.

- 이러한 Commitment Tx는 블록체인에 기록하지 않고 계속 진행되기 때문에 수수료 없이 계속 소액결제를 처리할 수 있는 것이다.



거래의 청산(Settlement)


- Commitment Tx는 실제로 합의를 하기위한 도구이고 실제로 모든 거래가 끝나고 청산을 하는 경우에는 Locktime과 같은 복잡한 내용 없이 Funding Tx와 같이 바로 모두가 서명하여 작성하여 청산한다.




요약


- 라이트닝 네트워크는 일련의 연기된(deffered) 비트코인 거래와 벌금 부과를 통해 블록체인 외부에서 거래 당사자들간의 거래를 이행되도록 한다.

- 블록체인은 법원(Court)의 역할을 하는데 모든 계약이 법원에 의해 강제되는 것은 아니지만 분쟁시 법원에 의해 강제될 수 있기 때문에 실제 대부분의 계약은 아무 문제없이 이행되는 것과 같은 원리이다.

- 결제 채널은 거래 당사자가 폐쇄하기로 결정하기 전까지 영구적으로(in perpetuity) 사용될 수 있으며 분쟁이 있는 경우 언제든지 비트코인 블록체인 상에서 그 분쟁을 해결할 수 있다.




Further Study


- 서로 채널을 형성하지 않은 사람들끼리도 안전하게 거래 가능(HTLC: Hashed Timelock Contract)

- 결제 채널들의 네트워크 형성, 네트워크 수수료, 예치금, 효율성, 투명성 vs 익명성의 문제

- 응용 및 확장 : Raiden, State Channel, Plasma. Sharding과 결합되는 경우





+ Recent posts