3분 만에 Lightning 네트워크 애플리케이션 개발 알아보기
以太坊爱好者
2021-09-13 03:30
本文约6482字,阅读全文需要约26分钟
표준을 준수하는 한 누구나 라이트닝 네트워크에 참여할 수 있습니다.

원래 제목: Michael Rhee의 "Dry Goods | A Quick Guide to Lightning Network Application Development"

Lightning Network 프로그래밍을 시작하고 소위 올바른 모범 사례에 관심이 없는 경우 이 문서가 적합합니다. 즉, 이 지침은 매우 주관적입니다. O'Reilly 스타일의 권위 있는 텍스트를 선호한다면 이 기사가 마음에 들지 않을 수 있습니다. 하지만 라이트닝 네트워크의 최소한의 개발 환경과 기본적인 내용을 이해하고 싶다면 읽어볼만한 가치가 있습니다. 이 글을 쓰는 목적은 라이트닝 네트워크 응용 프로그램을 만들기 위한 기본 지식 포인트를 추출하여 초보자가 빠르게 구축하고 실험할 수 있도록 하는 것입니다.

기본 사항을 마스터하면 더 복잡하고 안전한 응용 프로그램을 작성할 수 있다고 생각합니다. 하지만 누구나 어딘가에서 시작해야 하고, 개인적인 느낌은 모든 것이 처음에는 어렵다는 것입니다. 이러한 생각을 종합하면 길 잃은 양들의 고통을 덜어줄 수 있을 것 같습니다.

자세한 내용을 살펴보기 전에 나 자신에 대한 약간의 배경 지식을 제공하겠습니다.

약 한 달 전에 저는 데이터 설계자라는 안정적인 직장을 그만두고 끊임없이 변화하는 비트코인 ​​생태계를 연구하기 시작했습니다. 이 문서를 보면 해당 단계를 수행했거나 고려하고 있음을 알 수 있습니다.

간단히 말해서 비트코인은 내가 본 것 중 가장 흥미로운 기술 혁신이라고 생각합니다. 비트코인에 대해 더 많이 알수록 더 끌렸습니다. 비트코인 기술은 오늘날 우리가 상호 작용하는 방식을 바꾸고 심지어 재구성하여 완전히 새로운 것으로 만들 것을 약속합니다. 제 몫을 하길 바랍니다.

이것이 내가 Bitcoin에서 개발하기로 선택한 이유입니다. 이 기사가 라이트닝 네트워크 생태계와 그 잠재력에 익숙하지 않은 개발자에게 도움이 되고 더 많은 개발자가 비트코인 ​​공간에 창의성을 주입하도록 장려하기를 바랍니다.

솔직히 비트코인 ​​생태계에 대해 쓰고 싶은 것이 너무 많지만("에너지 지원 통화"의 개념이 가장 중요합니다) 다른 날을 기다려야 합니다. 이제 사업을 시작합시다.

이미지 설명

-출처: lnrouter.app-

Lightning Network의 기본 설계는 채널을 사용하여 노드 간 일대일 연결을 실현하는 것입니다. 채널을 개설하려면 일정량의 비트코인을 예치해야 하며 이 거래는 비트코인 ​​블록체인에 기록됩니다. 그런 다음 사용자는 특별한 오프체인 계약을 사용하여 블록체인에 새로운 트랜잭션을 제출하지 않고 노드 간 채널에서 비트코인을 전송할 수 있습니다.

실용적인 접근 방식은 실시간으로 채널의 균형 변화를 추적하는 것입니다. 예를 들어 앨리스와 개설한 채널에 100사토시를 예치했다면 약 100사토시 정도의 이체 할당량(온체인 거래 수수료를 뺀 값)을 갖게 되며, 앨리스에게 직접 이체하거나 앨리스를 통해 간접적으로 이체할 수 있다. 이러한 전송은 각 거래마다 채널의 균형을 조정하기만 하면 되므로 거의 즉각적입니다. 이 조정은 발신자와 수신자 간에 암호화된 메시지를 전달하여 이루어집니다.

Lightning 앱은 Lightning 네트워크(소위 비트코인 ​​계층 2) 위에서 실행됩니다. Lightning Apps도 결제 수단으로 비트코인을 사용하지만 결제가 더 빠르고 거래 수수료가 더 낮습니다.

Lightning Network 프로토콜에 대해 아주 간략하게 설명했지만 시작하기에 충분합니다. 라이트닝 네트워크가 어떻게 작동하는지 더 자세히 이해하고 싶다면 여기 좋은 자료가 있습니다. 지식의 바다에 빠지지 않도록 주의하고, 컴퓨터 앞에 앉아 늦게까지 책을 읽되, 한 줄의 코드도 타이핑하지 마십시오. 이것이 반드시 나쁜 것은 아니지만 우리의 목적은 여전히 ​​수행하는 것입니다. 또한 충분한 수면을 취하는 것도 중요합니다.

라이트닝 네트워크와 노드의 작동 방식을 이해하는 더 좋은 방법은 노드를 직접 실행하고 노드를 통해 지불이 라우팅되는 방식을 파악하는 것입니다. 이 방법은 더 많은 시간과 비용이 필요하지만 흥미롭고 지식이 풍부합니다. 1

성취하다

라이트닝 네트워크는 개방형 프로토콜입니다. 이것은 Lightning Network가 메시지를 전달하고 해석하는 표준 방법을 가지고 있음을 의미합니다. HTTPS와 TCP/IP가 누구의 소유가 아닌 것처럼 라이트닝 네트워크 프로토콜도 마찬가지입니다. 표준을 준수하는 한 누구나 라이트닝 네트워크에 참여할 수 있습니다. 뿐만 아니라 개발자가 계속해서 프로토콜을 강화하고 새로운 기능을 추가함에 따라 표준은 계속 발전할 것입니다.

Lightning Labs, Blockstream, ACINQ 및 Square Crypto 등 4개 회사가 현재 Lightning 프로토콜 개발의 중심에 있으며 모두 자체 구현을 갖추고 있습니다.

Lightning Labs — lnd (Go)

Blockstream — c-lighting (C)

ACINQ — eclair (Scala)

Square Crypto — Rust Lightning (Rust)

위의 모든 구현은 Lightning 네트워크를 통해 통신할 수 있습니다. 차이점은 이러한 구현의 API입니다. 이 기사는 Lightning Labs의 lnd에만 초점을 맞춥니다. 그것이 제가 처음 접한 곳이자 제가 가장 잘 알고 있는 곳이기 때문입니다. 우연한 요인으로 Ind를 선택하게 되었지만 Lightning Labs의 Ind 문서가 잘 작성되었고 개발자들은 공식 Slack 채널을 통해 많은 도움과 지원을 받을 수 있다는 점을 자랑해야 합니다.

아래 논의는 Ind를 중심으로 진행되지만 기본 개념은 모든 Lightning Network 구현에 적용됩니다.

당신의 개발 환경

헛소리하지 말고 Polar를 사용하십시오.

몇 마디만 더 하겠습니다. 개발자이든 사용자이든 라이트닝 네트워크를 구축하는 데 가장 큰 장애물은 백엔드를 만드는 방법입니다. 사용 가능한 간단하고 빠른 보관 솔루션이 많이 있기 때문에 지갑에 대해서만 말하는 것이 아닙니다. 실제 백엔드, 즉 Bitcoin과 Lightning Network를 실행하는 노드를 의미합니다.

API/gRPC 호출을 통해 인보이스 생성 및 결제 모니터링과 같은 몇 가지 중요한 작업을 수행하려면 앱이 노드에 대한 특정 권한이 있어야 하기 때문에 이렇게 말합니다. 노드 운영자가 노드에 대한 액세스 권한을 부여한 경우에도 이 작업을 수행할 수 있지만 노드를 직접 실행하는 것이 좋습니다.

라이트닝 네트워크 개발에 사용할 수 있는 노드는 두 가지 프로세스를 실행해야 합니다: (1) 비트코인 ​​블록체인의 최신 블록에 동기화되는 비트코인 ​​클라이언트, (2) 채널을 개설한 라이트닝 네트워크 클라이언트(전송 및 수신 가능) 지불).

일반 가정용 광대역을 사용하는 경우 블록체인을 동기화하는 데만 최소 며칠이 걸립니다. Neutrino(경량 비트코인 ​​지갑)를 사용해 볼 수 있지만 Lightning Network에서 개발하는 데 사용하면 몇 가지 문제가 발생할 수 있다고 들었습니다. 나는 그것을 직접 시도하지 않았습니다. 어쨌든 이런 종류의 도구가 처음이라면 부정적인 영향을 미칠 수 있는 변수를 제거하는 것이 최선이라고 생각합니다. 따라서 여유가 된다면 전체 블록체인을 동기화하는 것이 좋습니다.

Bitcoin의 레이어를 정렬하면 Lightning Network 레이어는 Bitcoin의 두 번째 레이어입니다. 위에서 언급했듯이 트랜잭션을 수행하려면 Lightning Network에서 채널을 열어야 합니다. 라이트닝 네트워크에서 채널을 여는 것은 그리 어렵지 않지만 약간의 계획과 조정, 비트코인 ​​지불이 필요합니다. 물론 비트코인을 스테이킹하여 채널을 열고 거래를 시작할 수 있습니다. 그러나 이러한 재정적 위험을 감수할 필요는 없습니다. 2

이미지 설명

-바라보다! 동기화를 기다릴 수 없습니다! (폴라 인터페이스) -

Polar의 장점은 앱을 테스트넷 또는 메인넷 백엔드로 이동할 준비가 되었을 때 몇 가지 구성만 업데이트하면 된다는 것입니다. 앱에서 몇 줄의 코드를 추가하거나 주석 처리하여 이미 로컬, 테스트넷 및 메인넷 백엔드 간에 쉽게 전환할 수 있습니다. (저는 .env 파일로 끝낼 것입니다. 물론 프로파일링 도구는 이 기사의 목적이 아닙니다.)

Polar는 lnd, c-lighting 및 eclair 노드도 지원합니다. 즉, 다른 구현을 실험할 수 있는 유연성이 있습니다.

다시 한 번: Polar를 사용하세요. 빠르고 쉽게 시작할 수 있는 방법입니다. 또한 Lightning Network에서 개발하는 것이 전혀 마음에 들지 않으면 어떻게 합니까? 이를 조기에 발견하는 것이 반드시 사용하지 않을 시스템에 너무 많은 시간과 비용을 낭비하는 것보다 낫습니다. 그렇긴 해도 매일 밤 들으면서 헤어나올 수 없는 Stephan Livera의 팟캐스트에 중독되어 있다면 더 진지한 개발 환경을 구축할 수 있습니다.

텍스트

Polar에서 시뮬레이션된 번개 네트워크 환경을 쉽게 만들려면 "네트워크 만들기"를 클릭하십시오. 원하는 대로 네트워크 이름을 지정하고(개인적으로 "테스트"가 현명한 선택이라고 생각합니다) 두 개의 lnd 노드와 Bitcoin Core 노드를 추가할 수 있습니다. 실제로 이제 막 시작하는 사용자를 위한 최소 구성에 불과하며 나중에 더 많은 노드를 추가할 수 있습니다. 네트워크를 생성했으면 시작할 수 있습니다. 모든 Docker 이미지를 다운로드해야 하기 때문에 처음 네트워크를 시작하는 데 시간이 조금 더 걸릴 수 있습니다. 그건 그렇고, 자신의 장치에서 Docker를 실행해야 합니다. 전에 말했듯이 여기서는 여전히 스스로 알아내야 합니다.

마지막으로 아래와 유사한 Polar 인터페이스가 표시됩니다.

위 그림에 표시된 인터페이스에서 Alice와 Bob의 Ind 노드를 볼 수 있으며 두 노드 모두 Bitcoin Core 백엔드 프로세스에 연결되어 있습니다. 또한 이때 블록 높이는 1입니다. 이것은 우리의 제네시스 블록입니다! 라이브 블록체인과 달리 Polar는 개발 및 테스트 중에 트랜잭션이 제출될 때만 블록을 생성합니다.

다음 단계는 번개 지불을 위해 Alice와 Bob 사이에 채널을 만드는 것입니다. Alice의 노드를 클릭하면 오른쪽의 제어판에 해당 노드와 상호 작용할 수 있는 다양한 방법이 표시됩니다. Actions를 클릭하면 시뮬레이션된 비트코인으로 Alice의 지갑에 자금을 조달하고 Alice와 Bob 사이의 채널을 여는 데 필요한 모든 것을 볼 수 있습니다. 다음으로 Alice의 지갑에 약간의 자금을 충전한 다음 Alice와 Bob 간의 채널을 엽니다.

"입금"을 클릭한 다음 100만 사토시를 Alice의 지갑에 입금합니다.

모든 것이 계획대로 진행되었다면 블록 높이와 Alice의 지갑 잔액이 변경되는 것을 볼 수 있습니다. 그렇지 않은 경우 도움을 요청하십시오. 이것은 당신의 잘못이 아닙니다. 삼

이제 Alice와 Bob 사이에 채널을 열 수 있습니다. 이제 Alice에게 돈이 생겼으므로 그녀가 Bob과 "발신" 채널을 열도록 할 수 있습니다. 소위 전송 채널은 Alice가 이 채널을 통해 일정량의 비트코인을 Bob에게 전송할 수 있음을 의미합니다. 채널에 잔액이 있는 한 앨리스와 밥 사이에 여러 이체 거래가 이루어질 수 있습니다. 그러나 채널이 처음 열리면 사용 가능한 잔액이 그녀에게 있기 때문에 Alice만이 Bob에게 돈을 이체할 수 있습니다. 물론 Alice가 Bob에게 돈을 이체한 후에 Bob은 Alice에게 돈을 이체할 수 있습니다.

채널에서 이러한 자금 관리 방법은 양 당사자가 거래할 수 있는 능력을 갖도록 하는 것입니다. 이것이 우리가 라이트닝 네트워크의 유동성이라고 부르는 것입니다. 실제로 사용자는 채널의 잔액만 사용할 수 있습니다. 조금 더 깊이 들어가면 송금인과 수취인 사이의 채널에 충분한 잔액이 있고 자금이 올바른 방향으로 흐르고 있는 경우에만 지불이 성공할 수 있습니다. 그렇지 않으면 결제가 실패합니다. 라이트닝 네트워크에서 제한된 유동성을 관리하는 방법과 해결 방법을 찾는 방법은 그 자체로 탐구할 가치가 있는 주제입니다.

솔직히 말해서 Polar와 채널을 여는 데 몇 가지 문제가 있었습니다. UI와 백엔드 간의 상태 불일치가 의심되지만 확실하지 않습니다. 경우에 따라 노드(또는 전체 네트워크)를 종료하고 다시 시작하면 도움이 됩니다. 완전히 종료하고 Polar를 다시 시작해도 작동합니다. 또한 이와 같은 상황에 처했을 때 10분 동안 밖에 나가는 것은 마음과 영혼을 이완시키는 좋은 방법이 될 수 있습니다.

이유가 무엇이든, 이러한 노드 작업을 수행하는 가장 좋은 방법은 Polar에서 제공하는 CLI를 통하는 것임을 알게 되었습니다. UI가 반드시 변경 사항을 표시하지는 않지만 UI가 변경 사항을 충실히 반영하는지 확인하기 위해 데이터베이스를 직접 쿼리할 수 있습니다(즉, 4). Polar는 쉽게 만듭니다. 지금 해보자.

먼저 Alice의 Ind 노드를 선택하고 "Actions" 인터페이스로 들어가 "Terminal" 아래의 "Launch"를 클릭하면 다음 그림과 같이 명령 프롬프트가 나타납니다.

이제 Ind 노드의 lncli 도구를 사용하여 채널을 열고 인보이스를 생성하고 결제할 수 있습니다. 먼저 다음 명령을 실행하여 개요를 확인합니다.

lncli --help

다음 명령을 실행하여 Alice와 Bob 사이에 100,000 satoshi의 잔액이 있는 채널을 열 수 있습니다.

lncli openchannel --node_key --local_amt 100000

Alice와 Bob이 시뮬레이션된 비트코인 ​​블록체인에 방송하는 자금 거래에 해당하는 "funding_txid" 응답이 표시됩니다. 새로 생성된 채널을 보려면 다음 명령을 실행합니다.

lncli listchannels

명령이 빈 목록을 반환하면 Bitcoin 노드("작업" 화면 아래)로 몇 개의 블록을 채굴해 보십시오. 이렇게 하면 트랜잭션을 확인하고 채널을 여는 데 도움이 됩니다.

이제 listchannels 응답을 통해 Alice와 Bob 간의 채널이 성공적으로 열렸으며 채널 잔액이 약 100,000 satoshi(트랜잭션 수수료를 뺀 값)임을 알 수 있습니다. 100,000 사토시 미만은 앨리스가 라이트닝 네트워크를 통해 밥에게 지불할 수 있는 사용 가능한 잔액입니다.

결제 프로세스

지금까지 라이트닝 네트워크에서 가장 쉬운(가장 일반적이라고 생각하는) 결제 프로세스는 인보이스를 통한 것입니다. 인보이스는 본질적으로 "금액"과 "수취인"이 있는 지불 지침 세트입니다. 지불 지침이 더 흥미로운 가능성을 여는 데 도움이 되는 다른 매개변수와 변형이 있지만(예: hodl 송장 및 BOLT12 제안) 이 기사에서는 가장 기본적인 패턴에만 초점을 맞춥니다.

Polar 설정으로 이동하여 먼저 인보이스를 생성하되 이번에는 Bob의 노드를 사용합니다. 따라서 Bob의 터미널을 실행하고 다음 명령을 실행합니다.

lncli addinvoice --amt 100

위 명령어는 100사토시 상당의 인보이스를 생성합니다. 반환된 응답을 통해 이 인보이스의 정보를 볼 수 있습니다.

{    "r_hash": "7d91cafaba85b6086924142dfd890f350eb53b17b80e2993d0a2ce5ccc7252f1",    "payment_request": "lnbcrt1u1ps3lu04pp50kgu4746skmqs6fyzsklmzg0x58t2wchhq8zny7s5t89enrj2tcsdqqcqzpgsp55rtlzlf5rt0z5zg34nc2rlcm9mw6nd77x45r85z6zp07qumphr7q9qyyssqzrvxdlsluaeu7esscvv8skcmaly4794j7pg9ytapmn50uukezf4xpqma9758s39wpn4pwk475dztezg4tff8xpylksl4mww57q8hj7cq7s7222",    "add_index": "1",    "payment_addr": "a0d7f17d341ade2a0911acf0a1ff1b2edda9b7de356833d05a105fe07361b8fc"}

지금은 "payment_request" 부분에만 초점을 맞춥니다. 데이터의 이 부분에는 Alice가 Bob에게 지불하는 데 필요한 모든 것, 즉 지불 금액과 수취인 주소5가 포함되어 있기 때문입니다.

Alice의 노드 터미널로 다시 전환하면 지불 요청을 받아 다음 명령에 대한 인수로 전달할 수 있습니다.

  • lncli sendpayment --pay_req

결과는 다음과 같습니다.

성공.

텍스트

이 시점에서 애플리케이션 구축을 시작하기에 충분한 기본 지식과 도구가 있어야 합니다. 위의 다이어그램은 Polar에서 인보이스를 생성하고 지불하는 데 사용하는 것과 동일한 API 호출을 사용하는 간단한 예제 애플리케이션의 개요를 보여줍니다. 이것이 기본 애플리케이션 아키텍처를 구축하는 데 필요한 전부입니다. 물론 이것은 하나의 예일 뿐이며 개발 중에 다른 많은 문제에 직면하게 되지만(시작에 불과함) 천천히 필요한 것과 해결 방법을 파악하게 될 것입니다.

몇 가지 추가 제안 및 참조:

  • 개발자가 상용구 코드를 적게 작성하고 요점을 바로 파악하는 데 도움이 되는 라이브러리가 많이 있습니다. 개인적으로 이러한 라이브러리를 사용하는 방법을 배우는 것은 생산성보다 더 많은 좌절감을 안겨주었습니다. 문제는 대부분 나에게 있다. 추상화는 훌륭하지만 추상화되는 내용에 대한 기본적인 이해가 있는 경우에만 가능합니다. 처음 시작할 때는 이것을 깨닫지 못했습니다. 저는 Ind의 API 문서가 가장 배우기 쉽다고 생각합니다. Javascript로 gRPC 클라이언트를 작성하기 위해 이 가이드를 따랐을 때 올바른 길을 가고 있었습니다.

  • 보다 구체적인 애플리케이션 예제를 보려면 Lightning Labs Builder's Guide의 자습서를 살펴보십시오. 튜토리얼에서 사용한 express, mobx 및 React 도구에 익숙하다면 이 튜토리얼을 적극 권장합니다. 이러한 도구에 익숙하지 않은 경우 이 자습서에서 많은 것을 얻지 못할 수 있지만 여전히 배울 수 있습니다. 이 튜토리얼에서 마음에 드는 점 중 하나는 Lightning Network(및 암호화 증명)를 사용하여 빌드된 앱으로 수행할 수 있는 몇 가지 흥미로운 작업을 보여 준다는 것입니다.

마지막으로 이 기사의 내용이 불분명하거나 부정확하다고 생각되면 언제든지 피드백이나 질문을 보내주십시오.

읽어 주셔서 감사합니다.

어서 해봐요.

각주

  • 노드를 실행하고 싶다면 Umbrel은 초보자에게 좋습니다. MyNode, RaspiBolt 및 RaspiBlitz도 좋다고 들었습니다. 소프트웨어 시스템(또는 SimCity)을 만지작거리는 것을 좋아한다면 노드를 실행하는 것은 최악의 경우 재미있는 취미이며 기껏해야 비용이 많이 들고 끝없는 최적화 게임입니다(은 종류의 실제 돈이 필요함).

  • 또한 테스트넷에서 실험을 실행하고 비트코인 ​​수도꼭지를 통해 실험용 비트코인을 얻을 수 있습니다. 이 동전은 가치가 없지만 구두쇠가 되는 것은 재미있을 수 있습니다. 노드를 직접 구성하고 관리하는 데 관심이 없다면 Voltage와 같은 서비스를 사용할 수 있습니다. Voltage는 테스트넷 및 메인넷 노드를 지원하는 종량제 클라우드 서비스입니다.

  • 글쎄, 우리는 100% 확신할 수 없습니다. 주의 사항은 lnd Slack에서 개발자 채널을 확인하세요. 저는 여기에서 이러한 도구를 만들고 유지 관리하는 많은 개발자를 만났습니다. 당신은 나를 볼 수 있습니다! 누군가 당신이 직면한 문제를 경험했을 수 있습니다. 그렇지 않다면 훌륭합니다. 모든 사람이 귀하의 질문에서 배울 수 있습니다.

  • 블록체인은 공용 데이터베이스이며 모든 사람이 루트 액세스 권한을 가집니다. 자세한 내용은 다음을 확인하십시오. https://balajis.com/yes-you-may-need-a-blockchain/

  • 인보이스의 다른 필드에 대한 자세한 설명을 보려면 이 요약을 볼 수 있습니다. 기본 계약에 대해 자세히 알아보려면 이 문서를 읽어보십시오.



以太坊爱好者
作者文库