Bouw een draagbare, overal aansluitbare Lightning-node!
Lightning Network

Bouw een draagbare, overal aansluitbare Lightning-node!

Grubles

Deze post is van Lightning-liefhebber @notgrubles en is voorheen gepubliceerd op zijn blog.

Secties

●       Intro / benodigdheden

●       Packet forwarding instellen

●       c-lightning en bitcoin-cli bouwen

●       Lightning Charge installeren

●       Nanopos installeren voor point-of-sale

De USB Armory van Inverse Path is een uniek apparaat dat populair is geworden onder de categorie SoC-powered hardware, zoals de Raspberry Pi en Rock64. Het heeft net als andere systemen niet erg veel rekenkracht. Wat er echter uniek aan is, is dat het apparaat compact is en veel componenten ondersteunt. De Armory heeft geen stopcontact of adapter nodig, en kan volledig functioneren met slechts een USB-poort. De Armory krijgt niet alleen stroom via USB, maar communiceert ook op dezelfde manier met de host, via een geëmuleerde Ethernet-verbinding. De Armory bevat een NXP i.MX53 ARM® Cortex™-A8 processor op 800 Mhz. Er zit tevens 512 MB DDR3 RAM bij, en een microSD card slot voor opslag.

"De USB armory is gemaakt door Inverse Path om de ontwikkeling van beveiligingsapplicaties te ondersteunen. De mogelijkheid om verschillende USB-apparaten te emuleren, de snelheid van de i.MX53 SoC, de beveiligingsfuncties, en de flexibele en aanpasbare besturingsomgeving zorgen ervoor dat de USB armory het ideale platform is voor allerlei persoonlijke, beveiligde applicaties. De transparantie en het open en minimale ontwerp voor de hardware van de USB armory maakt het makkelijk om audits uit te voeren en verkleint de kans op aanvallen via de supply chain." Bron: https://inversepath.com/usbarmory

Een draagbare Lightning-wallet voor Bitcoin is een uitstekende manier om gebruik te maken van de compacte vorm, stroom via USB, en de geëmuleerde USB-Ethernet-verbinding van het apparaat. Met deze configuratie kunnen gebruikers een apparaat opzetten met c-lightning waarbij hun privé-sleutels op een draagbaar platform staan opgeslagen dat makkelijk kan worden aangesloten op bestaande hardware, zoals een Raspberry Pi met bitcoind. Een ander scenario is een laptop waar een full node op draait. De Armory kan simpelweg worden aangesloten om transacties uit te voeren via het Lightning Network en Lightning-applicaties (LApps) te gebruiken. Een andere use case voor deze opstelling is voor het toevoegen van rekenkracht aan een zwakker apparaat zoals een oudere laptop of Raspberry Pi. Op deze manier fungeert de Armory als een soort co-processor voor Lightning!

Benodigdheden:

●       Een USB Armory van Inverse Path

●       Een microSD-kaart van 4 GB of meer met daarop een installatie van de officiële Debian base image.

●       Een USB-hostapparaat (laptop, workstation, of RPi en dergelijke)

●       bitcoind op je LAN, of elders met toegang tot de credentials voor RPC.

De Armory klaarmaken voor installatie

Het enige wat nodig is om lightningd op afstand te laten communiceren met een bitcoind is bitcoin-cli, wat de benodigde tijd om op de Armory te bouwen flink reduceert. Cross-compilation is mogelijk, maar gaan we hier niet bespreken. Om alleen bitcoin-cli te bouwen, moet de code voor Bitcoin worden opgehaald uit de repository op Github. Voordat dit kan worden gedaan, moet eerst packet forwarding worden ingeschakeld op het hostapparaat (het apparaat waar de Armory op wordt aangesloten).

Het netwerk

De Armory (als de officiële Debian base image wordt gebruikt) creëert bij het aansluiten en opstarten een virtuele interface die een Ethernet-verbinding emuleert. Nadat de configuratie is voltooid, zijn de Armory en de USB-host in staat om met elkaar te communiceren alsof ze op dezelfde LAN aanwezig waren (want technisch gezien is dat ook zo). Het is aan de USB-host om de packets van Armory te forwarden. Als dit wordt toegestaan, kan de Armory op het Lightning Network kanalen (channels) openen met nodes die zich buiten het lokale netwerk bevinden. Packet forwarding is ook nodig om build tools en dependencies te installeren.

Windows: De instructies om packet forwarding in te schakelen (ook bekend als Connection Sharing) voor Windows 7, 8, en 10 kunnen hier worden gevonden.

MacOS: Instructies voor MacOS kunnen hier worden gevonden.

Linux: Let op: op Ubuntu 16.04 veroorzaakte de Network Manager geen problemen. Dit kan voor de configuratie van andere distributies echter anders zijn. Volgens de instructies van Linux:

Schakel "masquerading" in voor uitgaande verbindingen:

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

Schakel IP forwarding in:

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

Verbind de Armory, en merk op dat de LED wit knippert. Dit betekent dat de Armory operationeel is. De LED is de "hartslag" van de Armory en knippert sneller als hij in gebruik is.

Gebruik vervolgens ssh om met je Armory te verbinden via de standaard gebruikersgegevens van de Debian base image (gebruikersnaam en wachtwoord: usbarmory)

$ ssh usbarmory@10.0.0.1

Ping een publiek adres om te zien of je Armory correct is verbonden:

$ ping 8.8.8.8

Als het goed is, verschijnt er een reactie:

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

Mooi!

Het bouwen van c-lightning

$ sudo apt update && sudo apt -y upgrade

Zodra dat klaar is, moet de Armory opnieuw worden gestart voor het geval dat er een kernel-update is:

$ sudo reboot

Begin vervolgens met het installeren van de build tools en dependencies die nodig zijn om bitcoin-cli en c-lightning te compileren:

$ 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

Kloon de repository van c-lightning:

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

Navigeer naar de lokale repository:

$ cd lightning

Start vervolgens het bouwproces:

$ make

Navigeer als dit eenmaal klaar is naar de home-map van de gebruiker van usbarmory:

$ cd ~/

Download het archief met de broncode van Bitcoin Core 0.16.0, SHA256SUMS.asc, en importeer de gpg-sleutel van de Core maintainer om de hashes te verifiëren. Decomprimeer uiteindelijk het archief:

$ 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

De output zou "OK" moeten tonen

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

Geweldig!

Vervolgens gaan we bitcoin-cli bouwen.

Het bouwen van bitcoin-cli

Navigeer naar de map met de broncode van Bitcoin en start het bouwproces:

$ cd bitcoin-0.16.0/

$ ./autogen.sh

Het kan zijn dat er tijdens het verwerken van autogen.sh een stapel waarschuwingen verschijnen over "locales". Dit kan worden verholpen door een locale in te stellen:

$ sudo dpkg-reconfigure locales

# kies bijvoorbeeld en_US.UTF-8 en druk op OK

Het bouwproces vervolgen:

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

-march=native geeft door aan de compiler, gcc, dat de processor van Armory automatisch moet worden herkend en optimalisaties ervoor moeten worden gebruikt. Het helpt om de kracht van de ARM-processor te optimaliseren, want de processor is relatief langzaam. We gaan bitcoind niet bouwen, dus libdb is niet nodig. Voer --disable-wallet in om te bouwen zonder support voor de wallet (c-lightning wordt met deze configuratie de wallet).

Bouw vervolgens bitcoin-cli:

$ make src/bitcoin-cli

Kopieer de vers gebouwde bitcoin-cli binary naar /usr/local/bin:

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

De reactie moet zijn: "/usr/local/bin/bitcoin-cli"

</code>

De Armory verbinden met bitcoind via RPC

c-lightning maakt gebruik van bitcoin-cli om onverwerkte transacties naar bitcoind te sturen om bijvoorbeeld een kanaal te openen of coöperatief/geforceerd te sluiten. Sinds c-lightning draait op de Armory, hebben we ook bitcoin-cli nodig. Maar bitcoin-cli moet kunnen communiceren met bitcoind, dus het volgende moet worden toegevoegd en ingesteld in bitcoin.conf voor de Armory en de USB-host:

Op de USB-host, of het apparaat waar bitcoind op draait, moet het volgende in bitcoin.conf worden gezet:

rpcuser= je_gebruikersnaam rpcpassword= je_wachtwoord_niet_dit rpcallowip= het IP-adres van de Armory

Sla de veranderingen op, maak op de Armory bitcoin.conf aan, en voeg het volgende toe:

$ nano ~/.bitcoin/bitcoin.conf

In bitcoin.conf:

rpcuser= gebruikersnaam_zoals_net rpcpassword= wachtwoord_zoals_net rpcconnect= IP van de USB-host (10.0.0.2)

Vervang 10.0.0.2 met het IP-adres waarop bitcoind luistert (bijv. 192.168.0.254).

Probeer bitcoind aan te roepen vanuit de Armory:

$ bitcoin-cli -getinfo

Bij succes wordt een reactie teruggestuurd met de relevante informatie (block height, difficulty, enz.) Perfect!

Het activeren van c-lightning

Nu alles is gebouwd, geconfigureerd, en aangesloten op het netwerk, kan c-lightning worden gestart.

Start een tmux-sessie en start lightningd:

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

Let op: voer --network bitcoin in als je #reckless (roekeloos) bent.

Als lightningd "Adding block number" toont , en met lightning-cli getinfo de huidige block height verschijnt (en andere info), dan is de Armory succesvol opgezet!

lightning-cli kan nu worden gebruikt om een nieuw adres te genereren waarmee bitcoins kunnen worden gestuurd en ontvangen, en kanalen op het Lightning Network kunnen worden geopend en gesloten!

Lightning Charge

LApps zijn Lightning-applicaties die gebruikmaken van onmiddellijke betalingen via het Lightning Network. Er staan een aantal recent uitgebrachte LApps weergegeven op de blog van Blockstream.

Om deze LApps te draaien, moet Lightning Charge worden geïnstalleerd op de Armory.

Lightning Charge is een systeem om microtransacties te verwerken via node.js. Het maakt c-lightning bereikbaar via een REST API die kan worden aangesproken via libraries voor JavaScript en PHP. Van: https://blockstream.com/2018/01/16/lightning-charge/

Lightning Charge maakt gebruik van c-lightning en nodejs. Installeer ze nu:

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

Er kunnen fouten verschijnen over permissies vanwege het nodejs-pakket van nodesource.com. Volg deze stappen om dit te voorkomen:

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

Voeg het volgende toe aan ~/.profile:

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

En als laatste:

$ source ~/.profile

Gebruik vervolgens npm om Lightning Charge te installeren, en start charged:

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

charged draait standaard op poort 9112!

De nanopos LApp installeren om je Lightning Module in een mini-Point-Of-Sale-apparaat te veranderen

nanopos is makkelijk te installeren met npm:

$ npm install -g nanopos

Pas items.yaml aan met de producten die te koop zijn, specificeer de valuta met –currency , en start nanopos :

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

De titel van de getoonde pagina kan worden veranderd met --title, en er zijn verschillende thema's beschikbaar op bootswatch.com die kunnen worden gekozen met -m.

Nu draaien c-lightning, charged, en de nanopos LApp allemaal op de draagbare Armory!

Nadat de transacties zijn voltooid, kan de Armory worden uitgezet en van de kabel worden gehaald om hem op te bergen voor vervoer. Om weer een transactie uit te voeren, hoeft alleen maar de kabel te worden aangesloten, met ssh te worden verbonden, en c-lightning te worden opgestart. Het is mogelijk om bitcoind op een VPS of een soortgelijke hosting-dienst te draaien om het systeem nog draagbaarder te maken (dan is alleen de Armory nodig, en geen workstation/laptop/host met bitcoind).

De Armory kan ook in "standalone mode" draaien zonder USB-host voor connectiviteit of stroom (USB-stroom is wel nog nodig). Zo kan de Armory ook op andere interessante manieren worden gebruikt, zoals met een draagbare batterij en WiFi-verbinding!

Bedankt voor het lezen!

-grubles

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