比特币核心是什么(比特币的核心与基础架构)
文章的留言里,不少朋友会用比特币来解释区块链,那区块链与比特币是什么关系?
答:区块链是分布式存储,比特币是基于该存储的应用,其他诸如莱特币,以太币都是基于区块链的电子货币应用。理论上,使用上层应用来解释底层存储是不合适的。
如上图,mysql是底层存储,wechat是上层应用,用wechat来解释mysql是不合适的。
今天,从技术的角度出发,聊聊什么是区块链里的“挖矿”。
先说结论,区块链挖矿的本质是啥?
答:生成一个区块,链入区块链的过程,就是挖矿。挖矿的人,就是矿工。
什么是区块(block)?
答:如《1分钟了解区块链的本质》里所述,区块是一块存储空间,可以存储数据。
如上图,区块分为区块头(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有病吧,挖这玩意有什么意义,不是纯浪费电吗
- 这和比特币有什么关系
- 比特币怎么保证总量有限
- …
这些疑惑,下一个一分钟,再和大家解释。
希望这很短的一分钟,大家了解了挖矿的本质。
相关内容
相关资讯
-
虚拟币平台钱包(虚拟币 钱包)
虚拟货币钱包APP哪一种比较安全好用鏍规嵁銆婂叧浜庨槻鑼冧唬甯佸彂琛岃瀺璧勯闄╃殑鍏憡銆嬶紝鎴戝浗澧冨唴娌℃湁鎵瑰噯鐨勬暟瀛楄揣甯佷氦鏄撳钩鍙般€傛牴鎹垜鍥界殑鏁板瓧璐у竵鐩戠瑙勫畾锛屾姇璧勮
-
虚拟货币上币的平台 国内正规的虚拟货币交易有哪些
br/>鐏竵鍏ㄧ悆涓撲笟绔欐槸鐏竵闆嗗洟鏃椾笅鏈嶅姟浜庡叏鐞冧笓涓氫氦鏄撶敤鎴风殑鍒涙柊鏁板瓧璧勪骇鍥介檯绔欙紝鑷村姏浜庡彂鐜颁紭璐ㄧ殑鍒涙柊鏁板瓧璧勪骇鎶曡祫鏈轰細锛岀洰鍓嶆彁渚涘洓鍗佸绉嶆暟
-
虚拟币哪个平台好 虚拟币哪个平台好用
目前国内比较好的数字货币交易平台应该属于三巨头,不管从数字货币成交量资金量来讲是从网站的安全性来讲,币安、火币、OKEX这三家大平台交易所都是非常不错的
-
股指期货对冲平仓,股指期货对冲原理
现手最近一笔的成交手数开仓是指开新的多头仓位或者新的空头仓位,也就是新买进或者新卖出一定手数的股指期货合约平仓如果你已经开了多头仓位的话,就需要卖出手上的合约来进行对冲平仓
-
2016年期货双边手续费 2016期货最新手续费
但如果你有认识好的期货客户经理,那你开的户可以只在交易所收取的标准上+0.01元每手,还是黄金,你交的总手续费只需10.01元
-
比特币大牛(比特币大牛市)
在巴比特创始人长铗看来:“中本聪在密码朋克组中是一个年轻后辈(可能30岁出头),但地位十分显赫,在这个密码朋克组中,有菲利普·希默曼(PGP技术的开发者)、约翰·吉尔摩(太阳微系统公司的明星员工)、斯
实时快讯
-
半年前黄金电子货币?电子货币 金属货币
-
半年前鼓励数字货币(数字货币有哪些)
-
半年前辐射货币代码,辐射4动力装甲代码
-
半年前国际汇兑货币,国际汇兑的两种方法
-
半年前黄金储备 基础货币?基础货币和储备货币的区别
-
半年前宏观微观货币,货币的四个职能
-
半年前黄金 货币 关系(黄金货币投资)
-
半年前国际货币基金组织份额(收益好的十大货币基金)