BTC-網(wǎng)絡(luò)
新發(fā)布的區(qū)塊、交易在BTC網(wǎng)絡(luò)是怎么傳播的呢放妈?下面先看BTC網(wǎng)絡(luò)的工作原理:BTC工作在應(yīng)用層。底層是網(wǎng)絡(luò)層
應(yīng)用層(application layer):運(yùn)行BTC協(xié)議
網(wǎng)絡(luò)層(network layer):P2P Overlay Network(BTC中的節(jié)點(diǎn)地位是平等的,沒(méi)有超級(jí)節(jié)點(diǎn))
如何加入網(wǎng)絡(luò)
要加入網(wǎng)絡(luò)需要知道一個(gè)種子節(jié)點(diǎn)(seed node)钠导,它會(huì)告訴你它所知道的其他節(jié)點(diǎn),節(jié)點(diǎn)之間是通過(guò)TCP協(xié)議來(lái)傳輸?shù)模ㄓ欣诖┩阜阑饓Γ?/p>
離開(kāi)網(wǎng)絡(luò)不用做什么操作森瘪,直接退出程序就行牡属,其他節(jié)點(diǎn)一段時(shí)間沒(méi)有收到你的消息,會(huì)自動(dòng)刪除扼睬。
設(shè)計(jì)原則
設(shè)計(jì)原則是:簡(jiǎn)單逮栅、魯棒性(robust),而不是高效
消息傳播
消息傳播采取 flooding的方式窗宇,鄰居節(jié)點(diǎn)選取是隨機(jī)的证芭,如果該節(jié)點(diǎn)后面再收到這個(gè)消息就不會(huì)轉(zhuǎn)發(fā)給鄰居節(jié)點(diǎn)。
flooding:是指從任何節(jié)點(diǎn)通過(guò)一個(gè)路由器發(fā)送的信息包會(huì)被發(fā)送給與該路由器相連的所有其他節(jié)點(diǎn)(除了發(fā)送信息包出來(lái)的那個(gè)節(jié)點(diǎn))担映。flooding是快速散布路由更新信息到整個(gè)大型網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)的一種方法废士。它有時(shí)也被用于多點(diǎn)傳輸信息包(在真實(shí)或虛擬網(wǎng)絡(luò)中從一個(gè)來(lái)源節(jié)點(diǎn)傳輸?shù)皆S多特定節(jié)點(diǎn))。
BTC系統(tǒng)中節(jié)點(diǎn)要維護(hù)一個(gè)等待上鏈的交易的集合蝇完,第一次聽(tīng)到這個(gè)交易官硝,節(jié)點(diǎn)會(huì)加入集合并轉(zhuǎn)發(fā)給其他鄰居節(jié)點(diǎn)(當(dāng)然前提是交易合法),如果已經(jīng)寫(xiě)到區(qū)塊鏈中那么就從中刪掉該交易短蜕。?
遇到有沖突的交易氢架,會(huì)根據(jù)收到消息不同時(shí)間,每個(gè)節(jié)點(diǎn)存入等待上鏈的交易的集合可能不一樣(先收到的會(huì)存入朋魔,后面的認(rèn)定非法交易)岖研,具體寫(xiě)入哪一個(gè)需要看哪個(gè)節(jié)點(diǎn)先拿到記賬權(quán)。
BTC協(xié)議規(guī)定最大區(qū)塊大小是1M警检,在整個(gè)系統(tǒng)中帶寬是瓶頸孙援,可能1M大小的交易信息的區(qū)塊傳播給全網(wǎng)絕大多數(shù)節(jié)點(diǎn)需要十幾秒。