概述

什麼是比特幣

比特幣是組成數位貨幣生態的一系列概念和技術的集合。 比特幣也用作在比特幣網路的參與者之間儲存和傳遞價值的貨幣單位。 比特幣用戶主要通過互聯網使用比特幣協議進行通信,當然,也可以使用其他傳輸網路。 比特幣協議堆疊是開源的,易於使用,可運行在各種計算設備上,包括筆記本電腦和智慧型手機。

用戶可以通過比特幣完成傳統貨幣可以完成的任何事情,包括購買和出售商品,向人們或組織匯款或延長信貸。 用戶可以在專門的交易所購買、出售比特幣,與其他貨幣進行兌換。 某種意義上,比特幣是互聯網金錢的完美形式,因為它是快速,安全和無邊界的。

與傳統貨幣不同,比特幣是完全虛擬的。它沒有實體硬幣甚至數字硬幣。 比特幣是隱含在發起者向接收者傳遞價值的交易中的。 通過擁有密鑰,用戶可以證明比特幣的所有權,可以簽署交易來解鎖價值,並將其轉移給新的所有者。 密鑰通常儲存在每個用戶電腦或手機中的數字錢包裡。 擁有密鑰是消費比特幣的唯一先決條件,比特幣的控制權完全掌握在每個用戶的手中。

比特幣是一個點對點的分佈式系統,系統中不存在中央伺服器或控制點。 比特幣是通過一個叫做挖礦的過程創造的,礦工在處理比特幣交易時通過大量計算競猜一個數學題的答案。 比特幣網路的任何參與者(使用一個設備運營比特幣完整協議堆疊的用戶)都可以成為礦工,利用他們電腦的處理能力來驗證和記錄交易。 平均每隔10分鐘,會有一個礦工計算出數學題的答案,可以驗證過去10分鐘的交易,並且獲得新發行的比特幣獎勵。 實質上,比特幣將中央銀行的貨幣發行和清算功能進行了去中心化,不再需要任何中央銀行。

比特幣協議包含了內置的用於調節網路中挖礦方法的演算法。 挖礦過程的難度是動態調整的,所以,無論網路中有多少礦工,平均每10分鐘都會有一個人成功。 比特幣的總量限制在2100萬個,每隔4年,比特幣的發行速率都會減半,到2140年,所有比特幣發行完畢。 由於比特幣的發行速度遞減,長期來看,比特幣是貨幣通縮。

比特幣是協議的名稱,是一個點對點網路,也是分佈式計算的創新。 比特幣貨幣本身只是這項創新的第一個應用。 比特幣代表了數十年密碼學和分佈式系統研究的一個高峰,以獨特而強大的方式將四項關鍵創新融合在一起:

  • 去中心化的點對點網路(比特幣協議)

  • 公開的賬本(區塊鏈)

  • 一套獨立交易驗證和貨幣發行的規則(共識協議)

  • 在有效的區塊鏈上達成全球分散共識的機制(PoW工作證明機制)

作為一名開發人員,我認為比特幣就像貨幣網路一樣,是一個通過分佈式計算傳播價值和保護數位資產所有權的網路。比特幣包含的內容比第一眼見到的還要多。

本章,我們將從解釋一些主要概念和名詞開始,安裝必要的軟體,並使用比特幣進行簡單的交易。 在後面的章節,我們將展開底層技術,研究比特幣網路和協議的內部機制。

比特幣之前的數位貨幣

可行數位貨幣的出現與加密技術的發展密切相關。 使用數據位代表交換物品和服務的價值的想法並不奇怪,但想讓人接受數位貨幣,要面對3個基本問題:

  1. 可以相信這筆錢是真實的,而不是偽造的嗎?

  2. 可以確定數位貨幣只能使用一次嗎?(俗稱"雙重支付","雙花"問題)

  3. 可以確保除了我以外,沒有人可以聲稱我的一筆錢屬於他們嗎?

紙幣發行者使用日益複雜的紙張和印刷技術來對抗偽造問題。物理貨幣可以輕易解決雙重支付問題,因為同一張紙幣不可能在兩個地方出現。當然,傳統貨幣也經常以數字方式儲存和傳輸。 在這種情況下,偽造和雙重支付問題的方法是通過中央當局來清算所有電子交易,他們對流通中的貨幣具有全局視野。 對於不能利用深奧的墨水或全息條帶技術的數位貨幣,密碼學為其提供了可信的所有權的基礎。具體而言,加密數位簽章使用戶能夠簽署證明該資產所有權的數位資產或交易。 採用適當的架構,數位簽章也可以解決雙重支付問題。

隨著密碼學在20世紀80年代後期開始廣泛應用,許多研究人員開始嘗試使用密碼學構建數位貨幣。這些早期發行的數位貨幣,通常由國家法幣或稀有金屬(黃金)做背書。

儘管這些早期數位貨幣可以運行,但它們是中心化的,結果是,很容易受到政府或駭客的攻擊。它們使用中央票據交換所來定期處理所有交易,就像傳統的銀行系統一樣。 不幸的是,多數情況下,這些早期數位貨幣成為了過度擔心的政府的目標,不復存在。為了防止被干預(無論政府還是犯罪分子),需要可以避免單點攻擊的去中心化數位貨幣。 比特幣就是這樣一個系統,去中心化設計,不需要可能崩潰或者被攻擊的任何中心機構。

比特幣的歷史

比特幣是在2008年隨著一篇署名中本聰的論文 "Bitcoin: A Peer-to-Peer Electronic Cash System,"[1] 的發表誕生的 (see [satoshi_whitepaper](https://bitcoin.org/bitcoin.pdf). 中本聰結合了b-money和HashCash等之前幾個發明,創造了一個完全去中心化的的電子現金系統,它不依賴於中央機構進行貨幣發行、交易結算和確認。 關鍵性的創新是使用分佈式計算系統( Proof-of-Work(工作證明)演算法)每10分鐘進行一次全局"選舉",從而使去中心化網路就交易狀態達成共識。 這個方法優雅地解決了雙重支付(一筆現金可以支付兩次)問題。在之前,雙重支付問題是數位貨幣的弱點,通常通過中央機構清算所有交易解決。

比特幣網路於2009年上線,基於中本聰發佈的一個參考實現並由許多其他開發者修訂。 為比特幣提供安全性和可靠性的Proof-of-Work演算法(挖礦演算法)的算力呈指數型增長,現在已經超過了世界上頂尖的超級電腦的算力。 比特幣的市值曾超過1350億美元。目前最大的一筆交易是4億美元,即時到賬,手續費1美元。

中本聰於2011年4月淡出了公眾視野,將維護比特幣程式碼和網路的任務交給了一組志願者。這個比特幣背後的人或組織的身份仍然是未知的。 然而,中本聰和其他人都沒有對比特幣系統進行控制,該系統基於完全透明的數學原理,開源程式碼以及參與者之間的共識。 這項發明本身就具有開創性,已經在分佈式計算,經濟學和計量經濟學領域產生了新的科學。

分佈式計算問題的解決方案

中本聰的發明也是一個分佈式計算問題的實踐和創新:"拜占庭將軍問題"。簡單來說,這個問題涉及試圖在不可靠且可能受損的網路上交換訊息來達成行動方案或系統狀態的統一。 中本聰的Proof-of-Work的方案,不需要中心化的可信機構,即可達成共識,代表了分佈式計算領域的突破,有著超越數位貨幣的廣泛適用性。 它可以用於在去中心化網路中達成共識、證明選舉、抽獎、資產登記、數位公證等的公平性。

比特幣的用法,用戶和故事

比特幣是古老的金錢技術的創新。金錢的核心是簡單地促進人們之間交換價值。 所以,為了全面理解比特幣和它的用法,我們將從人們使用它的視角進行研究。 下面列出的每個故事,都涉及了一種或多種用法:

北美的低價零售

Alice住在北美加利福尼亞灣區。她從技術人員朋友那裡聽說了比特幣之後想嘗試一下。我們將跟隨她的故事,瞭解比特幣、獲取比特幣、花費一些買一杯咖啡。 這個故事將從零售消費者的角度介紹軟體、交易所和基本交易。

北美高價零售

Carol是舊金山的藝術畫廊老闆。她使用比特幣出售昂貴的作品。這個故事將向高價值商品的零售商介紹"51%"共識攻擊的風險。

離岸合同服務

帕洛阿爾託的咖啡館老闆Bob正在建設一個新網站。他與居住在印度班加羅爾的一位網路開發人員Gopesh簽約。 Gopesh已同意接受比特幣支付。這個故事將研究比特幣在外包,合同服務和國際電匯方面的用途。

網路商店

Gabriel是里約熱內盧的一名進取的年輕少年,他經營一家小型網上商店,銷售比特幣品牌的T恤、咖啡杯和貼紙。加百列太年輕了,沒有銀行賬戶,但他的父母鼓勵他的企業家精神。

慈善捐款

Eugenia是菲律賓兒童慈善組織的負責人。最近,她發現了比特幣,並希望利用它來接觸一群全新的外國和國內捐助者,為她的慈善事業籌款。 她還在研究如何使用比特幣將資金快速分配到需要的地方。這個故事將展示比特幣在跨越貨幣和邊界的全球籌款活動中的應用,以及透明的公開賬本在慈善組織中的使用。

進出口

穆罕默德是迪拜的一家電子產品進口商。他試圖用比特幣從美國和中國購買電子產品進口到阿聯酋,以加快進口支付流程。 這個故事將展示如何將比特幣用於與實體商品相關的大型企業對企業國際支付。

比特幣挖礦

Jing是上海的電腦工程專業的學生。他已經建立了一個礦機,利用他的工程技能來挖出比特幣,以獲取額外收入。 這個故事將研究比特幣的"工業"基礎:用於保護比特幣網路和發行新貨幣的專用設備。

每一個故事都基於真實的人和真正的行業,目前正在使用比特幣來創建新的市場,新的行業以及針對全球經濟問題的創新解決方案。

開始

比特幣是一種協議,可以通過使用遵守協議的客戶端訪問。"比特幣錢包"是比特幣系統最常用的用戶界面,就像網路瀏覽器是HTTP協議最常用的用戶界面一樣。 比特幣錢包有很多實現和品牌,就像許多品牌的網路瀏覽器(例如,Chrome,Safari,Firefox和Internet Explorer)一樣。 就像我們都有我們最喜歡的瀏覽器(Mozilla Firefox)和最討厭的瀏覽器(Internet Explorer)一樣,比特幣錢包在質量,性能,安全性,隱私和可靠性方面各不相同。 比特幣協議還有一個源自中本聰編寫的包含錢包的參考實現,名為"Satoshi Client"或"Bitcoin Core"。

選擇比特幣錢包

比特幣錢包是比特幣生態系統中最積極開發的應用之一。競爭很激烈,可能現在有人正在開發一個新的錢包,但去年的一些錢包已不再被維護。 許多錢包專注於特定平臺或特定用途,有些更適合初學者,而其他則提供更多高級功能。 如何選擇錢包依賴於用途和用戶體驗,所以無法推薦一個特定的品牌或錢包。 但是,我們可以根據它們的平臺和功能進行分類,並對這些不同的錢包進行介紹。 有一點好處是,在比特幣錢包之間移動鑰匙或種子相對容易,所以可以多嘗試幾個錢包直到找到符合你需求的。

比特幣錢包根據平臺分類如下:

桌面錢包

桌面錢包是作為參考實現創建的第一種比特幣錢包,許多用戶因為它們提供的功能、自治和控制而使用桌面錢包。運行在Windows或MacOS作業系統上有安全缺陷,因為這些系統通常是不安全和配置不善的。

行動錢包

行動錢包是最常用的。這類錢包運行在iOS或Android作業系統上,是新用戶的不錯選擇。多數設計簡單易用,但也有提供給高級用戶使用的功能全面的行動錢包。

網路錢包

網路錢包是通過瀏覽器訪問的,並且將用戶的錢包儲存在第三方的伺服器上。一些這樣的服務通過在用戶的瀏覽器中使用客戶端程式碼進行操作,該程式碼將比特幣密鑰控制在用戶手中。然而,多數情況下,第三方會控制用戶的比特幣密鑰以便用戶方便使用。將大量比特幣儲存在第三方系統上市不可取的。

硬體錢包

硬體錢包是在專用硬體上運行安全的自包含比特幣錢包的設備。它們通過USB鏈接桌面Web瀏覽器,或通過行動設備上的近場通信(NFC)功能進行操作。在專用硬體上處理所有與比特幣相關的操作被認為非常安全,適合儲存大量的比特幣。

紙錢包

控制比特幣的密鑰也可以打印到紙上,也可以使用其他材料(木材,金屬等),這些被稱為紙錢包。紙錢包提供了一種低技術含量但高度安全的長期儲存比特幣的手段。脫機儲存通常也被稱為冷儲存。

另一種給比特幣錢包分類的方法是根據他們的自治程度以及與如何比特幣網路交互:

完整節點客戶端 (Full-node client)

一個完整的客戶端或"完整節點"儲存比特幣交易歷史(每個用戶的每次交易),管理用戶的錢包,並且可以直接在比特幣網路上啟動交易。完整節點處理協議的所有方面,並可獨立驗證整個區塊鏈和任何交易。完整節點需要消耗大量電腦資源(例如,超過125 GB的硬碟,2GB的RAM),但可提供完整的自主權和獨立的交易驗證。

輕量級客戶端

輕量級客戶端也稱為簡單支付驗證(SPV,Simple-payment-verification)客戶端,連接到比特幣完整節點以訪問比特幣交易訊息,但將用戶錢包本地儲存並獨立創建、驗證和傳輸交易。輕量級客戶端與比特幣網路直接交互無需中間人。

第三方API客戶端

第三方API客戶端是通過第三方系統的API與比特幣交互的客戶端,而不是直接連接到比特幣網路。錢包可以由用戶或第三方伺服器儲存,但所有交易都通過第三方。

結合這些分類,許多比特幣錢包會被分入多個組內,其中最常見的三種是桌面完整客戶端,行動輕量級錢包和第三方網路錢包。不同類別之間的界限通常很模糊,因為許多錢包在多個平臺上運行,並且可能以不同的方式與網路進行交互。

為了本書的目的,我們將演示使用各種可下載的比特幣客戶端,從參考實現(Bitcoin Core)到行動錢包和網路錢包。一些例子將需要使用Bitcoin Core,除了作為一個完整的客戶端之外,它還將API暴露給錢包、網路和交易服務。如果你計劃探索比特幣系統的程式化介面,則需要運行Bitcoin Core或其他客戶端之一。

快速開始

我們之前介紹的Alice不是技術人員,而且最近才從朋友Joe那聽說比特幣。 在一次派對上,Joe又一次熱情地向周圍的人講解和演示比特幣。出於好奇,Alice想知道她如何開始使用比特幣。Joe說行動錢包最適合新用戶,並推薦了一些他最喜愛的錢包。Alice便將"Mycelium"安裝到了她的Android手機上。

當 Alice 第一次運行Mycelium時,程序會自動為她創建一個新錢包。Alice看到的錢包界面,如The Mycelium Mobile Wallet所示(注意:不要將比特幣發送到此示例地址,它將永遠丟失)。

MyceliumWelcome
Figure 1. The Mycelium Mobile Wallet

界面上最重要的部分是Alice的比特幣地址(bitcoin adreess),是數字和字母的組合: 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK. 比特幣地址旁邊是存有相同訊息的二維碼、條形碼,可以通過手機掃描。Alice可以通過點擊二維碼或Receive按鈕保存比特幣地址或將二維碼保存到手機中。在大多數錢包中,二維碼可以點擊放大更方便掃描。

Tip

比特幣地址以"1"或者"3"開頭。就像email地址一樣,它們可以分享給其他比特幣用戶以允許它們向你的錢包發送比特幣。從安全角度來說,比特幣地址不存在任何敏感訊息,他可以被送到任何地方。與email地址不同,你可以經常創建新的比特幣地址,所有的地址都關聯到你的錢包。許多現代錢包會自動為每筆交易創建一個新地址,以最大限度地保護隱私。錢包只是地址和解鎖資金的密鑰集合。

Alice現在已經準備好接收資金了。她的錢包應用會隨機生成一個私鑰(在[private_keys]中更詳細地描述)以及相應的比特幣地址。這時,她的比特幣地址不為比特幣網路所知,或者在比特幣系統的任何部分"註冊"。她的比特幣地址只是一個數字,對應於一個可以用來控制資金訪問權限的密鑰。它是由她的錢包獨立生成的,沒有參考或註冊任何服務。事實上,在大多數錢包中,比特幣地址與包括用戶身份在內的任何外部可識別訊息之間不存在關聯。在比特幣地址被比特幣賬本上發佈的交易引用,作為接收地址之前,它僅僅是比特幣中有效的大量可能的地址的一部分。只有與交易關聯後,它才會成為網路中已知地址的一部分。

Alice現在準備開始使用她的新比特幣錢包了。

獲得你的第一個比特幣

新用戶的第一個也是最困難的任務是購買一些比特幣。與其他外幣不同,你還不能在銀行或外匯交易市場購買比特幣。

比特幣交易是不可逆轉的。大多數電子支付網路如信用卡、借記卡、PayPal和銀行賬戶轉賬都是可逆的。對於銷售比特幣的人來說,這種差異帶來了非常高的風險,即買家在收到比特幣後會逆轉電子支付,實際上欺騙了賣家。為了緩解這種風險,接受傳統電子支付以換取比特幣的公司通常要求買家進行身份驗證和信用評估檢查,這可能需要幾天或幾周的時間。作為新用戶,這意味著你無法使用信用卡立即購買比特幣。然而,用一點耐心和創造性思維,你就不需要這樣。

以下是新用戶獲取比特幣的一些方法:

  • 找一個有比特幣的朋友,直接向他買一些。許多比特幣用戶以這種方式開始。這種方法最簡單。與擁有比特幣的人見面的一種方式是參加在 Meetup.com列出的本地比特幣聚會。

  • 使用分類服務,例如 localbitcoins.com 找到你所在地區的賣家以現金購買比特幣。

  • 通過銷售產品或服務賺取比特幣。如果你是開發者,就賣你的寫程式技能。如果你是理髮師,就剪頭髮收比特幣。

  • 使用比特幣ATM。比特幣ATM是一種接受現金並將比特幣發送到智慧型手機比特幣錢包的機器。使用 Coin ATM Radar 的在線地圖查找附近的比特幣ATM。

  • 使用比特幣交易所。許多國家現在有交易所,為買賣雙方提供以當地貨幣交換比特幣的市場。 Exchange-rate服務(例如 BitcoinAverage)可以顯示每種貨幣的比特幣交易所列表。

Tip

比特幣優於其他支付系統的一個優點是,如果使用得當,它可以為用戶提供更多的隱私。獲取,持有和支出比特幣並不要求你向第三方洩露敏感和個人身份訊息。但是,比特幣涉及諸如貨幣兌換等傳統系統時,國家和國際法規通常適用。為了以你的國家貨幣兌換比特幣,你通常需要提供身份證明和銀行訊息。用戶應該知道,一旦比特幣地址附加到身份,所有相關的比特幣交易也很容易識別和跟蹤。這是許多用戶選擇維護與他們的錢包不相關的專用交換賬戶的原因之一。

Alice是被通過朋友介紹知道比特幣,因此她可以輕鬆獲得她的第一個比特幣。接下來,我們將看看她如何從她的朋友Joe那購買比特幣,以及Joe如何將比特幣發送到她的錢包。

查看比特幣的當前價格

在Alice可以從Joe那購買比特幣之前,他們必須同意比特幣和美元之間的匯率。這給那些比特幣新手帶來了一個共同的問題:"誰設定的比特幣價格?" 簡而言之,價格是由市場決定的。

像大多數其他貨幣一樣,比特幣具有浮動匯率,這意味著比特幣相對於任何其他貨幣的價值根據其交易市場的供求情況而變化。例如,比特幣的美元價格是根據最近比特幣和美元的交易計算出來的。因此,價格每秒鐘會出現幾次波動。定價服務將彙總來自多個市場的價格並計算代表貨幣對的廣泛市場匯率(例如BTC / USD)的成交量加權平均值。

有數百個應用程式和網站可以提供當前的市場價格。這裡是一些最流行的:

Bitcoin Average

一個提供每種貨幣的成交量加權平均值簡單視圖的網站。

CoinCap

這項服務列出了數百種密碼貨幣(包括比特幣)的市值和匯率

Chicago Mercantile Exchange Bitcoin Reference Rate

可用於機構和合同參考的參考利率,作為CME的一部分投資數據源。

除了這些網站和應用程式之外,大多數比特幣錢包會自動將比特幣和其他貨幣進行轉換。在將比特幣發送給Alice之前,Joe會使用他的錢包自動轉換價格。

發送和接收比特幣

Alice 決定兌換10美元的比特幣,以免在這項新技術上冒太多風險。她給了Joe 10美元現金,打開她的Mycelium錢包應用程式,並選擇Receive。這顯示了Alice的第一個比特幣地址的QR碼。

Joe在他的智慧型手機錢包上選擇"Send",然後看到包含兩個輸入的界面:

  • 目標比特幣地址

  • 要發送的數量,以BTC或者他的本地貨幣(USD)為單位。

在比特幣地址的輸入欄位中,有一個看起來像二維碼的小圖標。這使得Joe可以用他的手機攝像頭掃描條碼,這樣他就不必輸入Alice的比特幣地址,這個地址很長很難敲。Joe點擊二維碼圖標激活智慧型手機攝像頭,掃描Alice手機上顯示的二維碼。

Joe現在已經將Alice的比特幣地址設置為收件人了。Joe輸入金額為10美元,他的錢包通過訪問在線服務的最新匯率來轉換它。當時的匯率是每比特幣100美元,所以10美元價值0.10比特幣(BTC)或100毫比特幣(mBTC),如Joe的錢包截圖所示 (see Airbitz mobile bitcoin wallet send screen).

airbitz mobile send screen
Figure 2. Airbitz mobile bitcoin wallet send screen

然後Joe仔細檢查以確保他輸入了正確的金額,因為他即將轉賬,錯誤不可逆轉。在仔細檢查地址和金額後,他按下Send來傳輸交易。Joe的比特幣錢包構建了一筆交易,將0.10BTC發送到Alice的地址,從Joe的錢包中獲取資金並使用Joe的私鑰簽署交易。這告訴比特幣網路,喬已經授權將價值轉移給Alice的新地址。由於交易是通過點對點協議傳輸的,因此它可以快速傳播到比特幣網路。在不到一秒的時間內,網路中大多數連接良好的節點都會收到交易並首次查看Alice的地址。

與此同時,Alice的錢包不斷"監聽"比特幣網路上的已發佈交易,尋找與她的錢包中的地址相匹配的任何交易。在Joe的錢包傳輸交易後幾秒鐘,Alice的錢包就會顯示它正在接收0.10BTC。

確認

起初,Alice的地址將顯示Joe的交易為"未確認"。這意味著交易已經傳播到網路,但尚未記錄在比特幣交易賬本(即區塊鏈)中。要確認,交易必須包含在一個區塊中,並添加到區塊鏈中,平均每10分鐘發生一次。在傳統的財務術語中,這被稱為清算。有關比特幣交易的傳播、驗證和清算(確認)的更多詳細訊息,請參閱"挖礦"。

Alice現在是那0.10BTC的所有者了。在下一章中,我們將看到她第一次使用比特幣購買東西,並更詳細地研究背後的交易和傳播技術。


1. "Bitcoin: A Peer-to-Peer Electronic Cash System," Satoshi Nakamoto (https://bitcoin.org/bitcoin.pdf).