(28DW-S8-Day4) 区块链里面 2 个核心问题
今天来学习 2 个核心问题:为何要记账、以谁为准。
为何要记账
就是网络上的节点,为什么要争先恐后去给别人广播的交易信息记账。 利益驱动,记账是有偿的,包含手续费和打包费。
手续费
为什么要有手续费
从文献[5]来看,原因如下。
随着比特币的发展,没有手续费的交易基本不会被矿工打包确认,所以很多比特币客户端、钱包就自定义了手续费标准。 这导致不同的比特币客户端,转账的手续费可能不一致。 目前,主流的手续费标准是按照字节收费:每千字节收取 0.0001BTC 的手续费(不足一千字节的交易按照一千字节算)。
字节大小和比特币网络的拥堵情况,是影响手续费的主要因素。除了这两大因素外,币龄(也称为币天)等因素因为会影响交易被打包确认的优先级,所以也会影响手续费。
打包费
打包费是中本聪设计的:
每 10 分钟打一个包
最开始一个包奖励 50 个 BTC
四年后,减为 25 个 BTC (过四年,减半)
比特币一共多少个?
比特币的增加就是打包奖励出来的。但总数固定(不会无限通胀):
sum = 50BTC 每小时 6 个十分钟 x 24 小时 x 365 天 x 4 年 x (1+1/2+1/4+1/8+1/16...) ~= 2100 万
以谁为准
大家都会全抢着去记账,如何确定是谁
知乎上一个形象的比喻就是,一个富人家有 N 个闺女要嫁出去,比赛解数学题,每个题目对应一个闺女。最先解出第 i 个题目的,可以娶第 i 个闺女。
工作量证明:挖矿
中本聪设计的确认算法叫工作量证明。
每个 node 都要去解一个很难的数学题,做出来的就有权利打包。 这个难题没有精巧快速解法,只能暴力破解,一个个数尝试。 这个过程称为挖矿!
SHA256 算法
输入任何长度字符串(e.g. 一个 10G 的电影、"apple"),输出 256 位二进制
输入改变一点点,输出就会发生很大变化,且没有规律
正向算很 easy
反向算很难,几乎不可能
具体咋算
每次获取一个打包权利,都要求计算出一个符合要求的 SHA256 hash 值。
string = 前块头部+账单+时间+随机数
hash 值 = SHA256(SHA256(string))
工作难度:参数 n 的控制
难度:要求 hash 值的前 n 个数字是 0。
因为只能不算的换随机数来算,如何设置 n 来控制:
比特币设计:10 分钟出一个块
要计算出前 n 个数都是 0, 需要(1/2)^n 次计算。
假设一共 10000 个矿机,每个矿机 14T/S=1.4x10^13/s.
那 10 分钟全球一共能算多少次:1.4x10^13/s * 10^4 * 600s = 8x10^19。
推算出 n=66。
后续:如何防伪、如何防止双重支付、保密
参考文献
中本聪的白皮书:《比特币:一种点对点的电子现金系统》
李永乐:《比特币和区块链的原理》视频
卓克《密码学原理》
版权声明: 本文为 InfoQ 作者【mtfelix】的原创文章。
原文链接:【http://xie.infoq.cn/article/6e41e712f413019e50d010fad】。文章转载请联系作者。
评论