《以太坊白皮書》筆記(1)—— 比特幣介紹

《以太坊白皮書》原文鏈接:https://github.com/ethereum/wiki/wiki/White-Paper

Bitcoin

#1 State Transaction System

State

狀態(tài)轉(zhuǎn)換的過(guò)程

在 Bitcoin 當(dāng)中蚤假,"state" 代表了所有被挖出且沒(méi)有被消費(fèi)的貨幣的集合 (UTXO - "unspent transaction outputs"),并且每一個(gè)貨幣都有面值和持有者臭家。

Bitcoin 交易:

  1. 有 1 個(gè)或多個(gè)輸入初厚,包含現(xiàn)有的 UTXO 和由持有者地址相關(guān)的私鑰簽名
  2. 有 1 個(gè)或多個(gè)輸出芙扎, 包含一個(gè)新的 UTXO 并更新?tīng)顟B(tài)

State Transaction Function

輸入當(dāng)前狀態(tài)和一筆交易惜纸,輸出新的狀態(tài)或者ERROR

APPLY(S,TX) -> S' or ERROR
  1. For each input in TX:
  • If the referenced UTXO is not in S, return an error.
  • If the provided signature does not match the owner of the UTXO, return an error.
  1. If the sum of the denominations of all input UTXO is less than the sum of the denominations of all output UTXO, return an error.
  2. Return S' with all input UTXO removed and all output UTXO added.
  • 第一條:前半部分防止使用不存在的比特幣趴捅,后半部分防止使用不屬于自己的比特幣

  • 第二條:加強(qiáng)對(duì)輸出結(jié)果正確性的防御

    ?

#2 Mining

比特幣中一部分 block 示例

Decentralized

如果有一個(gè)足夠信賴的中心化服務(wù)羔味,那么挖礦系統(tǒng)存在的意義就變得微乎其微兵钮。因?yàn)檫@個(gè)中心化服務(wù)可以實(shí)時(shí)追蹤全局的狀態(tài)蛆橡。

但比特幣努力打造了一個(gè)去中心化的貨幣系統(tǒng)。因此矢空,比特幣的狀態(tài)轉(zhuǎn)換系統(tǒng)必須配上一個(gè)共識(shí)系統(tǒng)航罗,為了確保每一筆交易的可信度。

比特幣的去中心化系統(tǒng)要求網(wǎng)絡(luò)中的節(jié)點(diǎn)去不斷地嘗試去制造一個(gè)個(gè)包含交易的集合 —— 區(qū)塊屁药。在比特幣網(wǎng)絡(luò)中粥血,每十分鐘會(huì)產(chǎn)出一個(gè)新的區(qū)塊,這個(gè)區(qū)塊會(huì)包含創(chuàng)建時(shí)的時(shí)間戳酿箭、一個(gè)臨時(shí)隨機(jī)數(shù)复亏、一個(gè)前一區(qū)塊的哈希串以及一個(gè)在這期間發(fā)生的所有交易的列表。經(jīng)過(guò)一段時(shí)間之后缭嫡,這會(huì)產(chǎn)生一個(gè)持久的缔御、持續(xù)增長(zhǎng)并且持續(xù)保持最新?tīng)顟B(tài)的比特幣賬本——區(qū)塊鏈

Validation

校驗(yàn)塊是否正確的算法:

  1. 檢查父塊是否存在并且合法
  2. 檢查塊的時(shí)間戳是否大于父塊的時(shí)間戳妇蛀,并且差值小于 2 小時(shí)
  3. 檢查 POW 是否合法
  4. 讓父塊的最終狀態(tài)變?yōu)?S[0]
  5. 假設(shè) TX 為當(dāng)前塊中 n 條交易的列表耕突,對(duì)于 i in 0...n-1,讓s[i+1] = APPLY(S[i],TX[i])评架,如果任何一次操作返回錯(cuò)誤眷茁,則檢驗(yàn)返回錯(cuò)誤
  6. 返回正確,并注冊(cè) S[n] 為當(dāng)前塊的最終狀態(tài)

Note:

each transaction in the block must provide a valid state transition from what was the canonical state before the transaction was executed to some new state
每條交易必須提供一個(gè)已經(jīng)驗(yàn)證的狀態(tài)纵诞,這個(gè)狀態(tài)由交易真正被進(jìn)行前的一個(gè)權(quán)威狀態(tài)轉(zhuǎn)變而來(lái)上祈。

Proof of Work (POW)

比特幣目前的POW條件:double-SHA256 hash (必須小于一個(gè)動(dòng)態(tài)調(diào)整的 target值)

因?yàn)?SHA256 的設(shè)計(jì),就是為了使其完全不可預(yù)測(cè)浙芙。而創(chuàng)造一個(gè)新的區(qū)塊的唯一辦法登刺,就是不停地進(jìn)行運(yùn)算并遞增臨時(shí)隨機(jī)數(shù)以嘗試讓得出的哈希值通過(guò)驗(yàn)證。因此嗡呼,這樣可以讓每個(gè)塊的生成有一定的難度纸俭,從而防止區(qū)塊鏈被攻擊。

比特幣的目標(biāo)值會(huì)在每 2016 個(gè)區(qū)塊創(chuàng)造出來(lái)后更新一次南窗,因此掉蔬,比特幣系統(tǒng)可以保證每 10 分鐘才會(huì)創(chuàng)造出一個(gè)新的區(qū)塊廊宪。同時(shí),每個(gè)礦工挖出一個(gè)新的區(qū)塊會(huì)得到一定數(shù)量的比特幣獎(jiǎng)勵(lì)女轿。另外,如果在此區(qū)塊中的任何交易發(fā)生時(shí)的比特幣價(jià)值大于這次交易被確認(rèn)時(shí)的價(jià)值壕翩,那么這個(gè)差值也會(huì)當(dāng)做 “手續(xù)費(fèi)” 給予礦工蛉迹。

為了更好的理解挖礦的意義,以下是假設(shè)有人要攻擊比特幣系統(tǒng)時(shí)會(huì)發(fā)生的事:

因?yàn)楸忍貛诺拿艽a學(xué)基礎(chǔ)被公認(rèn)為安全的放妈,所以攻擊者的目標(biāo)會(huì)是比特幣系統(tǒng)中沒(méi)有被密碼學(xué)基礎(chǔ)所保護(hù)的地方:交易的順序北救。其策略如下:

  1. 用 100 BTC 向一位供應(yīng)商換取一項(xiàng)商品 (通常是可以快速交付的電子商品)
  2. 等待供應(yīng)商交付
  3. 生成另一筆向自己支付 100 BTC 的交易
  4. 嘗試讓比特幣網(wǎng)絡(luò) “認(rèn)同” 這筆向自己支付的交易是先發(fā)生的

當(dāng)步驟 1 發(fā)生時(shí),幾分鐘后會(huì)有一個(gè)礦工把這筆交易囊括在自己發(fā)現(xiàn)的區(qū)塊中芜抒,假設(shè)是區(qū)塊 27,000珍策。大約一個(gè)小時(shí)后,更多的 5 個(gè)區(qū)塊會(huì)被加入到區(qū)塊鏈當(dāng)中宅倒,且這 5 個(gè)區(qū)塊每個(gè)都間接指向區(qū)塊 27,000攘宙。因此,區(qū)塊 27,000 是被 ”確認(rèn)“ 過(guò)的區(qū)塊拐迁。

這時(shí)蹭劈,供應(yīng)商會(huì)確認(rèn)這筆交易并交付商品。然后线召,攻擊者會(huì)創(chuàng)建另一條向自己支付 100 BTC 的交易铺韧。如果攻擊者直接把它公布出去,那這筆交易并不會(huì)被承認(rèn)并加入缓淹。因?yàn)榈V工們會(huì)去跑 APPLY(S,TX) 并注意到 TX 消費(fèi)了一個(gè)不存在于當(dāng)前狀態(tài)中的 UTXO哈打。

因此,攻擊者會(huì)選擇其他方法讯壶,比如會(huì)創(chuàng)建一條比特幣區(qū)塊鏈的 “分支”料仗,且這條分支中有了一個(gè)包含那條向自己支付 100 BTC 交易的區(qū)塊 27,000 指向一個(gè)與原區(qū)塊 27,000 相同的父區(qū)塊 —— 區(qū)塊 26,999。因?yàn)檫@個(gè)區(qū)塊 27,000 的數(shù)據(jù)與原先不同鹏溯,因此這個(gè)區(qū)塊會(huì)被要求重新運(yùn)算 POW罢维。而且,由于原先的區(qū)塊 27,001 - 27,005 并沒(méi)有 “指向” 這個(gè)新的區(qū)塊丙挽,因此攻擊者的新區(qū)塊鏈和原有的區(qū)塊鏈可以說(shuō)時(shí)完全分離了肺孵。

在比特幣的規(guī)則中,如果區(qū)塊鏈有分支颜阐,那么最長(zhǎng)的分支總是最被信任的平窘。所以其他所有的礦工都會(huì)基于區(qū)塊 27,005 所在的這條鏈上進(jìn)行作業(yè),而攻擊者只能一個(gè)人基于他自己的鏈進(jìn)行作業(yè)凳怨。那么攻擊者為了使他自己的區(qū)塊鏈變成最長(zhǎng)的鏈瑰艘,他必須擁有比其他所有礦工更高的算力才能達(dá)到是鬼!

更有意思的是,在中本聰 (比特幣發(fā)明者) 本人的說(shuō)明中紫新,由挖礦帶來(lái)的獎(jiǎng)勵(lì)均蜜,要遠(yuǎn)遠(yuǎn)大于破壞現(xiàn)有的比特幣網(wǎng)絡(luò) (需要注意,這在礦工數(shù)量很少的情況下并不適用)芒率。

#3 Merkle Trees

Merkle Tree 示例

比特幣中所有交易的數(shù)據(jù)都被存儲(chǔ)在一種二叉樹(shù)類型的名為 Merkle Tree 的數(shù)據(jù)結(jié)構(gòu)中囤耳。

  1. 具有樹(shù)結(jié)構(gòu)的所有特點(diǎn)
  2. 葉子節(jié)點(diǎn)的值為 HASH 值
  3. 非葉子節(jié)點(diǎn)的值是根據(jù)其下面的所有子節(jié)點(diǎn)的值通過(guò) HASH 算法計(jì)算得出

Merkle Tree 在比特幣中應(yīng)用的目的是為了驗(yàn)證數(shù)據(jù)的有效性。因?yàn)楣V迪蛏蟼鬟f的特性偶芍,如果有人試圖傳遞一個(gè)假的交易數(shù)據(jù)充择,那么這會(huì)導(dǎo)致此節(jié)點(diǎn)在 Merkle Tree 中的父節(jié)點(diǎn)數(shù)據(jù)發(fā)生改變,以及父節(jié)點(diǎn)的父節(jié)點(diǎn)……

使用 Merkle Tree 的另一個(gè)重要的原因是:**Simplified Payment Verification (SPV) **協(xié)議匪蟀。SPV 允許一種稱為 “l(fā)ight nodes” 的節(jié)點(diǎn)集合椎麦。SPV 協(xié)議使得在驗(yàn)證某一交易的有效性時(shí),能夠只下載比特幣區(qū)塊鏈中所有數(shù)據(jù)的其中一小部分材彪,同時(shí)也可以強(qiáng)有力地保證數(shù)據(jù)的有效性观挎。

只需要較小一部分的節(jié)點(diǎn)便可以驗(yàn)證某一葉子節(jié)點(diǎn)的數(shù)據(jù)有效性
對(duì)任一葉子節(jié)點(diǎn)數(shù)據(jù)的修改最后都會(huì)導(dǎo)致整條鏈中某一處產(chǎn)生錯(cuò)誤

#4 Scripting

在比特幣中,由于沒(méi)有現(xiàn)實(shí)中的 “賬戶” 的概念查刻。因此如何判斷用戶所擁有的 UTXO键兜,并不單單是依靠一個(gè)公鑰地址,而是一個(gè)更為復(fù)雜的腳本穗泵。比特幣中的腳本普气,是一種基于棧運(yùn)行的程序語(yǔ)言。

在這樣的設(shè)計(jì)下佃延,任何一筆交易如果要達(dá)成现诀,這筆交易所花費(fèi)的 UTXO 必須滿足這個(gè)腳本(由產(chǎn)生這個(gè) UTXO 的交易輸出)。

假設(shè)履肃,Bob 向 Alice 支付了 1BTC仔沿,這筆交易輸出了類似一個(gè)包含 Alice 公鑰的腳本。現(xiàn)在尺棋,Alice 想花費(fèi)這 1BTC封锉,她必須提供自己私鑰生成的簽名(私鑰是 Alice 唯一的 )和公鑰作為輸入。如果腳本能夠順利跑通膘螟,那么這個(gè)交易就會(huì)被認(rèn)可成福,同時(shí)所有人都可以去驗(yàn)證這筆交易。

比特幣腳本的幾個(gè)缺陷:

  1. 缺少圖靈完備性
  2. 缺少狀態(tài)的聲明
  3. 沒(méi)有綁定任何數(shù)據(jù)
  4. 過(guò)依賴區(qū)塊鏈

閱讀 Github 上 《Ethereum - White Paper》 的一些筆記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荆残,一起剝皮案震驚了整個(gè)濱河市奴艾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌内斯,老刑警劉巖蕴潦,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件像啼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡潭苞,警方通過(guò)查閱死者的電腦和手機(jī)忽冻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)此疹,“玉大人甚颂,你說(shuō)我怎么就攤上這事⌒懔猓” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蹭睡,是天一觀的道長(zhǎng)衍菱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肩豁,這世上最難降的妖魔是什么脊串? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮清钥,結(jié)果婚禮上琼锋,老公的妹妹穿的比我還像新娘。我一直安慰自己祟昭,他們只是感情好缕坎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著篡悟,像睡著了一般谜叹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搬葬,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天荷腊,我揣著相機(jī)與錄音,去河邊找鬼急凰。 笑死女仰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抡锈。 我是一名探鬼主播疾忍,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼企孩!你這毒婦竟也來(lái)了锭碳?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勿璃,失蹤者是張志新(化名)和其女友劉穎擒抛,沒(méi)想到半個(gè)月后推汽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歧沪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年歹撒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊胞。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暖夭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撵孤,到底是詐尸還是另有隱情迈着,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布邪码,位于F島的核電站裕菠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闭专。R本人自食惡果不足惜奴潘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望影钉。 院中可真熱鬧画髓,春花似錦、人聲如沸平委。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肆汹。三九已至愚墓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昂勉,已是汗流浹背浪册。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岗照,地道東北人村象。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像攒至,于是被迫代替她去往敵國(guó)和親厚者。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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