Lightning Network Node Kurulumu

Alper ÇANKAYA
8 min readFeb 8, 2018

İşe herhangi bir serverınızın olmadığını tamamen sıfırdan başladığınızı varsayarak digitalocean’da bir droplet kurulumu ile başlayalım.

1- Digitalocean.com adresinden üyeliğinizi gerçekleştirin.
→ Bu özel referanslı bir linktir. Bu link ile 10 USD hediye bakiyeniz hesabınızda. (Bana öyle dediler. Yatmazsa uyarın lütfen).

Bir kaç gün deneme yanılma tekrar kurulum durumları olursa sizi herhangi bir ücret ödemeden kurtaracak bu bakiye ;)

2- Üyeliğiniz sonrası aşağıdaki resimde görünen CREATE butonundan DROPLETi seçin

3- Burada bize hazır kurulu DOCKER app olmalı. Bu sebeple üstteki tab den “One-click apps” i seçin ve açılan bölümden aşağıdaki resimdeki gibi “DOCKER” uygulamasını seçiniz.

4- Bize bitcoin ağını komple indireceğiz ve o nedenle şuanki büyüklük yaklaşık 170GB buda demek oluyorki en az 170 GB dan büyük bir hard diske sahip olmamız gerekiyor.

Dilerseniz yukarıdaki gibi bir paket seçebilir dilerseniz daha uygun paketlere ekstra hard disk ilave edebilirsiniz.

5- Bir sonraki adımda server lokasyonumuzu seçiyoruz. Burada lokasyon seçmekte özgürsünüz ben San Francisco seçmiştim.

6- Son adımda yer alan “Add your SSH keys” kısmı önemli. Burada butonu tıkladıktan sonra çıkan bölümde yer alan adımları izleyerek bilgisayarınızın KEY lerini eşleştirmeniz gerekmekte.

Fakat bu bölümde başarısız olursanız dropleti oluşturduktan sonra droplet panelinde “Access” bölümünde ” Reset root password” butonunu tıklayın ve emailinize geçici bir SSH parolası gelecektir. Bu parola ile SSH girişi yaparsınız ve ilk girişinizde bu parolayı değiştirmenizi ister ve siz istediğiniz bir parola girer bundan sonraki girişlerinizde o parolayı kullanırsınız.

Bu adımlar ile dropletimizi kurduk. Artık bize çalışan bir bulut serverımız var.

Şimdi Kuruluma Başlayalım :

Öncelikle SSH ile dropletimize bağlanıyoruz. Bağlandıktan sonra droplet ismini değişmemişseniz şu şekilde bir satır çıkacak :

root@docker-s-6vcpu-16gb-sfo2-01:~#

Ben bundan sonraki kodlarımızda paylaşacaklarımı kopyala yapıştır ile uygulamak isterseniz buradaki server ismini kopyalamayın. Kodlarımız hep~# işaretinden sonra başlamakta.

İlk işlemimiz bitcoin ağını indirmek olacak.

1

root@docker-s-6vcpu-16gb-sfo2-01:~# git clone https://github.com/dougvk/lightning-node.git

2

root@docker-s-6vcpu-16gb-sfo2-01:~# cd lightning-node

3

root@docker-s-6vcpu-16gb-sfo2-01:~/lightning-node# docker build . -t dougvk/bitcoind

4

root@docker-s-6vcpu-16gb-sfo2-01:~# mkdir -p /scratch/bitcoin/mainnet/bitcoind

5

root@docker-s-6vcpu-16gb-sfo2-01:~# docker run --name bitcoind_mainnet -d -v /scratch/bitcoin/mainnet/bitcoind:/data -p 8333:8333 -p 9735:9735 dougvk/bitcoind:latest

Bundan sonra yaklaşık 8–12 saat arası sürebilecek bir download olacak. Bu nedenle gün içi bu işe başlamışsanız başka işlerinizle ilgilenin, dışarı çıkın gezin tozun :) yada gece başlayın bu işlemi yapıp uyuyun.

Arada bir durumu kontrol etmek isterseniz aşağıdaki kodu çalıştırabilirsiniz. Anahtar zincir ağının hangi tarihe kadar indirildiğini görebilirsiniz. Bu tarih günümüze geldiginde tamamen download edilmiş demektir

root@docker-s-6vcpu-16gb-sfo2-01:~# docker logs bitcoind_mainnet --tail "10"

Download bittikten sonra kuruluma devam ediyoruz.

6

root@docker-s-6vcpu-16gb-sfo2-01:~#  nano /usr/local/bin/bitcoin-cliYukarıdaki komut ile boş döküman açıyoruz. İçerisine gireceğimiz komut aşağıdaki gibidir:#!/usr/bin/env bash
docker run --rm --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/data dougvk/bitcoind:latest bitcoin-cli "$@"
Daha sonra bunu (ctrl+x) tuşlarına basarak kaydediyoruz. Çıkan uyarıda kabul yani yes in baş harfi "y" tuşuna basıp enterlıyoruz.

7

root@docker-s-6vcpu-16gb-sfo2-01:~# chmod +x /usr/local/bin/bitcoin-cli

8

root@docker-s-6vcpu-16gb-sfo2-01:~# bitcoin-cli getinfo

Bu adımdaki “getinfo” komutu bize aşağıdaki gibi bir bilgi dökümü verecektir.

{
"deprecation-warning": "WARNING: getinfo is deprecated and will be fully removed in 0.16. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo before upgrading to 0.16",
"version": 150100,
"protocolversion": 70015,
"walletversion": 139900,
"balance": 0.00038800,
"blocks": 505216,
"timeoffset": -1,
"connections": 15,
"proxy": "",
"difficulty": 2227847638503.628,
"testnet": false,
"keypoololdest": 1516416352,
"keypoolsize": 1999,
"paytxfee": 0.00050000,
"relayfee": 0.00500000,
"errors": ""
}

9

root@docker-s-6vcpu-16gb-sfo2-01:~# mkdir -p /scratch/bitcoin/mainnet/clightning

10

root@docker-s-6vcpu-16gb-sfo2-01:~# docker run --rm --name lightning --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/root/.bitcoin -v /scratch/bitcoin/mainnet/clightning:/root/.lightning --entrypoint /usr/bin/lightningd cdecker/lightningd:master --network=bitcoin --rgb=0066cc --alias=KOYMAKİSTEDİĞİNİZİSİM --ipaddr=SUNUCUNUNİPADRESİ --log-level=debug

Burada “alias=” kısmı koymak istediğiniz isim ve “ipaddr=” ise droplet ip adresinizdir.
Kodu çalıştırdıktan sonra aşağıdaki gibi çeşitli indirmeler olacaktır.

...
lightningd(1): Hello world from 1245432545ds4t2dgtrutr56745ewjhkjgfd4578 aka SLICKERGOPHER #03e71e (version v0.5.2-2016-11-21-1414-g5eceaa7)!
...
lightningd(1): Adding block 000000000000000000545ewr54df44ujgfh45324782ewr4725d7sf254wertrdf
lightningd(1): Adding block 00000000000000000065sdf54dsf45fewrwerew4fsd54242424rey4s2df42t42
lightningd(1): Adding block 000000000000000000wer5453475sd7f24we25r74254sd2f72we47tr257257ew
...

!!! Şimdi yeni bir ssh penceresi açın.

Eski pencereniz (yani yukarıda işlemleri yaptıgımız pencere) açık kalsın.

11

root@docker-s-6vcpu-16gb-sfo2-01:~#  nano /usr/local/bin/  lightning-cliYukarıdaki komut ile boş döküman açıyoruz. İçerisine gireceğimiz komut aşağıdaki gibidir:#!/usr/bin/env bash
docker run --rm --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/data dougvk/bitcoind:latest bitcoin-cli "$@"
Daha sonra bunu (ctrl+x) tuşlarına basarak kaydediyoruz. Çıkan uyarıda kabul etmek için yes in baş harfi olan "y" tuşuna basıp enterlıyoruz.

12

root@docker-s-6vcpu-16gb-sfo2-01:~# chmod +x /usr/local/bin/lightning-cli

13

root@docker-s-6vcpu-16gb-sfo2-01:~# lightning-cli getinfoBu kod sonrası aşagıdaki gibi bir info dizisi çıkacaktır.{ "id" : "05dsf5f5dg45fdgşlıudfşg758785675gh575457257257ghfjsdjh55647", "port" : 9735, "address" :
[ ], "version" : "v0.5.2-2016-11-21-1414-g5eceaa7", "blockheight" : 505236 }

Şimdi bir cüzdan adresi oluşturmanız ve en az 0,003–4 BTC cüzdanınıza göndermeniz gerekiyor. Lightning ağına çok az BTC göndermeliyiz.

14

root@docker-s-6vcpu-16gb-sfo2-01:~# lightning-cli newaddr

Bu komut sonrası aşağıdaki gibi bir adres çıkacak. Bunu not etmeyi unutmayınız.

{ "address" : "3f54545fgfg5875457fdg72572drt57457fdg" }

Şimdi bu adrese 0.003 yada 0.004 BTC gönderin. Blockchain explorer dan izleyin yaklaşık 6 onay alması gerekli. Daha sonra aşağıdaki kod ile kontrol edin

15

root@docker-s-6vcpu-16gb-sfo2-01:~# lightning-cli listfunds

Bu kod aşağıdaki gibi bir döküm verecek ve ne kadarlık satoshi olduğunu size bildirecektir. Gönderdiğiniz miktarı bu bilgide görmelisiniz. Unutmayın gönderimiz en az 6 onay almış olmalı.

{ "outputs" :
[
{ "txid" : "[HIDDEN]", "output" : 0, "value" : 400000 } ] }

Evet node u kurduk ve bir miktar BTC ile besledik. Bundan sonra agdaki diğer nodelara bağlanmamız gerekli.

Bu bağlantı için ben kendi oluşturduğum “Antpool” isimli node a bağlanmayı seçtim. İsmide özellikle Antpool kullandım başkaları için ilgi çekici olup bağlantıları arttıracaktır.

16

root@docker-s-6vcpu-16gb-sfo2-01:~# lightning-cli connect   036989c70ffabcd4c5942375983d2d4996565ba907e50f3cfcddcd0e4462bc6528 35.192.82.121 9735bu komut sonrası size şu şekilde bir çıktı verecektir{ "id" : "03661fc6d724bd12490f1c5dd021c8c762c5247a501bc6f69ce4aabf349b0a4f58" }

17

root@docker-s-6vcpu-16gb-sfo02-01:~# lightning-cli getpeersbu komut ile bağlantımızı kontrol ediyoruz. Komut sonrası size şu şekilde bir çıktı verecektir{ "peers" :
[
{ "state" : "GOSSIPING", "peerid" : "03661fc6d724bd12490f1c5dd021c8c762c5247a501bc6f69ce4aabf349b0a4f58", "netaddr" :
[ "138.68.41.94:9735" ], "connected" : true, "owner" : "lightning_gossipd" } ] }

18

Txfee oranını belirlemelisiniz. yani sizin üzerinden gerçekleşen transferlerden keseceginiz komisyon. Bunun için aşağıdaki kodu kullanın.

root@docker-s-6vcpu-16gb-sfo02-01:~# lightning-cli dev-setfees 25000 10500bu komut aşagıdaki gibi bir döküm verir. { "immediate" : 25000, "normal" : 10500, "slow" : 753 }Bu tx fee oranı genel olarak belirlenen ücretlerdir. Dilerseniz siz daha düşük yada daha yüksek belirleyebilirsiniz.

19

Şimdi kanalların çalışabilmesi için bağlandıgımız kanala fonlama yapmalıyız. Bu küçük bir miktar olacaktır. 0.002 BTC civarı olabilir. Bu kesinlikle gereklidir. Aradaki ödeme kanalı bu şekilde açılmış olacaktır.NODElar birbiri ile kontak kurarlar fakat fonlamaz iseniz bağlantı kopabilir.

root@docker-s-6vcpu-16gb-sfo02:~# lightning-cli fundchannel 03661fc6d724bd12490f1c5dd021c8c762c5247a501bc6f69ce4aabf349b0a4f58 2000000ödemenin TX id si altttaki gibi karşımıza çıkacaktır. Yine ödeme için en az 6 onay almalıdır.{ "tx" : "020000000001018bfe9f8ad414a2ba6cabe3ff91901dd9b4a51e40dede0439a5fcdcca1bd6a7a800000000171600149d3b1cdf27cc5d1d1cbaf74b24621ea979b11168ffffffff02465e0100000000001600141679b360311df963d881d7560fe08a615583fda4400d0300000000002200205c5b2b6b7bf08e157b66144644ed69cb0fc3b356285c80b63e31def60937925e02483045022100e6a8ef79cf4109cddb8de45167a962ce918e1f148a8fcf2dcfe8c74dec8aecdb02207d58a824152985b974fdf0e55acc04bc7b14061fda3528119f1d1aceab20b335012103dd126550f1c399bc5d0aa210c0a9725d4d31fe0f3e711298f80765058703d27300000000" }

Herşey yukarıdaki gibi olmuş ise tebrikler artık bir node sahibisiniz. https://lnmainnet.gaben.win/ adresinden yazmış oldugunuz node ismi ile arama yaparak nodeunuzu görebilirsiniz.

Zaman zman bilgi almak, fatura oluşturmak, ödemeleri kontrol etmek için gibi fonksiyonlara ait bazı komutlar vardır. Bu komutlara SSH ile bağlıyken “lightning-cli help” yazarak ulabilirsiniz. Burada komutlar şunlardır :

"lightning-cli dev-blockheight" ----> "Find out what block height we have" "lightning-cli dev-setfees" ----> "Set feerate in satoshi-per-kw for {immediate{normal} and {slow} (each optional).  Returns the value of those three feerates." "lightning-cli getnodes" ----> "Retrieve all nodes in our local network view" "lightning-cli getroute" ----> "Return route to {id} for {msatoshiusing {riskfactor} and optional {cltv} (default 9)" "lightning-cli getchannels" ----> "List all known channels." "lightning-cli invoice" ----> "Create invoice for {msatoshi} with {label} and {description} with optional {expiry} seconds (default 1 hour)" "lightning-cli listinvoice" ----> "Show invoice {label} (or all, if no {label}))" "lightning-cli delinvoice" ----> "Delete unpaid invoice {label}))" "lightning-cli waitanyinvoice" ----> "Wait for the next invoice to be paid, after {lastpay_index} (if supplied)))" "lightning-cli waitinvoice" ----> "Wait for an incoming payment matching the invoice with {label}" "lightning-cli decodepay" ----> "Parse and decode {bolt11} if possible, using {description} if necessary" "lightning-cli help" ----> "List available commands" "lightning-cli stop" ----> "Shutdown the lightningd process" "lightning-cli getlog" ----> "Get logs, with optional level: [io|debug|info|unusual]" "lightning-cli dev-rhash" ----> "SHA256 of {secret}" "lightning-cli dev-crash" ----> "Call fatal()" "lightning-cli getinfo" ----> "Get general information about this node" "lightning-cli sendpay" ----> "Send along {route} in return for preimage of {rhash}" "lightning-cli pay" ----> "Send payment specified by {bolt11} with optional {msatoshi} (iff {bolt11} does not have amount), {description} (required if {bolt11} uses description hash) and {riskfactor} (default 1.0)" "lightning-cli listpayments" ----> "Get a list of incoming and outgoing payments" "lightning-cli connect" ----> "Connect to {id} at {host} (which can end in ':port' if not default)" "lightning-cli getpeers" ----> "List the current peers, if {level} is set, include {log}s" "lightning-cli fundchannel" ----> "Fund channel with {id} using {satoshi} satoshis" "lightning-cli close" ----> "Close the channel with peer {id}" "lightning-cli dev-sign-last-tx" ----> "Sign and return the last commitment transaction" "lightning-cli dev-fail" ----> "Fail with peer {id}" "lightning-cli dev-reenable-commit" ----> "Reenable the commit timer on peer {id}" "lightning-cli dev-ping" ----> "Offer {peerid} a ping of length {len} asking for {pongbytes}" "lightning-cli dev-memdump" ----> "Dump the memory objects currently used" "lightning-cli dev-memleak" ----> "Dump the memory objects unreferenced" "lightning-cli withdraw" ----> "Send to {destination} address {satoshi} (or 'all') amount via Bitcoin transaction" "lightning-cli newaddr" ----> "Get a new address to fund a channel" "lightning-cli addfunds" ----> "Add funds for lightningd to spend to create channels, using {tx}" "lightning-cli listfunds" ----> "List funds available to the daemon to open channels"

Teknoloji henüz çok yeni. Yakın gelecekte belki çok kazandırmayacaktır ama işin en başında bulunmamız ve bu teknolojinin yayılması ihtimali bizlere parlak bir gelecek hazırlayabilir. Gelecegin madenciliği Lightnin Network Node udur.

  • Twitter üzerinde “gelecegin madenciliği” cümlem ile alakalı bazı sorular aldım. Geleceğin madenciliğinden ziyade günümüz madenciliğini nasıl yapabiliriz soruları gelmekte. Aslında günümüz madenciliği hakkında internette yeterli miktarda kaynaklar var fakat beni merak ediyorsanız ben cloud madencilik yapmaktayım. Uzun süredir hasflare firmasının sunduğu hizmetlerden faydalanıyorum. Dilerseniz buradan göz atabilirsiniz → https://hashflare.io/r/1AD50935
    Ayrıca genesis de iyidir fakat uzun süredir stokları yok.

Sizde arkadaşlarınıza lightning network ü anlatın onlarıda ağınıza bağlanmasını sağlayarak büyük bir ağa ulaşıp arkamızdan gelen tüm dünyadaki nodeların kendi agımıza bağlanmasını sağlayabiliriz.

Olabilecek hataların çözümü için elimden geldiğince burada sizlere yardımcı olmaya çalışacagım. Görüşlerinizi, sorunlarınızı altta yorumlar kısmına yazabilirsiniz.

Şuan ağdaki nodeları şu adreste görebilirsiniz : https://lnmainnet.gaben.win/

Lightning Network hakkında kaynak sitelerin linklerini bir araya toplayan https://teambitcoin.com/blog/2018/01/12/bitcoin-lightning-network-ultimate-resource-list/ adresinden yardım alabilirsiniz.

Ayrıca bu makaleyi hazırlarken şu kaynaklardan yardım aldım :

http://mihrac.com/lightning-network-kurulumu/

--

--