ZKIZ Archives


試水比特幣(上) 一念間

http://blog.sina.com.cn/s/blog_55165cba0101gy5n.html

象徵性買了點比特幣,以表達對這位匿名科學家的敬仰之情。市值已經超過100億美元的設計精巧的比特幣竟然只基於一篇8、9頁的論文!

 

多年前上學的時候曾設想過建立一個虛擬貨幣/積分兌換網站。當時熱衷於逛各種論壇和網站,發現每個論壇網站都有一套積分體系,並不時給點小獎勵以留住用戶。那麼能不能建立一個虛擬貨幣/積分兌換的網站呢,讓各個網站的積分可以自由兌換,就像外匯市場一樣?比如,你可以把你在航空公司的積分兌換成這種虛擬貨幣,然後再換成某個下載網站需要的金幣。其實質就是把各個網站的積分獎勵計劃外包過來做,網站不需要重頭建立積分系統,只需要提供接口即可,省時省力。(後來發現巴菲特的藍籌印花公司就是做類似事情的,只不過它是實物的優惠券)這裡,每個網站兌換的匯率顯然取決於各個網站投入的人民幣,也就是整個體系還是依託於法定貨幣的。不過這個概念和比特幣一比,完全不在同一個思維層次上。

 

關於比特幣的新聞很多,不過我卻越看越糊塗,又是挖坑機又是組裝顯卡什麼的,嚴重懷疑自己的智商,直到看了中本聰的論文才豁然開朗——原來很多記者沒搞懂什麼是比特幣。

 

算法原理
這很關鍵,只有明白了算法的精巧,你才會明白為什麼比特幣有那麼多死忠的粉絲。中本聰說,比特幣是一種完全通過點對點技術實現的電子現金系統,它使得在線支付能夠直接由一方發起並支付給另外一方,中間不需要通過任何的金融機構。我們互聯網上的交易,幾乎都需要借助金融機構作為可資信賴的第三方來處理電子支付信息。雖然在絕大多數情況下這類系統都運作良好,但是這類系統仍然內生性地受制於「基於信用的模式」(trustbasedmodel)的弱點。與傳統貨幣不同,比特幣運行機制不依賴中央銀行、政府、企業的支持或者信用擔保,而是依賴對等網絡中種子文件達成的網絡協議,去中心化、自我完善的貨幣體制,理論上確保了任何人、機構、或政府都不可能操控比特幣的貨幣總量,或者製造偽幣。比特幣應用體系的防偽、抗通脹和安全,也不靠國家來維護,而是靠對等網絡技術和參與者的共識主動性合作。

 

什麼是比特幣?一枚電子貨幣(an electroniccoin)是這樣的一串數字簽名:每一位所有者通過對前一次交易和下一位擁有者的公鑰(Public key)簽署一個隨機散列的數字簽名,並將這個簽名附加在這枚電子貨幣的末尾,電子貨幣就發送給了下一位所有者。而收款人通過對簽名進行檢驗,就能夠驗證該鏈條的所有者。聽起來是不是很暈?實際上整個系統裡並沒有一種叫比特幣的東西,而只有交易信息。你如果知道一個所有者有多少錢,就需要把它的所有交易全取出來算一遍才知道。為了簡便起見,大家就把它想成人民幣紙鈔吧,上面有防偽碼。剛才我用「它」指代所有者,是因為所有者是一個地址,人們可以用匿名的地址也可以加上實名,甚至每次交易用一個不同的匿名地址。(這也是比特幣廣受詬病的常被用於非法用途的原因)而且地址也有防偽碼。當所有者A把一筆錢X付給收款人B時,要向所有人宣佈,其他人很容易就能驗證A/B/X是不是真實的,以及X確實是付款人A所有。好了,知道這些就夠了,這是很多系統都有的東西。

 

問題的關鍵在於,收款人B無法確認所有者A是否對這枚電子貨幣進行了雙重支付,即同時付給兩個收款人。我們目前的交易是通過引入信得過的第三方權威(比如銀行)來解決,由第三方來保存和驗證所有的交易信息。但在比特幣系統裡,是沒有第三方中介機構的,交易信息被公開宣佈給所有網絡節點,整個系統內的所有參與者都會記錄收到的交易信息。但各參與者情況各異,無法保證每個參與者的記錄都是準確無誤的,怎麼辦呢?

 

關鍵的部分來了,比特幣系統有一套賬簿本,含有所有比特幣交易的歷史記錄。上面並不記錄所有者的餘額,而只記載每一筆交易。即記載每一筆交易的付款人、收款人和付款金額(只要賬簿的初始狀態確定,每一筆交易記錄可靠並有時序,當前所有者持有多少錢是可以推算出來的)。賬簿本有很多頁,每個新加入的參與者(節點)會到系統裡找最完整的賬簿本,也就是頁數最多的那本。然後自己在最末尾建立新的一頁帳頁,並把所有此後收到的系統裡廣播的交易信息都記錄在新帳頁裡。雖然所有人都各自建立了新帳頁,但其中只有一頁會被最終認可(就像一個國家在一個任期內只能有一個總統),那怎麼決定呢?很簡單,抓鬮。我們來想像一下:把少量的紅色大米倒入一大堆白色大米中,然後大家每次隨機取一粒,第一個拿到紅色米粒的人就把這粒紅米粘到新帳頁上,並向所有人宣佈,我是那個幸運兒。大家一看,確實是紅米。然後就承認此帳頁是最後一頁,然後在它後面另外自己建一頁新的頁,然後一面記錄交易,一面尋找紅米,週而復始。

 

找紅米的過程俗稱挖礦,學術名是尋找一堆複雜算法所生成的特解。特解是指方程組所能得到無限個(其實比特幣是有限個)解中的一組,而每一個特解都能解開方程並且是唯一的。(暈,跳過吧)那礦工們為什麼要記錄交易信息,並不停地找紅米呢?多無聊啊!無利不起早,當然是因為有激勵啊:每次第一個找到紅色米粒的人就會被獎勵一定比特幣以及這段時間比特幣交易的手續費。比特幣獎勵是逐漸減少的,但交易費逐漸增加。開始時是50比特幣,然後每當紅色米粒增加21,000,獎勵就減半,例如當達到210,000粒後,每拿到一粒紅米獎勵25個比特幣,420,000粒後,每粒獎勵12.5個,依次類推,等紅米達到6,930,000後,就沒有獎勵了。此時比特幣全量約為21,000,000個,這就是比特幣的總量,所以不會無限增加下去。但越往後交易量越大,交易費也越多。礦工們的意義就是為整個體系記賬!(請注意,我對特解的理解和百度百科不一樣,百度把2100萬個比特幣叫做特解,我這裡是把紅米當特解,大家自己分辨)。

 

為什麼要設計找紅米(挖礦)這麼無聊的環節,是大家閒極無聊嗎?當然不是,這是防止系統能被偽造和竄改的關鍵。從白米中找紅米的過程要耗費時間、CUP等資源,這些成本叫做工作量證明(Proof-of-Work)。也就是說,網絡不是靠一個IP地址一票來決定大多數,而是一個CPU一票。硬件的運算速度在高速增長,且節點參與網絡的程度會有所起伏。為瞭解決這個問題,工作量證明的難度(theproof-of-workdifficulty)將採用移動平均目標的方法來確定,即令難度指向令每小時生成區塊的速度為某一預設的平均數。如果區塊生成的速度過快,那麼難度就會提高。簡單說,系統設計成平均10分鐘能找到一粒紅米。雖然挖礦計算機的速度一直在提高,但系統自動不停地增加白色米粒以調整難度,保證總是10分鐘左右。

 

如果一個攻擊者想要竄改某一筆交易,他就必須把這一頁和後面的所有頁重新建一遍。我們知道每建一頁新帳頁都需要找一粒紅米,而找一粒紅米用整個系統的所有CPU參與需要10分鐘,那麼攻擊者電腦和CPU的數目少得多,需要的時間也更長。在攻擊者找的同時,正常的賬簿還在增長,時間越久,攻擊者追上的概率就越小。通常認為6頁以後就無法被竄改了,也就是一筆交易被確認後大概60分鐘後(6*10)。當然除非攻擊者聯合了整個系統超過50%的電腦CPU,不過那樣也玉石俱焚得不償失,還不如按規則挖礦來錢多呢。

 

其他的問題就不講了,明白了我上面說的要點,大家看關於比特幣的文章就很容易懂了。這裡強烈推薦中本聰的中英文論文,比看無數記者寫的文章都有用:
比特幣:一種點對點的電子現金系統 http://wenku.baidu.com/view/f26c8d916bec0975f465e236.html
Bitcoin: A Peer-to-Peer Electronic Cash System http://wenku.baidu.com/view/2e3f91bb1a37f111f1855b50.html
一個故事告訴你比特幣的原理及運作機制 http://www.btcfans.com/archives/5980.html

 

共識主動性(Stigmergy)
生物群體通過與自然同頻共振後,讓個體直接參與的共識協調機制。沒有中樞控制和接觸交流的條件下,個體獨立行動,互相修正,自我更新,逐步完善群體生態環境。雖然個體之間並沒有直接接觸和聯繫,他們後續自發的行動,卻加強和完善了其他個體行動產生的成果,並導致了行動的連貫性,具有系統性活動特徵。共識主動性也是無為而治行為,在缺乏任何規劃、控制、或者個體之間直接聯繫的環境中,產生非常繁盛、並具有智能生態體系。從而為缺乏記憶、思維、交流,極其單純的群體,提供了高效的合作機制。非洲教堂白蟻築巢過程是一個典型的例子,這些幾乎沒有任何智慧的生物,居然創立了精緻的信息系統,並建造了複雜的建築結構。在螞蟻的大腦或者基因裡,並沒有一個關於巢穴的計劃、組織和控制機制,螞蟻之間甚至沒有直接的交流,因此,蟻巢的精緻框架和複雜結構,完全是每個螞蟻單獨識別其他螞蟻留下生物激素和存留物後,達成共識,直接行動的結果。

 

我覺得生物界最極致的就是人類的基因組了,以很簡單的規則形成了如此複雜的人類,產生自主意識,大家感興趣的可以看看芒格推薦的幾本關於基因的書,我也寫過些讀後感。另外,複雜科學裡的分形也很奇妙,極其簡單的規則就能產生美輪美奐的圖案。比特幣數學上的完美和精巧是很多人狂熱喜歡它的主要原因,包括我。

 

比特幣涉及的方面太多,看起來很快,但寫起來很慢,尤其要想個恰當的比方。下篇回頭再寫吧,未完待續。

PermaLink: https://articles.zkiz.com/?id=90883

Next Page

ZKIZ Archives @ 2019