比特幣是怎麼生成的?


  1. block的版本 version

  2. 上一個block的hash值: prev_hash

  3. 需要寫入的交易記錄的hash樹的值: merkle_root
  4. 更新時間: ntime
  5. 當前難度: nbits

挖礦的過程就是找到x使得

SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) &< TARGET

上式的x的範圍是0~2^32, TARGET可以根據當前難度求出的。除了x之外,你還可以嘗試改動merkle_root和ntime。由於hash的特性,找這樣一個x只能暴力搜索。

一旦你找到了x,你就可以廣播一個新的block,其他客戶端會驗證你的block是否合法。如果你的block被接受,由於每個block中的第一筆交易必須是將新產生25個比特幣發送到某個地址,當然你會把這個地址設為你所擁有的地址來得到這25個比特幣。

---------------------------------------------------------------

比特幣從開始到現在的每一筆交易記錄都保存在網路上,整個比特幣網路維護的一個巨大的交易記錄文件(現在大約12G)。 這個文件的更新周期平均是10分鐘,新加入的交易記錄叫做一個block,而這個碩大的文件由一串block組成,叫做block chain.

為什麼是25個比特幣?

這是規定。最初是50個比特幣,每產生剩下比特幣的一半,這個所得就會減半,這樣最終能產生的比特幣總量趨近於2100萬。如果你現在仍然聲稱挖到了50個比特幣,這是不會被其他客戶端接受的,這個block就算白挖了。

怎麼保證更新周期平均是10分鐘?

TARGET越小,解出x的難度就越大,每產生2016個block(約14天),網路會根據這段時間產生新block的平均間隔調整之後的TARGET。

是不是計算速度最快的人總是先解出來?

不是。你總是想把挖礦所得據為己有,所以每個人在計算時,發送挖礦所得的地址是不一樣的,這樣merkle_root就不同,也就是說每個人是從不同的初始狀態開始求解的。

同時解出來怎麼辦?

block chain會出現分叉,部分客戶端接受了A,部分接受了B,直到某個分支變得更長,所有人就會選擇這個更長的分支。如果你挖出來的不幸沒有被選中,你的挖礦所得就無效了。

既然選更長的分支,那我用很低的難度去求解怎麼辦?

客戶端在眾多分支中找到符合當前難度且最長的。

這些計算浪費了嗎?

如果你要把一筆錢花兩次,你需要這麼做。挖到一個新的block,但是藏著不廣播,並繼續挖礦。找到商家A,支付比特幣,讓網路上的其他人挖到block並寫入這筆交易記錄。找到商家B,支付比特幣,寫入自己挖的block。如果你能搶先挖到兩個block並廣播出去,所有人會以你這個更長的分支為當前的block chain,商家A收到的比特幣就不被承認了。這樣攻擊成功的概率取決於你計算hash的速度。整個網路的計算力足夠高的話,這樣的攻擊或者成功率極低,或者成本極大。


比特幣的所有交易都是存儲在block里的。

每一個block大概包含這些信息:

前一個block的hash

一堆transaction(交易信息)

一個無意義的值,用來保證block的hash滿足「比某個特定值小」的這個性質。

按照規則,你可以憑空的在block里加一條transaction,沒有來源,只有目的地址,表示這個是生成這塊block所得的獎勵。

所謂的「挖礦」就是生成這種block的過程。

Bitcoin Block Explorer

這個地址可以查看bitcoin的blockchain


如果比特幣網路的交易越來越頻繁,交易量越來越大? 通過交易記錄,來識別賬務餘額,會越來越低效。對應交易量越來越大,一個BLOCK得存儲多少交易明細?


雲風的這篇文章講得挺清楚的:

http://blog.codingnow.com/2011/05/bitcoin.html


推薦閱讀:

給全國居民發錢會出現什麼樣有趣的社會現象?
如果考慮山寨幣的影響,比特幣交易是不是零和遊戲?
比較優勢是否有嚴格數學表示以及存在性證明?
斷點回歸設計(RD Design)與添加虛擬變數有什麼區別?
一直一直一直沒有明白,自己看了很多經濟類書籍,卻似懂非懂,沒有入門之感。問題究竟出在哪裡?

TAG:經濟學 | 比特幣Bitcoin |