摘要:下圖給出一個簡單的列表圖什么是哈希和哈希值為理解挖礦的代碼機制,首先解決幾個概念。第一個就是哈希。哈希值為十六進制表示的數,且長度固定。也正是哈希值的這些特點,賦予了其加密信息時更高的安全性。
第四期 挖礦的相關算法(2)
卡酷少Wechat:13260325501
看過(1)篇,相信你一定對挖礦的機制有了一點了解。那么本篇,我們來一起看一下挖礦中涉及的算法。
在本篇文章中,如果在前半篇你遇到了不理解的詞匯,也許在文章的后半段就會給出答案。另外本篇主要是零散知識點的介紹,邏輯上不會有那么強。最后關于不理解的部分歡迎大家在文章下面留言,我會及時給出答復。
區塊鏈的區塊到底是什么?挖礦是為了生成一個區塊,那么區塊到底是什么?區塊的作用又是什么?一個區塊又包含了哪些信息呢?
簡單理解的話,一個區塊可以理解為一個結構體。我們知道結構體可以存儲不同類型的信息,這些信息可以是字符串,可以是數字,也可以是日期。那一個區塊里包含了哪些信息呢?這里我們給出一張圖來,先來了解一下區塊信息有哪幾大類。
圖1
如圖一個區塊中信息按類別劃分,主要分為的這四大類,這點大家做為了解即可。其中區塊頭包含了如下信息,這些信息也是真正有作用于生成區塊的信息,我們來列舉其中的重要項:
index(記錄當前是第幾個區塊)
current hash(當前哈希值)
previous hash(承接的上一區塊的哈希值,可保證區塊按時間串聯)
timestamp(時間戳,記錄該區塊的生成時間)
data(交易詳情,詳細記錄了每筆交易的轉出方和收入方,金額及數字簽名)
nounce(隨機數,即全網礦工一起pk計算的的,能滿足哈希難度要求的答案)
其中希望大家先對nounce值有個印象。這個nounce值不僅與挖礦有關,也在之后的代碼實現中有非常重要的身份。
下圖給出一個簡單的列表:
圖2
什么是哈希和哈希值?為理解挖礦的代碼機制,首先解決幾個概念。第一個就是“哈希”。
在上一篇挖礦中我們提到了算力。也說到算力就是一臺礦機每秒鐘能做多少次哈希碰撞。那么,什么是哈希,什么又是哈希碰撞呢?
簡單理解的話,哈希就是一個函數。哈希碰撞的本質,就是cpu在隨機窮舉數值的過程中,不斷尋找能夠生成匹配現階段比特幣“難度”條件的數值。一旦找到這個數值,那么就產生了一次成功的哈希碰撞。
現在你一定很好奇哈希是一個什么樣的值呢?我們通過hash算法 ==SHA256== 來測試一下。這里提供一個網址,感興趣的同學可以跟我一起做一些測試。
link
hello
helloworld
hello world
hello,world
測試之后,我們可以發現,哈希函數有一些非常獨特的特征:
任意內容都可以生成哈希值。
哈希值為十六進制表示的數,且長度固定。
不同的內容生成不同的哈希值。哪怕非常相似的內容生成的值也完全不同,且無規律可循。
相同的內容每次都會輸出相同的哈希值。
通過對比"hello","helloworld",“hello world”和“hello,world”的輸出結果,可以驗證驗證我們對于哈希算法的總結。感興趣的同學可以再驗證別的數值,你會發現,無論多么微小的差別,都會導致哈希值完全無跡可尋的改變。
也正是哈希值的這些特點,賦予了其加密信息時更高的安全性。比如“公鑰”“私鑰”,以后我們會做出介紹。
有關挖礦的“難度”最后一個概念就是挖礦的難度。這里的難度,由淺及深,我們先舉個例子來理解它的原理。
如圖所示,比如我們將一個5位數進行排列組合,分個十百千萬位。假如第一個排列組合,我指定萬位和千位都是5,其他位數不限;第二個排列組合,我只指定萬位為5,那么得到誰的幾率大,得到誰的幾率小呢?
——答案是第一個概率小,第二個概率大。因為被限定的個數越多,其他可選的可能性也就越少了。
同理,挖礦就是去匹配已經被指定了位數的哈希值。而挖礦的“難度”,就是由被指定位數的多少來決定的。這和被指定的是十六進制下的哪個數無關。
如上圖框內所示,當哈希值難度設定了前四位為“0”的時候,只有當匹配上前四位為“0”的時候,才產生了一次成功的哈希碰撞。如果設定的“0”的個數越多,那么哈希成功的難度也越大,挖礦的難度也就越大。
在比特幣最開始的時候,難度是很小的,只有第一位為“0”及碰撞成功。那是的挖礦是非常簡單的。而現在隨著全網算力的增加,挖礦的難度也大大,現在的哈希難度已經是十幾個“0”了。哈希的難度的設定也不是人為操作的,區塊鏈系統會根據當前全網的算力做出調整,將難度保持在能夠每10分鐘生成一個區塊的程度。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24069.html
摘要:我們給出的項數據只是一個簡單舉例,并沒有完全列舉生成區塊哈希時參與的所有數據。這里的哈希難度是我們認為設定的,并不是真實哈希難度的生成方法。真是的哈希難度是由很復雜的數學模型實現的,是會根據當前全網算力自動調整的。。 第四期 簡介go語言下挖礦難度的代碼實現(4) 卡酷少Wechat:13260325501 之前的都講完了,因為代碼太多導致文章比較長。所以新增了一片。在這最后的最后...
摘要:挖礦是什么挖礦是將一段時間內比特幣系統中發生的交易進行確認,并記錄在區塊鏈上形成新區塊的過程。而成功搶到記賬權的礦工,會獲得系統新生的比特幣獎勵。礦機只執行單一的計算程序,實際是礦工之間比拼算力,擁有較多算力的礦工挖到比特幣的概率更大。 第四期 有關挖礦和獲取比特幣(1) 卡酷少Wechat:13260325501 了解了這么多,大家是否想獲取一些屬于自己的比特幣呢?之前我們在第一...
摘要:區塊里的哈希是如何產生的如第四期篇里講到的,每個區塊里包含了,,,,,等信息。,就是將剩下的其他信息拼接成字符串,然后將這個字符串進行哈希的結果。當值取到某數,并使之形成的哈希值匹配上了當前的有效哈希難度,哈希碰撞就成功了。 第四期 簡介go語言下挖礦難度的代碼實現(3) 卡酷少Wechat:13260325501 經過之前所有的鋪墊,這一期我們將對難度的代碼實現作出簡單演示。(以...
摘要:第二期比特幣的總量和發行卡酷少上期我們簡單了解了比特幣的誕生及其創始人。記賬完成后,他將獲得一定數量的比特幣。每萬個區塊后,每個區塊的比特幣產量減半。從年至今,比特幣產量已經減半次,當前每個區塊發行個比特幣。早期約有的比特幣網站靠其導流。 第二期 比特幣的總量和發行 卡酷少Wechat:13260325501 上期我們簡單了解了比特幣的誕生及其創始人。今天我們將對比特幣做一些深入和...
摘要:而比特幣,是由中本聰化名提出,一種點對點,去中心化的數字資產。比特幣預計共有萬枚,大約將在年發行完畢。比特幣電子現金系統解決了在沒有中心機構的情況下,總量恒定的數字資產的發行和流通問題。比特幣通過比特幣系統進行轉賬,全網記錄公開透明。 第一期 比特幣與中本聰 卡酷少Wechat:13260325501 說起區塊鏈,就不得不提比特幣。也正是因為比特幣市場的火熱,比特幣系統的去中心化概...
閱讀 3733·2021-10-15 09:42
閱讀 2592·2021-09-03 10:50
閱讀 1627·2021-09-03 10:28
閱讀 1788·2019-08-30 15:54
閱讀 2509·2019-08-30 12:46
閱讀 401·2019-08-30 11:06
閱讀 2817·2019-08-30 10:54
閱讀 521·2019-08-29 12:59