Bu bölümde, IBax düğümlerinin teknik açıdan birbirleriyle nasıl etkileşime girdiğini anlatacağız.
Sunucu arka plan programının, çeşitli sunucu işlevlerini yürüten ve IBax'ın blok zinciri protokolünü destekleyen her ağ düğümünde çalışması gerekir. Blok zinciri ağında, arka plan programı blokları ve işlemleri dağıtır, yeni bloklar oluşturur ve alınan blokları ve işlemleri doğrular ve fork sorununu önleyebilir.
Bir honor düğümü aşağıdaki sunucu arka plan programlarını çalıştırır:
-
BlockGenerator arka plan programı
Yeni bloklar oluşturma.
-
BlockCollection arka plan programı
Diğer düğümlerden yeni bloklar indiriliyor.
-
Düğümdeki blokların diğer düğümlerin çoğunda da bulunduğunun doğrulanması.
-
Disseminator arka plan programı
İşlemleri ve blokları diğer onur düğümlerine dağıtma.
-
QueueParserBlocks arka plan programı
Diğer düğümlerden gelen blokları içeren kuyruktaki bloklar.
Blok işleme mantığı, BlockCollection arka plan programı ile aynıdır.
-
QueueParserTx arka plan programı
Kuyruktaki işlemlerin doğrulanması.
-
Zamanlayıcı arka plan programı
Sözleşmeleri planlandığı gibi yürütmek.
Bir koruyucu düğüm aşağıdaki sunucu arka plan programlarını çalıştırır:
- BlockCollection daemon
- Confirmations daemon
- Disseminator daemon
- QueueParserTx
- Scheduler
Bu arka plan programı blokları indirir ve blok zincirini diğer ağ düğümleriyle senkronize eder.
Bu arka plan programı, blok zinciri ağındaki maksimum blok yüksekliğini belirleyerek, yeni bloklar talep ederek ve blok zincirindeki fork sorununu çözerek blok zincirini senkronize eder.
Bu arka plan programı, geçerli blok id'ye tüm honor düğümlerine istek gönderir.
Daemon'u çalıştıran düğümün mevcut blok id, herhangi bir honor düğümünün mevcut blok id'sinden küçükse, blok zinciri ağ düğümü güncel değil olarak kabul edilir.
Mevcut en büyük blok yüksekliğini döndüren düğüm, en son düğüm olarak kabul edilir. Daemon tüm bilinmeyen blokları indirir.
Blok zincirinde bir fork algılanırsa, arka plan programı tüm blokları ortak bir ana bloğa indirerek forku geriye doğru hareket ettirir. Ortak ana blok bulunduğunda, arka plan programını çalıştıran düğümde bir blok zinciri geri dönüşü gerçekleştirilir ve en sonuncusu dahil edilene kadar blok zincirine doğru blok eklenir..
BlocksCollection arka plan programı aşağıdaki tabloları kullanır:
- block_chain
- transactions
- transactions_status
- info_block
BlockCollection arka plan programı, diğer arka plan programlarına aşağıdaki istekleri gönderir:
- Type 10, tüm honor düğümleri arasında en büyük blok ID'ye işaret eder.
- Tür 7 en büyük blok ID'nin sahip verilere işaret eder.
BlockGenerator arka plan programı yeni bloklar oluşturur.
BlockGenerator arka plan programı, yeni blok oluşturma planları yapmak için blok zincirindeki en son blokları analiz eder.
Aşağıdaki koşullar karşılanırsa, yeni bir blok oluşturulabilir:
- En son bloğu oluşturan düğüm, honor düğümü listesindeki bir düğümdedir ve arka plan programını çalıştırır.
- En son doğrulanmamış bloğun oluşturulmasından bu yana geçen en kısa süre.
Daemon tarafından oluşturulan yeni bir blok, diğer düğümlerin Disseminator arka plan programından alınabilen veya arka plan programını çalıştıran düğüm tarafından oluşturulabilen tüm yeni işlemleri içerir. Oluşturulan blok, düğüm veritabanında saklanır.
BlockGenerator arka plan programı aşağıdaki tabloları kullanır:
- block_chain (saves new blocks)
- transactions
- transactions_status
- info_block
BlockGenerator arka plan programı, diğer arka plan programlarına herhangi bir istekte bulunmaz.
Disseminator arka plan programı, tüm onur düğümlerine işlemler ve bloklar gönderir.
Bir koruyucu düğüm üzerinde çalışırken arka plan programı, düğümü tarafından oluşturulan işlemleri tüm honor düğümlerine gönderir.
Bir honor düğümü üzerinde çalışırken, arka plan programı oluşturulan blokları ve işlem hashlerini tüm honor düğümlerine gönderir.
Ardından, honor düğümü, bilmediği işlem isteklerine yanıt verir. Daemon, tam işlem verilerini yanıt olarak gönderir.
Disseminator arka plan programı aşağıdaki tabloları kullanır:
- transactions
Disseminator arka plan programı, diğer arka plan programlarına aşağıdaki istekleri gönderir:
- Tür 1 Honor düğümüne işlemleri gönderin ve hashleri bloklayın.
- Type 2 Honor düğümünden işlem verilerini alın.
Onaylar arka plan programı, düğümündeki tüm blokların diğer düğümlerin çoğunda bulunup bulunmadığını kontrol eder.
Ağdaki birden fazla düğüm tarafından onaylanan bir blok, onaylanmış bir blok olarak kabul edilir.
Daemon, veri tabanında henüz onaylanmayan ilk bloktan başlayarak tüm blokları tek tek onaylar.
Her blok aşağıdaki şekilde onaylanır:
- Tüm honor düğümlerine onaylanan bloğun kimliğini içeren bir istek göndermek.
- Tüm honor düğümleri blok karmasına yanıt verir.
- Yanıtlanan hash, arka plan programı düğümündeki bloğun hash değeriyle eşleşirse, onay sayacı değeri artar. Değilse, iptal sayaç değeri artırılır.
Onaylar arka plan programı aşağıdaki tabloları kullanır:
- confirmation
- info_block
Onaylar arka plan programı, diğer arka plan programlarına aşağıdaki istekleri gönderir:
- Type 4 Onur düğümünden blok hashlerini isteyin.
TCP hizmet protokolü, BlocksCollection, Dağıtıcı ve Onay arka plan programlarından gelen istekler için TCP'deki ikili protokolü kullanan onur düğümleri ve koruyucu düğümler üzerinde çalışır.
Her isteğin, isteğin ilk iki baytı tarafından tanımlanan bir türü vardır.
Bu istek Disseminator arka plan programı tarafından gönderilir.
İşlemin ve bloğun hashi.
Blok hash, blok kuyruğuna eklenir.
İşlem hash analiz eder ve doğrular ve henüz düğümde görünmeyen işlemleri seçer.
Hayır. İsteği işledikten sonra bir Type 2 isteği verilir.
Bu istek Disseminator arka plan programı tarafından gönderilir.
Veri boyutu da dahil olmak üzere işlem verileri:
-
data_size (4 bytes)
-
Size of the transaction data, in bytes.
-
data (data_size bytes)
İşlem verileri.
İşlemi doğrular ve işlem kuyruğuna ekler.
Hayır.
Bu istek Onaylar arka plan programı tarafından gönderilir.
Block ID.
Block hash.
Bu ID'ye sahip bir blok yoksa "0" döndürür.
Bu istek BlockCollection arka plan programı tarafından gönderilir.
Block ID.
- block_id (4 bytes)
Veri boyutu dahil blok verileri.
-
data_size (4 bytes)
-
Size of the block data, in bytes.
-
data (data_size bytes)
Blok verileri.
Bu kimliğe sahip bir blok yoksa bağlantı kapatılır.
Bu istek BlockCollection arka plan programı tarafından gönderilir.
Hayır.
Block ID.
- block_id (4 bytes)