驗證交易后股冗,比特幣節(jié)點會將這些交易添加到自己的內存池中。內存池也稱作交易池蓬痒,用來暫存尚未被加入到區(qū)塊的交易記錄。與其他節(jié)點一樣围肥,Jing的節(jié)點會收集、驗證并中繼新的交易蜂怎。而與其他節(jié)點不同的是穆刻,Jing的節(jié)點會把這些交易整合到一個候選區(qū)塊中。
讓我們繼續(xù)跟進杠步,看下Alice從Bob咖啡店購買咖啡時產生的那個區(qū)塊氢伟。Alice的交易在區(qū)塊277,316。我們假設這個區(qū)塊是由Jing的挖礦系統(tǒng)挖出的篮愉,并且繼續(xù)跟進Alice的交易腐芍,因為這個交易已經成為了新區(qū)塊的一部分。
Jing的挖礦節(jié)點維護了一個區(qū)塊鏈的本地副本试躏,包含了自2009年比特幣系統(tǒng)啟動運行以來的全部區(qū)塊猪勇。當Alice買咖啡的時候,Jing節(jié)點的區(qū)塊鏈已經收集到了區(qū)塊277,314颠蕴,并繼續(xù)監(jiān)聽著網絡上的交易泣刹,在嘗試挖掘新區(qū)塊的同時,也監(jiān)聽著由其他節(jié)點發(fā)現的區(qū)塊犀被。當Jing的節(jié)點在挖礦時椅您,它從比特幣網絡收到了區(qū)塊277,315。這個區(qū)塊的到來標志著終結了產出區(qū)塊277,315競賽寡键,與此同時也是產出區(qū)塊277,316競賽的開始掀泳。
在上一個10分鐘內,當Jing的節(jié)點正在尋找區(qū)塊277,315的解的同時西轩,它也在收集交易記錄為下一個區(qū)塊做準備员舵。目前它已經收到了幾百筆交易記錄,并將它們放進了內存池藕畔。直到接收并驗證區(qū)塊277,315后马僻,Jing的節(jié)點會檢查內存池中的全部交易,并移除已經在區(qū)塊277,315中出現過的交易記錄注服,確保任何留在內存池中的交易都是未確認的韭邓,等待被記錄到新區(qū)塊中措近。
Jing的節(jié)點立刻構建一個新的空區(qū)塊,做為區(qū)塊277,316的候選區(qū)塊女淑。稱作候選區(qū)塊是因為它還沒有包含有效的工作量證明瞭郑,不是一個有效的區(qū)塊,而只有在礦工成功找到一個工作量證明解之后鸭你,這個區(qū)塊才生效凰浮。
新區(qū)塊廣播發(fā)出,每一個節(jié)點都會驗證一遍然后傳播出去苇本,獨立校驗是去中心化共識的重要組成部分。驗證哪些信息菜拓,驗證后怎么傳播瓣窄,傳播啥?這塊的網絡邏輯是怎樣的纳鼎?
最后一步是將區(qū)塊集合至有最大工作量證明的鏈中俺夕。一旦一個節(jié)點驗證了一個新的區(qū)塊,它將嘗試將新的區(qū)塊連接到到現存的區(qū)塊鏈贱鄙,將它們組裝起來劝贸。當節(jié)點接收到新區(qū)塊,它會嘗試將這個區(qū)塊插入到現有區(qū)塊鏈中逗宁。節(jié)點會看一下這個區(qū)塊的previous block hash映九,如果未找到它的父區(qū)塊,那么這個區(qū)塊被認為是“孤塊”瞎颗。孤塊會被保存在孤塊池中件甥,直到它們的父區(qū)塊被節(jié)點收到。一旦收到了父區(qū)塊并且將其連接到現有區(qū)塊鏈上哼拔,節(jié)點就會將孤塊從孤塊池中取出引有,并且連接到它的父區(qū)塊,讓它作為區(qū)塊鏈的一部分倦逐。當兩個區(qū)塊在很短的時間間隔內被挖出來譬正,節(jié)點有可能會以相反的順序接收到它們,這個時候孤塊現象就會出現檬姥。