Bitcoin Ağı

Bitcoin Ağı

Son güncelleme: Ağustos 19, 2017

Bitcoin, işlemleri ve blokları yaymak için basit bir yayın ağı kullanır. Buna Bitcoin ağı denir. Tüm iletişimler TCP üzerinden yapılır. Bitcoin, -port parametresi ile 8333 dışındaki portların tamamını kullanabilir. IPv6, Bitcoind/Bitcoin-Qt v0.7 ile desteklenir.

Mesajlar

  • version – Program sürümü ve blok sayımı hakkında bilgidir. İlk bağlandığında değiştirilir.
  • verack – Bağlanmaya hazır olduğumuzu onaylayan bir versiyon mesajına yanıt olarak gönderilir.
  • addr – Bir veya daha fazla IP adresi ve port listesi.
  • inv – “Bu bloklarım/işlemlerim var: …” mesajıdır.. Normalde yalnızca yeni bir blok veya işlem geçirildiğinde gönderilir. Bu sadece bir listedir, gerçek veriler değildir.
  • getdata – Hash tarafından tek bir blok veya işlem istenmesidir.
  • getblocks – Bir aralıktaki tüm blokların inv‘sini istemektir.
  • getheaders – Bir aralıktaki tüm blok başlıklarını içeren bir üstbilgi mesajı istemektir.
  • tx – İşlem göndermektir. Bu, yalnızca bir getdata isteğine yanıt olarak gönderilir.
  • block – Bir blok göndermektir. Bu, yalnızca bir getdata isteğine yanıt olarak gönderilir.
  • headers – 2.000 blok başlığına kadar gönderir. Üretici olmayanlar tüm bloklar yerine blokların başlıklarını indirebilir.
  • getaddr – Bilinen etkin eşlerden oluşan bir addr mesajı ister (önyükleme için).
  • submitorder, checkorder, ve reply – Bir IP işlemi gerçekleştirirken kullanılır.
  • alert – Bir ağ uyarısı gönderir.
  • ping – Hiçbir şey yapmaz. Bağlantının hala çevrimiçi olduğunu kontrol etmek için kullanılır. Bağlantı kesilirse bir TCP hatası oluşacaktır.

Daha fazla bilgi ve kapsamlı teknik bilgi protokol açıklamasında bulunmaktadır.

Bağlantı

Bir eşe (peer) bağlanmak için, versiyon numaranızı, blok sayınızı ve geçerli saatinizi içeren bir sürüm mesajı (version) gönderirsiniz. Uzaktaki eş, versiyonunuzdan bağlantı kabul ediyorsa, bir verack mesajı ve kendi sürüm mesajını geri gönderir. Onun versiyonundan bağlantıları kabul ederseniz, kendi verack mesajınız ile cevap vereceksiniz.

Eşlerinizden gelen zaman verileri toplanır ve medyan değer, Bitcoin tarafından saati kullanan tüm ağ görevleri için kullanılır (diğer sürüm mesajları hariç).

Ardından, bilmediğiniz tüm adresleri saklayan getaddr ve addr iletilerini takas edersiniz. addr mesajları genellikle yalnızca bir adres içerir, ancak bazen 1000’e kadar çıkabilir. Bu, bir takasın başında en yaygın olan şeydir.

Standart röle

Birisi bir işlem gönderdiğinde, onu içeren bir inv mesajı tüm eşlere gönderilir. Eşleri, getdata ile tam işlem talep ederler. İşlemi aldıktan sonra geçerli olduğunu düşünürlerse, hareketi tüm akranlarına bir inv ile yayınlar ve bu böyle devam eder. Eşler yalnızca işlem yapmıyorlarsa, işlemleri aktarırlar. Bir eş, halihazırda bildiği bir işlemi tekrar yayınlamayacaktır, ancak bir süre sonra herhangi bloka girmemesi durumunda o işlem unutulacaktır. Ancak, işlemin göndereni ve alıcısı yeniden aynı işlemi yayınlanacaktır.

Oluşturan herhangi biri, geçerli alınan işlemleri toplayacak ve bunları bir blokta dahil etmeye çalışacaktır. Birisi bir blok bulursa, onu içeren bir inv‘i yukarıda belirtildiği gibi tüm eşlerine gönderir. İşlemlerde de aynı şekilde çalışır.

Herkes her 24 saatte bir kendi IP adresini içeren bir addr yayınlar. Nodlar, bu mesajları bir çift eşine iletir ve kendilerine yeni olan bu adresi bir yerde saklarlar. Bu sistem sayesinde, herkes şu anda ağa hangi IP’lerin bağlı olduğunu makul derecede net bir şekilde görür. Ağa bağlandıktan sonra, başlangıç ​​adresiniz olması nedeniyle neredeyse anında herkesin adres veritabanına eklenirsiniz.

Ağ uyarıları alert mesajları ile yayınlanır. Inv benzeri bir sistem kullanılmaz; bunlar tüm uyarıyı içerir. Alınan bir uyarı geçerliyse (özel anahtarlı kişiler tarafından imzalanmış olarak), tüm eşlere iletilir. Bir uyarı hala geçerli olduğu sürece, her yeni bağlantının başında yeniden yayınlanır.

İlk blok indirme

Bir bağlantının başında, bildiğiniz en son blok hash’ini içeren bir getblocks mesajı gönderirsiniz. Eş, bunun en yeni blok olduğunu düşünmezse, listelediğinizden en fazla 500 blok içeren bir inv gönderir. Ardından, getdata ile tüm bu blokları istersiniz ve eş bunları block mesajlarıyla gönderecektir. Tüm bu blokları indirdikten ve işledikten sonra, tüm blokları buluncaya kadar başka bir getblocks göndereceksiniz ve böyle devam edecektir.

Thin SPV İstemcileri

BIP 0037, Basit Ödeme Doğrulaması yoluyla ince veya hafif istemcilere destek sağladı. SPV istemcilerinin blok zincirindeki fonların varlığını doğrulamak için tam blok içeriğini indirmeleri gerekmez, ancak diğer nodlardan ihtiyaç duydukları verileri elde etmek için blok başlıkları ve bloom filtreleri zincirine güvenirler. Bu istemci iletişimi yöntemi, tam nodlarla yüksek güvenliği sağlayan güvenilir iletişim sağlar, ancak eşler hangi SPV istemcisinin hangi adresleri aradığını çıkarabileceği için gizlilik noktasında dikkat edilmesi gerekir.

MultiBit ve Bitcoin Cüzdan, temel olarak bitcoinj kütüphanesini kullanarak bu şekilde çalışır.

Bootstrapping

Adresinizi en son gördüğünüz zamandan bu yana adres veritabanınızı sıralayarak hangi arkadaşlarınızın bağlanacağını seçebilir ve ardından biraz rastgele ekleme yapabilirsiniz.

Bitcoin’in eşleri (peer) bulmak için üç yöntemi vardır.

Addr

Yukarıda açıkladığımız addr mesajları, IRC önyükleme sıkıştırma yöntemine benzer bir efekt yaratır. Bir eş katıldığı zaman makul derecede hızlı bir şekilde bilirsiniz, ancak ayrıldıklarında bir süre bunu bilmezsiniz.

Bitcoin, “tohum nodları” (seed nodes) olarak bilinen adreslerin bir listesi ile birlikte gelir. IRC’ye bağlanamıyorsanız ve daha önce hiç ağa bağlanmadıysanız, müşteri bu listedeki nodlardan birine bağlanarak adres veritabanını güncelleştirecektir.

-Addnode komut satırı seçeneği manuel bir şekilde nod eklemek için kullanılabilir. -connect seçeneği, bitcoin’i yalnızca belirli bir noda bağlamaya zorlayabilir.

DNS

Bitcoin, birkaç ana bilgisayar adının IP Adreslerini arar ve bunları potansiyel adresler listesine ekler. V0.6.x ve sonrası itibariyle varsayılan tohumlama (seeding) mekanizması budur.

IRC

Bitcoin istemcisinin 0.6.x sürümünden itibaren, IRC önyükleme artık varsayılan olarak etkinleştirilmemiştir. Aşağıdaki bilgiler, önceki sürümlerin çoğu için doğrudur.

Bitcoin irc.lfnet.org üzerinde # bitcoin00 ve # bitcoin99 arasındaki rasgele bir kanala katılır. Nickiniz, IP adresinizin kodlanmış bir formuna ayarlanır. Kanaldaki tüm kullanıcıların tüm kanallarını çözerek, Bitcoin’e bağlı olan tüm IP adreslerinin bir listesini alırsınız.

6667 numaralı port’a giden bağlantıları sağlayamayan ana makineler için, lfnet sunucuları da 7777 numaralı port’u dinler.

Heartbeat

İstemci mesaj gönderdikten sonra otuz dakika veya daha fazla süre geçtiğinde, eş noda olan bağlantıyı canlı tutmak için bir mesaj gönderecektir.

Bir eş nodunun herhangi bir iletiyi iletmesinin üzerinden doksan dakika geçtiyse, istemci bu bağlantının kapalı olduğunu varsayacaktır.

Bir Cevap Yazın