Kendi Lightning Ağınızı Oluşturun

Not: Bu yazı ''Run your own mainnet Lightning Node'' isimli makalenin türkçeye çevirilmişidir. Konuyu tam olarak anlayabilmeniz için Linux ve komut satırı konusunda tecrübenizin olması gerekiyor. Bazı sözcüklerin Türkçede karşılığı olmadığı için aynı şekilde kalmıştır.

Bitcoin, lightning ödeme kanalları ile (scale) ölçeklenebileceğini kanıtlama imkanına sahip olur. Lightning v1.0 özelliklerinin yayınlanmasını hevesle bekliyorum. Blockstream, sadece Lightning ödemeleri kabul eden çevrimiçi marketini açana kadar, onu çalıştırmak için kendimi yeterince motive hissetmemiştim.

Bu eğitimin amacı, sizi 24 saatten kısa bir sürede bitcoin lightning node dışında tamamen geçerli olan aktif nodelara geçirmektir. Zamanın çoğu Bitcoin blockchainini senkronize etmekle geçecek. Bu yüzden işleme uyumadan önce başlamanızı ve gerekli kısımları hallettikden sonra işlemi yataktan kalktığınızda bitirmenizi öneririm.

Bu eğitim, Docker kullanan Digital Ocean Box’un (ya da buna benzer bir şeyin) nasıl spin up edileceğini bildiğinizi varsayar. İçeriği anlamanıza gerek yok komutları sadece kopyala yapıştır yapın ama hepsini okumanızı öneririm.

Linux ve komut satırı konusunda donanımlı olduğunuzu varsayıyorum. Kabuk programları (shell scripts), cat’in vs. ne olduğunu açıklamamayı tercih ediyorum.

Eğer senkronize edilmiş bir bitcoin node'a sahip değilseniz, bu eğitimi 2 kısım şeklinde uygulayın

1- Uyumadan önce: Linux box’ınızı spin up edin ve full node senkronize işlemini başlatın.

2- Uyandıktan sonra: Lightning Node unuzu spin up edin, bitcoin ile besleyin ve etiket elde edin.

Hazırsanız başlıyoruz.

I. Kısım

Docker Örneklemenizi Spin Up Edin

İlk olarak, linux boxınızı açın ve çalıştırın. Digital Ocean ile bu çok kolay: 24 saatlik bir süreç için, 200 GB disk kapasitesi olan bir droplet yaratın. bu size yaklaşık 2.90$’a mal olacak.

Digital Ocean'ın üst kısımında “One-click apps” adında, önceden yüklediğiniz Docker ile bir dropleti spin up yapmanızı sağlayacak bir sekmeye sahiptir. Kutucukları işaretledikten sonra, ssh anahtarınızı ekleyin ve “create” butonuna basın. Yeni nodeunuzu SSH'ledikten sonra, Bitcoin nodeunu senkronize etmeye başlayabiliriz. Burada temelden alacağım ve bitcoind ve lightningd kullanacağım. Bunun en iyi seçim olduğundan emin değilim; fakat eğer isterseniz bu işlemi farklı kitaplıklar üzerinden port etmek çok kolaydır.

Bitcoin Zincirini Senkronize Etmeye Başlayın

Veri havuzunu kopyalayın

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

Bitcoind docker imajı inşa edin

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

Bitcoind node unu çalıştırın

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

Süreci kontrol etmek için bu komutu uygulayın

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

Burada yaptığımız şey; yerel (local), özel docker ağında yürütülen bir daemon işlemi, bitcoind (version 0.15.1) kurmaktır. Blockchain verisi /scratch'e kaydolur ve biz bitcoin ve lightning node için gerekli olan portları, denkleri (peers) dinlemek için açığa çıkarırız. (8333 den 9735’e sırayla). RPC portlarını gizliyoruz, böylece herkese açık olmayacak.

Bu komutu uyguladığınızda, senkronize işlemi 12 saat civarı sürecek ve 170GB disk kapasitesi gerekecek. Periyodik olarak, logları kontrol etmelisiniz ve senkronize bir şekilde kurulduğundan emin olmalısınız. Sonrasında Bitcoin komut satırı aracını kuracağız.

Node Arayüzünde Bir bitcoin-cli yaratın

root@docker-s-6vcpu-16gb-nyc3-01:~# cat /usr/local/bin/bitcoin-cli
#!/usr/bin/env bash
docker run --rm --network container:bitcoind_mainnet -v /scratch/bitcoin/mainnet/bitcoind:/data dougvk/bitcoind:latest bitcoin-cli "$@"

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

root@docker-s-6vcpu-16gb-nyc3-01:~# bitcoin-cli getinfo
{
  "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": ""
}

Yukarıda özetlenen bitcoin-cli için kabuk programını catledik. Spin up eden tek docker komutu içeriyordu, emri uyguluyordu ve kendisini temizliyordu. Lütfen RPC portlarını gizlediğinizden emin olun, CLI’ı docker işlemleriyle aynı ağda yürütmemiz lazım. Script i yarattığınızda, onu test edin. Yukarıdaki kodun işlem çıktısına bir göz atın.

Uyuyun

II. Kısım

Lightning Nodeunuzu Mainnet Üzerinde Spin Up Edin

Bitcoin node'unuzun ağ ile senkronize olduğunu doğruladığınız zaman lightning node'unuzu spin up yapmalısınız. Bu işlem bitcoind ye benzer, ama biraz daha hızlıdır. (2 dakika kadar)

Mainnet Üzerinde lightning node'unu Çalıştırın

root@docker-s-6vcpu-16gb-nyc3-01:~# mkdir -p /scratch/bitcoin/mainnet/clightning
root@docker-s-6vcpu-16gb-nyc3-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 --log-level=debug

Çıktıları Kontrol Edin

...
lightningd(1): Hello world from 03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c aka SLICKERGOPHER #03e71e (version v0.5.2-2016-11-21-1414-g5eceaa7)!
...
lightningd(1): Adding block 00000000000000000055234efac33e0ea30cc8e84ded7997f9e434534fd6f1bb
lightningd(1): Adding block 0000000000000000006fcfbab65ccb4634a800c5b12913b8379e6704b42db663
lightningd(1): Adding block 0000000000000000003f350dcff4fa5b1df61355cd80e9b06be55654d6384518
lightningd(1): Adding block 0000000000000000003b414eadfe9751909bdced866c0fa65b3f0156ebe7168e
lightningd(1): Adding block 000000000000000000377f67b9630130f914d142eb27b286cd81364aa7459d1e
lightningd(1): Adding block 000000000000000000739bd7336736f4a050dc22032e611e7cd747750db71c87
lightningd(1): Adding block 0000000000000000002de8afbb90006588e639cc0f55eb740bc2b76746eff050
lightningd(1): Adding block 0000000000000000007ad87ace5ddec90c0afd371d67cfd45ca3ad01f9b78cf1
lightningd(1): Adding block 00000000000000000014cf80dabf7e6d0b8dec51bc9914311401a9605f6b3606
...

Lightning node'u Bitcoin ile aynı docker ağı arayüzünde kullandığınıza dikkat edin, böylece RPC (clients) müşterileri birbirleriyle sohbet edebilirler. Lightning komut satırı aracıyla, aynı numarayı kullanacağız.

Node'lu Arayüze Lightning -cli Kısayolu Ekleyin

#!/usr/bin/env bash
docker run --rm -v /scratch/bitcoin/mainnet/clightning:/root/.lightning --entrypoint /usr/bin/lightning-cli cdecker/lightningd:master "$@"

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

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli getinfo
{ "id" : "03e71ed1bbedcf41d97e06ef3dfe4cdf79e871e9a3c809ab32b78e71dea45bf78c", "port" : 9735, "address" :
	[  ], "version" : "v0.5.2-2016-11-21-1414-g5eceaa7", "blockheight" : 505236 }

Tebrikler, full lightning node u spin up yapmayı başardınız. Geriye kalan tek şey, bunu diğer node'lara bağlamak ve ödeme kanallarını açmak. Bu bölüm; olayı kavramam için en zorlandığım kısımdı, ama aynı zamanda en değerli kısım.

Lightning Node'a Bir Miktar Bitcoin Gönderin

Lightning node uma .003 bitcoin (yaklaşık 30$) gönderdim. Bunun çok yeni ve hata vermeye müsait olduğunu unutmayın. Sadece, kaybetmeye razı olacağınız miktar kadar oynayın. Lezzetli coinler elde etmek için, bir cüzdan adresi oluşturmak zorundasınız.

Lightning Node Cüzdan Adresinizi Oluşturun

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli newaddr
{ "address" : "3Dx1XCcBsTtUQmWW6KD8PfMx6fB9saejYM" }

6 Onay İçin Bekleyin Sonra Bakiyenizi Kontrol Edin

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli listfunds
{ "outputs" :
[
{ "txid" : "[HIDDEN]", "output" : 0, "value" : 300000 } ] }

İşleminizin onaylanması yaklaşık 60 dk sürecektir.

Bir Node'a Bağlanın

İşte burada bir şeyler ilginçleşmeye başlıyor. Lightning node'ları bulmak için ben bu siteyi kullandım. Hangisi size yakın gelirse onu seçmekte serbestsiniz. Hatırlayın, bağlanabilirlik ne kadar fazla olursa, masraflarınız o kadar düşer ve ödeme yolunuz için beklenen onaylar o kadar az olur. Ben SLEEPYARK’ı seçtim.( Ekran görüntüsüne bakın)

Websitesinden Sleepyark Gibi Bir Node Bulun

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli connect 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 104.198.32.198 9735
{ "id" : "02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432" }

Şimdi Node İle Gossiping Yapmalısınız

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli getpeers
{ "peers" :
[
{ "state" : "GOSSIPING", "peerid" : "02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432", "netaddr" :
[ "104.198.32.198:9735" ], "connected" : true, "owner" : "lightning_gossipd" } ] }

Şimdi Makul Bir Tx fee (işlem ücreti) Ayarlayın

root@docker-s-6vcpu-16gb-nyc3-01:~# bitcoin-cli settxfee 0.005

Sonrasında Lightning Kanalından 2 Katman Açın Ve Fonlayın

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli fundchannel 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 200000
{ "tx" : "020000000001018bfe9f8ad414a2ba6cabe3ff91901dd9b4a51e40dede0439a5fcdcca1bd6a7a800000000171600149d3b1cdf27cc5d1d1cbaf74b24621ea979b11168ffffffff02465e0100000000001600141679b360311df963d881d7560fe08a615583fda4400d0300000000002200205c5b2b6b7bf08e157b66144644ed69cb0fc3b356285c80b63e31def60937925e02483045022100e6a8ef79cf4109cddb8de45167a962ce918e1f148a8fcf2dcfe8c74dec8aecdb02207d58a824152985b974fdf0e55acc04bc7b14061fda3528119f1d1aceab20b335012103dd126550f1c399bc5d0aa210c0a9725d4d31fe0f3e711298f80765058703d27300000000" }

Lightning Cüzdanınızı Tx Id İle Kontrol Edin

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli listfunds
{ "outputs" :
[
{ "txid" : "c48cbca7bc1569514e9b52dc7d4df01ae3372503cb204b82f7b2d7e3fb742b7c", "output" : 0, "value" : 89670 } ] }

Ben bu adımları izlediğimde; bitcoin node'um için çok düşük fee ücreti verdiğimi fark ettim. Burada görebilirsiniz. 40 sat/B hiç iyi değil. Ama bir şekilde şans yüzüme güldü. Byte başına daha ucuz maliyet getirecek bir kanal açmam için eksik bir şeylerin olması tamamen mümkün. İşte bu yüzden özetime 500 sat/B ödenmesi için bir adım ekledim. Makul bir ücret hesaplamak için güzel bir siteyi burada bulabilirsiniz.

Evet şimdi Lightning kanal açma işlemi için 6 onayı da bekledikten sonra, son aşamaya geçebiliriz, etiketler(stickers) için Blockstream Store'a ilerleyin, sepetinize birkaç etiket (stickers) ekleyin ve ödeme sayfasına geçin. Ödeme sayfasında sizi bu ekran karşılayacaktır.

 

Yukarıdaki ekran görüntüsündeki uzun sayı dizisi BOLT11 adresi diye bilinen şeydir. Tam olarak neler döndüğünü çözebilmek(decode) için kendinizinkini komut satırına yapıştırın. İşte örnek:

BOLT11 Ödeme Dizininizi Decode Edin

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli decodepay lnbc1712393610p1pdx8n8mpp5c72tc40vzyf9deqm5lzn76404heejady02l494ykke3vm3x44y8qdy2gfkx7cmtwd68yetpd5azqv339cunvgz42dzzqen0wgsyymr0vd4hxarjv4sk6gznv96x2mrvd96x2grnw35kx6m9wgs8sgp5ypskuepqf35kw6r5de5kueeqwd6xjcmtv4ezq7pqxvcqpggq86huylgdcd4st0d8thgdlw67tefjkhrnssyf8zk2s9cu37hdanwm6q96llg5zgjckwe7jamsmxnp4vy4q7vyulv57d9yg0wm7df0cpgwgu2m
{ "currency" : "bc", "timestamp" : 1516489979, "expiry" : 3600, "payee" : "02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432", "msatoshi" : 171239361, "description" : "Blockstream: 21.96 USD for Blockstream Satellite sticker x 4 and Lightning sticker x 3", "payment_hash" : "c794bc55ec111256e41ba7c53f6aafadf39975a47abf52d496b662cdc4d5a90e", "signature" : "30440220400fabf09f4370dac16f69d77437eed79794cad71ce10224e2b2a05c723ebb7b0220376f402ebff45048962cecfa5ddc366986ac2541e6139f653cd2910f76fcd4bf" }

Blockstream emrimle ilgili bir çok detay içeriyor. Kod çözümlü alanlardan birisi, ödemenizi yönlendirmeye çalıştığınız Lightning node un node ID’sidir. Bu ID’yi, bu node a ödememizi yönlendirirken bize ne kadara mal olacağını hesaplamak için kullanabiliriz ve sonrasında node u öderiz!

Node İçin Bir Yol Bulun

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli getroute 02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432 200000000 0
{ "route" :
    [
        { "id" : "02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432", "channel" : "505231:2001:1", "msatoshi" : 200000000, "delay" : 9 } ] }

Bolt11 Adresinizi Ödeyin

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli pay lnbc1712393610p1pdx8n8mpp5c72tc40vzyf9deqm5lzn76404heejady02l494ykke3vm3x44y8qdy2gfkx7cmtwd68yetpd5azqv339cunvgz42dzzqen0wgsyymr0vd4hxarjv4sk6gznv96x2mrvd96x2grnw35kx6m9wgs8sgp5ypskuepqf35kw6r5de5kueeqwd6xjcmtv4ezq7pqxvcqpggq86huylgdcd4st0d8thgdlw67tefjkhrnssyf8zk2s9cu37hdanwm6q96llg5zgjckwe7jamsmxnp4vy4q7vyulv57d9yg0wm7df0cpgwgu2m
{ "preimage" : "79f88fe9765997d2005e012ff32bc5dceeb99b111b81aa5087b815f2e4cdc59a" }

Kanalda Ne Kadar Kaldığını Kontrol Edin

root@docker-s-6vcpu-16gb-nyc3-01:~# lightning-cli getpeers
{ "peers" :
	[
		{ "state" : "CHANNELD_NORMAL", "netaddr" :
			[ "104.198.32.198:9735" ], "peerid" : "02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432", "connected" : true, "owner" : "lightning_channeld", "channel" : "505231:2001:1", "msatoshi_to_us" : 28760639, "msatoshi_total" : 200000000 }]}

Buraya yazılması gereken bir kaç şey var. Bu ödeme, Blockchain e bağlanmadı. Sadece bu ödeme kanalında ve lightning ağında mevcut. Yine de, lightning protokolünün doğası gereği, Blockstream ödememe riskini barındırmaz.

Şimdi etiketlerimi (stickers) bekliyorum. Blockstream güvenilir bir üçüncü şahıs umarım burada verdikleri sözleri yerine getirirler.

Takipte Kal !
Paylaş
Teknochain
Bitcoin ve dijital dünyaya dair