비트코인 라이트닝 네트워크

비트코인 트랜잭션은 비싸고, 느리고, 전기를 많이 쓴다. 그래서 비트코인 트랜잭션을 싸고, 빠르고, 전기를 덜 쓰게 하는 라이트닝 네트워크가 나왔다. 하지만 라이트닝 네트워크는 보낼 수 있는 금액과 받을 수 있는 금액의 “유동성(liquidity)” 제한 때문에 사용하기 어렵다. 그래서 거래소 간 거래 등의 특수한 경우에 쓰거나, 유동성을 자동으로 관리해주는 서비스를 사용한다.

비트코인 전송은 느리고 비싸지만 다들 개의치 않는다

얼마 전 나는 0.013 BTC를 전송하는데 0.0003 BTC가 들었다. 수수료가 20달러 정도였다. 그리고 트랜잭션이 컨펌되는데 2시간 정도 걸렸다. 너무 비싸고 느렸다. 그런데 대부분의 사람들은 이런 비트코인의 느리고 비싼 전송료 문제에 관심이 없다. 왜 그럴까?

첫번째 이유는, 대부분의 사람들이 비트코인을 거래소에서 사고 팔기 때문이다. 거래소 내의 비트코인 거래는 거래소 내부적으로 처리하기 때문에, 거래소 외부로 비트코인 전송을 할 필요가 없다. 그래서 비트코인 트랜잭션이 발생하지 않는다.

두번째 이유는, 비트코인 전송이 대부분 고액전송이기 때문이다. 비트코인을 소액 전송하던 고액 전송하던, 수수료에 큰 차이가 없다. 1000달러를 전송해도 20달러, 10000달러를 전송해도 20달러가 든다. 그러니까 수수료가 비싸게 느껴지지 않는다.

그리고 비트코인 트랜잭션 수수료는 시가(Market price)다. 수수료를 비싸게 부를수록 빨리 처리된다. 비트코인은 1초당 7개 트랜잭션 정도 처리가 가능한데, 비트코인 마이너들이 보통 수수료가 비싼 것부터 먼저 처리한다. 너무 싸게 부르면 우선순위가 밀려서 아예 처리가 안될 수 있다. 비트코인 수수료 시세는 mempool 등으로 확인할 수 있다.

그래서 세번째 이유로, 사람들이 현실 세계에서 비트코인을 실제로 잘 사용하지 않는다. 비트코인을 그나마 쓰는 경우는 다음과 같다.

  1. 테슬라 차를 비트코인으로 산다
  2. 불법 도박, 불법 포르노, 불법 마약 등을 비트코인으로 산다
  3. 랜섬웨어에 걸린 컴퓨터를 복구하기 위해 비트코인을 범죄자에게 보낸다
  4. 비트코인 거래소를 믿지 못해서 개인 지갑으로 전송한다 (내가 그렇다)

이렇게 특수한 경우가 아니면 비트코인을 사용하지 않으니까, 비트코인 트랜잭션이 필요 없다.

비트코인 트랜잭션을 싸고 빠르고 효율적으로 할 수 없을까?

이렇게 다들 관심이 없지만, 비트코인 트랜잭션이 너무 무거운 건 사실이다. 최초의 디지털 화폐 답게 많은 문제점을 가지고 있다. 그렇다고 이제와서 비트코인 프로토콜을 바꾸기 어렵다. 과반수 이상이 합의해서 프로토콜을 바꾼다면 가능하겠지만, 다들 관심이 없기 때문에 합의에 이르지 못할 것 같다.

비트코인과 달리 이더리움은 이런 합의에 도달할 것 같다. 이더리움의 창시자 비탈릭 부테린은 기존 이더리움을 개선한 이더리움 2.0을 몇 년 째 추진중이다. 이더리움도 비트코인의 문제를 개선해서 나온 알트코인이지만, 그런 새로운 이더리움조차도 쓰다보니 문제가 많아서 이더리움 2.0으로 업그레이드를 하려는 것이다. 이런게 보통 잘 안되는데, 비탈릭 부테린이 워낙 카리스마가 있어서 조금씩 진척되고 있다.

이더리움 2.0도 그렇고, 도지코인도 그렇고, 리플(XRP)도 그렇고, 비트코인 이후에 나온 알트코인들은 비트코인보다 훨씬 싸고 빠르고 효율적이다. 그래서 비트코인이 문제라면 비트코인 대신 알트코인을 쓸 수 있다. 하지만, 만약 비트코인의 프로토콜을 기존대로 유지하면서 비트코인의 트랜잭션을 개선할 수 있다면 어떨까?

이것이 라이트닝 네트워크(Lightning Network)다. 번개같이 빠르다는 뜻이다. 기존 방식대로 할 사람은 기존 방식대로 하고, 라이트닝 네트워크를 쓸 사람들끼리만 신규 방식으로 하는 것이다. 그래서 비트코인 트랜잭션이 두 종류지만, 서로 호환된다. 기존의 비트코인 프로토콜을 1계층(Layer 1)으로 깔고, 그 위에서 2계층(Layer 2)로 동작해서 하위 호환성을 제공한다. 도대체 이게 어떻게 가능한걸까?

라이트닝 네트워크 사용법

라이트닝 네트워크는 “묶음” 트랜잭션 같은 것이다. 라이트닝 네트워크의 트랜잭션 순서는 다음과 같다.

  1. 시작하는 트랜잭션 (기존 비트코인 트랜잭션과 호환)
  2. 중간 트랜잭션들 (라이트닝 네트워크 전용)
  3. 끝내는 트랜잭션 (기존 비트코인 트랜잭션과 호환)

1번 단계에서는 라이트닝 네트워크의 “채널”을 열고, 여기에 내 돈을 집어넣는다. 펀딩 트랜잭션이다. 최소 0.002 BTC(=100달러)는 넣어야 한다. 이게 보증금 같은 거다. 이후의 트랜잭션은 이 금액 안에서만 일어난다.

그래서 2번 단계에서 라이트닝 네트워크로 몇 번이던 트랜잭션을 일으킬 수 있다. 횟수의 제한도 없고, 기간의 제한도 없다. 다만 “용량(Capacity)”이 제한된다. 내가 넣은 금액만큼만 거래할 수 있다.

그리고 3번 단계에서 “채널”을 닫는다. 그러면 지금까지 했던 트랜잭션을 모두 정산해서 비트코인 트랜잭션을 일으킨다. 그래서 기존 비트코인 사용자들에게 2번 단계에서 했던 거래들의 최종 금액이 보인다.

예를 들면 다음과 같다.

  1. 라이트닝 네트워크에 0.5 BTC를 “펀딩”하고 “채널”을 연다
  2. 라이트닝 네트워크 트랜잭션을 마음껏 일으킨다
    1. 내 지갑에서 0.2 BTC를 나이스해쉬 지갑으로 보낸다
    2. 내 지갑으로 0.1 BTC를 나이스해쉬 지갑으로부터 받는다
  3. 그러면 내 지갑의 총 금액은 0.5 – 0.2 + 0.1 = 0.4 BTC 가 될 것이다. 이것을 “채널”을 닫아서 기존 비트코인 사용자들에게 컨펌한다.

중요한 건 2번 단계다. 2번 단계의 트랜잭션은 라이트닝 네트워크 상에서만 일어난다. 이것은 비트코인과는 별개의 네트워크다. 그래서 2번 단계에서 아무리 많은 트랜잭션이 일어나도, 기존 비트코인 상에서는 보이지 않는다. 3번 단계까지 가서 끝내야만 비로소 보인다.

그러면 2번 단계 “채널”은 얼마나 오래 열어둘 수 있을까? 영원히 열어놔도 된다. 다만 그러면 1번 단계에서 “펀딩”한 내 비트코인이 라이트닝 네트워크에 묶인다. “락인(Lock-in)”되는 것이다. 기존 비트코인 사용자들에게는 1번 단계에서 “펀딩”한 비트코인을 100% 쓴 것으로 보인다. 그래서 3번 단계까지 가서 정산해야 묶였던 금액이 풀린다. 내 비트코인이 계속 묶여있어도 상관없다면, “채널”을 닫지 않아도 된다.

라이트닝 네트워크로 돈을 받으려면?

그런데 처음 채널을 열면, 돈을 보낼수만 있고 받을 수 없다. 예를 들어 내 채널의 용량이 0.5 BTC인 경우, 보낼 수 있는 금액이 0.5 BTC, 받을 수 있는 금액이 0 BTC부터 시작한다. 이것을 유동성(liquidity)이라고 한다. (여기서 일부 네트워크 예약금이 깎이지만, 설명을 쉽게 하기 위해 생략한다)

  1. 총 용량 = 보내는 유동성 + 받는 유동성
  2. 받는 유동성은 0부터 시작

유동성은 거래를 해야 증가한다. 내가 0.2 BTC를 보내면, 보내는 유동성이 0.5 – 0.2 = 0.3 BTC로 감소하고, 받는 유동성이 0 + 0.2 = 0.2 BTC로 증가한다. 그리고 0.1 BTC를 받으면, 보내는 유동성이 0.3 + 0.1 = 0.4 BTC로 증가하고, 받는 유동성이 0.2 – 0.1 = 0.1 BTC로 감소한다.

이렇게 보내고 받는 금액이 딱 맞아 떨어져야, 채널을 닫을 때 정산이 가능하다. 음수 금액이 생기면 안된다. 그래서 이런 규칙이 필요하다. 그럼 내가 채널을 열자마자 비트코인을 받고 싶으면 어떡할까?

이런 유동성을 더해주는 유료 서비스를 이용하면 된다. 내가 그쪽으로 라이트닝 네트워크 전송을 하면, 그쪽에서 나에게 그만큼을 비트코인으로 전송한다. 물론 수수료를 제하고 보내준다. 게다가 이것은 비트코인 트랜잭션을 일으키니까 비트코인 수수료도 내야 한다. 이것을 잠수함 교환(Submarine swap)이라고 한다.

반대로, 돈을 받기만 하면 보내는 유동성이 0 BTC까지 떨어질 것이다. 그러면 마찬가지로 잠수환 교환을 역방향(reverse)으로 하면 된다. 그러는데도 비트코인 트랜잭션이 필요하다. 이렇게 보내는 유동성이 부족할수도 있고, 받는 유동성이 부족할수도 있기 때문에, 내가 사용할 패턴을 예측해서 균형을 잘 잡아야 한다.

그럼 도대체 비트코인 트랜잭션을 몇 번 해야 하나? 채널을 여는데 한 번, 유동성이 부족할때마다 한번씩, 채널을 닫을때 한번… 결국 라이트닝 네트워크를 써도 비트코인 트랜잭션이 계속 필요하다. 이걸 덜 하려면 처음부터 채널 용량을 충분히 크게 만들고, 유동성도 미리 충분히 공급해놔야 한다. 결국 이것도 나같이 비트코인을 조금밖에 안 가지고 있는 사람에게는 유용하지 않다.

라이트닝 네트워크 채널 열어놓기

그리고 채널을 유지하는 것도 문제다. 비싼 돈 들여서 채널을 열었으면, 최대한 오래 쓰고 닫아야 이익이다. 그런데 채널을 열어놓으려면 컴퓨터를 끄면 안된다. 라이트닝 네트워크 노드가 계속 온라인이어야 한다. 비트코인 트랜잭션은 컨펌되면 끝이지만, 라이트닝 네트워크는 컨펌이 없어서 계속 바꿀 수 있다. 응답이 없으면 강제로 닫아버린다.

나같은 경우에는 Electrum을 실행하고, 컴퓨터가 꺼지지 않도록 한다. 아니면 서버에 라이트닝 노드를 구성할 수 있다. 아니면 라이트닝 네트워크 서비스를 이용할 수 있다. 일부 서비스는 잠수함 교환 등의 고급 기능을 자동으로 해준다. 다만 개인키를 내보낼 수 없어 개인 지갑을 쓸 수 없고 자사 서비스에 구금되는(custodial) 제약이 있는 경우가 많다.

라이트닝 네트워크의 미래

오늘 일론 머스크가 테슬라 차의 비트코인 구매를 막았다. 비트코인 트랜잭션이 화석 연료 등을 많이 사용해서 우려된다는 이유였다. 물론 핑계 같았다. 비트코인의 가치가 떨어지니까 그런 것 같았다.

재미있는 건 향후 계획이었는데, 비트코인보다 에너지를 적게 쓰는 다른 암호화폐를 찾아보겠다는 것이었다. 그래서 암호화폐들의 트랜잭션 당 에너지 소비량을 찾아봤다.

CurrencyKilowatt hour (KWh) consumed per transaction
XRP 0.0079
Dogecoin0.12
Cardano0.5479
Litecoin18.522
Bitcoin Cash18.957
Ethereum62.56
Bitcoin707
Popular cryptocurrencies: Which is the most environmentally friendly?

비트코인의 1% 미만으로 에너지를 소비하는 것들은 Cardano, Dogecoin, XRP 등이다. 여기에 Ethereum 2.0이 기존에 비해 에너지를 1%밖에 쓰지 않는다고 하니까, 이것도 포함할 수 있다.

그런데 그렇다고 해서 비트코인을 버리느냐? 그건 아니라고 했다. 지금 있는 비트코인은 계속 가지고 가고, 화석 에너지가 아니라 그린 에너지로 비트코인 트랜잭션을 하겠다고 했다. 그러려면 테슬라 내부적으로 그린 에너지 채굴장을 만들어야 할 것이다. 또는 테슬라가 그린 에너지 채굴장을 지원할 수 있다.

그럼 라이트닝 네트워크는 어떨까? 이것도 이더리움 2.0 같은 것이라 비트코인에 비해 에너지를 훨씬 덜 쓸 것이다. 그래서 이것도 후보에 포함될 수 있다.

그래서 라이트닝 네트워크의 미래는 밝을까? 그보다 비트코인의 미래부터 먼저 밝아야 하지 않을까? 그리고 이렇게 복잡한 서비스를 많이 쓸 수 있을까? 하지만 위에서 말한 복잡한 과정을 대신해주는 유료 서비스가 나왔으니 괜찮지 않을까? 하지만 그런 훌륭한 서비스가 해킹당해서 비트코인을 도난당하면 어떡하나? 제 2의 마운트 곡스(Mt. Gox)가 되는 건가? 하지만 이 모든 것이 일론 머스크가 “이제 테슬라 차 구매시 비트코인은 물론 라이트닝 네트워크도 가능합니다”라고 하면 다 해결될 문제 아닐까?

하여튼, 꼭 라이트닝 네트워크가 아니더라도, 라이트닝 네트워크처럼 비트코인의 2계층(Layer 2)에서 돌아가는 서비스들이 또 있다. 기존 1계층(Layer 1)과의 호환성을 위해 구차해지는 부분이 있지만, 기존의 프로토콜을 유지하면서 새로운 프로토콜을 접목할 수 있다. 이것이 시사하는 바가 크다. 이런 식으로 레거시 시스템을 개발새발 얼기설기 발전시킬 수도 있다.

Loading

Published
Categorized as xacdo

By xacdo

Kyungwoo Hyun

Leave a comment

Your email address will not be published. Required fields are marked *