比特幣是怎麼生成的?
- block的版本 version
- 上一個block的hash值: prev_hash
- 需要寫入的交易記錄的hash樹的值: merkle_root
- 更新時間: ntime
- 當前難度: 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 |