我的感受,先對區塊鏈或比特幣有個基本瞭解以後,再配合比特幣白皮書食用更佳。服務器
比特幣這種電子支付系統,基於密碼學原理而不基於信用。
點對點交易,不存在第三方中介的參與。網絡
杜絕交易回滾的可能,防止欺詐。區塊鏈
定義一枚電子貨幣就是一串數字簽名鏈(coin as chain),每一位發送者經過對前一次交易和接收者的公鑰(public key)進行哈希運算後數字簽名,並將這個簽名附加到這枚電子貨幣的末尾,電子貨幣就發送給了接收者。spa
接收者使用發送者的公鑰校驗是不是正確的發送者發送的。設計
因爲交易中有接收者的公鑰,因此只有接收者使用本身的私鑰才能解鎖並將該貨幣傳遞下去。
3d
可是這裏的交易過程沒法解決雙重支付問題。爲了不雙重支付,即收款人有方法確保以前的全部者沒有對更早發送的交易進行簽名,實際上須要關注的只是於本交易以前發生的交易,而不須要關注這筆交易發生以後是否會有雙重支付的嘗試。解決辦法就是「時間戳服務器」。server
時間戳服務器經過對 以區塊(block)形式存在的一組數據實施隨機哈希並加上時間戳,並將該哈希廣播。blog
每一個時間戳應當將前一個時間戳歸入其隨機哈希值中,這樣就造成一個鏈條。
it
在區塊中添加一個隨機數(Nonce),將隨機數與區塊頭一塊兒計算隨機哈希值,使得該哈希值知足以N個0開頭(N爲變量,N越大,尋找隨機數的難度越大),即爲「挖礦」。
io
保證了區塊的不可篡改性,由於修改了某一區塊,就須要從新完成後面全部區塊的工做量。
工做量證實的本質是一CPU一票(傳統一IP一票會對可以分配大量IP的人有利),若是大多數的CPU爲誠實節點,那麼正確的鏈條將以最快速度增加。
比特幣的運行網絡步驟:
其中只有最長的鏈被承認,而且不斷在這個「最長鏈」上添加區塊。
若是兩個節點同時完成工做量證實並廣播了兩個不一樣版本的新區塊,那麼其它節點接收到該區塊的時間存在前後差異,即會產生兩條不一樣的鏈。出現這種狀況時,節點將在率先收到的區塊基礎上工做,同時保留另外一條鏈,直到下一個工做量證實被發現,證明了其中一條是較長鏈,那麼在另外一條分支鏈上工做的節點將轉移到較長鏈上工做。
激勵系統也有助於鼓勵節點誠實。由於遵循規則用算力挖礦的收益極可能高於破壞系統獲得的收益。
交易信息的隨機哈希值被構成Merkle樹的形態,只須要根節點與路徑便可驗證交易的正確性。用戶只須要存儲含有Merkle root的區塊頭,在須要時獲取Merkle樹的路徑便可驗證一筆交易。
不含交易信息的區塊頭大小隻有80字節,區塊的生成速率爲每10分鐘一個,每一年產生的數據爲4.2MB。
能夠在不運行完整網絡節點的狀況下,實現對支付的驗證。
爲了使得價值易於組合和分割,交易被設計成能夠歸入多個輸入和輸出,能夠有多個輸入,可是最多隻有兩個輸出:一個用於支付,一個用於找零(若是有的話)。
使用公鑰的哈希生成地址,公衆能得知的信息只有某人將必定數量的比特幣發送給另外一我的,但沒法肯定是誰。
由於節點不會接受無效的交易,誠實的節點不會接受一個包含無效信息的區塊,所以攻擊者沒法憑空創造價值或者掠奪他人的貨幣,最多隻能更改本身的交易(即雙重支付)。