나만의 휴대용 플러그인 Lightning 노드 만들기!
Lightning Network

나만의 휴대용 플러그인 Lightning 노드 만들기!

Grubles

이 게스트 게시물은 Lightning에서 활발하게 활동하는 @notgrubles의 글이며, 원 게시물은 Grubles의 블로그에 게시되어 있습니다.

섹션

●       소개 / 요구 사항

●       패킷 포워딩 설정

●       c-lightning 및 bitcoin-cli 구축하기

●       Lightning Charge 설치하기

●       POS 솔루션을 위한 nanopos 설치하기

Inverse Path USB Armory는 Raspberry Pi, Rock64 등 현재 대중화된 SoC 기반의 하드웨어 카테고리에 속하는 독특한 장치입니다. 다른 시스템과 마찬가지로 컴퓨팅 성능 측면에서 상대적으로 저전력 장치입니다. 그러나 컴팩트 폼 팩터와 부품은 남다릅니다. Armory는 전원 어댑터나 벽면 콘센트가 필요 없습니다. 작동시키려면 USB 포트만 있으면 됩니다. Armory는 USB를 통해 자체적으로 전원을 공급하고 동일한 방식으로, 즉 에뮬레이트된 이더넷 연결을 통해 호스트 장치와 통신합니다. Armory는 800Mhz에서 실행되는 NXP i.MX53 ARM® Cortex™-A8 프로세서를 사용합니다. 또한 512 MB의 DDR3 RAM과 저장용 microSD 카드 슬롯이 포함되어 있습니다.

“USB Armory Board는 다양한 보안 응용 프로그램의 개발을 지원하기 위해 Inverse Path가  개발했습니다. i.MX53 SoC 속도, 보안 기능, 유연하고 완전한 사용자 정의가 가능한 운영 환경을 통해 임의의 USB 장치를 에뮬레이트하는 능력은 USB Armory 를 모든 종류의 개인 보안 응용 프로그램에 이상적인 플랫폼으로 만들어줍니다. USB Armory 하드웨어의 개방형 미니멀 디자인의 투명성은 감사 가능성을 높이고 공급망 공격의 가능성과 범위를 크게 제한합니다.” 출처 : https://inversepath.com/usbarmory

폼 팩터, USB 전원 공급 장치(power-over-USB), USB를 이용한 에뮬레이트된 이더넷 기능을 활용한 유용한 사례 중 하나는 휴대용 비트코인 Lightning 지갑입니다. 이 구성을 통해 비트코인을 실행하는 Raspberry Pis 같은 기존 하드웨어에 쉽게 연결되는 휴대용 플랫폼에 비밀 키를 저장하고 c-lightning을 실행하는 장치를 설정할 수 있습니다. 또한 사용자가 노트북을 사용하는 경우 풀 노드를 실행할 수 있습니다. Armory는 간단하게 연결할 수 있고, 연결 후에는 Lightning Network를 통해 거래하고 Lightning을 기반으로 하는 앱(LApp)을 실행할 수 있습니다. 이러한 설정의 또 다른 활용 사례는 구형 노트북이나 Raspberry Pi 등 저전력 장치에 처리 성능을 추가하는 것입니다. Armory는 이런 방식으로 Lightning의 코프로세서(co-processor) 같은 역할을 합니다!

요구 사항:

●       Inverse Path USB Armory

●       공식 Debian 기반 이미지가 설치된 4GB 이상의 microSD 카드

●       (노트북, 워크스테이션, 또는 RPi 같은) USB 호스트 장치

●       LAN 또는 RPC 액세스 자격 증명이 있는 다른 곳에서 실행되는 비트코인

설치 전 Armory 준비하기

Lightningd이 원격 bitcoind와 통신하려면 Armory에 구축할 때 필요한 시간을 크게 줄여주는 bitcoin-cli만 있으면 됩니다. 크로스 컴파일이 가능하지만, 이 지침에서는 다루지 않습니다. bitcoin-cli 만 구축하려면 Github 저장소에서 비트코인 코드를 가져와야 합니다. 하지만 그 전에 호스트 장치(Armory가 연결된 장치)에서 패킷 포워딩이 활성화돼야 합니다.

네트워크에 접속하기

Armory는 (공식 Debian기반 이미지를 사용하는 경우) 연결 및 부팅 시 이더넷 연결을 에뮬레이트하는 가상 인터페이스를 생성합니다. 일단 구성되면 Armory와 USB 호스트는 마치 동일한 LAN에 있는 것처럼 (엄밀히 따지면 그렇기 때문에) 서로 통신할 수 있습니다. Armory의 패킷 포워딩 여부는 USB 호스트에 달려 있습니다. 패킷이 포워딩되는 경우, Armory는 로컬 네트워크 외부의 다른 노드로 Lightning Network 채널을 열 수 있습니다. 또한 패킷 포워딩은 빌드 도구와 의존성을 설치하는 데 필요합니다.

Windows: Windows 7, 8, 10용 패킷 포워딩(연결 공유라고도 함) 활성화 지침은 여기에서 보실 수 있습니다.

MacOS: MacOS 지침은 여기에서 보실 수 있습니다.

Linux: 참고 : Ubuntu 16.04에서 네트워크 관리자는 방해를 주지 않았습니다. 하지만 다른 배포판의 구성에서는 방해가 있었을 수 있습니다. Linux 지침에 따라:

나가는 연결에 대한 마스커레이딩 활성화:

# iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o wlan0 -j MASQUERADE

IP 포워딩 활성화:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Armory를 연결하면 흰색 LED가 깜박입니다. 이것은 Armory가 실행 중이라는 것을 의미합니다. Armory가 사용 중일 때 "상태 표시(heartbeat)" LED가 더 빠르게 깜박입니다.

이제 Debian 기반 이미지의 기본 자격 증명(사용자와 암호는 모두 usbarmory)을 사용하여 아래와 같이 Armory에 ssh합니다:

$ ssh usbarmory@10.0.0.1

Armory가 제대로 라우팅되었는지 확인하기 위해 아래와 같이 공용 주소를 핑합니다:

$ ping 8.8.8.8

성공하면 다음과 같은 응답을 받습니다:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=60 time=46.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=60 time=48.0 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=60 time=48.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=60 time=71.5 ms

됐습니다!

c-lightning 구축하기

$ sudo apt update && sudo apt -y upgrade

완료된 후, 커널 업데이트가 있는 경우 Armory를 다시 한번 재부팅합니다:

$ sudo reboot

이제 bitcoin-cli와 c-lightning을 컴파일하는 데 필요한 빌드 도구와 의존성 설치를 시작합니다:

$ sudo apt-get install -y \ autoconf automake build-essential git libtool libgmp-dev \ libsqlite3-dev python python3 net-tools libsodium-dev \ pkg-config libssl-dev libevent-dev \ libboost-system-dev libboost-filesystem-dev \ libboost-chrono-dev libboost-program-options-dev \ libboost-test-dev libboost-thread-dev tmux curl

c-lightning 저장소를 복제합니다:

$ git clone https://github.com/ElementsProject/lightning.git

로컬 저장소로 이동합니다:

$ cd lightning

이제 구축을 시작합니다:

$ make

완료되고 나면, usbarmory 사용자의 홈 디렉토리로 이동합니다:

$ cd ~/

Bitcoin Core 0.16.0 소스 코드 아카이브인 SHA256SUMS.asc를 다운로드하고 Core 메인테이너의 gpg 키를 가져와 해시를 확인합니다. 마지막으로 아카이브를 압축 해제합니다:

$ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0.tar.gz $ wget https://bitcoincore.org/bin/bitcoin-core-0.16.0/SHA256SUMS.asc $ gpg --recv-key 90C8019E36C2E964 $ gpg --verify SHA256SUMS.asc $ sha256sum -c --ignore-missing SHA256SUMS.asc

“OK”가 나와야 함

$ tar zxvf bitcoin-0.16.0.tar.gz </code>

좋습니다!

이제 bitcoin-cli를 구축합니다.

bitcoin-cli 구축하기

비트코인 소스 코드 디렉토리로 이동하여 구축 프로세스를 시작합니다:

$ cd bitcoin-0.16.0/

$ ./autogen.sh

autogen.sh를 실행하는 동안 로케일에 대한 경고 메시지가 많이 발생할 수 있습니다. 이는 로케일을 설정함으로써 해결할 수 있습니다:

$ sudo dpkg-reconfigure locales

# en_US.UTF-8 같은 것을 선택하고 Ok를 누릅니다

구축 프로세스를 계속합니다:

$ CFLAGS="-march=native" ./configure --disable-wallet

-march=native는 우리의 컴파일러인 gcc에게 Armory의 프로세서를 자동 감지하고 해당 프로세서에 맞는 최적화를 활성화하도록 지시합니다. 이러한 지시는 ARM 프로세서의 성능 향상을 막는 데 도움이 되고, 이는 ARM 프로세서가 상대적으로 느리기 때문에 중요합니다. Bitcoind는 구축되지 않기 때문에 libdb는 필요하지 않습니다. 지갑 지원(이 구성에서는 c-lightning이 지갑) 없이 구축하려면 --disable-wallet을 입력합니다.

이제 bitcoin-cli를 구축합니다:

$ make src/bitcoin-cli

마지막으로, 새로 구축된 bitcoin-cli 바이너리를 /usr/local/bin에 복사합니다:

$ sudo cp src/bitcoin-cli /usr/local/bin $ whereis bitcoin-cli

“/usr/local/bin/bitcoin-cli”를 반환해야 함

</code>

RPC를 통해 Armory를 비트코인에 연결하기

c-lightning은 채널 개방 또는 강제 폐쇄, 상호 폐쇄 등 다양한 원인으로 인해 bitcoin-cli를 사용하여 원시 거래를 bitcoind로 보냅니다. c-lightning은 Armory에서 실행되기 때문에 bitcoin-cli도 필요합니다. 하지만 bitcoin-cli는 bitcoind와 통신할 수 있어야 하므로 Armory의 bitcoind와 USB 호스트의 bitcoind인 bitcoin.conf에 적절한 항목을 만들고 추가합니다.

USB 호스트 또는 bitcoind가 실행 중인 다른 장치에서 bitcoin.conf에 다음 항목을 지정합니다:

rpcuser= your_username rpcpassword= yourpasswordnotthisone rpcallowip= Armory의 IP 주소

이 변경 사항을 저장하고 난 뒤, Armory의 bitcoin.conf를 만들고 다음 항목을 추가합니다:

$ nano ~/.bitcoin/bitcoin.conf

bitcoin.conf에는:

rpcuser= rpcpassword 이전의 사용자 이름= rpcconnect 이전의 비밀번호= USB 호스트의 IP (10.0.0.2)

10.0.0.2로 대체한 IP 주소 bitcoind는 수신 대기 중일 수 있습니다 (예: 192.168.0.254).

Armory에서 bitcoind를 조회(query)해 봅니다:

$ bitcoin-cli -getinfo

성공적으로 조회가 되면, 관련 정보(블록 높이, 난이도 등)와 함께 응답이 돌아옵니다. 굉장하죠!

c-lightning 실행하기

이제 모든 것이 제대로 구축, 구성되고, 네트워크 연결이 되었으니 c-lightning을 실행할 수 있습니다.

tmux 세션을 시작한 다음 lightningd를 시작합니다:

$ tmux $ ./lightning/lightningd/lightningd --network testnet --log-level debug $ ./lightning/cli/lightning-cli getinfo

참고 : #무모한 분들은 대신 --network bitcoin을 입력하세요.

lightningd가 "Adding block number" 출력을 시작하고 lightning-cli getinfo가 (다른 정보 가운데) 현재 블록 높이를 반환하면 Armory가 성공적으로 설치됩니다!

이제 lightning-cli를 사용하여 비트코인 입/출금을 위한 새로운 주소를 생성하고 Lightning Network 채널을 개방/폐쇄할 수 있습니다!

Lightning Charge

LApp은 Lightning Network가 제공하는 즉시 결제를 활용한 Lightning 기반의 응용 프로그램입니다. 최근 출시된 Lapp의 종류는 여기 Blockstream의 블로그서 확인하실 수 있습니다.

LApp을 실행하려면 Armory에 Lightning Charge가 설치되어 있어야 합니다.

Lightning Charge는 node.js로 작성된 소액 결제 처리 시스템입니다. Lightning Charge는 JavaScript PHP 라이브러리를 통해 액세스할 수 있는 REST API를 통해 c-lightning 기능을 제공합니다. 출처: https://blockstream.com/2018/01/16/lightning-charge/

Lightning Charge를 사용하려면 c-lightning과 nodejs가 필요합니다. 지금 설치하세요:

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - $ sudo apt-get install -y nodejs

nodesource.com에서 제공하는 nodejs 패키지로 인해 권한 오류가 발생할 수 있습니다. 이 문제를 해결하려면 다음을 수행하세요:

$ mkdir ~/.npm-global $ npm config set prefix '~/.npm-global'

~/.profile에 다음을 추가하세요:

$ export PATH=~/.npm-global/bin:$PATH

마지막으로:

$ source ~/.profile

이제 npm을 사용하여 Lightning Charge를 설치하고 charged를 실행하세요:

$ npm install -g lightning-charge $ charged --api-token</code>

그러면 charged가 기본 포트 9112에서 실행됩니다!

The nanopos Lapp을 설치하여 Lightning 모듈을 Micro POS 솔루션으로 전환하기

nanopos는 npm으로 쉽게 설치됩니다:

$ npm install -g nanopos

판매용 제품으로 items.yaml 파일을 편집하고 –currency로 통화를 지정한 다음 nanopos를 실행합니다:

$ nanopos -t <charge API token> --items-path items.yaml --currency USD

렌더링 된 페이지의 제목은 --title을 사용하여 변경할 수 있고, -m으로 선택할 수 있는 여러 가지 테마를 bootswatch.com에서 보실 수 있습니다.

이제 c-lightning, charged, nanopos LApp이 모두 휴대용 Armory에서 실행 중입니다!

거래가 끝나면 Armory를 종료하고 운반할 수 있도록 플러그를 뽑아 보관합니다. 다시 거래할 때는 플러그를 꽂고 ssh 연결을 한 뒤 c- lightning을 다시 실행합니다. 휴대성을 높이려면 VPS 또는 유사한 공공 호스팅 서비스에서 실행되는 bitcoind를 사용하도록 구성할 수 있습니다 (워크스테이션/노트북/ bitcoind가 있는 호스트를 함께 사용할 때와는 달리 Armory만 필요함).

또한 Armory는 연결 또는 전원 공급에 USB 호스트가 필요 없는 "단독 모드"로 실행할 수 있습니다 (하지만 전원 공급을 위해 USB는 필요함). 이를 통해 휴대성이 훨씬 좋은 배터리로 구동되고 WiFi로 수행되는 구성 등 다른 멋진 사용 사례도 만들어낼 수 있습니다!

읽어 주셔서 감사합니다!

-grubles

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