더 많은 플러그인으로 출시된 c-lightning 0.7
Lightning Network

더 많은 플러그인으로 출시된 c-lightning 0.7

Christian Decker
Christian Decker, Rusty Russell

c-lightning 팀은 기쁜 마음으로 c-lightning v0.7 출시를 발표합니다. 지난번 주요 서비스 출시 이후 8개월간 작업 끝에 출시하는 이번 제품을 완성하기 위해 전 세계 50명이 협업하고 1,300건의 커밋이 수행되었습니다. 새로운 버전에는 여러 가지 성능 개선, 버그 수정뿐만 아니라 굉장히 흥미로운 신규 기능이 포함되어 있습니다.

새로운 기능

  • **플러그인 **: 개발자들은 v0.7의 대표 기능인 플러그인을 사용하여 자신의 응용 프로그램(모든 언어 지원)으로 Lightning을 확장할 수 있습니다. 플러그인은 가장 유연하고 확장 가능하며 사용자 지정 가능한 Lightning Network 사양을 구현한다는 Blockstream의 목표에 더욱 힘을 실어줍니다. 플러그인을 통해 Blockstream은 핵심 기능에 계속 집중할 수 있고, 사용자 및 개발자들은 기능을 추가함으로써 자신의 환경에 c-lightning을 통합할 수 있습니다.
  • 이제 Routeboost가 구현되어 인보이스에 세부 정보를 추가함으로써 비공개 채널을 통해 대금을 주고받을 수 있습니다. 이는 채널을 밝히지 않는 노드가 기밀성을 유지하는 데 도움을 주어 중요한 역할을 합니다.
  • 자금 관리 개선 : 채널에 자금을 조달하고 노드에서 인출하는 데 사용되는 코인을 보다 잘 관리하면 미확인 거래와 관련된 많은 위험을 피할 수 있습니다.
  • 이제 option_data_loss_protect가 기본적으로 활성화되어 모든 사용자들의 데이터 손실에 대한 자체 보안이 강화됩니다.
  • 재현 가능한 빌드 : 몇 가지 설치를 통해 나만의 Ubuntu 바이너리를 만들고 그것이 Blockstream에서 사용자 편의를 위해 제공하는 바이너리와 동일한지 확인할 수 있습니다.
  • 개선된 설명서 : 제대로 설명되지 않으면 아무리 좋은 기능이라도 무용지물입니다. 그래서Blockstream은 설명서를 개편했고, 이는 lightning.readthedocs.io에서 자동으로 생성됩니다.
  • 늘 그렇듯 : 성능, 성능, 성능.

플러그인을 통한 확장성 및 사용자 정의

Blockstream은 언제나 성능 및 보안과 더불어 확장성과 사용자 정의를 추구해 왔습니다. 그러나 지금까지 사용자들은 간단한 기능 추가 또는 약간의 변경을 위해 완전한 데몬을 작성해야 했습니다. 이러한 불편은 플러그인을 도입하면 크게 달라질 수 있습니다. 플러그인은 모든 언어로 작성되며 c-lightning으로 관리되는 간단한 프로그램입니다. 플러그인은 연관된 프로세스가 상호 작용하는 다른 프로세스와 함께 실행되는 사이드카 모델과 매우 유사합니다. 또한 Blockstream은 플러그인 API를 통해 다음과 같은 여러 확장 지점을 노출합니다.

  • 명령 줄 옵션 패스스루를 사용하면 플러그인은 lightningd를 통해 노출되는 자체 명령 줄 옵션을 등록할 수 있기 때문에 메인 프로세스만 설정하면 됩니다.
  • JSON-RPC 명령 줄 패스스루는 플러그인이 JSON-RPC 인터페이스에 자체 명령을 추가할 수 있는 방법을 추가합니다.
  • 이벤트 알림은 플러그인에 lightningd의 이벤트에 대한 푸시 기반 알림 메커니즘을 제공합니다.
  • 후크는 플러그인에 lightningd의 내부 이벤트에 대한 알림을 제공하고 플러그인의 동작을 변경하거나 사용자 지정 동작을 주입하는 프리미티브입니다.

데몬 및 모든 플러그인과 단일 상호 작용점을 제공하는 JSON-RPC 및 옵션 패스스루부터 실시간 상호 작용 또는 노드의 동작 변화까지 가능케 하는 알림 및 후크까지, 이러한 확장 지점은 예전보다 훨씬 강력한 핵심 데몬과의 통합을 제공합니다.

기존의 c-lightning 확장 방법과 비교했을 때, 플러그인을 시작하는 데 필요한 요건도 그 어느 때보다 훨씬 수월합니다. stdin에서 작성하고, stdout으로 작성하고, JSON으로 인코딩 된 데이터를 처리한 경험이 있다면, 플러그인을 만드는 데 필요한 모든 기술을 갖춘 것입니다. 또한 Blockstream과 커뮤니티는 C 또는 Python, Golang, Java로 플러그인을 쉽게 작성할 수 있도록 많은 라이브러리를 구축했습니다.

아래의 예는 JSON-RPC 패스스루, 옵션 패스스루, c-lightning으로 메시지 로깅에 대한 알림을 표시하는 Python 플러그인입니다.

from lightning import Plugin
plugin = Plugin(autopatch=True)

@plugin.method("hello")
def hello(plugin, name="world"):
    greeting = plugin.get_option('greeting')
    s = '{} {}'.format(greeting, name)
    plugin.log(s)
    return s

@plugin.init()
def init(options, configuration, plugin):
    plugin.log("Plugin helloworld.py initialized")

plugin.add_option('greeting', 'Hello',
                  'The greeting I should use.')
plugin.run()


JSON-RPC 인터페이스와 플러그인 시스템은 Blockstream의 인터페이스 중 1급 객체이고, Blockstream은 플러그인의 기능을 노출된 정보 및 c-lightning 코어와의 상호 작용 측면에서 지속적으로 확장하고 있습니다.

새로운 모듈화

사용자는 플러그인을 통해 c-lightning을 확장, 사용자 정의할 수 있고, c-lightning 개발자는 플러그인을 활용하여 c-lightning을 더욱 잘 모듈화할 수 있습니다. 지난 몇 주간 Blockstream은  c-lightning 자체에 하드코딩 되어 있던 기능의 일부를 플러그인으로 이식했습니다. 여기에는 다음과 같은 두 가지 주 목적이 있습니다.

  1. 어떤 정보에 접근할 수 있고 어떤 행동을 수행할 수 있는지 분명히 명시함으로써 보다 큰 관심사의 분리를 달성할 수 있습니다.
  2. 기본 플러그인이 사용자의 요구 사항과 일치하지 않을 경우, 사용자가 플러그인을 자체 구현으로 간단히 스왑 아웃할 수 있습니다.

Blockstream은 플러그인을 직접 사용하여 플러그인의 표현성, 핵심 데몬과의 상호 작용 방법을 지속적으로 업그레이드함으로써 플러그인이 진정한 1급 객체인지 확인합니다. 예를 들어, Blockstream은 인보이스 결제와 관련된 일부 코드를 payplugin으로 마이그레이션했습니다. Payplugin의 주요 목적은 인보이스를 받은 뒤 해당 인보이스의 정보를 기반으로 결제하는 것입니다. 간단한 과정인 것 같지만, 한 건의 결제로 인해 인보이스에서 routehints, 곧 실행될 멀티파트 결제 등 추가 정보를 가져오는 과정이 다소 길어질 수 있습니다. 플러그인은 이러한 정보를 기반으로 많은 라우트를 생성하고, 각 라우트를 통해 결제 라우팅을 시도하고, 어떤 라우트도 사용할 수 없는 경우 재시도합니다. 이 기능을 플러그인으로 마이그레이션함으로써 플러그인과 핵심 데몬에서 더욱 간단한 코드를 작성할 수 있었습니다. 또한 결제 라우팅에 대해, 예를 들어 네트워크 상태에 대한 추가 정보를 기반으로, 더 좋은 솔루션이 있는 사용자는 Blockstream이 코드를 c-lightning 자체에 만들어 줄 필요없이 직접 교체할 수 있습니다.

플러그인 시스템은 최근에 완성되었지만 많은 개발자들이 이미 오토파일럿, 네트워크_ 프로브, 프로메테우스 매트릭스, _크로스체인 아토믹 스왑, 추가 _RPC 인터페이스 _등 c-lightning의 기능을 상상 이상으로 확장하며 수많은 혁신적인 플러그인을 설계, 작성하기 시작했습니다.

앞으로의 기대

C-lightning 0.7의 출시는 Blockstream에게 분명 주요한 성공 과제이지만, 앞으로 수행할 더 많은 프로젝트의 시작이기도 합니다. Blockstream은 최근 Lightning Network 사양의 v1.0을 완성했고 앞으로 더욱 흥미롭고 혁신적인 기능이 개발될 것으로 기대하고 있습니다.

먼저, 최근 Blockstream은 더 많은 정보가 라우트 홉으로 전달될 수 있도록 더욱 유연한 어니언 라우팅 패킷 구성 방법을 계획했습니다. 이를 통해 인보이스가 필요 없는 자동 결제(spontaneous payments), 결제 중 송금인과 수취인의 신원을 숨기는 랑데부 라우팅 같은 강력한 기능을 사용할 수 있습니다.

Blockstream이 수행하고 있는 또 다른 프로젝트로는 네트워크에 더 높은 유동성을 제공하기 위한 이중 자금 채널, 채널 폐쇄의 주요 원인 중 하나를 해결하기 위한 수수료 약정 철폐 등이 있습니다.

Blockstream은 c-lightning 0.7을 출시함으로써 이러한 놀라운 기능을 구현하고 미래의 주요 과제를 해결할 수 있습니다.

c-lightning에 코드를 제공한 분들, 어떤 기능이 작동하는지, 무엇을 개선해야 하는지 #적극적으로 테스트하고 피드백을 주신 분들께 감사의 말씀을 드립니다. 마지막으로, 다른 Lightning Network 팀인 ACINQ, Lightning Labs와 Lightning Network 커뮤니티를 즐겁고 협력 적이며 개방적인 환경으로 만드는 데 기여한 모든 분들께 감사의 말씀을 전합니다!

플러그인 시작하기

Lightning에는 더 많은 플러그인이 필요합니다! Lighting 앱을 확장하시려면 먼저 설명서를 읽으신 후 플러그인 샘플을 확인하세요. Blockstream은 새로 업데이트된 플러그인에 대한 여러분의 피드백을 기다립니다. GitHub 저장소 또는 Lightning-dev 메일 목록을 통해 의견을 보내주세요.

If you have specific preferences, please, mark the topic(s) you would like to read: