Egy pénteki teleconfon került elő a címben szereplő kérdés. Mivel ott sem időm, sem lehetőségem nem volt erre válaszolni, ezért gondoltam keyboardot ragadok. Amúgy is időszerű egy ilyen témáról írni, hiszen régen volt már tech jellegű cikk a blogon.

Az alap kérdés egyébként nem is az volt, hogy mennyi Bitcoin node létezik, hanem az, hogy honnan tudjuk pl. egy Ethereum hard forknál, hogy a fullnodeok mekkora arányban alkalmazzák már az új konszenzus protokollt, illetve, hogy vajon egy hard fork milyen mértékben érinti negatívan az adott hálózat védettségét azáltal, hogy régebbi nodeok tömege kerül out-of-syncbe.

Az első node kérdése

Maguk a kérdések alapvetően jogosak, hisz mint az Ethereum, mind a Bitcoin egy peer-to-peer hálózat, így logikusan nincs olyan központi nyilvántartás, ahol meg lehetne tekinteni a nodeok állapotát, verzióját, stb.

Azonban a peer-to-peer lényege, hogy ismerünk peereket. Márpedig egy bitcoin kliens indításakor bizony nem feltételezhető az, hogy ezzel az információval rendelkezünk alapból. Így mindig trükkös kérdés, hogy vajon hogyan találjuk meg a több full nodeot.

Kis történelmi kitekintés: Eredendően a Bitcoin erre a célja az IRC protokollt használta hasonlóan. Bár tartok tőle, hogy az olvasók nagy részének nem túl sok fogalma van az IRC-ről, de a 90-es évek végén ez volt a legnépszerűbb chat kliense az akkori ébredező Internet generációnak.

A bitcoind indításakor automatikusan csatlakozott az egyik IRC szerverre és onnan gyűjtötte össze a magukat hírdető peerek adatait. Azonban az IRC protokoll háttérbe szorulásával és a szerverek lelövésével ez a metódus egyre inkább háttérbe szorult és 2013-ban az IRCSeed support hivatalosan is kikerült a Bitcoin kliensből.

A korai időszakban a Bitcoin Core kódbázis fixen rögzített nagy bizonyossággal elérhető full nodeokat tartalmazott. Ennek a kódját és a korai seed szerverek elérhetőségét még Satoshi rakta bele a kódba.

Hogy működik mindez ma? A Bitcoin esetén az ultimate megoldás a DNS seed support. Be van a kódba égetve 6 darab domainnév, ezek: bitcoin.sipa.be, dnsseed.bluematt.me, dnsseed.bitcoin.dashjr.org, seed.bitcoinstats.com, seed.btc.petertodd.org, bitcoin.jonasschnelli.ch

A domain nevekből látható, hogy ezek a bitcoin core fejlesztők kezében lévő domainek (theBlueMatt, DashJr, Sipa, Jonas Schnelli, Peter Todd). Ezek a DNS-ek úgy működnek, hogy átlagosan 30-40 full node ip címét adják vissza, ám a konkrét lista folyamatosan változik. Tehát 24 óra alatt akár több ezer garantáltan működőképes full node ip címét is ki lehet nyerni ezzel a módszerrel.

Oké, de honnan lehet tudni, hogy mennyi van?

Maga a Bitcoin protokoll úgy lett kialakítva, hogy a nodeok a lehető legnagyobb biztonsággal működjenek, minek érdekében folyamatosan több tucat másik full nodedal tartják a kapcsolatot és kapják meg a legfrissebb chain stateket és frissítik a mempool információikat a függőben lévő tranzakciókról.

Amikor egy full node kapcsolódik egy másik full nodehoz, akkor “bemutatkozik”. Közli a saját verzióját. Ergo, ha kellően sok full nodeod van a hálózaton, amik ráadásul még esetleg prioritással is rendelkeznek a dns seedekben, akkor nagy valószínűséggel egy idő után az összes full node kapcsolódni fog hozzád, így szépen lassan kialakul egy képed arról, hogy mennyi full node létezik és hol milyen verzió fut.

Ezt a módszert alkalmazza a Luke DashJr féle DNS seed discovery tool is.

Akkor mennyi is van pontosan?

Teljesen pontos számot nem lehet tudni, de a DNS seedeken keresztül felfedezhető nodeok száma Bitcoin esetén valahol 70-80.000 körül lehet.

Ebből közelítőleg 10.000 fullnode “listening” típusú. Ezzel kapcsolatban is vannak ám félreértések. A listening nem azt jelenti, hogy csak hallgatózik a hálózaton és nem alkalmas full nodeként működni, hanem azt, hogy ezek nyílt internetről elérhetők. Azaz tcp/8333 porton keresztül megszólítható az adott full node.

Mi a helyzet a Ethereummal?

Természetesen, mint majd minden esetben; az Ethereum ezt is másképpen csinálja. A Ethereum referencia implementációja (a geth) a bootnode megközelítésre esküszik. Ennek lényege, hogy a geth indításakor meg kellene adni minden esetben egy ismert nodeot, amiről lehetne elkérni néhány peer adatait. Mivel ezt az esetek többségében nem adja meg senki, ezért mind a geth, mind a parity nodeok tartalmaznak néhány beégetett bootnodeot, melyeken keresztül ez végrehajtódhat. Ezek a nodeok a geth esetén egyébként az Ethereum Foundation saját – erre a célra fenntartott – nodejai. Emellett az Ethereum rendelkezik egy saját Network Discovery Protokollal, amin keresztül képes full nodeokat keresni.

Mivel az Ethereum (geth és parity) esetén a bootnode protokoll sokkal centralizáltabb így még könnyebben lehet megállapítani, hogy megközelítőleg mennyi és milyen verziót futtató full node létezhet. Az ethernodes.org felmérése szerint egyébként közel 7200 ethereum full node létezhet, melynek egyre nagyobb része már az ethereum foundation referencia kliensét a geth-et futtatja. Ez a tendencia a jövőben egyre inkább növekedni fog, mivel a parity fél-hivatalosan is elkezdte feladni az Ethereum 1.0 kliensének a fejlesztését, helyett a Ethereum 2.0-ra és a saját PolkaDot projektjére koncentrál.

The post Honnan tudjuk, hogy mennyi Bitcoin node létezik? appeared first on Variance – A Bitcoin Blog.

Source: Variance

%d bloggers like this: