1. 小白如何秒懂區塊鏈中的哈希計算
小白如何秒懂區塊鏈中的哈希計算
當我在區塊鏈的學習過程中,發現有一個詞像幽靈一樣反復出現,「哈希」,英文寫作「HASH」。
那位說「拉稀」同學你給我出去!!
這個「哈希」據說是來源於密碼學的一個函數,嘗試搜一搜,論文出來一堆一堆的,不是橫式就是豎式,不是表格就是圖片,還有一堆看不懂得xyzabc。大哥,我就是想了解一下區塊鏈的基礎知識,給我弄那麼難幹啥呀?!我最長的密碼就是123456,復雜一點的就是654321,最復雜的時候在最後加個a,你給我寫的那麼復雜明顯感覺腦力被榨乾,僅有的腦細胞成批成批的死亡!為了讓和我一樣的小白同學了解這點,我就勉為其難,努力用傻瓜式的語言講解一下哈希計算,不求最准確但求最簡單最易懂。下面我們開始:
# 一、什麼是哈希演算法
## 1、定義:哈希演算法是將任意長度的字元串變換為固定長度的字元串。
從這里可以看出,可以理解為給**「哈希運算」輸入一串數字,它會輸出一串數字**。
如果我們自己定義 「增一演算法」,那麼輸入1,就輸出2;輸入100就輸出101。
如果我我們自己定義「變大寫演算法」,那麼輸入「abc」輸出「ABC」。
呵呵,先別打我啊!這確實就只是一個函數的概念。
## 2、特點:
這個哈希演算法和我的「增一演算法」和「變大寫演算法」相比有什麼特點呢?
1)**確定性,算得快**:咋算結果都一樣,算起來效率高。
2)**不可逆**:就是知道輸出推不出輸入的值。
3)**結果不可測**:就是輸入變一點,結果天翻地覆毫無規律。
總之,這個哈希運算就是個黑箱,是加密的好幫手!你說「11111」,它給你加密成「」,你說「11112」它給你弄成「」。反正輸入和輸出一個天上一個地下,即使輸入相關但兩個輸出毫不相關。
# 二、哈希運算在區塊鏈中的使用
## 1、數據加密
**交易數據是通過哈希運算進行加密,並把相應的哈希值寫入區塊頭**。如下圖所示,一個區塊頭包含了上一個區塊的hash值,還包含下一個區塊的hash值。
1)、**識別區塊數據是否被篡改**:區塊鏈的哈希值能夠唯一而精準地標識一個區塊,區塊鏈中任意節點通過簡單的哈希計算都可以獲得這個區塊的哈希值,計算出的哈希值沒有變化也就意味著區塊鏈中的信息沒有被篡改。
2)、**把各個區塊串聯成區塊鏈**:每個區塊都包含上一個區塊的哈希值和下一個區塊的值,就相當於通過上一個區塊的哈希值掛鉤到上一個區塊尾,通過下一個區塊的哈希值掛鉤到下一個區塊鏈的頭,就自然而然形成一個鏈式結構的區塊鏈。
## 2、加密交易地址及哈希
在上圖的區塊頭中,有一個Merkle root(默克爾根)的哈希值,它是用來做什麼的呢?
首先了解啥叫Merkle root? 它就是個二叉樹結構的根。啥叫二叉樹?啥叫根?看看下面的圖就知道了。一分二,二分四,四分八可以一直分下去就叫二叉樹。根就是最上面的節點就叫 根。
這個根的數據是怎麼來的呢?是把一個區塊中的每筆交易的哈希值得出後,再兩兩哈希值再哈希,再哈希,再哈希,直到最頂層的數值。
這么哈希了半天,搞什麼事情?有啥作用呢?
1)、**快速定位每筆交易**:由於交易在存儲上是線性存儲,定位到某筆交易會需要遍歷,效率低時間慢,通過這樣的二叉樹可以快速定位到想要找的交易。
舉個不恰當的例子:怎麼找到0-100之間的一個任意整數?(假設答案是88)那比較好的一個方法就是問:1、比50大還是小?2、比75大還是小?3、比88大還是小? 僅僅通過幾個問題就可以快速定位到答案。
2)、**核實交易數據是否被篡改**:從交易到每個二叉樹的哈希值,有任何一個數字有變化都會導致Merkle root值的變化。同時,如果有錯誤發生的情況,也可以快速定位錯誤的地方。
## 3、挖礦
在我們的區塊頭中有個參數叫**隨機數Nonce,尋找這個隨機數的過程就叫做「挖礦」**!網路上任何一台機器只要找到一個合適的數字填到自己的這個區塊的Nonce位置,使得區塊頭這6個欄位(80個位元組)的數據的哈希值的哈希值以18個以上的0開頭,誰就找到了「挖到了那個金子」!既然我們沒有辦法事先寫好一個滿足18個0的數字然後反推Nounce,唯一的做法就是從0開始一個一個的嘗試,看結果是不是滿足要求,不滿足就再試下一個,直到找到。
找這個數字是弄啥呢?做這個有什麼作用呢?
1)、**公平的找到計算能力最強的計算機**:這個有點像我這里有個沙子,再告訴你它也那一個沙灘的中的一粒相同,你把相同的那粒找出來一樣。那可行的辦法就是把每一粒都拿起來都比較一下!那麼比較速度最快的那個人是最有可能先早到那個沙子。這就是所謂的「工作量證明pow」,你先找到這個沙子,我就認為你比較的次數最多,乾的工作最多。
2)、**動態調整難度**:比特幣為了保證10分鍾出一個區塊,就會每2016個塊(2周)的時間計算一下找到這個nonce數字的難度,如果這2016個塊平均時間低於10分鍾則調高難度,如高於十分鍾則調低難度。這樣,不管全網的挖礦算力是怎麼變化,都可以保證10分鍾的算出這個隨機數nonce。
# 三、哈希運算有哪些?
說了這么多哈希運算,好像哈希運算就是一種似的,其實不是!作為密碼學中的哈希運算在不斷的發展中衍生出很多流派。我看了」滿頭包」還是覺得內在機理也太復雜了,暫時羅列如下,小白們有印象知道是怎麼回事就好。
從下表中也可以看得出,哈希運算也在不斷的發展中,有著各種各樣的演算法,各種不同的應用也在靈活應用著單個或者多個演算法。比特幣系統中,哈希運算基本都是使用的SHA256演算法,而萊特幣是使用SCRYPT演算法,誇克幣(Quark)達世幣(DASH)是把很多演算法一層層串聯上使用,Heavycoin(HAV)卻又是把一下演算法並聯起來,各取部分混起來使用。以太坊的POW階段使用ETHASH演算法,ZCASH使用EQUIHASH。
需要說明的是,哈希運算的各種演算法都是在不斷升級完善中,而各種幣種使用的演算法也並非一成不變,也在不斷地優化中。
**總結**:哈希運算在區塊鏈的各個項目中都有著廣泛的應用,我們以比特幣為例就能看到在**數據加密、交易數據定位、挖礦等等各個方面都有著極其重要的作用**。而哈希運算作為加密學的一門方向不斷的發展和延伸,身為普通小白的我們,想理解區塊鏈的一些基礎概念,了解到這個層面也已經足夠。
2. 每個月能挖出500元比特幣的電腦(2021年)哈希值是多少,一般什麼樣的顯卡能做到
目前比特幣全網算力達到236萬萬億次哈希碰撞每秒,相當於20多萬個50米長的標准游泳池裡面水滴的數目。但即便是這么大的算力,也需要10分鍾左右才能碰撞到一個符合要求的哈希值。
2012年比特幣進行了第一次產量減半,2016年7月,比特幣進行了第二次產量減半,目前記一頁賬本獲得的獎勵是12.5個比特幣。下一次減半會發生在2020年左右,而到2040年比特幣總數不會再增加,總量是2100萬枚。也就是說,挖比特幣的難度在遞增,而需要的時間在增加。
3. 算力是什麼 關於算力的介紹
1、算力(也稱哈希率)是比特幣網路處理能力的度量單位。即為明茄計算機(CPU)計算哈希函數輸出的速度。比特幣網路必須為了安全目的而進行密集的數學和加密相關操作。 例如,當網路達到10Th/s的哈希率時,意味著它可以每秒進行10萬億次計算。
2、在通過備槐汪「挖礦」得到比特幣的過程中,我們需要找到其相應的解m,而對於任何一個六十四位的哈希值,要找到其解m,都沒有固定演算法,只能靠計算仿仔機隨機的hash碰撞,而一個挖礦機每秒鍾能做多少次hash碰撞,就是其「算力」的代表,單位寫成hash/s,這就是所謂工作量證明機制POW(Proof Of Work)。
4. 1th等於多少mh
比特幣1T算力是一種衡量算力的單位,算力每隔千位劃為一個單位,最小肢褲單位H=1次、1000H=1K、1000K=1M、1000M=1G、1000G=1T、1000T=1P、旁歷1000P=1E。
算力(也稱哈希率)是數字貨幣網路處理能力歷啟簡的度量單位。即為計算機(CPU)計算哈希函數輸出的速度。區塊鏈網路必須為了安全目的而進行密集的數學和加密相關操作。例如,當網路達到10Th/s的哈希率時,意味著它可以每秒進行10萬億次計算。
5. 即使美國也「殺不死」比特幣
這篇文章的題目只是為了「報復」。
報復,3年前,美國的彭博社發的一篇《即使中國也殺不死比特幣》(Even China Can't Kill Bitcoin) 。那篇文章,把中國政府2017年規範金融市場、關閉加密貨幣交易的行為,看成是中國政府要「殺死」比特幣;把中國與土耳其、委內瑞拉、俄羅斯相提並論,一道列為對比特幣不友好的國家。但是,不友好與「殺死」是有天壤之別的,為什麼要用「殺」(kill)這種字眼呢?
2017年2月24日,彭博社《即使中國也殺不死比特幣》網路截圖
很顯然,這是在誇大其詞。所以,為了表達中國民間的不滿,我要用「即使美國也殺不死比特幣」做標題,來進行報復。
上一篇《比特幣「泡沫」11年不破的秘密!》,通過最新的學術研究,我們知道是因為比特幣累積了足夠的信任才走到今天的;我們還知道,這些 信任主要來自一種比特幣的屬性「不可更改」(immutability) 。一旦,比特幣變得可以更改了,那麼比特幣也就完蛋了。也就是說,如果美國想殺死比特幣,只需要殺死這個「屬性」就夠了。
問題一下子就變得簡單了。因為,美國政府是有辦法讓比特幣變得可以更改的,甚至完全不一樣的;又因為,比特幣有個重要前提:比特幣區塊鏈只認最長的那個區塊鏈,誰挖出的鏈最長、又合法,誰就會成為合法的比特幣。所以,如果, 美國政府,只要匯集足夠的算力,生成了最長的比特幣區塊鏈,那麼,美國政府也就完全控制了比特幣,從而將比特幣玩弄於股掌之間,讓比特幣生不如死。 而且,在控制了記賬權後,美國政府 不但可以獲得所有的區塊獎勵,而且還可以決定哪一筆交易記入區塊鏈,哪一筆不記入 。
現在你知道了,美國政府要想控制比特幣,唯一要做的就是——通過算力競賽獲得記賬權。你可能再想,算力競賽比的是什麼呢?比較復雜,一句話、兩句話說不清楚。你就當那個比賽,是地球上最公平的 游戲 ,大家機會均等,唯一比拼的,也就是算力,誰的算力大,誰就能贏,不會有例外。
當然,開展行動之前,美國政府會首先了解的是比特幣全網當前的算力,到底有多大?
為了便於理解下面的內容,需要先講一下什麼是算力。算力,是用計算機每秒可以運算SHA256哈希函數的次數來表達的,英文是hashrate。當前的最大單位是EH/s,表示1*10^18,1後面有18個0。
2016年2月2日,比特幣的全網算力,也就是所有礦池的運算能力加起來,達到了1EH/s,此後一直處於增長過程中。
這樣的算力到底有多強大呢?在2017年的時候,有人將比特幣的算力與全球前100的超級計算機進行了比較。答案是: 100台超級計算機的算力都達不到比特幣網路算力的十萬分之一 。 不過,你千萬不要以為,我們可以不要超級計算機了,有礦機就可以了。因為,礦機是專門用於SHA-256運算的,是專門設計的專用計算機,只可以用來挖礦,其他的什麼也幹不了。而超級計算機是通用計算機,可以干各種事情。請記住SHA-256,它在比特幣中的地位非同小可,後面我們專門講。
2017年6月比特幣網路與Top100台超級計算機算力比較
你也許會想,現在5年過去了,這樣的狀況是否會有所改變呢?很遺憾,沒有。
超級計算機的算力,與比特幣全網的算力之間的差距,不是縮小了,而是還在加大。2017年6月,最快的超級計算機的峰值浮點運算次數是125,435.9TFlop/s ;2019年11月,最快的是IBM的Summit,它的理論峰值是200,794.9TFlop/s ,增長2倍都不到。而比特幣網路,2017年6月的時候,算力只有5EH/s;2019年11月達到90EH/s,其算力一下子增加了18倍。
SUMMIT,排名第一的超級計算機,理論峰值200,795 TFlop/s
你可能也注意到了,這里的單位不一樣。一個是TFlop/s ,一個是 EH/s。他們之間存在一種換算關系。一次hash運算,需要12700次浮點運算。換算過程是這樣的,一次哈希計算需要6350次的整點運算,一次整點運算相當於2次浮點運算,6350 乘以 2 等於 12700。 關於Hash運算,是算力競賽找到正確答案的手段。你可以理解為,這是一種比較復雜的計算過程,詳細的後面會專門講。
2020年10月12日,比特幣全網的算力已經達到了140EH/s。從2016年2月達到1EH/s,4年多的時間,比特幣全網的算力居然增加了140倍。
2020年10月12日比特幣全網算力140EH/s
看了上面這些,你還在想用家用電腦挖礦嗎?我勸你徹底打消這樣的念頭。因為,理論上公平的事情,由於算力的懸殊,已經變成實際的不可能了。但是,美國政府不一樣,有的是錢,實在不行就發債。140Eh/s的算力,對於美國政府來說,可能真不是什麼大事。
我們來幫美國政府計算一下,要想實現140EH/s的算力,需要多少錢?下面這張圖片 ,是比特大陸宣傳所說的,當前全網最強的礦機,已經賣光了。其算力達到了110TH/s,價格是2萬多一點。
螞蟻礦機S19 Pro110T
我們先把比特幣的全網算力——140EH/s——換算一下單位,也就是在後面加6個0變成TH/s——140,000,000TH/s。美國要想實現這樣的算力,需要1272728台這種S19 Pro螞蟻礦機,人民幣25,874,560,240元,約259億人民幣,40億美元不到。電費、廠房及其他散熱設施所需要的費用暫時先不算。因為,比特幣挖出來後,還可以換成錢,經濟上問題不大。
不過讓人奇怪的是,比特幣社區對此好像並不緊張。而且,還有一個網站 ,專門把重新生成整個比特幣區塊鏈所需要的時間實時公布了。據他們估算,2020年12月8日早上7:20,誰擁有比特幣全網的算力, 只需要552.65天就可以把比特幣區塊鏈重新生成一次 。另外一個加密貨幣,BCH,用的時間更短,只需要32.67天。看來,美國政府殺死比特幣的可能性正在加大,而且不用500多天,增加礦機的數量就可以了。這樣,讓殺死比特幣的時間,會變得盡可能的短。
實時重寫比特幣、BCH區塊鏈所需天數
那麼,現在,美國政府在有了足夠的算力之後,是否就可以殺死區塊鏈了呢?
答案是:不可能。
因為有 「假定有效塊」( AssumeValid ), 這是比特幣核心(Bitcoin Core)軟體裡面的一個默認參數。
AssumeValid參數有兩個作用,第一個就是可以減少驗證開銷;另一個好處是,這個參數就像定海神針一樣告訴所有人,所有這個塊前面的區塊,包括這個區塊是可靠的,你們的賬戶上的比特幣是安全的。
這個參數是從0.14版本的時候開始有的,以後每次主要版本更新的時候,這個參數會被默認設置成幾個月前的、已經確認的有效塊。
現在的比特幣核心是0.21.0版本,2020年6月3日發布的 。在這個版本的源代碼中,已經更新了AssumeValid參數:
Bitcoin core 0.21 版本更新AssumeValid默認參數的截圖
上面一行,有「-」號的,是被替換掉的以前的程序代碼。,這個字元串代表的是寫在比特幣軟體里的一個區塊的hash,這個區塊2019年10月1日18點46分生成的,區塊的高度是597379。
下面那個有「+」號的,代表的是在代碼里增加的程序代碼,主要改變的是新的AssumeValid參數。,所代表的623950這個區塊,是2020年4月2日2點13分。
被Bitcoin core 0.20替換掉的默認AssumeValid參數所代表的區塊截圖。
Bitcoin core 0.20軟體裡面最新的默認AssumeValid參數所代表的區塊截圖。
也就是說,因為AssumeValid參數的存在。美國政府把比特幣區塊鏈重新算一遍也沒有用,它最多可以對AssumeValid參數後面的區塊產生影響。
我們來算算算看,如果美國從參數後面開始做最長的區塊鏈,是否有足夠的利益?
先算一下到目前為止的數據,從2020年4月2日零點到2020年12月12日零點,一共有365810分鍾。 比特幣區塊鏈,平均10分鍾產生一個區塊,每個區塊的比特幣獎勵從50開始,已經經歷了3次減半,現在是6.25個比特幣,比特幣的價格我們按照2萬美元一個計算。
365810 10 6.25 20000 = 45.72625億美元
正好,到目前為止所產生的比特幣差不多價值45億美元。應該說,還是很劃算的,不管怎麼說,沒有虧。而且,未來還有很多比特幣可以賺啊。且慢,即使只是從AssumeValid後面的區塊開始,即使有利可圖,美國最終還是不能殺死比特幣。
關鍵還是AssumeValid參數。剛才說了,這個參數的 默認值是新的主要版本發布的時候設定的 。它也完全可以不是默認值,當比特幣社區發現美國想殺死比特幣的企圖時,會通知大家出現的問題,讓大家設置成新的參數。只要,大家把參數一改,就會讓美國的那個最長的鏈,因為沒有人認可而失效。那條最長的鏈,就會只剩下美國一個礦工在記賬,自娛自樂。
就是這樣簡單,一個參數,就阻止了美國企圖通過算力殺死比特幣的陰謀。結論很簡單,即使是美國也殺不死比特幣。
AssumeValid參數,只是比特幣11年成長的縮影。比特幣核心軟體的版本,已經進行了21次重大更新,小修小補更是不計其數。11年來,不只是比特幣的價格在漲,比特幣社區的能力也在不斷提高。
最後,請允許我解釋一下,這篇文章與《即使中國也殺不死比特幣》不同,只是假設。實際上美國政府對比特幣的態度,是相當的友好,其友好程度不是第一、也有第二。當然,也有更合適的國家可以拿來舉例,但是我不敢。你懂的。
拿美國來舉例,還有另一種考慮。因為,美國——現在是地球上最強大的國家,如果它都殺不死比特幣了,那麼其他的國家、組織、機構也就更沒有這個可能了。那樣的話,比特幣也就可以高枕無憂了。但是,我還是要反復、再次,不厭其煩地提醒你,這一切並不能構成你——現在——就買比特幣的理由,請切記。詳細的原因,請看以前的文章:《小心!別上當!比特幣從來沒有牛市!》,很重要。
簡單說,這篇文章寫到這里的時候,是2020年12月12日凌晨,比特幣的價格是18486美元。3年前,2017年12月17日,比特幣價格開始從 歷史 高點19000多美元回落,直到現在又重新站回了 歷史 高點附近。我是想通過 歷史 數據告訴你,比特幣,還是很有可能再次跌倒1萬美元以下的。波動性是比特幣的天然屬性,所以,你應該等等看。
實際上,你和我都相信,美國政府是不可能幹這種事情的。這樣的預算,首先就不會在國會通過。但是,我們的假定還是有價值的,這至少可以讓更多的人丟掉幻想,讓更多的人安心入眠。
還記得開頭提到的《即使中國殺不死比特幣》,那篇彭博社的文章嗎?我真心希望你能親自看到那篇文章 ,可惜的是,你看不到。裡面有句話,非常好,借用一下,作為結尾。
如果你想廢除一種人們喜歡的東西,它就會在其他地方冒出來!( If you try to abolish something people like, it just pops up somewhere else. )
(待續,這是專題「比特幣還能走多遠」的第八篇)
6. 5690xt挖礦算力工耗
80 MH/s 左右.
80MH/s 是沒有超頻的原廠性能,功耗在 300W 左右。3080 在超頻和70% 的功率限制下清基胡,哈希算力會在 87MH/s 左右,功耗為鋒坦 225W。
所謂的挖礦,其實就是用計算機不斷地解決一系列的復雜密碼,來保證比特幣網路分布記答攔賬系統的一致性,整個求解並驗證的過程就叫做挖礦,協助破解數字答案的設備就稱為礦機。而我們其實可以把算力理解為通過計算機挖掘比特幣的能力,你的算力越多產出的幣就越多。在通過挖礦得到數字貨幣的過程中,一個節點每秒中能做多少次算力,就是其算力的代表。