Mambabasa: beginner hanggang intermediate
Pumataas tayo para tignan ang Bitcoin Network. Ang anyo nitong decentralized, distributed at peer-to-peer ay mahalaga para patakbuhin ang sistema ng mga kompyuter na hindi nagtitiwala sa awtoridad ng isa, iilan at ng kahit sino pa mang may kapangyarihan.
Ang unang disenyo ng Internet ay peer-to-peer. Subalit namayagpag ang centralized networks paglaon. Kaya ang pagiging peer-to-peer ng Bitcoin, na Internet Money, ay pawang itinakda ng tadhana.
Bago natin pagtuunan ng pansin ang Peer-to-peer network, pag-aralan natin ng bahagya ang networks at ang Internet.
Ang network ay koneksyon ng mga device para makapagbahagi ng mga data. Nakakatulong ito para dumali at bumilis ang komunikasyon. Mainam din ito para makapagsalu-salo sa mga gamit. Kagaya ng printer sa opisina, maaaring may 1 o 2 nalang na pangmalakasang printer sa isang palapag, sa halip na may personal na printer pa bawat manggagawa.
Introduksyon sa Networks
Mabilisang pagkukumpara ng Network Topology
Ang topology ay ang pagkakaayos ng mga koneksyon ng devices sa network. Pag-usapan natin ng bahagya ito para mas madaling maimahe ang usapan dito sa kabanata 6.
- Star – ang pag transfer ng data ay dumadaan sa isang central na device, kung saan may kanya-kanyang koneksyon ang bawat kasapi ng network.

- Bus – ang mga device ay nakakonekta sa isang cable na tinatawag na bus. At dito lahat ng impormasyon ay nakikidaan parang pagsakay at baba sa tren.

- Mesh – Ang bawat device ay nakakonekta sa isa’t isa. Sa tunay na buhay, lalo na kung malaki ang network, partial mesh lang ang topology. Kung saan sa iilan lang konektado ang mga devices, hindi sa lahat. Ganito ang Internet, kung saan naka mesh/partial mesh ang mga routers sa iba-ibang panig ng mundo.

- Ring – Paikot ang Koneksyon ng mga devices, kung saan bawat isa ay nakakonekta sa dalawa pa. Sa ganito, ang direksiyon ng impormasyon ay paikot.

- Infrastructure – ito ay kombinasyon ng wired at wireless. Ang mga wired ay parang star topology ang pagkakaayos na may central device. Tapos isa sa mga nakakonekta dito ay ang wireless access point na kung saan kokonekta ang ibang devices.

- Ad Hoc – ito ay simpleng wireless topology kung saan ang mga devices ay nakakonekta sa isa’t isa gamit ang wireless na feature ng bawat device.

- Wireless Mesh – ito ay kapag maraming wireless access points na naka konekta sa isa’t isa. Ang isang access point ay konektado sa modem at switch ng wired. Samantalang ang ibang access points naman ay nakasaksak lang sa power supply. Magpapasahan ang mga wireless access points para matunton ang koneksyon sa internet. Tapos, lahat na ng devices ay kokonekta sa mga wireless access points na malapit sa kanila.

Dahil ang Bitcoin Network ay nakikisakay sa internet, ang topology nito ay Mesh. Ang malalaking peer-to-peer networks na nakadepende sa Internet ay masasabi nating naka Mesh topology.

Pagkukumpara ng Network
May mga iba-ibang uri ng Network. Base sa laki, pwedeng maliit lang sakop nito (Local Area Network – LAN) o malaki (Wide Area Network – WAN). Ang pokus natin ay ang WAN, dahil ang Internet ay WAN.
Maiuuri rin ang network base sa kilos. Iyon ang dalawang klase na binanggit natin sa umpisa: Client-server at ang peer-to-peer.
Client-server Network

Sa ganitong network, ang device ay isa lang sa dalawa ang papel: client o server.
- Client — humihiling ng data mula sa server. Ang work station, personal computer at iba pang devices, sa pananaw ng paggamit sa Internet ay mga clients. Halimbawa, para mapakita ang website, and isang device ay gagamit ng browser para humiling ng data sa web server, para mapakita sa taong nag-iinternet.
- Server — nagbibigay ng data sa client. Karugtong ng naunang halimbawa, ang web server naman ang naglalaman ng data ng isang website, na ibabahagi sa sinumang client na humihiling. Nakatago sa web server ang lahat ng pages ng website. Bawat aksyon ng user sa website ay paghiling ng data sa web server. Mula sa home page, ibibigay ng web server ang tamang web page kapag i-click ng user ang paglipat sa “About us” o “Shop” ng isang website, halimbawa.
Napansin mo ba na halos lahat ng network na sinasalihan mo ay pag-aari ng malalaking kumpanya? Ang mga social networks na pawang normal na sa lipunan ay hawak ng iilang kumpanya. “I-google mo” ay karaniwang sinasabi ng napagtatanungan at hindi agad makasagot. Maiisip mo kung bakit nanaig ang centralized na networks. Ito ay kombenyente. “Sila” na ang bahala magtago ng data sa account mo, gagamit ka nalang.
Centralized – ito ang katangian ng client-server. Ang kontrol ay nasa isa oo iilan lamang. Kombenyente ito para sa pag kontrol ng impormasyon. Mabilis rin ang pagdedesisyon para sa pagbabago sa software, patakaran ng network, atbp. Subalit may panganib ito na single point of failure. Kaya dapat may mataas na seguridad para labanan at pigilan ang atake ng masasamang loob gaya ng pagnanakaw at malware. Mainam ding may back up ang mga data.
Dahil sa dami ng mga clients sa malalaking networks, ang mga servers ay mga malalakas na uri ng computer na kayang makasagot sa milyun-milyong kahilingan. At dapat mas maigting ang seguridad. Hindi lang din data ang may back up, pati mga panggagalingan ng kuryente, para hanggat maaari, tuluy-tuloy lang ang operasyon.
Mahal din magpanatili ng servers. Kaya hindi na rin nakapagtataka kung bakit gumagawa ng paraan ang mga kumpanya sa likod ng media, mapa social o legacy, para maadik ang mga tao. Kung libre ang account na gamit, talagang hindi mo maiiwasan ang mga ads. Nakikigamit ka na nga eh, diba?
At sa ganung estado na rin ng internet nabuo ang paggamit ng iyong personal na impormasyon at pattern ng paggamit ng mga apps at galaw sa internet, para ma-personalize ang mga ads at interface mo. Para lalo kang magtagal sa paggamit at matuksong bumili!
Napag-usapan natin ang naging lagay ng electronic na salapi sa Kabanata 2. Sa kasalukuyang online banking, shopping at anupang transaksyon, bawat galaw ay mayroon rekord mo. Nawawala na ang pribadong pakikipagtransaksyon na mayroon sa paggamit ng pisikal na salapi. Maaaring napoprotektahan ng kriptograpiya ang daloy ng impormasyon. Pero, merong organisasyon pa rin na nakakakita ng data mo sa bawat dulo.
Hindi lahat ng gamit natin sa internet ay dapat kontrolado ng isang korporasyon, gobyerno, o anumang makapangyarihang nilalang. May mga bagay na dapat pribado.
At salamat sa Bitcoin, nagkaroon ng pagsabog ng interes ukol sa privacy, self-sovereignty at decentralization. Mga interes na matagal nang tinatrabaho ng mga cypherpunks. Buti nalang may uri na ng network para dito.
Peer-to-peer (P2P) Network

Sa ganitong network, ang bawat device ay kayang maging client at server. Sa ulirang sitwasyon, ang bawat kompyuter ay magkakapantay o magkakauri. Kaya sila ay magkapwa o peers. Pwedeng humiling ng impormasyon, at magbigay ng impormasyon ang bawat isa, depende sa naitatago nito.
Decentralized – ito naman ang katangian ng peer-to-peer network kung saan, walang nakakalamang ng kontrol sa network. Kaya maiiwasan ang isyu ng single point of failure at censorship. Mas mahirap din ito atakihin ng masasamang loob dahil sa dami ng nodes.
Subalit, dahil ang network ay hindi minamando ng isang makapangyarihan na server, hindi mo masisiguro kung may back up ba lahat ng data. Depende sa laki, mahirap din ang pagdedesisyon, dahil kailangan ng consensus ng mga nodes.
Kaya kung ganito, kailangan ng protocol kung saan mas marami ang mananatiling mabuti sa loob ng network, at efficient ang pagpapasahan ng data.
Madali lang sumali sa peer-to-peer network. Pero siguro, sa mga nasanay na sa pagiging kombenyente ng client-server network, ang pagsali sa peer-to-peer network ay mas nakakatamad gawin. Ang pananaw na normal lang ang pagsali sa P2P network ay maiging pagkasanayan ng mga tao. Lalo na kung palalawakin natin ang pagtanggap sa Bitcoin.
Kilalang peer-to-peer network ang BitTorrent. Pinakagamit nito ay ang file sharing. May isyu ito, lalo na noong mga 2000s, sa copyright. Maraming users ang ginamit ang BitTorrent para sa mga piniratang files. May panahon na mahigit 30% ng upstream na trapiko sa Internet ay gamit ang nasabing network. Ito ay lehitimong network at protocol, na nananatili hanggang ngayon. Subalit natalo na ito ng mga streaming services, kaya hindi na ganun kalaki ang bahagi nitong Internet traffic. Isa uli yang halimbawa ng pagpili ng mga tao sa mas kombenyenteng alternatibo na magbibigay ng kontrol sa iba, sa halip na manatiling malaya at pribado.
Bago umusad pa sa peer-to-peer network, tignan natin ang mga baitang o layers ng Internet Protocol Suite, na kilala rin minsan na TCP/IP.
Mga layers sa Internet Protocol Suite
Ang Internet Protocol Suite ay balangkas para sa pag-organisa ng communication protocols na gamit sa Internet. Naisasaad ito sa Request for Comments (RFC) 1122 ng Network Working Group ng Internet Engineering Task Force (IETF) na pinamagatang: Requirements for Internet Hosts – Communication Layers. Karugtong din nito ang RFC 1123 na Requirements for Internet Hosts – Application and Support.
Ang host, o computer na nakakonekta sa Internet na syang kaharap ng user, ay dapat sumunod sa magkakapatong na protocols ng bawat layer. Ang paglipat ng data mula sa isang host, patungo sa isa pang host ay: dadaan mula sa pinakaibabaw na layer, pababa hanggang marating at madaanan ang mga pisikal na koneksyon, tapos pataas naman ng layers hanggang makarating sa target na host.
Pataas, Pababa, ng anu-anong layers? Ang batayan mula sa RFC1122 ay 4 na layers:

- Application layer – ang pinakataas na layer kung saan may interaksyon ang isang user (tao) na gumagamit ng host (kompyuter). Sa mga protocols na ito, mararamdaman ng user na nagreresponde lang ang application sa mga aksyon o proseso na gusto nyang mangyari. Maaaring narinig mo na ang mga protocols dito. Kasama dito ay ang File Transfer Protocol (FTP), Simple Mail Transfer Protocol (SMTP) at Hypertext Transfer Protocol (HTTP). At kasama rin mga sumusuportang protocols tulad ng Domain Name System (DNS).
- Transport layer – Ito ang layer na nagbibigay ng dulo sa dulong serbisyo sa mga applications. Pwedeng narinig mo na rin ang pinakaginagamit na protocol dito: Transmission Control Protocol (TCP) na syang gumagawa ng maasahang pagpasa ng data na babasahin ng protocol sa application layer. Ang mga application ay merong port number na nakadepende sa serbisyong hatid.
- Internet layer – Internet Protocol (IP) ang gamit sa layer na ito para sa pagdala ng data mula sa isang host papunta sa isa pa, na kung kailangan itawid pa ng ibang network. Dito nangyayari ang routing kung saan hinahanap ang IP address ng patutunguhang host o ng lokal na network kung saan kasapi ito. Kaya malaking gamit dito ang IP addressing system. Maghahanap ng susunod na tatalunang host o gateway (router) kapag hindi pa agad matutunton ang pakay na host.
- Link layer – ito ang layer ng data link sa lokal na network, bago pa lumabas sa router ang data. Abstraksyon o virtual na layer din ito, hindi yung mismong kable at iba pang pisikal na koneksyon ng network. Para ang host ay makapagkomunika sa loob ng kanyang lokal na network, kailangan sumunod sya sa protocol sa link layer. Address Resolution Protocol (ARP) ay isa sa gamit dito.
Isa sa pangkalahatang konsiderasyon na isinasaad ng RFC1122: ay ang Robustness Principle. Ang software ay dapat isulat nang kinokonsidera lahat ng pwedeng mali. Kaya pinakamainam na laging ipagpalagay na ang network ay may masasamang nilalang.
Sa Bitcoin, ganun din, diba? Nakadisenyo na kung saan wala kang pagkakatiwalaan dahil kahit sino ay maaaring gumawa ng masama.
Alam na natin na ang Internet ay Mesh ang topology, dahil sa koneksyon ng mga routers. At naimahe mo na ang layers sa Internet Protocol Suite. Balik tayo sa usapan ng peer-to-peer network.
Sa malakihang peer-to-peer network na nakasakay sa Internet, meron pa uling usapan ng topology. Ito ay kung paano nakaorganisa sa pananaw ng bawat node ang iba pang kasapi. Kumbaga, network sa ibabaw (overlay network) ng pisikal na network topology. Ito ay nakasalalay na sa protocol at software na gamit sa application layer. Gamitin nalang natin ang overlay network na katawagan, sa halip na topology. Mairerepresenta ang overlay network sa pamamagitan ng graph ng mga nodes na may guhit sa pagitan ng mga nodes na may direktang koneksyon.
Uri ng peer-to-peer overlay network
- Unstructured – ito ay kung saan walang istraktura ang network, at nakasalalay sa mga kalapit na nodes o sinumang mag responde agad, ang pagbibigay ng mensahe ng bawat node, patungo sa intensyon nito.
- Structured – ito ay kung saan may sinusundang ruta ng impormasyon at address space ang mga nodes para may istraktura ang network. Mayroon ding limitasyon sa kung ilang mensahe ang ilalabas sa paghahanap ng mga bagay-bagay. Halimbawa ng mga ayos ng structured overlay network ay makikita sa ilustrasyon sa baba.

File sharing – ito ang pinakagamit ng BitTorrent. At dito, hindi kailangan ng lahat ng nodes na malaman ang buong laman ng ibang nodes. Kung ano lang kailangan na file, yun lang ang hahanapin sa iba. May mga algorithms na pinakulo ng may-likha ng BitTorrent para mapabilis ang file sharing. Nagkaroon din ng mga pagpapabuti sa network para mas maging matatag ito. Halimbawa, mula sa paggamit ng centralized na tracker – na syang tumutulong sa mga peers na maghanapan – nagkaroon ng decentralized na paraan ng paghahanap. Bumagay sa BitTorrent ang pagsama ng distributed hash table (DHT) na protocol kagaya ng Kademlia. At gamit ito, nakakabuo ang mga nodes ng overlay network na may tree structure.
Subalit sa Bitcoin, ang pagpapaalam ng lahat ng transaksyon sa network ang pinakakonsepto ng trustless monetary policy. Dahil dito, hindi kailangan ang DHT at istraktura sa overlay network. Sa halip, gumagamit ang Bitcoin ng mas simpleng ideya na gossip protocol.
Gossip Protocol
Ang gossip protocol ay ang pagpapasa ng impormasyon sa peer-to-peer network na halintulad sa pakikipagtsismisan. Tinatawag din itong epidemic protocol dahil sa pagkakahalintulad sa pagkalat ng sakit. Ang may hawak ng impormasyon ay magpapasa sa isa o higit pang nodes, at mananatiling may hawak ng impormasyon (o infected). Tapos uulitin ang pagpasa ng lahat ng nahawaan ng impormasyon patungo sa iba hanggang lahat ay meron na. Ang gossip protocol ay matatag sa harap ng mga pagsubok na maaaring harapin ng network.

Ang bawat direktang koneksyon ng pares ng nodes ay tinatawag na edge. Ang pagpapasa ng mensahe ay maaaring gumamit ng maraming edges, hindi lang isa. Ang dami ng edges na kailangan para makarating ang mensahe mula sa isang node papunta sa isa pa ay ang path length. Mainam na ang protocol ay may mekanismo upang mahanap lagi ang pinakamaiksing path length sa kahit anong pares ng node. Ang pinakamataas na path length ay ang dami ng edges sa pinakamagkalayong pares ng nodes. Ito ay tinuturing na overlay diameter. Sa ilustrasyon ng maliit na network sa taas, ilan sa tinging mo ang overlay diameter?
Mga hakbang sa Gossip Protocol
- Node initialization – pagsisimula ng isang node na sasali sa network. May initial state ang bawat bagong sumasali sa network at susunding mga proseso ng initialization.
- Selection of peers – pagpili ng ibang nodes, sa random na paraan, na pagpapasahan ng mensahe.
- Information exchange – ito na ang palitan ng impormasyon ng mga kapwa nodes
- Propagation – pag-update ng impormasyon ng bawat node at pagpili ng bagong random peers para pagpasahan ng bagong impormasyon.
- Repetition – pag-ulit ng buong proseso hanggang sa lahat ng nodes ay may updated na impormasyon.
Dalawa sa mahalagang mga parameters ng Gossip Protocol ay ang fanout at maximum rounds. Binabalanse ang mga ito para ma-optimize ang p2p network:
- Fanout – Ito ang bilang ng nodes na aasintahin sa bawat “tsismisan” o pagbato ng impormasyon. Kapag tumataas ang fanout, tumataas ang reliability ng network. Subalit tumataas ang redundancy ng impormasyong dumadaloy. Maaaring makasikip sa dinadaanan ng impormasyon, o kaya nakakapuno ng memorya ng isang node. Maaari namang idiskarga lang ng isang node ang matanggap na impormasyon kung meron na ito.
- Maximum rounds – Bawat pag bato ng impormasyon ay isang round. Maaaring maglagay ang protocol ng hangganan sa kung ilang beses lang pwede magbato ng impormasyon ang bawat node. Pwede paganahin ang gossip protocol ng walang limitasyon sa dami ng beses uuliting ipasa ang impormasyon. Tataas ang posibilidad na marating lahat ng nodes. Tataas ang reliability. Subalit tataas din ang redundancy ng impormasyong dumadaloy, na may epektong tulad nung nabanggit kanina.
Mga Stratehiya sa Gossip Protocol
Ang mga ito ay basic na stratehiya sa implementasyon ng Gossip Protocol:
- Eager Push – Ito ay kapag pinapasa ng node agad-agad ang buong mensahe na natatanggap nya.
- Pull – Ito ay ang peryodikong pagtatanong ng isang node sa iba, kung meron bang bagong mensahe na hindi pa nito alam. Kapag nalaman ng nagtatanong na meron ngang bagong mensahe, hihingin nito ang kabuuan.
- Lazy Push – Ito ay kapag pinapasa ng node ang identifier lamang ng bagong mensahe. Kapag nalaman ng nakatanggap na bago lang din ito sa kanya, hihingin nito ang kabuuan.
Mas mabilis ang pagkalat ng impormasyon sa Eager Push. Pero mas mataas ang redundancy na magaganap. Sa Pull at Lazy Push kasi, magkakaroon pa ng balikan sa komunikasyon bago kunin ang kabuuan ng mensahe/data.
Maaari ring pagsamahin ang mga nabanggit na stratehiya sa pagpapatakbo ng gossip protocol.
Performance Metrics ng Gossip Protocol
- Reliability – ito ang porsyento ng active nodes na nagpadala ng mensahe. Layunin ng gossip protocol na makaabot ng 100% reliability kahit na mayroong mga umaalis o pumapalyang nodes.
- Relative Message Redundancy (RMR) – Ito ay pawang sukat ng message overhead, o gastos ng oras at data ng paggawa at pagkalat ng mensahe. May formula para dito:
m/(n-1) – 1
Kung saan ang m ay ang bilang ng lahat ng mga payload messages na pinagpapalitan sa pag-broadcast, at ang n ang bilang ng lahat ng mga nodes na nagpadala ng na-broadcast na mensahe. Minimum na 2 nodes na nakapagpadala ang kailangan para magamit ang RMR. Mas maiging malapit sa zero ang halaga nito. Pero syempre, dapat mataas ang reliability habang mababa ang RMR. May posibilidad kasi na mababa nga ang RMR, pero mababa ang reliability dahil marami na palang palyadong node.
- Last Delivery Hop (LDH) – ito naman ang sumusukat sa dami ng talon ng isang mensaheng matagumpay na napadala. Mas mababang bilang ng talon, mas mainam.
May mga iba-ibang sistema na pwedeng ilagay sa ibabaw ng mga protocol, iba-ibang mga overlay sa network o bahagi ng network. Pag-usapan natin ang isa.
Peer sampling service
Ang paghahanapan ng mga nodes at paggawa ng bawat node ng listahan ng peers sa network ay maibabalot sa peer sampling service. Sa malaking network, hindi praktikal at kailangan malaman lahat ng iba pang kasamang nodes, kundi subset lamang.
Simple lang ang implementasyon nito. Pwedeng dalawang paraan lang ang gamitin:
- init() – Pansimula o initialize ng serbisyo kung hindi pa ito nagagawa ng isang node.
- getPeer() – Ang pagbalik ng peer address o node identifier basta may iba pang kasapi sa network.
Partial View
Ito ay ang pangkat ng mga pagkakakilanlan ng mga nodes, o node identifiers, na ibibigay sa bawat isang node. Tipikal na node identifier ay ang tuple ng (ip : port). May nakatakdang bilang ng kasapi sa listahang ito. Ang bilang na nakukuha ng bawat node ay pare-parehas, subalit magkakaiba ang nilalaman.
Ang pagkakaayos ng node identifier ay nakabase sa hop count, mula sa pinakamababa, pataas. Ang hop count ay ang bilang ng pagtalon ng mensahe mula sa pinanggagalingang node. Kaya mayroong mga magkakaparehas ang hop count sa isang partial view. Bakit? Balikan ang ilustrasyon sa pagkalat ng mensahe sa Gossip protocol.
Ang partial view ay overlay network (nanaman), sa pananaw ng node.
May 2 stratehiya para magpanatili ng partial views:
- Reactive – ina-update lamang ang partial view kapag mayroong pangyayari na nakakaapekto sa overlay. Halimbawa, kapag may bagong node na sumali o pag may umalis sa network.
- Cyclic – Dito naman, ang partial view ay ina-update kada takdang oras, kung saan nagkakaroon ng pagpapalit ng impormasyon ng mga magkakapitbahay.
Kapag stable ang network, ang partial view ay hindi nagbabago sa reactive na stratehiya. Samantalang sa cyclic na stratehiya, nagbabagu-bago ang partial view kahit stable ang network.
Mga katangian ng Partial View
Ang mga sumusunod ay maaaring magamit para sukatin ang kalidad ng partial view.
- Connectivity – Syempre, dapat konektado ang mga nodes sa partial view. Kahit isang koneksyon lang ng bawat node sa iba ang kailangan para masabing walang nahiwalay na node.
- Degree Distribution – sa isang graph na hindi mahalaga ang direksyon (undirected), ang degree ay ang dami ng edges. Pero sa usapan ng partial views, directed ang graph, ang direksyon palabas at papasok ng isang node ay tinuturing na magkaiba. Mayroong in-degree at out-degree ang node. Ang in-degree ng isang node, n, ay ang dami ng nodes na mayroong identifier ni n sa kanilang partial view. Dito masusukat kung gaaano kadali maabot ang node, ang probability na matatanggap nito ang mensahe at ang maximum na redundant na mensahe. Ang out-degree naman ng n ay ang dami ng nodes sa sarili nyang partial view. Dito masusukat kung gaano kahalaga ang node na iyon para mapanatili ang overlay.
- Average Path Length – Ito ay average ng lahat ng pinakamaiksing paths sa pagitan ng mga pares ng nodes sa partial view. Mas mainan na mababa ito dahil sa relasyon nito sa tagal ng pagpasa ng mensahe sa lahat ng nodes.
- Clustering Coefficient – sa isang node, ang clustering coefficient ay makukuha sa pagbilang ng dami ng edges sa pagitan ng mga kapitbahay nito, at idi-divide sa maximum na posibleng edges sa mga naturang kapitbahay. Ito ay may value na 0 hanggang 1. Ang clustering coefficient ng graph ng partial view ay ang average ng lahat ng clustering coefficients. Hindi natin gusto na masyadong konektado ang mga kapitbahay na nodes sa isa’t isa. Bakit? Kapag mataas kasi ang clustering coefficient, mas mataas ang redundancy ng mga mensahe. Kapag mataas din ang clustering coefficient, sa isang panig ng graph, mas madali itong mahiwalay, dahil posibleng umiikot lang sa isang cluster ng mga nodes ang mensahe, sa halip na maabot ang mas malayong nodes.
- Accuracy – makukuha naman ito kapag binilang ang mga kapitbahay ng isang node na hindi pumalya (not failed) at idi-divide sa pangkalahatang dami ng kapitbahay. Ang accuracy ng graph ay ang average ng accuracy ng lahat ng correct nodes. Kapag mababa ang accuracy, maraming palyadong node ang mapipiling gossip target, na makakasira ng proseso. Kailangang taasan ang fanout kung ganun.
Pangkalahatang Ideya ng Bitcoin P2P Network
Puntahan na natin ang protocol ng Bitcoin network. Kagaya ng nabanggit sa peer sampling service, may paraan sa pagkonekta ng makaunang beses sa ibang nodes. Mula roon, makakaipon ng maraming addresses base sa matatanggap mula sa ibang nodes; subalit may nakatakdang maximum na aktibong koneksyon. Ang Bitcoin ay umaasa sa TCP para sa maasahang pagpasa ng mensahe.
Sa seksyong ito, buurin natin ang mga batayan ng network galing sa source code mismo ng Bitcoin, partikular na ang napapaloob sa net.h, net.cpp, addrman.h at addrman.cpp.
Inisyal na pagkonekta
Ang bagong node na sumasali sa network ay kokonekta sa DNS seeds. Ang mga DNS seeds ay kasama sa code ng Bitcoin Core. May mga DNS seeds na matagal nang naka-hard code sa Bitcoin Core, pero maaari itong mabagu-bago ng komunidad sa kada update ng version. Syempre, hindi naman pwedeng asahan na tatagal higit pa sa buhay ng mga may-ari ng DNS seeds ang mga iyon.
Kapag ang isang node ay nakakonekta na dati sa network, uunahin muna nitong humanap ng koneksyon sa mga address na nasa memorya. Kaya, kapag ang node ay may < 1000 node address sa memorya, may 11 segundong delay bago kumonekta sa DNS seeds. Ang <1000 nodes ay kinokonsiderang “few” peers. Kapag 1000 pataas, ito ay “many” peers. Sa lagay na iyon, 5 minuto naman ang delay bago subukang kumonekta sa DNS seeds. Kapag few ang peers, 3 DNS seeds ang pagtatanungan ng isang node.
Isa pang paraan kung sakaling walang makonektahang node mula sa DNS seeds matapos ang 60 segundo, ay ang paghahanap sa fixed seed nodes. Ito ay mga hard coded na mga identifier ng nodes na aktibo nung panahong nilabas ang partikular na bersyon ng Bitcoin Core.
Ang pagkonekta ng isang node sa peer ay nag-uumpisa sa pagpadala ng “version” na mensahe. Ang nakatanggap ng ganitong mensahe ay dapat magpadala rin ng version. Matapos iyon, magpapadala na sa isa’t isa ng “verack” na mensahe. Ibig sabihin nun ay acknowledgment o pagkilala sa bersyon ng node na nagpadala. Ito na ang hudyat ng matagumpay na koneksyon ng 2 nodes.

Ang unang hihingin ng isang node ay address ng iba pang peers. Magpapadala ito ng “getaddr” (get address) request. Ang makakatanggap na node ay reresponde ng “addr” (address) o “addrv2” (address version 2). Naglalaman ito ng bilang ng IP addresses at ng listahan nito. Ang addrv2 ay may ibang encoding ng mga network address at sumusuporta sa mas mahaba sa 16 bytes. Ang addr o addrv2 na mensahe ay hanggang 1,000 addresses ang pwedeng ipadala. Samantala, ang isang node ay maaaring tumanggap ng hanggang 5,000 IP addresses.
Ang pagpadala ng bultuhang mga address ay gagawin kada 15 minuto. At ang peer timeout ay 60 segundo, ibig sabihin, ipagpapalagay na may problema sa koneksyon kaya ititigil muna ang pagpapadala. Kapag umabot sa 20 minuto na walang sagot, tuluyan nang magdidiskonekta sa node. Ang 20 minuto ang hangganan din ng paghihintay sa ping at pong na sagutan ng nodes, bago putulin ang koneksyon.
Sa paglaon, ang isang node na nananatiling konektado ay maaaring magpadala ng addr o addrv2 ng kusa sa mapipiling random na koneksyon. Ibig sabihin, hindi lang sagot sa getaddr request ang addr at addrv2. Basta, ang bawat protocol na mensahe ay hindi lalagpas sa 4MB.
Ang default na dami ng koneksyon sa mga peers ay hanggang 125. Maaari itong baguhin ng sadya, pero hindi nirerekomenda. 8 ang maximum na outgoing nodes na may “full relay,” kaya ang natitirang 117 ang hangganan sa incoming nodes. Ang minimum na outbound connections ay 2, kaya hanggat hindi ito naaabot, patuloy lang ang paghahanap ng bagong saltang node sa mga seed nodes.
Ibalik lang natin sa pangkalahatang konsepto ng gossip protocol: ang aktibong koneksyon ng isang node (125 man o hindi) ang kanyang aktibong partial view. Samantalang ang pwedeng umabot sa halos 5000 address sa memorya nito ang passive partial view ng node.
May nagawang paraan ang mga developers para maprotektahan ang node mula sa partition attack. Ang partition attack ay kung saan ang isang node ay ihihiwalay ng umaatake sa tamang impormasyon ng network. Pupunuin ang memorya ng node ng mga address ng malisyosong nodes. Kaya pag ang biktima ay nag-restart, ang kokonektahan nito ay puro masasamang nodes, na magdudulot sa pagkakahiwalay sa tamang network.
Paano na? Bukod sa 8 full relay na outgoing nodes, may 2 block-relay-only connection na pinapanatili. Ang koneksyong ito sa 2 nodes ay hindi ginagamit sa pagpasa ng IP address at mga transaksyon. Dahil dito, ang koneksyon ay mahirap matunton ng mga masasamang loob. Ang block-relay-only connections ay ginagamit ding anchor connections, o mga uunahing koneksyon matapos mag restart. Kaya hanggat may honest o tapat na node na konektado sayo, hindi mahihiwalay ang iyong node sa tamang impormasyon ng network. Ang block-relay-only connection loop ay pinapatakbo kada 5 minuto.
Mayroon ding ginagawang ASmap health check kada 24 oras. Ang AS o Autonomous System ay malaking network o grupo ng networks, na kontrolado ng isang administrasyon, mapa pribado, publiko o gobyerno. Ang layunin ng ASmap health check ay maiwasang galing lang sa 1 AS ang mga peers na kinokonektahan ng isang node. Kaugnay dito, sinusubukan ding kumonekta sa ibang peer sa ibang network ang node, kada 5 minuto.
Mayroon ding feeler connection na sinusubukan kada 2 minuto. Ito ay kaugnay na sa pag-aayos ng mga IP address sa loob ng memorya ng node.
Pag-aayos ng mga address
Ngayon, paano naman inaayos ang bultong address na natatanggap ng isang node? Ang protocol ay gumagamit ng stochastic address manager, kung saan random ang pagposisyon at pagpili ng mga kokonektahang IP address sa memorya ng kompyuter. Ang buong talaan ng address ay inilalagay sa peers.dat kada 5 minuto. Ang address manager na ito ay layunin ding maiwasang mapuno ng masasamang nodes.
Ang mga IP addresses ay inilalagay sa mga balde (buckets) na hanggang 64 ang kayang itago.
- “new” – balde sa memorya na may mga address na hindi pa nakokonektahan
- “tried” – balde sa memorya na may mga address na subok na ang koneksyon

Mayroong 1024 na baldeng new, kung saan twing namimili ang node, 64 na balde ang kukunin nang random, bago pa piliin ang baldeng paglalagyan o susubukang hanapan ng ibang node na kokonektahan. Samantala, may 256 tried na mga balde, kung saan twing namimili ang node, 8 balde ang kukunin nang random, bago pa piliin ang baldeng paglalagyan ng ibang node, o papanatilihan ng koneksyon. Ang isang new address ay maaaring mapabilang sa hanggang 8 balde, samantalang 1 beses lang pwede makita sa tried. Cryptographic hashing ang basehan ng pagpili ng balde.
Balik tayo sa feeler connection na nabanggit kanina. Ito ay gagamitin upang desisyunan ng node kung ang isang address ay ililipat mula sa new papuntang tried, o kaya ay tatanggalin na.
Ang mga addresses na may mga ganitong sitwasyon ay mamarkahang “terrible” at maaari nang tanggalin sa susunod na ma-engkwentro ito sa new na balde:
- 30 araw nang nasa memorya at hindi makonektahan pag nataunan.
- 3 beses nang kumonekta sa new node subalit palyado.
- 10 palyadong koneksyon sa loob ng 7 araw
- Ang timestamp ng address ay mas maaga ng 10 minuto o higit pa (ano iyon, time traveller?)
Pwedeng tanggalin sa tried na balde ang isang IP address kapag lagpas 4 na oras na ang huling matagumpay na koneksyon dito. Kapag naglilipat naman sa tried, hanggang 10 address collisions ang pwedeng pansamantalang itago, na ireresolba sa loob ng 40 minuto.
Base sa mga diskusyon tungkol sa pag-aayos ng mga address sa memorya, masasabing ang partial view ng isang Bitcoin network node ay cyclic.
Initial Block Download
Mula sa matagumpay na koneksyon, ang isang node ay mag-uupdate na ng kanyang impormasyon patungkol sa blockchain. Initial Block Download (IBD) ang tawag dito. Tutulungan ito ng peer na mas updated o sync node.
Ang bagong saltang node ay mayroon lamang block 0 – ang genesis block na hard coded sa Bitcoin Core. Mag-uumpisa itong humingi ng block headers muna, gamit ang “getheaders” na mensahe. Ang sagot ng sync node ay headers na mensahe na maaaring maglaman ng hanggang 2000 block headers. Ang IBD node ay magsisimula nang patunayan ang data ng mga headers na natanggap. Tapos, magkahilerang gagawin nito na:
- Mag download ng karagdagang headers – tig 2000 libong headers ang matatanggap sa bawat sagot ng sync node hanggang sa ang huli ay mas konti na. Bilang proteksyon, magpapadala ang IBD node sa lahat ng outbound peers nito ng getheaders na mensahe. Ikukumpara nito ang matatanggap na headers para matukoy kung ano ang pinakamahusay na chain.
- Magdownload ng blocks – Ito ay gagawin sa pamamagitan ng “getdata” na mensahe, na pwedeng ipadala sa 8 full relay outgoing nodes. Hanggang 16 na blocks ang maaaring hilingin kada ougoing node, o 128 na magkakasabay na hiling ang magaganap. Ang sync node ay sasagot ng block na mensahe na naglalaman na nga ng 1 block. Ang IBD node ay nagpapatunay (o validate) na ng bawat block na natatanggap.
Sunud-sunod dapat ang pag validate ng blocks. Kaya, kapag may inaabangang block na hindi pa dumarating, at naunahan na ng mas bagong blocks galing sa ibang node, maghihintay ng 2 segundo o higit pa ang Bitcoin Core. Kapag wala pa rin, puputulin na ang koneksyon sa node na hindi agad nakapadala, at maghahanap ng ibang node na pwedeng magbigay ng kailangang block. Ang moving download window na ito ay may taas na 1024 blocks.
Tandaan lang na ang getdata ay may iba-ibang identifiers ng data na hinihingi, hindi lang ito para sa paghingi ng block.
Sa mga naunang bersyon ng Bitcoin Core, blocks-first ang operasyon. “Getblocks” ang mensahe na ipapadala ng IBD node, na sasagutin naman ng “inv” (inventory) na mensahe ng sync node. Ang inv ay mensahe na maaring magbigay ng block headers o transaksyon. Maaaring maglaman ng hanggang 500 na block headers ang isasagot na inv ng sync node sa IBD node. Tapos, hihiling na ito ng getdata message na tumutukoy sa mga blocks, na pwedeng 128 magkakasabay, pero sa iisang sync node lamang. Isa-isa nang magpapadala ng buong block. Makikita mo ang kalamangan ng bagong implementasyon na getheaders, na tinalakay kanina. Headers-first ang operasyon ng mga peers na mas bago ang software.
Kapag ang IBD node ay nai-sync na sa dulo ng blockchain, maaari na itong tumanggap ng bagong blocks mula sa miner nodes o kung sinumang naunang nakaalam na node.
Mga klase ng nodes
Pag-usapan natin muna ang iba-ibang klase ng nodes.
- Full nodes – ito ay mga nodes na dina-download ang buong block at ibeberipika ito bago ipasa sa iba. Ang nailarawan nating initial block download kanina ay tumutukoy sa pagbuo ng isang full node. Ang full node noon ay kaya magawa lahat ng sangkap ng Bitcoin, gaya ng pagpapanatili ng blockchain, pagmimina at wallet. Subalit ngayon, hindi na madali na isang device lang para sa lahat. May pagkakaiba na ngayon sa full node:
- Archival full node – ito ay full node na merong kopya ng blockchain, pero hindi na nagmimina.
- Pruned node – ito ay full node sa isang kahulugan dahil nagbeberipika ito ng buong block bago ipasa sa iba. Pero, hindi ito nagpapanatili ng kopya ng buong blockchain, sa halip, puputulin ito sa isang punto, depende sa kapasidad ng computer (halimbawa, 2 GB). Tutal, ang block header naman ay may marka ng nakaraang block.
- Simplified Payment Verification (SPV) client – tinatawag ding isang lightweight client, ay dina-download lang ang block headers, at kukuha lang ng mga transaksyon sa full nodes kapag kailangan. Ganito ang mga wallet apps, na mahalaga lamang ang partikular na transaksyon para sa may-ari.
Nagiging posible ang pruned node at SPV client dahil sa konsepto ng Merkle Tree na gamit para makuha ang hash na nagrerepresenta ng mga transaksyon sa loob ng isang block. Kaugnay rin sa Merkle Tree ang paggamit ng bloom filter ng mga SPV para magkaroon kahit papano ng privacy. Ipagpaliban natin para sa susunod na kabanata ang konseptong ito.
Pagpapakalat ng Bagong Block
Ngayon, tapusin natin ang kabanatang ito sa pagkalat ng bagong block galing sa miner. Kapag nakabuo ng block na may tamang kondisyon ang miner, ipapasa na ito gamit ang alin sa mga sumusunod:
- Unsolicited Block Push – ito ay lumang paraan kung saan magpapasa ng block na mensahe sa full nodes na konektado. Kumbaga, ito ay eager push na pagtsismis ng impormasyon.
- Standard Block Relay – ito ay mas bagong paraan para sa miner na nagpapaalam ng matagumpay na block. Magpapadala muna ng inv na mensahe sa full node at SPV node na konektado ang miner, na naglalaman ng bagong block header. Na sasagutin naman ng:
- Getdata kung ang isang node ay gumagana pa rin bilang blocks-first. Kaya sasagot na ng block na mensahe ang miner.
- Sa mga headers-first na peers naman, getheaders ang isasagot, kung saan may ilang headers ng mga naunang blocks ang titignan para makumpirma ang bagong block header. Susundan ito ng getdata para makuha na ang block. Pero kung sa pananaw nito ay hindi kompirmado ang bagong block header, itatapon na nito ang buong block. Sa paraang ito, maiiwasan ang orphan block, o block na hindi nakikita ang parent block.
- Ang SPV na client ay sasagot ng getdata pero ang tinutukoy ay Merkle block.
- Direct headers – ito ay mas bago pang paraan kumpara sa standard block relay na pwedeng gamitin ng miners at relay nodes para sa mga mas updated na software. Ang isang node na sumusunod dito ay nagpapadala ng “sendheaders” na mensahe sa inisyal na koneksyon. Kaya, twing may bagong block, header nito muna ang ipapadala ng miner. Tapos, ang full node ay hihingi ng data ng buong block, samantalang ang SPV client ay hihingi ng data ng Merkle block.
- Compact Block Relay – ito ay mas bagong paraan pa uli ng pagpapakalat ng block, na naglalayong matipid ang bandwidth na gamit. Nakakatulong din ito na bumilis ang pasahan ng block. Ito ay ginagamit ang konsepto na ang mga transaksyon sa isang block ay malamang makikita rin sa kani-kaniyang mempool ng mga nodes. Kaya, sa halip na buong block ang ipadala, magpapadala ng compact block. Ang tatanggap na node ay dapat kayang buuin ang block base sa compact block. Ang node na pwedeng tumanggap ng compact block ay dapat magpadala muna ng “sendcmpct” na mensahe sa inisyal na koneksyon.
Ang standard block relay at direct headers na paraan ng pagtsismis ng bagong block ay lazy push na stratehiya, diba? Ang compact block relay naman ay maaaring eager push at lazy push, na maipapaliwanag kung bakit, sa susunod na kabanata.