Sözlük / Düğümler ve yazılım
P2P mesajı
Diğer adları: Mesaj.
- P2P mesajı nedir?
- P2P mesajları, Bitcoin düğümlerinin birbirleriyle konuşurken kullandığı sabit sözlüktür: version, inv, getdata, tx ve block gibi kısa komutlar düz bir TCP bağlantısı üzerinden gönderilir.
Aranacak merkezi bir sunucu yoktur, bu yüzden bir düğümün ağla tüm ilişkisi bu konuşmadır. Bitcoin Core protokol sürümü 70016 olduğunu duyurur, bağlantılarını 8333 portunda açar ve sözlüğün tamamı tek bir sayfaya sığar. Para çekme işleminiz bir madenciye ulaşır çünkü bir makine diğerine tx dedi ve bu, birkaç saniye içinde birkaç bin kez iletildi.
Nasıl çalışır
Her bağlantı bir el sıkışmayla açılır ve ardından küçük bir dizi tekrarlayan alışverişe oturur.
İki taraftan birinin ilk gönderdiği şey version mesajıdır; konuştuğu protokol numarasını, hizmet bayraklarını, o anki zamanı, karşı tarafın sahip olduğunu düşündüğü adresi, yanlışlıkla kendini aradığını tespit etmek için kullanılan rastgele bir nonce değerini, bir kullanıcı aracısı dizesini ve bildiği en iyi zincirin yüksekliğini taşır. Her iki taraf verack ile yanıt verir. İkisi de bunu yapana kadar başka hiçbir şey işlenmez.
Bu protokol numarası bir süs değil, bir özellik merdivenidir. Doğrudan başlık duyurusu 70012 gerektirir, sıkıştırılmış blok müzakeresi 70014 gerektirir, tam doğrulamadan önce sıkıştırılmış blok duyurusu 70015 gerektirir ve işlemlerin witness tanımlayıcısıyla (wtxid) aktarılması 70016 gerektirir. Bir düğüm eşinin numarasını okur ve o eşin kullanamayacağı yetenekleri sunmaktan sessizce vazgeçer; ağ, eşgüdümlü bir geçiş olmadan bu şekilde yükseltilir.
Amaca göre gruplandığında sözlük kısadır. Eş bulma: getaddr, addr ve BIP155 ile tanımlanan, Tor ve I2P adreslerini taşıyabilen addrv2 biçimi. Duyurma: inv ve headers. İsteme: getheaders, getdata, getblocks, mempool. Teslim etme: tx, block, cmpctblock, blocktxn, notfound. Düzen işleri: ping, pong, sendheaders, sendcmpct, wtxidrelay ve belirtilen ücret oranının altındaki işlemleri iletmeye zahmet etmemesini eşine söyleyen feefilter.
İki sessizlik bilinçlidir. Tanınmayan komutlar reddedilmek yerine yok sayılır; yeni bir mesaj türünün, kimsenin tek seferde güncelleyemeyeceği bir ağda yavaş yavaş yayılmasını sağlayan budur. Ve bir eşin işleminizi neden düşürdüğünü size söylemesinin hiçbir yolu yoktur: BIP61 ile tanımlanan reject mesajı Bitcoin Core 0.18.0 sürümünde varsayılan olarak devre dışı bırakıldı ve seçenek 0.20.0 sürümünde tamamen kaldırıldı, çünkü yanıtlar güvenilmezdi, sahte üretilmesi kolaydı ve sıklıkla yanlışlıkla kesin ve yetkili bir kaynak sayılıyordu.
Nerede görürsünüz
P2P mesajları, kendi düğümünüzün bütün gün yaptığı şeydir ve izlenmesi kolaydır.
Bitcoin Core programını -debug=net ile başlatın; günlük, gelen her mesajı adıyla yazar. getpeerinfo çağrısı her bağlantı için gönderilen ve alınan baytları mesaj türüne göre dökümüyle bildirir; bir eşin size neredeyse her şeyi gönderdiğini, geri kalanların boş beklediğini keşfetmenin en hızlı yolu budur. Kendi düğümünüze bağlı bir cüzdandan ödeme yayımlamak tanınabilir küçük bir dizi üretir: dışarı giden bir inv, geri gelen bir getdata, yanıt olarak dışarı giden bir tx.
P2P mesajı vs RPC
Bitcoin'in iki arayüzü vardır ve bunlar birbirinin yerine geçmez. P2P düğümden düğümedir: kimlik doğrulaması yoktur, iki uç v2 taşıması üzerinde anlaşmadıkça şifreleme yoktur, 8333 portundadır ve hiçbir katılımcının tek başına genişletemediği bir sözlüğü vardır. RPC programdan düğümedir: kimlik doğrulamalıdır, varsayılan olarak yereldir, 8332 portundadır ve her sürümde değişen bir yöntem listesi vardır. Oluşturduğunuz bir ödeme ikisinden de geçer: düğümünüze bir RPC çağrısı olarak girer ve ondan bir P2P mesajı olarak çıkar; yalnızca ikinci yarısı başkalarını ilgilendirir.