工作量證明是不是老闆催工的演算法?
行情分析
比特幣(1h線):昨天就告訴了7700不跌破則直接是買點,那麼今天果然成立買點目前只需要看好臨界點8000,不跌破就沒有問題。
以太坊(1h線):以太坊昨天就告訴了,只要不破490會有一輪拉升,果然被驗證了,那麼這裡臨界點515,不跌破就沒有問題。
EOS(1h線):昨天其實已經告訴了不跌破8.2就可以再拉一輪,那麼目前的狀態,臨界點只需關注8.6,但無論如何,本輪空間已經基本到位,需要先調整。
每日充電
工作量證明?那不就是每天工作的量的證明,老闆專用的那種。擱到現實世界應該是差不離的,但在區塊鏈的世界,工作量證明,即Proof of Work(PoW),則是你挖幣的證明。小鏈將陪你從零開始了解PoW。
1
什麼是PoW?工作量證明,是證明你為了在公鏈上挖礦付出了艱辛勞動的證明。在公鏈上,是誰都不認識誰,誰都不知道誰,也不知道誰是好人誰是壞蛋。然而上傳的區塊只能有1個,那包含過去數分鐘的全部交易記錄,不應該有不同的版本。
現在小鏈大無畏地站了出來,說:我是小鏈,我來完成這個光榮而艱巨的任務!
旁邊的人怎麼覺得?他不認識小鏈,也不知道小鏈提交的區塊有沒有做手腳。搞不好他之前剛剛交易過,生怕有人篡改數據呢。小鏈的話沒人信。
誰都不能相信,那就三個和尚沒水吃吧。於是這個區塊鏈完。
2
為了讓這個故事繼續下去,中本聰給出了這麼一個辦法:大家來做題,誰先做出來就讓他上傳區塊,同時我們還要發獎給他。值得說明的是這個方法不是中本聰想出來的,1999年就被Markus Jakobsson和Ari Juels提出。但用在這個地方是中本聰先做的。
做1+1並沒有任何意義,誰都會的問題能說明什麼?於是題目難度明顯上升了:已知上個區塊的Hash(Prev)值,包含在現在這個區塊交易數據二叉樹的根節點Hash值(Hash(Merkle tree root)),從區塊創世到現在的時間time,一個難度調節字元串Difficulty Bit這4個已知數,求一個未知數nonce,使得這5個數加起來被Hash後呈現0x000000……這樣的結果。這裡的0至少是16個。
Hash(Hash(prev)+mrkl_root+timestamp+diff_bit+nonce)
這個有多難?Hash演算法是「知」易「行」難的典型。驗證很容易,1秒鐘足矣。但要計算出符合要求的字元串,其存在空間大到266,即約1020。如果沒有足夠強大的計算能力,解這道題就真成了在沙灘中找出一粒顏色不同於其他所有的砂子了。
在完成這一過程之後,所有人都將按照規則驗證上傳的區塊鏈的有效性和包含的交易的合法性。驗證完成之後,所有人都將把這個區塊接到自己的區塊鏈上去,從而達到全網的一致。
3
搞這麼麻煩幹什麼?這是為了在互不認識的情況下盡量加大作惡的代價。假設小環也在這個區塊鏈上,沒人認識他,他想要作壞事,想要篡改交易把別人的錢也當作自己的錢花。這就是著名的「雙花」攻擊。
Hash函數有一個特性,之前差之毫厘,之後就會謬以千里。修改交易會改變二叉樹的根節點的Hash值。假設他篡改成功了,現在的情況是他手上的區塊和別人的長的不一樣,他需要重新計算nonce值才能上傳這個區塊。
前面說到這個題目的計算難度非常大,但只要第一個做出來並及時公告全網就能承認上傳的合理性。也就是說小環需要和所有人競爭,但他手上那區塊只有他在計算,其他人都在算正確的那個區塊。這種比拼如果沒有超過全網的50%總算力,就很難成功。然而獲得那麼大的算力付出的成本有多大?難以想像。更糟的是,他之後需要挖的礦和別人將都不相同。因為後面的區塊挖礦是需要前面區塊的Hash值的!
另一個人小圈則是打算直接發垃圾文件癱瘓整個系統,這是DDoS攻擊。他先覺得題目和他沒關係,直接發垃圾文件。結果很快失效了,因為不符合文件格式,直接被小黑屋走起。
小圈不死心,改了文件格式,以為這就可以繞過去了。結果Hash驗證表明這根本不是上傳的區塊,再次被關了小黑屋。
小圈仔細研究發現自己想造出符合上傳要求的垃圾文件非常困難,不得不放棄。
從這兩個故事我們就發現,題目足夠難的話作惡難度就太大了。當然題目太難的話解題時間太長會影響正常交易。現在的電子貨幣一般調節難度是數秒到數分鐘不等。
4
有沒有後門?不同的Hash是不一樣的。CRC等低等級安全演算法一般只能用來驗證文件完整性的連後門都說不上,大門可以暴力推開。常見的MD5則是被發現撞Hash值的方法了。RSA則是有FBI做了後門的懷疑。SHA2、SHA3和ECDSA目前還是安全的。所以在比特幣上想要攻破工作量證明佔據別人挖的礦為己有是非常困難的。
那豈不是說只要設備夠猛就可以獨佔?想想可以。
比特幣吸引了全球巨大的計算力關注,想要一手遮天就要和全球所有的比特幣玩家競爭,至少達到總和一半的計算力才能夠穩贏。有那麼多錢還需要和別人搶這點錢?
就算這個區塊鏈上你佔有絕大多數算力,也未必次次挖礦都中。原因在於前面說到的,隨機數。需要找到正確的隨機數才能挖到礦。計算力再強偶爾也會被運氣爆棚的人直接截胡的。
5
有句話叫簡約不簡單,這種最簡單的設計能夠運行到今天正是其強安全性的體現,完全不需要中間機構,多少節點都不怕。
可惜的是,消耗的電力太大,其他沒挖到塊的人會血本無歸,造成了大量資源浪費。同時ASIC之類的專業礦機完全佔據了比特幣挖礦,普通計算機根本沒有立錐之地,造成了礦場和礦池的再中心化,背離了初衷。最後,這個過程限制了每秒交易的次數。原先比特幣是1M大小的區塊,導致每秒就7筆交易;後面有人提出擴大區塊,但也是治標不治本的。至於後人怎麼繞過這些問題設計出新的演算法,敬請下回分解。
行情/道法自然 文/燁煌
TAG:從鏈開始 |