讲讲我对比特币和区块链的认知,挖矿不难,挖到难
比特幣的概念
眾所周知,比特幣是數字貨幣
比特幣相比我們的紙質貨幣,有以下優點:
1、財產可控,不像銀行可以凍結你的賬戶,比特幣不受他人控制
2、無通脹煩惱。銀行可以根據經濟情況,去印刷更多的錢,但比特幣的總量是不變的(2100萬個)。
3、比特幣無假鈔。這是比特幣的一個明顯優勢
4、比特幣的交易,不受國家地域限制。
區塊鏈概念
密碼朋克中的一個重要的人:中本村,2008年《比特幣:一個點對點的電子現金系統》。把區塊鏈中的技術提煉出來,慢慢就有了區塊鏈的概念。
區塊鏈是一系列技術的集合。
比特幣系統中的數據是由一個個的區塊存儲的,并且通過hash的方式把一個個區塊連接起來,就形成了一個區塊的鏈條,所以把它稱之為區塊鏈。
區塊鏈應用場景:
1、記賬方面
股權交易等
2、資產方面
交易,結算,支付
3、不可篡改
各種證明,眾籌等
4、點對點
共享經濟等,解決互相不信任的問題
5、隱私
匿名交易,沒有人知道我有多少比特幣,只有當我交易的時候去驗證能不能交易
比特幣的去中心化
中心化就是所有數據都記錄在一個地方,包括新增刪除驗證查詢等‘
去中心化就是數據保存在每個地方,那直接就會引出兩個問題:
如何驗證和所有權問題
簡單點就說,如何證明你的就是你的,以及如何證明你說的就是對的
驗證:使用hash函數
這里的hash函數,可以理解為md5加密的那個hash,最顯著的一個特點就是不可逆。
舉例,Hash(a)得到b,那只要a發生變化,比如Hash(a1)就得不到b了,同時我們也不能通過b來反向得到a。
有了這個基礎,那我們可以把序號+時間戳+hash值當成區塊的頭,
每次用hash值和交集記錄,得到新的hash值,即形成新的區塊頭。
如下圖,每個區塊就是一個交易記錄的打包,每個人最終只需要比對最后一個hash值是否和自己的一致,即可知道是否正確。
所有權:非對稱加密技術
先類比銀行,銀行是通過我們在開戶的時候,輸入自己的信息,設置密碼等一系列操作,從而讓銀行把這個賬號的所有權給予我們自己。
而比特幣的轉賬,是沒有類似銀行這樣的第三方的。
比特幣支付,主要有三個參數記錄:出賬地址,收賬地址,和交易金額。
地址是公開的,而我們本地就會有一個私鑰,私鑰是生成這個地址的唯一來源,只有這個私鑰,才能生成地址,而地址并不能反推出私鑰。
所以說,私鑰是絕對保密的,而且忘記后不能找回,誰有私鑰,誰就可以交易。
那又有一個問題:如何在不泄露私鑰的前提下,證明我們有這個地址的私鑰
那就是使用簽名。
學習過https的同學,對這塊應該很熟悉了。
簽名過程:
1、先對原始交易記錄hash運算,得到摘要信息7a7b34c5d
2、用摘要信息7a7b34c5d和私鑰a6d77a88e0進行簽名運算,得到簽名信息5c3c5d2d6a
得到簽名信息后,就會對所有賬戶進行循環廣播通知,廣播通知的信息包括:
交易原始信息:出款地址,收款地址,交易金額
簽名信息:5c3c5d2d6a
這個廣播操作,相當于說對所有人說,我是出款地址,我向收款地址交易了多少多少,簽名信息是5c3c5d2d6a,,大家幫我驗證一下
收到廣播的節點,開始驗證過程:
很容易理解:
簽名就是非對稱加密過程,即用付款信息的hash值和私鑰進行加密,得到簽名信息
而驗證就是非對稱解密過程,即用簽名信息和付款地址進行解密,得到付款信息的hash值
這樣問題就解決了,賬戶交易所有權由私鑰控制,并且私鑰也沒有泄露出去。
什么是挖礦
聽過挖礦的人,大概都知道挖礦很耗電,就是不斷計算。那為什么要不斷計算呢?
上面說的驗證,也就是記賬,其實是很消耗資源的,因為每天不知道多少比交易,沒有節點會甘愿免費驗證。
所以比特幣系統提供了一種獎勵機制:記賬就有獎勵。
有了這種獎勵機制,大家又會爭著記賬,于是有了以下規則:
規則1:一段時間內(一般是10分鐘)只有一個人可以記賬成功。
規則2:可以通過解決密碼學難題,即提高工作量來競爭獲得唯一記賬權。
規則3:其他節點只是復制記賬結果。
所以說,誰能解決密碼學難題,誰就更有可能記賬,從而得到獎勵
那什么是這個密碼學難題呢?
我們之前說到,一次驗證就是hash(上一個hash值,交易記錄)得到新的hash值
這樣有點簡單了,幾乎所有人都可以快速完成。
那為了保證一段時間內,比較容易的選出一個人,就必須要提高記賬的難度。
于是,hash方式就變了,加入一個隨機數,變成以下:
hash(上一個hash值,交易記錄,隨機數)得到新的hash值
而這樣就會對新的hash值有要求了,需要新的hash值滿足若干個0開頭,比如0000a6h7jj85。
我們知道hash的數字,只要稍微修改一點,就會引起值的大范圍變化,所以在hash的時候,就可以不斷修改隨機數,從而得到全新的hash值。
理論上只要我們不停的用隨機數hash,總會得到滿足條件的hash值。
現在基本上普通電腦,如果要得到四個0開頭的hash值,基本在1~2分鐘左右。
而現在比特幣由于參與競爭的人太多,所以難度就會提升,已經到了需要18個0開頭的hash值,誰率先找到這個hash值,就可以獲得一個唯一記賬權。
那找這個hash值的過程,很有隨機性,也就叫挖礦,拿到唯一記賬權,就可以說是挖到礦了。
挖礦步驟
1、收集廣播中還沒有被記錄賬本的交易
2、交易的有效性驗證
3、添加一筆給自己轉賬的交易(就是挖礦獎勵)
估算一下拿到記賬權的難度
好比如,現在需要得到新的hash值,需要以18個0開頭。
hash是16進制的,
那如果第一位要得到0,平均需要16次計算。
如果前兩位都要得到0,平均就需要16*16次計算,即16的2次方。
以此類推,如果要得到前18個0,就需要16的18次方次計算。
所以現在都是多人聯合挖礦,挖到后再分成,很少有獨狼。
簡單分析下,比如挖到礦能得到10萬人民幣,那只要挖礦成本小于10萬,就有人去挖礦,挖礦的人越多,計算難度就會變大,挖礦成本也會變大,所以最終會達到一個平衡的狀態,即平均差不多花10萬的成本,挖出10萬的礦。
共識機制
雖然計算難度增大,那也可能會出現有多個節點同時完成工作量的情況,那這種情況,要使用誰的區塊呢?
首先,每個計算節點都要遵守規則,即節點的工作量只有在其他節點認同時才是有效的。那這個規則,就是共識機制。
共識機制:每個節點,只認可累計工作量最大的區塊鏈,即大家都去找最長的鏈
舉個例子:
現在已有鏈#1213<–#1214
大家開始挖礦,挖#1215,某個時刻,甲乙二人同時挖到了,
甲延長區塊鏈#1215A,乙延長區塊鏈#1215B,然后甲乙分別將自己的結果廣播出去。
這個時候就出現的分支,那到底用哪個呢?
這時丙收到甲的廣播信息,對丙來說,此時最長的區塊鏈是到#1215A,于是丙又開始算,去競爭下一個區塊。
和丙類似,丁此時收到了乙的廣播信息,丁認為此時最長的區塊鏈是#1215B,于是丁開始以#1215B開始競爭下一個區塊。
又在某個時刻,丙先算出來了,于是他將區塊鏈延長至:
#1213<–#1214<–#1215A<–#1216丙,并廣播出去
至此,網絡中其他節點收到這個#1216丙,和#1215B,就知道丙的這個是最長的。
那么最終就會選用#1213<–#1214<–#1215A<–#1216丙作為最終的鏈,原來乙的那條鏈,也就廢掉了。
交易確認時間
比特幣將出塊時間設計成10分鐘,其實是在更快的交易確認和更低的分叉直接做了妥協。
確認時間如果很短,那么交易確認就會頻繁,分叉就會很多
確認時間如果很長,分叉減少,但交易確認就很慢
所以既要保證交易確認快,由不能有太多分叉,才選了10分鐘。
后續
以上只是比特幣和區塊鏈的一些簡單概念理解,更深層次的知識,還要繼續挖掘
1、比特幣的P2P網絡
比特幣的節點,都是點對點通信的,沒辦法知道其他服務的ip,每個服務器都是隨時可能上線,隨時可能下線的,那一個節點是怎么連接到其他節點的呢
2、區塊結構:Merkle數]
比特幣的存儲信息想細節
3、比特幣白皮書
4、比特幣交易腳本
5、如何將區塊鏈技術運用到項目實戰中
總結
以上是生活随笔為你收集整理的讲讲我对比特币和区块链的认知,挖矿不难,挖到难的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机硬件在线修复,计算机硬件维修
- 下一篇: 就业技术书文件表格_429页标准指南,教