比特幣白皮書-學習筆記

我的感受,先對區塊鏈或比特幣有個基本瞭解以後,再配合比特幣白皮書食用更佳。服務器

1.簡介(Introduction)

比特幣這種電子支付系統,基於密碼學原理而不基於信用。
點對點交易,不存在第三方中介的參與。網絡

杜絕交易回滾的可能,防止欺詐。區塊鏈

2.交易(Transactions)

定義一枚電子貨幣就是一串數字簽名鏈(coin as chain),每一位發送者經過對前一次交易和接收者的公鑰(public key)進行哈希運算後數字簽名,並將這個簽名附加到這枚電子貨幣的末尾,電子貨幣就發送給了接收者。spa

接收者使用發送者的公鑰校驗是不是正確的發送者發送的。設計

因爲交易中有接收者的公鑰,因此只有接收者使用本身的私鑰才能解鎖並將該貨幣傳遞下去。
3d

可是這裏的交易過程沒法解決雙重支付問題。爲了不雙重支付,即收款人有方法確保以前的全部者沒有對更早發送的交易進行簽名,實際上須要關注的只是於本交易以前發生的交易,而不須要關注這筆交易發生以後是否會有雙重支付的嘗試。解決辦法就是「時間戳服務器」。server

3.時間戳服務器(Timestamp server)

時間戳服務器經過對 以區塊(block)形式存在的一組數據實施隨機哈希並加上時間戳,並將該哈希廣播。blog

每一個時間戳應當將前一個時間戳歸入其隨機哈希值中,這樣就造成一個鏈條。
it

4.工做量證實(Proof-of-Work)

在區塊中添加一個隨機數(Nonce),將隨機數與區塊頭一塊兒計算隨機哈希值,使得該哈希值知足以N個0開頭(N爲變量,N越大,尋找隨機數的難度越大),即爲「挖礦」。
io

保證了區塊的不可篡改性,由於修改了某一區塊,就須要從新完成後面全部區塊的工做量。

工做量證實的本質是一CPU一票(傳統一IP一票會對可以分配大量IP的人有利),若是大多數的CPU爲誠實節點,那麼正確的鏈條將以最快速度增加。

5.網絡(Network)

比特幣的運行網絡步驟:

  1. 新的交易被廣播到所有的節點;
  2. 每一個節點把新的交易收集進入到一個區塊;
  3. 每一個節點都爲本身的那個區塊進行工做量證實;
  4. 當一個節點找到它的區塊的工做量證實,就將此區塊廣播給全部節點;
  5. 若是那個區塊上的全部交易都是合法的而且沒有被雙花,節點才接受這個區塊;
  6. 節點們接受這個區塊的表現爲:將這個區塊的哈希做爲下一個區塊的「前哈希」,在這個區塊後繼續創造區塊。

其中只有最長的鏈被承認,而且不斷在這個「最長鏈」上添加區塊。

若是兩個節點同時完成工做量證實並廣播了兩個不一樣版本的新區塊,那麼其它節點接收到該區塊的時間存在前後差異,即會產生兩條不一樣的鏈。出現這種狀況時,節點將在率先收到的區塊基礎上工做,同時保留另外一條鏈,直到下一個工做量證實被發現,證明了其中一條是較長鏈,那麼在另外一條分支鏈上工做的節點將轉移到較長鏈上工做。

6.激勵(Incentive)

  1. 規定了每一個區塊的第一筆交易做爲節點完成工做量證實的激勵,這個激勵是必定量新產生的電子貨幣。
  2. 另外一個激勵來源是交易費。若是某筆交易的輸出值小於輸入值,差額就是交易費。若是2100萬枚比特幣所有流通,激勵將徹底靠交易費。

激勵系統也有助於鼓勵節點誠實。由於遵循規則用算力挖礦的收益極可能高於破壞系統獲得的收益。

7.回收硬盤空間(Reclaiming Disk Space)

交易信息的隨機哈希值被構成Merkle樹的形態,只須要根節點與路徑便可驗證交易的正確性。用戶只須要存儲含有Merkle root的區塊頭,在須要時獲取Merkle樹的路徑便可驗證一筆交易。

不含交易信息的區塊頭大小隻有80字節,區塊的生成速率爲每10分鐘一個,每一年產生的數據爲4.2MB。

8.簡化支付驗證(Simplified Payment Verification)

能夠在不運行完整網絡節點的狀況下,實現對支付的驗證。

9.價值的組合與分割(Combining and Splitting Value)

爲了使得價值易於組合和分割,交易被設計成能夠歸入多個輸入和輸出,能夠有多個輸入,可是最多隻有兩個輸出:一個用於支付,一個用於找零(若是有的話)。

10.隱私(Privacy)

使用公鑰的哈希生成地址,公衆能得知的信息只有某人將必定數量的比特幣發送給另外一我的,但沒法肯定是誰。

11.計算(Calculations)

由於節點不會接受無效的交易,誠實的節點不會接受一個包含無效信息的區塊,所以攻擊者沒法憑空創造價值或者掠奪他人的貨幣,最多隻能更改本身的交易(即雙重支付)。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息