成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這么多人聊比特幣,大部分人壓根不懂什么是“挖礦”?

區塊鏈
區塊鏈是啥?數據存在哪里?“挖礦”是啥?區塊鏈和比特幣是什么關系?今天,從技術的角度,聊聊這些問題。

區塊鏈究竟是個什么系統?)》發布后,有童鞋問:區塊鏈是啥?數據存在哪里?“挖礦”是啥?區塊鏈和比特幣是什么關系?

今天,從技術的角度,聊聊上面這些問題。

上一篇介紹了區塊鏈,那區塊鏈與比特幣是什么關系?

區塊鏈是分布式存儲,比特幣是基于該存儲的應用,其他諸如萊特幣,以太幣都是基于區塊鏈的電子貨幣應用。

如上圖,mysql是底層存儲,wechat是上層應用。

區塊鏈挖礦的本質是啥?

生成一個區塊,鏈入區塊鏈的過程,就是挖礦。

挖礦的人,就是礦工。

什么是區塊(block)?

如上一篇文章介紹,區塊是一塊存儲空間,可以存儲數據。

如上圖,區塊分為區塊頭(header)和區塊體(body)。

區塊體(body)存了些什么?

想存什么存什么,和上層應用有關,就像mysql里存什么依賴于上層應用。例如比特幣使用的區塊鏈,區塊體里存儲的是比特幣交易記錄。

區塊頭(header)存了些什么?

區塊頭里存儲了和這個區塊,以及區塊鏈相關的一些元數據。

如上圖,區塊頭里的三個常見屬性:

  • 前一個區塊的哈希值;
  • 區塊生成的時間戳;
  • 隨機數;

什么是區塊鏈(blockchain)?區塊是怎么鏈起來的?

struct node{

         node* prev; // 前一個節點

         int time; // 時間戳

         int nonce; // 隨機數

         void* node_body; // 存儲數據

}node;

鏈表,節點指針可以作為這個節點的唯一標識,下一個節點通過存儲上一個節點的指針,將鏈表鏈起來。

與之類似,區塊的哈希可以作為區塊的唯一標識,下一個區塊通過存儲上一個區塊的哈希,將區塊鏈起來,這就是區塊鏈。

講完區塊與區塊鏈的概念,接下來講挖礦,也就是區塊的生成。

在此之前,先說說區塊鏈的三個特性:

  • 歷史生成的區塊是無法改變的,即“區塊鏈只能像寫日志一樣追加寫,不能像mysql一樣隨機寫”;
  • 只能在最新的區塊后面生成新區塊,即“必須先完成同步全網最新的區塊鏈數據這項工作,才能啟動新區塊生成這項工作”;
  • 新區塊的生成很難,必須滿足一定條件的新區塊才有效;

假如已經同步了最新的區塊鏈數據,要滿足什么條件,才算生成一個新的區塊,才算“挖礦”成功呢?

對最新的區塊頭進行兩次SHA256計算,得到的256bit哈希結果,高位48bit必須是0x00000000FFFF,才算挖礦成功。

畫外音:這句話很重要,是這篇文章的核心。

為什么大家都說“挖礦”很難?

由符合條件的哈希值,倒推出區塊頭,填入相應的“前一塊區塊哈希值”“時間”“隨機數”不就可以了嗎?

哈希(SHA256是一個哈希算法)是不可逆的。

例如MD5:

md5(string) = md5_result

大家都知道:

  • 由字符串,算出對應的md5值很容易,但由md5值反推出字符串是不可能的;
  • 可以認為哈希的結果是完全隨機的,要得出前48bit必須是0x00000000FFFF的哈希結果,就如同連續拋48次硬幣,每次都得到我們想要的結果,其概率為(1/2)^48;

可以看到,這就好比在一座山上隨手撿起一塊石頭,正好是一塊金子,我猜測,這也正是把生成新區塊叫做“挖礦”的原因。

那應該怎么找到符合條件的區塊頭呢,從而成功挖到礦呢?

窮舉法。

區塊頭里有個隨機屬性nonce,將這個屬性從0開始,遍歷到2^32,來計算區塊頭的哈希值,如果得到的哈希結果符合條件,則挖礦成功。

其偽代碼如下:

byte[32] = PrevBlockHash; // 上一個區塊的哈希

for(int i=0 to 2^32){ // 遍歷所有整數

  int time=now(); // 時間戳

  blockHeader= new(byte[32], time, i); // 生成區塊頭

  hashResult= SHA256D(blockHeader); // 計算哈希值

  if(hashResult>>208 == 0x00000000FFFF){ //哈希符合預期

    echo“bingo”; // 挖到礦啦

}

}

看上面的算法,只要程序運行時間足夠久,總能挖到礦呀?

錯,如果別人計算能力強,在你挖到礦之前,如果別人先生成了新區塊,廣播到了區塊鏈網絡,你本地不是最新的區塊鏈,你挖到的礦就作廢啦,此時你要放棄之前所有的工作,先向網絡同步最新的數據,再重新開始挖。

有什么方法可以提升挖礦的速度呢?

從架構的角度出發:

  • “緩存”是無效的:每個區塊的哈希值都不一樣,每個時間戳都不一樣,歷史計算過的值無法通過“查表”來節省時間;
  • scale up是有效的:增強單CPU的計算能力,使用GPU代替CPU,使用特殊的芯片計算SHA256D等優化都是有效的,但scale up總是有極限的,單機總會遇到瓶頸;
  • scale out是有效的:單機不行,來并行,一臺機器不行,搞集群,這就是為什么會有這么多的礦場;

如上圖,這是某高原上的一個比特幣礦場,廉價的電力讓無數礦工趨之若鶩。

綜上,區塊鏈里,什么是挖礦?

在最新區塊鏈的數據上,生成一個符合條件的區塊,鏈入區塊鏈的過程,就是挖礦。

關于區塊鏈與挖礦,大家或許還有不少疑問:

  • 如何保證數據的一致性?
  • 這TM有病吧,挖這玩意有什么意義,不是純浪費電嗎?
  • 這和比特幣有什么關系?
  • 比特幣怎么保證總量有限?

這些疑惑,未來再撰文和大家解釋。

知其然,知其所以然。

思路比結論更重要。

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2022-05-10 23:32:30

比特幣數字資產區塊鏈

2021-01-25 16:20:27

比特幣互聯網技術

2020-05-20 20:00:46

比特幣數字貨幣區塊鏈

2022-06-08 13:11:35

比特幣挖礦區塊鏈

2022-01-21 16:30:45

比特幣挖礦加密貨幣

2018-11-25 21:53:10

人工智能AI開發者

2019-11-20 08:30:07

架構師軟件組織

2025-01-26 16:04:09

2021-02-21 23:49:45

比特幣貨幣人民幣

2022-05-18 09:49:26

MySQLID數據庫

2012-06-07 16:16:43

JavaScript

2021-06-08 21:49:06

比特幣區塊鏈礦工

2018-09-17 15:09:28

區塊鏈去中心化互聯網

2020-07-02 14:12:52

C++語言編程

2022-07-11 14:23:09

加密貨幣比特幣以太坊

2021-04-06 15:20:05

編程語言JavaIT

2016-10-26 10:23:42

2024-05-16 20:48:23

ReactReact 19React 編譯器

2023-02-07 13:51:11

SQLupdate語句

2022-11-09 10:32:50

群業務群聊數據結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日本韩国一区二区 | 亚洲一区免费视频 | 欧美精品久久久久久久久老牛影院 | 国产欧美精品一区二区 | 亚洲精品欧美 | 亚洲狠狠爱| 国产一区 | 欧洲一级毛片 | 日韩欧美一区二区三区四区 | 欧美日韩一区二区视频在线观看 | 综合一区二区三区 | 日韩一三区 | 国产精品一区二区视频 | 中文字幕在线观看日韩 | 亚洲高清免费 | 青草青草久热精品视频在线观看 | 91香蕉视频在线观看 | 操久久 | 精品国产一区二区三区在线观看 | 2021狠狠干 | 亚洲第一福利视频 | www国产成人免费观看视频,深夜成人网 | 91福利在线观看视频 | av黄色在线| 人人草人人干 | 亚洲va国产日韩欧美精品色婷婷 | 人操人人干人 | 亚洲精品视频二区 | 国产精品久久久久久亚洲调教 | 欧美黄 片免费观看 | 午夜精品久久久久久久久久久久 | 欧美老妇交乱视频 | 91在线成人 | 欧美日韩三级视频 | 久久中文字幕一区 | 欧美一级二级三级视频 | 日韩午夜影院 | 久久久精品一区二区三区四季av | 欧洲精品码一区二区三区免费看 | 99久久免费精品国产男女高不卡 | 看片一区 |