重新創(chuàng)造比特幣14:交易的同步

作者:何巖询张,禁止轉(zhuǎn)載。

0.前言

在上一篇中浙炼,中本聰和Gilfoyle搞定了最簡單的點(diǎn)對點(diǎn)網(wǎng)絡(luò)份氧。但是無法正常運(yùn)行唯袄,因?yàn)橘~本還沒實(shí)現(xiàn)同步機(jī)制。為了解決賬本的同步蜗帜,需要先引出交易的同步越妈。

1.賬本不一致

咖啡館,中本聰對著老板Bob說:“老板钮糖,這幾天Bitcoin系統(tǒng)要升級梅掠,暫時無法用了”

Bob說:“我看到了,你們又是搬機(jī)器店归,又是寫代碼阎抒,這次升級動靜夠大的∠矗”

中本聰說:“是啊且叁,Bitcoin要發(fā)生質(zhì)變了,對了秩伞,你家要是有不用的機(jī)器也搬過來逞带,我們需要更多節(jié)點(diǎn)∩葱拢”

Bob說:“好啊展氓,我家還真有一臺,不過運(yùn)行Bitcoin我能得到什么好處呢脸爱?”

中本聰說:“好處......這個我得想想遇汞,暫時還沒有,純是友情支持簿废】杖耄”

Bob說:“好吧,看在你是我的老客戶族檬,我去給你搬過來歪赢。”

中本聰說:“太好了单料!你真是個慷慨的老板埋凯!”

中本聰對Gilfoyle說:“我們將要有第3個節(jié)點(diǎn)啦!現(xiàn)在看尼,我們來解決賬本的同步問題吧递鹉!”

我們假設(shè)一個交易場景:

1.Alice賬本中的余額是50盟步,并且記賬節(jié)點(diǎn)1和記賬節(jié)點(diǎn)2的賬本一致藏斩。

2.Alice的客戶端連接的是記賬節(jié)點(diǎn)1。

3.Carol的客戶端連接的是記賬節(jié)點(diǎn)2却盘。

4.Alice向節(jié)點(diǎn)1發(fā)送一個交易消息:Alice to Bob 50

5.Carol向節(jié)點(diǎn)2發(fā)送一個交易消息:Carol to Alice 30

6.這時候的Alice的正確余額本應(yīng)該是30狰域。但是由于賬本沒有同步媳拴,所以在節(jié)點(diǎn)1中Alice的余額是0,在節(jié)點(diǎn)2中Alice的余額是80兆览,都不正確屈溉。(見下圖)


賬本不一致

面對這個場景,應(yīng)該如何解決賬本不一致的問題呢抬探?

中本聰解釋到:“解決這個場景還算簡單子巾。只需要節(jié)點(diǎn)互相將自己的賬本發(fā)送給對方節(jié)點(diǎn),收到對方的賬本后小压,找出自己賬本中缺少的交易記錄线梗,然后將此交易記錄補(bǔ)充到自己的賬本,這樣倆個節(jié)點(diǎn)的賬本就又一致了怠益∫巧Γ”

在上面這個場景中,

節(jié)點(diǎn)1補(bǔ)充進(jìn)自己賬本的交易記錄是:Carol to Alice 30蜻牢。

節(jié)點(diǎn)2補(bǔ)充進(jìn)自己賬本的交易記錄是:Alice to Bob 50烤咧。

這樣在倆個節(jié)點(diǎn)中的賬本又恢復(fù)一致,Alice的余額都顯示為30抢呆。(見下圖)


賬本的同步

Gilfoyle感嘆到:“多虧了UTXO機(jī)制煮嫌,由于沒有賬戶模型,交易不會修改過去的記錄抱虐,只會在賬本中新增交易記錄立膛,所以,節(jié)點(diǎn)間賬本不一致也只會缺失彼此的交易記錄梯码,而不會存在數(shù)據(jù)沖突”

中本聰笑到:“別高興的太早宝泵,我感覺不會這么簡單⌒ⅲ”

中本聰?shù)闹庇X是準(zhǔn)確的儿奶,這個同步機(jī)制的確存在漏洞,那就是所謂的雙花鳄抒,這還是等后面問題發(fā)生了闯捎,我們再去討論,現(xiàn)在我們看看現(xiàn)在的賬本同步方案许溅,有沒有什么優(yōu)化空間瓤鼻。

2.交易的同步

中本聰說:“每次節(jié)點(diǎn)接受到新的交易,都發(fā)送全量賬本給對方節(jié)點(diǎn)贤重,這樣做太浪費(fèi)網(wǎng)絡(luò)資源了茬祷,其實(shí)只需要將新增的交易記錄發(fā)送給對方節(jié)點(diǎn)就夠了。對方節(jié)點(diǎn)只需要將這條交易記錄補(bǔ)充到自己的賬本即可并蝗〖婪福”

Gilfoyle說:“那就是不再同步賬本秸妥,而只同步增量交易記錄∥执郑”

中本聰說:“如果只考慮新增交易記錄的同步粥惧,那么具體步驟應(yīng)該是這樣的∽钪眩”

中本聰解釋著詳細(xì)的增量交易同步機(jī)制:

1.節(jié)點(diǎn)1接受到用戶通過輕節(jié)點(diǎn)發(fā)來的最新交易:Alice to Bob 50

2.節(jié)點(diǎn)1將這條交易記錄寫入賬本突雪,同時將交易記錄通過自己的Socket Server廣播出去。(這里之所以將Socket Server發(fā)送消息說成是廣播涡贱,是因?yàn)橐粋€Socket Server會連接多個Socket Client挂签,這個傳播路徑很像廣播。而反過來看盼产,Socket Client主動連接Socket Server的行為則是:訂閱饵婆,就好像用戶通過收音機(jī)訂閱了一個廣播頻道一樣。所以戏售,每個記賬節(jié)點(diǎn)即能廣播又能訂閱侨核。)

3.節(jié)點(diǎn)2由于訂閱了節(jié)點(diǎn)1,所以可以收到這條新增交易消息灌灾。

4.節(jié)點(diǎn)2不可以直接寫入自己的賬本搓译,因?yàn)樽约旱馁~本中沒準(zhǔn)已經(jīng)存在相同的交易記錄。所以要驗(yàn)證這條交易記錄是否已經(jīng)在賬本中存在锋喜。

Gilfoyle不解的問到:“為什么會存在相同交易記錄呢些己?”

中本聰解釋到:“可能是Alice通過客戶端同時在向節(jié)點(diǎn)1和節(jié)點(diǎn)2發(fā)起相同的交易請求。

也可能節(jié)點(diǎn)1發(fā)送同步消息的時候發(fā)重復(fù)了嘿般,這樣第一遍節(jié)點(diǎn)2就已經(jīng)將其寫入賬本了段标。”

5.如果本交易記錄已經(jīng)存在于節(jié)點(diǎn)2的賬本中炉奴,則什么都不做逼庞,結(jié)束本次同步行為。

6.如果本交易記錄不存在于節(jié)點(diǎn)2的賬本中瞻赶,則將其寫入賬本赛糟,同時將這條交易記錄廣播出去。提供給其它訂閱自己的節(jié)點(diǎn)砸逊,讓其它節(jié)點(diǎn)進(jìn)行增量交易的同步璧南。

Gilfoyle問:“為什么節(jié)點(diǎn)2還要再次廣播這條同步記錄,這條消息源頭就是節(jié)點(diǎn)1給節(jié)點(diǎn)2的师逸,節(jié)點(diǎn)2如果再廣播出去司倚,不就又到了節(jié)點(diǎn)1這里,這樣不就形成消息的無限循環(huán)了嗎?”

中本聰解釋到:“不會循環(huán)的对湃,因?yàn)槟憧吹?條崖叫,如果發(fā)現(xiàn)交易記錄之前存在遗淳,就會終止拍柒。”

中本聰繼續(xù)解釋到:“而節(jié)點(diǎn)2為什么要再次廣播呢屈暗?這是因?yàn)椴鹧叮绻?jié)點(diǎn)3加入到了記賬網(wǎng)絡(luò)中,而節(jié)點(diǎn)3只訂閱了節(jié)點(diǎn)2养叛,沒有訂閱節(jié)點(diǎn)1种呐,那么就需要節(jié)點(diǎn)2作為一個傳話筒,將自己訂閱節(jié)點(diǎn)1的同步消息傳遞給節(jié)點(diǎn)3弃甥∷遥”(見下圖)


節(jié)點(diǎn)3只訂閱了節(jié)點(diǎn)2

Gilfoyle說:“明白了,這樣就嚴(yán)謹(jǐn)了淆攻,在點(diǎn)對點(diǎn)的網(wǎng)絡(luò)中阔墩,節(jié)點(diǎn)的角色即是消費(fèi)者,又是服務(wù)者瓶珊。真是人人為我啸箫,我為人人啊伞芹!”

中本聰說:“對忘苛,這樣任何一個節(jié)點(diǎn),廣播任何一條消息唱较,都可以一瞬之間傳遍整個網(wǎng)絡(luò)扎唾,一石激起千層浪∧匣海”

Gilfoyle說:“這讓我想到稽屏,上周在我家后院看到了一個飛行中的蜂群,蜂群中沒有任何一個蜜蜂發(fā)出中心化的指令西乖,但是任何蜜蜂根據(jù)自己前方的外界環(huán)境刺激狐榔,發(fā)出的信號可以瞬間傳遍整個蜂群中的每個個體,使得蜂群可以像一只靈活的動物一樣精準(zhǔn)的躲避樹木等障礙物获雕。這個飛行的怪物看上去智商還很高呢薄腻!這就是點(diǎn)對點(diǎn)網(wǎng)絡(luò)的精髓之處,網(wǎng)絡(luò)中的每個個體只需要遵守簡單的底層規(guī)則届案,大家連接在一起就可以通過平等的協(xié)作涌現(xiàn)極其復(fù)雜的行為庵楷!”


蜂群即網(wǎng)絡(luò)

中本聰說:“簡單規(guī)則衍生復(fù)雜行為,群系統(tǒng)很神奇吧!”

3.交易內(nèi)存池

中本聰說:“既然賬本不用頻繁同步了尽纽,我們可以再優(yōu)化一下咐蚯,在記賬節(jié)點(diǎn)中創(chuàng)建一個交易的內(nèi)存池。將每次收到的新增交易第一時間放入交易內(nèi)存池中弄贿,而不是寫入賬本春锋。等內(nèi)存池中的交易積累了一段時間(例如每隔10分鐘),再一次性的寫入到賬本中差凹∑诒迹”

Gilfoyle說:“這么做的目的是什么?減少硬盤的頻繁寫入嗎危尿?”

中本聰說:“對呐萌,減少頻繁寫硬盤,因?yàn)橘~本是文件谊娇,寫文件就是在寫硬盤肺孤。內(nèi)存訪問速度就要比硬盤訪問速度快上10萬倍以上〖没叮”

這就像什么呢赠堵?內(nèi)存就好似人的短期記憶,比如我們在馬路上搭訕了一個美女船逮,問人家要電話號顾腊,人家告訴你之后,你先記在腦子里挖胃,然后繼續(xù)和美女聊家常杂靶,這樣搭訕的節(jié)奏才flow。等美女走了酱鸭,你馬上要將剛才腦子里記住的電話號碼寫在小本子上吗垮,以免自己忘了。這就好像交易內(nèi)存池和賬本的關(guān)系凹髓。

記在腦子里的電話號烁登,方便快捷,不會打斷你的搭訕動作連續(xù)性蔚舀,但不穩(wěn)固饵沧,沒準(zhǔn)一個節(jié)點(diǎn)斷電重啟就丟了。而寫在小本子上就很麻煩笨重赌躺,但很穩(wěn)固狼牺,節(jié)點(diǎn)斷電也不會丟。

另外礼患,不光是用戶的新增交易是钥,節(jié)點(diǎn)間的交易同步也會先寫入到交易內(nèi)存池掠归。

這樣,就引出了“交易內(nèi)存池”這個概念悄泥。(見下圖)


加入交易內(nèi)存池

4.后記

雖然加入了交易的同步機(jī)制虏冻,但是現(xiàn)在的同步機(jī)制還是有很多漏洞,需要賬本的同步來填補(bǔ)漏洞弹囚。

本篇重點(diǎn)討論了交易的同步厨相,并引出了點(diǎn)對點(diǎn)網(wǎng)絡(luò)的廣播機(jī)制和交易內(nèi)存池等概念,下一篇將要討論賬本的同步余寥。


BSV打賞地址:1BudFu186jzdP9CBJTTPGsdbSJinbzzCyB

下一篇:重新創(chuàng)造比特幣15:賬本的同步

相關(guān)文章:

重新創(chuàng)造比特幣1:從一個簡單的web交易系統(tǒng)開始

重新創(chuàng)造比特幣2:第一個版本上線啦

重新創(chuàng)造比特幣3:舍棄賬戶模型领铐,讓交易更自由

重新創(chuàng)造比特幣4:數(shù)字簽名

重新創(chuàng)造比特幣5:公鑰和私鑰

重新創(chuàng)造比特幣6:第二個版本上線啦

重新創(chuàng)造比特幣7:UTXO

重新創(chuàng)造比特幣8:基于UTXO的系統(tǒng)重構(gòu)

重新創(chuàng)造比特幣9:萬物皆交易

重新創(chuàng)造比特幣10:交易腳本

重新創(chuàng)造比特幣11:群系統(tǒng)(上)

重新創(chuàng)造比特幣12:群系統(tǒng)(下)

重新創(chuàng)造比特幣13:P2P網(wǎng)絡(luò)

重新創(chuàng)造比特幣14:交易的同步

重新創(chuàng)造比特幣15:賬本的同步

重新創(chuàng)造比特幣16:Block Chain

重新創(chuàng)造比特幣17:網(wǎng)絡(luò)的彈性

重新創(chuàng)造比特幣18:工作量證明(上)

重新創(chuàng)造比特幣19:工作量證明(下)

重新創(chuàng)造比特幣20:分叉之重組與分裂

比特幣SV(Bitcoin satoshi vision,BSV)是目前唯一一個遵循中本聰原始白皮書悯森,遵循中本聰原始協(xié)議和設(shè)計的比特幣宋舷。BSV是唯一的公共區(qū)塊鏈,維持比特幣的原始愿景瓢姻,并將大規(guī)模擴(kuò)容成為企業(yè)級區(qū)塊鏈和世界新貨幣祝蝠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幻碱,隨后出現(xiàn)的幾起案子绎狭,更是在濱河造成了極大的恐慌,老刑警劉巖褥傍,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儡嘶,死亡現(xiàn)場離奇詭異,居然都是意外死亡恍风,警方通過查閱死者的電腦和手機(jī)蹦狂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朋贬,“玉大人凯楔,你說我怎么就攤上這事〗跄迹” “怎么了摆屯?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糠亩。 經(jīng)常有香客問我虐骑,道長,這世上最難降的妖魔是什么赎线? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任廷没,我火速辦了婚禮,結(jié)果婚禮上氛驮,老公的妹妹穿的比我還像新娘腕柜。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布盏缤。 她就那樣靜靜地躺著砰蠢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唉铜。 梳的紋絲不亂的頭發(fā)上台舱,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音潭流,去河邊找鬼竞惋。 笑死,一個胖子當(dāng)著我的面吹牛灰嫉,可吹牛的內(nèi)容都是我干的拆宛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讼撒,長吁一口氣:“原來是場噩夢啊……” “哼浑厚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起根盒,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钳幅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炎滞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敢艰,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年册赛,在試婚紗的時候發(fā)現(xiàn)自己被綠了钠导。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡击奶,死狀恐怖辈双,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柜砾,我是刑警寧澤湃望,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站痰驱,受9級特大地震影響证芭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜担映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一废士、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝇完,春花似錦官硝、人聲如沸矗蕊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傻咖。三九已至,卻和暖如春岖研,著一層夾襖步出監(jiān)牢的瞬間卿操,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工孙援, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留害淤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓拓售,卻偏偏與公主長得像窥摄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邻辉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容