大家好,我是小林。最近這段時(shí)間,虛擬貨幣頻頻沖上熱搜,比特幣、以太坊、狗狗幣各種技術(shù)名詞層出不窮,搞得大家眼花繚亂的。而且虛擬機(jī)貨幣大漲大跌的事情頻頻出現(xiàn),不過(guò)講真這東西我沒(méi)有碰,因?yàn)楸种?strong>看不懂的東西,絕不碰」。否則自己就是一個(gè)賭徒,再加上搞這種,每天肯定會(huì)花大量時(shí)間來(lái)看盤,極大消耗的精力。正所謂內(nèi)行看門道,外行看熱鬧,咱們也不能光吃瓜看熱鬧,也得看看里面的門道。身為技術(shù)人,我也對(duì)
比特幣這個(gè)玩意到底是什么感到好奇,是由什么技術(shù)支撐的呢?我在「阮一峰」的博客那,發(fā)現(xiàn)他之前寫這篇很通熟易懂,是一個(gè)能了解比特幣來(lái)龍去脈的機(jī)會(huì),特此分享給大家。
比特幣的開(kāi)始
比特幣(
bitcoin)誕生于 2008 年的一篇論文。一個(gè)署名為中本聰?shù)娜?,提出了革命性的?gòu)想:
讓我們創(chuàng)造一種不受政府或其他任何人控制的貨幣!這個(gè)想法堪稱瘋狂:一串?dāng)?shù)字,背后沒(méi)有任何資產(chǎn)支持,也沒(méi)有任何人負(fù)責(zé),你把它當(dāng)作錢付給對(duì)方,怎么會(huì)有人愿意接受?但是,狂想居然變成了現(xiàn)實(shí)。隨后的幾年,在全世界無(wú)數(shù)愛(ài)好者的支持下,比特幣網(wǎng)絡(luò)運(yùn)行起來(lái)了,越來(lái)越多的人和資本參與,星星之火,終成燎原。剛剛過(guò)去的 2017 年,比特幣迎來(lái)了爆發(fā)式的增長(zhǎng),從年初的1000美元,最高漲到了2萬(wàn)美元,全世界都為之震動(dòng),上到政府,下到普通百姓都在關(guān)注。事實(shí)就是比特幣已經(jīng)并將繼續(xù)改變世界。新聞媒體往往只關(guān)注它的火爆表現(xiàn),忽視或者無(wú)法回答一些基本的問(wèn)題。
- 比特幣的原理是什么?
- 為什么這個(gè)無(wú)人管理的體系可以成功運(yùn)作?
- 比特幣交易的流程是怎么回事?
- 它與區(qū)塊鏈又是什么關(guān)系?
下面,我嘗試回答這些問(wèn)題,希望幫助大家理解比特幣。拋開(kāi)技術(shù)細(xì)節(jié),還是很容易解釋的。有一點(diǎn)說(shuō)明,本文只討論技術(shù)問(wèn)題,不涉及如何投資比特幣,更不會(huì)預(yù)測(cè)價(jià)格走勢(shì)。事實(shí)上,我也不知道,如果我知道怎么發(fā)財(cái),可能就不會(huì)在這里寫博客了。
一、非對(duì)稱加密
首先,理解比特幣,必須理解非對(duì)稱加密。
PS:小林我之前寫過(guò)非對(duì)稱加密的文字,想更深入的可以這篇:硬核!30 張圖解 HTTP 常見(jiàn)的面試題你可能聽(tīng)說(shuō)過(guò)這個(gè)詞,所謂非對(duì)稱加密,其實(shí)很簡(jiǎn)單,就是加密和解密需要兩把鑰匙:一把公鑰和一把私鑰。公鑰是公開(kāi)的,任何人都可以獲取。私鑰是保密的,只有擁有者才能使用。他人使用你的公鑰加密信息,然后發(fā)送給你,你用私鑰解密,取出信息。反過(guò)來(lái),你也可以用私鑰加密信息,別人用你的公鑰解開(kāi),從而證明這個(gè)信息確實(shí)是你發(fā)出的,且未被篡改,這叫做
數(shù)字簽名。現(xiàn)在請(qǐng)?jiān)O(shè)想,
如果公鑰加密的不是普通的信息,而是加密了一筆錢,發(fā)送給你,這會(huì)怎樣?首先,你能解開(kāi)加密包,取出里面的錢,因?yàn)樗借€在你手里。其次,別人偷不走這筆錢,因?yàn)樗麄儧](méi)有你的私鑰。因此,支付可以成功。這就是比特幣(以及其他數(shù)字貨幣)的原理:非對(duì)稱加密保證了支付的可靠性。由于支付的錢必須通過(guò)私鑰取出,所以你是誰(shuí)并不重要,重要的是誰(shuí)擁有私鑰。只有擁有了私鑰,才能取出支付給你的錢。(事實(shí)上,真實(shí)的交易流程稍有不同,私鑰保證的不是取出支付給你的錢,而是保證只有你能把這些屬于你的錢支付出去,詳見(jiàn)后文。)
二、比特幣錢包
對(duì)于比特幣來(lái)說(shuō),錢不是支付給個(gè)人的,而是支付給某一把私鑰。這就是交易匿名性的根本原因,因?yàn)闆](méi)有人知道,那些私鑰背后的主人是誰(shuí)。所以,
比特幣交易的第一件事,就是你必須擁有自己的公鑰和私鑰。你去網(wǎng)上那些比特幣交易所開(kāi)戶,它們會(huì)讓你首先生成一個(gè)比特幣錢包(wallet)。
這個(gè)錢包不是用來(lái)存放比特幣,而是存放你的公鑰和私鑰。軟件會(huì)幫你生成這兩把鑰匙,然后放在錢包里面。根據(jù)協(xié)議,公鑰的長(zhǎng)度是 512 位。這個(gè)長(zhǎng)度不太方便傳播,因此協(xié)議又規(guī)定,要為公鑰生成一個(gè) 160 位的指紋。所謂指紋,就是一個(gè)比較短的、易于傳播的哈希值。160 位是二進(jìn)制,寫成十六進(jìn)制,大約是 26 到 35 個(gè)字符,比如?
1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。這個(gè)字符串就叫做錢包的地址,它是唯一的,即每個(gè)錢包的地址肯定都是不一樣的。你向別人收錢時(shí),只要告訴對(duì)方你的錢包地址即可,對(duì)方向這個(gè)地址付款。由于你是這個(gè)地址的擁有者,所以你會(huì)收到這筆錢。由于你是否擁有某個(gè)錢包地址,是由私鑰證明的(具體的證明方法稍后介紹),所以一定要保護(hù)好私鑰。這是極其重要的,如果你的私鑰被偷了,你的比特幣也就等于沒(méi)了,因?yàn)樗丝梢悦坝媚愕纳矸萘?,把錢包里面的錢都轉(zhuǎn)走。同樣的,你向他人支付比特幣,千萬(wàn)不能寫錯(cuò)他人的錢包地址,否則你的比特幣就支付到了另一個(gè)不同的人了。
三、交易過(guò)程
下面,我把整個(gè)流程串起來(lái),看看比特幣如何完成一筆交易。
一筆交易就是一個(gè)地址的比特幣,轉(zhuǎn)移到另一個(gè)地址。由于比特幣的交易記錄全部都是公開(kāi)的,哪個(gè)地址擁有多少比特幣,都是可以查到的。因此,支付方是否擁有足夠的比特幣,完成這筆交易,這是可以輕易驗(yàn)證的。問(wèn)題出在怎么防止其他人,冒用你的名義申報(bào)交易。舉例來(lái)說(shuō),有人申報(bào)了一筆交易:地址 A 向地址 B 支付10個(gè)比特幣。我怎么知道這個(gè)申報(bào)是真的,申報(bào)人就是地址 A 的主人?比特幣協(xié)議規(guī)定,申報(bào)交易的時(shí)候,除了交易金額,轉(zhuǎn)出比特幣的一方還必須提供以下數(shù)據(jù)。
- 上一筆交易的 Hash(你從哪里得到這些比特幣)
- 本次交易雙方的地址
- 支付方的公鑰
- 支付方的私鑰生成的數(shù)字簽名
驗(yàn)證這筆交易是否屬實(shí),需要三步。
- 第一步,找到上一筆交易,確認(rèn)支付方的比特幣來(lái)源。
- 第二步,算出支付方公鑰的指紋,確認(rèn)與支付方的地址一致,從而保證公鑰屬實(shí)。
- 第三步,使用公鑰去解開(kāi)數(shù)字簽名,保證私鑰屬實(shí)。
經(jīng)過(guò)上面三步,就可以認(rèn)定這筆交易是真實(shí)的。
四、交易確認(rèn)與區(qū)塊鏈
確認(rèn)交易的真實(shí)性以后,交易還不算完成。
交易數(shù)據(jù)必須寫入數(shù)據(jù)庫(kù),才算成立,對(duì)方才能真正收到錢。比特幣使用的是一種特殊的數(shù)據(jù)庫(kù),叫做
區(qū)塊鏈(blockchain),本文只討論交易如何寫入?yún)^(qū)塊鏈。首先,所有的交易數(shù)據(jù)都會(huì)傳送到礦工那里。礦工負(fù)責(zé)把這些交易寫入?yún)^(qū)塊鏈。根據(jù)比特幣協(xié)議,一個(gè)區(qū)塊的大小最大是 1MB,而一筆交易大概是 500 字節(jié)左右,因此一個(gè)區(qū)塊最多可以包含 2000多 筆交易。礦工負(fù)責(zé)把這 2000 多筆交易打包在一起,組成一個(gè)區(qū)塊,然后計(jì)算這個(gè)區(qū)塊的哈希。計(jì)算哈希的過(guò)程叫做采礦,這需要大量的計(jì)算。礦工之間也在競(jìng)爭(zhēng),誰(shuí)先算出哈希,誰(shuí)就能第一個(gè)添加新區(qū)塊進(jìn)入?yún)^(qū)塊鏈,從而享受這個(gè)區(qū)塊的全部收益,而其他礦工將一無(wú)所獲。一筆交易一旦寫入了區(qū)塊鏈,就無(wú)法反悔了。這里需要建立一個(gè)觀念:比特幣不存放在錢包或其他別的地方,而是只存在于區(qū)塊鏈上面。區(qū)塊鏈記載了你參與的每一筆交易,你得到過(guò)多少比特幣,你又支付了多少比特幣,因此可以算出來(lái)你擁有多少資產(chǎn)。
五、礦工的收益
交易的確認(rèn)離不開(kāi)礦工。為什么有人愿意做礦工呢?比特幣協(xié)議規(guī)定,挖到新區(qū)塊的礦工將獲得獎(jiǎng)勵(lì),一開(kāi)始( 2008 年)是 50 個(gè)比特幣,然后每4年減半,目前( 2018 年)是 12.5 個(gè)比特幣。這也是比特幣的供給增加機(jī)制,流通中新增的比特幣都是這樣誕生的。你可能看出來(lái)了,每 4 年獎(jiǎng)勵(lì)減半,由于比特幣可以分割到小數(shù)點(diǎn)后八位,那么到了2140 年,礦工將得不到任何獎(jiǎng)勵(lì),比特幣的數(shù)量也將停止增加。這時(shí),礦工的收益就完全依靠交易手續(xù)費(fèi)了。所謂交易手續(xù)費(fèi),就是礦工可以從每筆交易抽成,具體的金額由支付方自愿決定。你完全可以一毛不拔,一分錢也不給礦工,但是那樣的話,你的交易就會(huì)沒(méi)人處理,遲遲無(wú)法寫入?yún)^(qū)塊鏈,得到確認(rèn)。礦工們總是優(yōu)先處理手續(xù)費(fèi)最高的交易。目前由于交易數(shù)量猛增,手續(xù)費(fèi)已經(jīng)水漲船高,一個(gè)區(qū)塊 2000 多筆交易的手續(xù)費(fèi)總額可以達(dá)到 3~10 個(gè)比特幣。如果你的手續(xù)費(fèi)給低了,很可能過(guò)了一個(gè)星期,交易還沒(méi)確認(rèn)。一個(gè)區(qū)塊的獎(jiǎng)勵(lì)金 12.5 個(gè)比特幣,再加上手續(xù)費(fèi),收益是相當(dāng)可觀的。按照目前的價(jià)格,可以達(dá)到 100 萬(wàn)~ 200 萬(wàn)人民幣。想想看,運(yùn)氣好的話,幾分鐘就能挖到一個(gè)區(qū)塊,拿到這樣一大筆錢,怪不得人們對(duì)挖礦趨之若鶩。
六、區(qū)塊的擴(kuò)容
《區(qū)塊鏈入門教程》說(shuō)過(guò),比特幣協(xié)議規(guī)定,平均 10 分鐘誕生一個(gè)區(qū)塊。區(qū)塊的大小只有 1MB,最多只能包含 2000 多筆交易。也就是說(shuō),比特幣網(wǎng)絡(luò)每 10 分鐘,最多只能處理 2000 多筆交易,換算一下,就是處理速度為 3~5 筆/秒。全世界的比特幣交易這么多,可是區(qū)塊鏈每秒最多只能處理5筆,這已經(jīng)成為制約比特幣發(fā)展的一個(gè)瓶頸。很早就有人呼吁,改革比特幣協(xié)議,提升處理速度。這件事在2017年8月有了一點(diǎn)眉目,當(dāng)時(shí)區(qū)塊鏈發(fā)生了一次分叉,誕生了一個(gè)新協(xié)議,稱為?
Bitcoin Cash(簡(jiǎn)稱 BCH)。這種新貨幣其他方面都與比特幣一致,就是每個(gè)區(qū)塊的大小從 1MB 增加到了 8MB,因此處理速度提升了8倍,手續(xù)費(fèi)也低得多。該協(xié)議是對(duì)原有區(qū)塊鏈的分叉,因此當(dāng)時(shí)持有比特幣的人,等于一人獲贈(zèng)了一份同樣數(shù)量的 BCH。BCH 等于創(chuàng)造了一種新貨幣,還有人提議,原始比特幣的區(qū)塊大小提升到 2MB,這稱為 SegWit2x 。這個(gè)建議原定于2017年11月實(shí)施,但是最后一刻由于缺乏共識(shí),就被取消了,目前還在討論中。
七、點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)
比特幣是一個(gè)全世界的開(kāi)放網(wǎng)絡(luò),只要你有服務(wù)器,就能加入這個(gè)網(wǎng)絡(luò),成為一個(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都包含了整個(gè)區(qū)塊鏈(目前大概 100多 GB),并且節(jié)點(diǎn)之間時(shí)刻不停地在同步信息。當(dāng)你發(fā)生了一筆支付,你所在的節(jié)點(diǎn)就會(huì)把這筆交易告訴另一個(gè)節(jié)點(diǎn),直至傳遍整個(gè)網(wǎng)絡(luò)。礦工從網(wǎng)上收集各種新發(fā)生的交易,將它們打包寫入?yún)^(qū)塊鏈。一旦寫入成功, 礦工所在節(jié)點(diǎn)的區(qū)塊鏈,就成為最新版本,其他節(jié)點(diǎn)都會(huì)來(lái)復(fù)制新增的區(qū)塊,保證全網(wǎng)的區(qū)塊鏈都是一致的。最后,你所在的節(jié)點(diǎn)也拿到了最新的區(qū)塊鏈,從而得知你早先的那筆交易,已經(jīng)寫在里面了,至此交易確認(rèn)成功。
來(lái)源:阮一峰的網(wǎng)絡(luò)日志,作者:阮一峰
參考鏈接
- How Bitcoin works , by Timothy B. Lee
- Bitcoins the hard way: Using the raw Bitcoin protocol, by Ken Shirriff
寫到這里,我就介紹完了比特幣的基本知識(shí),希望你已經(jīng)明白了
比特幣是怎么回事。