你知道矿工在挖什么吗?| 小白学比特币之三

本文目录
1. 什么是挖矿
2. 什么是矿工
3. 挖矿四步骤
-- 3.1. 验证交易
-- 3.2. 把交易加入区块
-- 3.3. 验证区块
-- 3.4. 把区块加入主链

1. 什么是挖矿

比特币系统中,挖矿主要有两个目的:

  1. Mining nodes validate all transactions by reference to bitcoin's consensus rule. Therefore, mining provides security for bitcoin transactions by rejecting invalid or malformed transactions. (From Mastering Bitcoin)

第一个目的是,挖矿根据比特币共识来验证所有交易。因此,挖矿通过拒绝非法或者异常的交易来为比特币交易提供安全保障

  1. Mining creates new bitcoin in each block, almost like a central bank printing new money. The amount of bitcoin created per block is limited and diminishes with time , following a fixed issuance schedule. (From Mastering Bitcoin)

第二个目的是,挖矿会在每个区块里产生新的比特币,就像中央银行印钱一样。每个区块所能产生的比特币是有限的,并且会随着时间递减。

总的来说,挖矿行为主要是为整个比特币系统提供安全保障,并且产生新的比特币。

挖矿,其实是一种比喻的说法。比特币的总量是2100万枚,是限量供应。就像其他稀有金属一样(比如黄金),总量有限,每开采一点,可使用量也会变少。

2. 矿工

之前提到过,比特币是一个点对点的电子现金系统。这里的“点”就是节点(node),所谓节点就是指运行了比特币软件的计算机。每个人都可以成为一个节点,只要你在计算机上安装了比特币软件,然后你的计算机就会自动在网络上传播比特币交易。有些节点会把交易加入到区块,放到区块链上,这样的节点就是挖矿节点(mining node),也就是我们通常所说的矿工(miner)。当然,也可以用矿工来代指维护挖矿节点的人。

3. 挖矿四步骤

比特币挖矿有四个步骤:

  1. 验证交易
  2. 把已验证交易加入区块
  3. 验证区块
  4. 把已验证区块加到链上

3.1 验证交易

任何比特币节点接收到一笔比特币交易后第一件事就是验证这笔交易。有一个标准清单来验证一笔交易是否合法有效,这个清单里所包含的检查条目有十几条,就不一一翻译了,可以在这个网址上看到详细条目https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch10.asciidoc

3.2 把已验证交易加入区块

被验证过的交易会放在记忆池里 (memory pool) 或者交易池(transaction pool)里。矿工会构建一个新的空区块,并从记忆池里收集一些交易放入到这个区块中。那么这个新的区块包含什么东西呢?总的来说,每个区块里包含的信息如下:

  • coinbase交易
  • 已验证交易若干
  • 交易费用
  • 区块头(Block Header)

3.2.1 Coinbase交易

coinbase交易,每个区块里的第一笔交易就叫做coinbase交易(coinbase transaction),这笔交易里只包含了一个输入(Input), 叫做coinbase,用来创建新比特币。实际上,coinbase只是一个"空白"输入("blank" input)。

每个新区块所产生的比特币数量是每21万个区块后(大约四年)自动减半的,下面这张图就是每21万个区块后,每个区块可以产生的新比特币数量。


比特币产量图,source: http://www.lothar.com/presentations/bitcoin-brownbag/master.html

3.2.2 区块头(Block Header)

区块头主要是用来识别一个区块,其实就像是一堆元数据(metadata),相当于iPhone手机里的“关于本机“信息。区块头包含的数据如下图所示:


区块头结构
  • Version,版本, 指这个协议版本,也就是比特币软件版本。

  • Previous Block Hash, 上一个区块哈希值。

  • Merkle Root,默克尔树。用默克尔树这种方法将这个区块里的所有交易ID(TXIDs)进行配对后,进行哈希SHA256运算后,会产生一个特定的值。

  • Timestamp, 时间戳,当前时间,相当于创建这个区块时的时间点。

  • Bits,用来存储当前系统的target用的,是难度值(Target)的简化版,系统将target变成bits存放在当前区块里。当一个区块头的数据哈希SHA256运算后得出的值,要小于或者等于这个target。


    Bits转成Target, source: http://learnmeabitcoin.com/glossary/bits
  • Nonce, 是一个需要去“猜”的数字, 用这个数字来和区块头里的其他数据进行哈希运算(也就是猜数字)。从0开始猜,如果0不对,就1,1不对,就2,这样递增下去。直到这个数字返回一个区块哈希值小于目标难度值(target nBits)。

矿工要“猜”的数字NONCE
矿工要“猜”的数字NONCE
矿工要“猜”的数字NONCE

用一个简单的不等式来表示就是:

Hash Function H(Nonce+一个区块里其他数据)= Block Hash ≤ 当前Target

猜Nonce失败;source: http://learnmeabitcoin.com/glossary/nonce

Nonce和这个区块里的其他数据经过哈希运算后,得到一个值,这个值要小于等于target nBits。在这样的情况下,这位矿工在这个10分钟的竞赛中获得了胜利。同时,他需要把这个得到答案的区块传给其他节点,接下来需要其他节点对这个区块进行验证,这样,他就可以获得新的比特币以及交易费用。


猜Nonce成功,WIN! Source: http://learnmeabitcoin.com/glossary/nonce

根据以上的描述,一个区块包含的主要信息就如下图所示:


比特币区块结构图 Source http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html

在网页前端里显示如下,https://blockchain.info/block-height/286819

区块信息

3.2.3 验证区块

既然一位矿工声称自己是第一个解出难题的人,那么其他矿工需要对他的答案进行验证。那么,跟验证交易一样,验证区块也需要符合一些列的标准,通过验证后才能成为有效区块放到网络上,这些验证标准是:

  • The block data structure is syntactically valid 区块数据结构语法有效
  • The block header hash is less than the target (enforces the Proof-of-Work) 区块头的哈希值小于目标难度值
  • The block timestamp is less than two hours in the future (allowing for errors) 区块的时间戳小于未来两小时
  • The block size is within acceptable limits 区块的大小是在限定范围内(比特币每个区块大小限制在1MB以内)
  • The first transaction (and only the first) is a coinbase transaction (第一笔交易是coinbase交易)
  • All transactions within the block are valid using the transaction checklist discussed in "verification of Transactions" (这个区块里的所有交易都是合法有效的)

3.2.4 把区块加入到主链接上

当一个节点收到一个新的已被验证过的区块后,这个节点会看一下这个区块的上一个区块哈希值,看看它的“爹”是谁,然后把这个区块的“爹”找到,把这个区块接到它“爹”后面,这样一个区块就被正式的纳入到区块链主链上(main chain)了,一个有效的链才算成功的“长高”了。

参考文献

[1] Mastering Bitcoin 第二版 https://github.com/bitcoinbook/bitcoinbook
[2] http://learnmeabitcoin.com/glossary/nonce
[3] https://www.coindesk.com/information/how-bitcoin-mining-works/


ChangeLog

  • 20180317 更新3.2.4 把区块加入到主链接上内容
  • 20180316 修改标题为“小白学比特币”,增加参考文献
  • 20180315 修改关于coinbase交易描述
  • 20180314 修改标题
  • 20180310 修改对于Bits的解释;增加关于Nonce截图;增加网页前端区块信息截图
  • 20180307 首次发布
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容