说明:笔记内容来源于慕课网《区块链技术核心概念与原理讲解》视频课程。如有侵权,请联系删除。
目录
1、区块链前世今生
2、区块链前景
3、比特币是什么
4、比特币原理
4.1 账本如何验证?(哪一个账本是有效的?)
4.2 所有权问题(某个账号的比特币是属于谁的?)
4.3 为什么要参与记账?(挖矿)
4.3.1 为什么记账?
4.3.2 挖矿-工作量证明
4.4 以谁的账本为准?(共识机制)
1、区块链前世今生
密码朋克(Cypherpunk)维基解密的创始人:阿桑奇
BT下载的作者:布莱姆-科恩
WWW的发明者:蒂姆伯纳斯-李
智能合约概念的提出者:尼克萨博
Facebook创始人:肖恩帕克
中本聪
Adam Back 发明了Hashcash,使用了POW
Haber/Stornetta 提出时间戳方法保证数字文件安全的协议
戴伟 发明了B-money,强调点对点交易和不可变更记录
哈尔-芬尼 退出了"加密现金"
中本聪 《比特币:一个点对点的电子现金系统》
比特币的底层技术(如 点对点的网络、时间戳、加密技术、工作量证明等)不仅可以运用到数字货币,
还能应用到其他领域。把这些技术综合提炼出来,就形成了区块链的概念。
2、区块链前景
应用场景*资产:数字资产发行、支付(跨境支付)、交易、结算
*记账:股权交易、供应链金融、商业积分
*不可篡改:溯源、众筹、医疗证明、存在性证明
*点对点:共享经济、物联网
*隐私:匿名交易
人才缺口巨大
区块链招聘年薪高达百万 巨头入局抢夺人才(-03-19 来源:猎云网 作者:王亚楠)
3、比特币是什么
比特币是数字货币什么是货币* 凯恩斯《货币论》:货币是可以承载价值的一般等价物
货币历史
*铜币、金银:贵金属作为货币的价值,取决于贵金属本身的价值
*银票:信用货币,银票作为货币的价值,取决于钱庄的背书
*法币:信用货币(如,人民币),银票作为货币的价值,取决于国家政府的背书
信用货币,就实物而言,只是一张纸,本身是没有价值的。
信用货币的价值,来源于我们对信用货币的信任,或者讲,来源于我们对钱庄、政府的信任。
数字货币
*一串数字
类似于金银铜、纸可以作为货币,数字也可以作为货币。
数字货币的价值,来源于大家对数字的信任,在区块链中称为共识。
大家认为数字有价值,数字就可以作为货币。比如,卖包子的认可这个数字,这个数字就可以用来买包子,卖手机的认可这个数字,这个数字就可以用来买手机。
信任从何而来
* 财产只受自己控制:银行动不了我们的¥,财产只受自己的私钥控制
* 无通胀:不会因为银行发行更多的钞票而贬值,比特币的总量为2100万个
* 没有假钞:任何作弊的支付,都无法得到比特币网络中其他矿工的确认,因而无法完成支付
* 流通性好:可以全球无缝的流通,点对点的流通
去中心化的记账系统
*中心化系统:通常会有一个中央服务器来存储所有数据。
中央服务器存储的是什么,就是最终的结果。如果中央服务器的数据被篡改,也没法验证。
因为只有一方拥有这个数据,其他节点无法验证数据的真实有效性。
* 去中心化系统:数据不再只存储在中央服务器中,而是存储在比特币网络中每个节点中。
如果把每个节点比作一台电脑,记账数据就会存储在每台电脑中。
【问题】每台电脑中都存储一份账本数据,如果某台电脑的账本和其他电脑的账本不一样,到底以哪个账本为准?
4、比特币原理
4.1 账本如何验证?(哪一个账本是有效的?)
【一个不同账本的场景】
正确的账本,分别存储王二、张三、李四、赵五的电脑中。
张三偷偷把自己的余额,由30改为300。
这时,张三的账本,和王二、李四、赵五的账本不一致,以谁的账本为准呢?
方案1:核对账本记录,少数服从多数
比特币网络中有数百万个账本,每个账本都有海量的记录。
每次转账时,都和这数百万个账本逐一核对,这个效率是无法接受的。
方案2:Hash
* 哈希函数:Hash(原始信息)=摘要信息
* 特点:
1)同样的原始信息用同一个哈希函数总能得到相同的摘要信息
2)原始信息的任何微小的变化都会哈希出面目全非的摘要信息
3)从摘要信息无法逆向推算出原始信息
账本通常包含的信息:序号、记账时间(时间戳)、交易信息。
对账本进行哈希运算,得到一个摘要信息,如787635A。
如果摘要信息和其他人的摘要信息一致,则说明账本信息和其他人的账本信息一致。
这样,对比摘要 相对于 对比账本原始信息,效率就会提升很多。
区块
序号、时间戳、Hash值、交易记录,保存下来后,就形成了区块。
序号、时间戳、Hash值称为区块的头
对第2个账本进行哈希运算时,加入第1个账本的Hash值,得到第2个账本的摘要信息,如456635B。
如果第2个账本的摘要信息一致,说明第2个账本的信息和第1个账本的摘要信息都是一致的。
第1个账本的摘要信息一致,又说明第1个账本的信息是一致的。
以此类推,可以由第3个账本信息一致,推出第2个、第1个账本信息一致。
每个账本都会生成各自的区块,所有这些区块串联的结构,就称为区块链。
每个节点在核对数据时,只需要核对最后一个区块的摘要信息。
如果最后一个区块的摘要信息相同,说明整个区块链的账本都是一致的,由此可以完成高效的账本验证。
4.2 所有权问题(某个账号的比特币是属于谁的?)
某个账号的比特币是属于谁的?
谁可以支付这个账号下的比特币?
银行系统
刷卡时需要提供两样东西:银行卡+密码,如果银行卡号、密码,和银行系统中的一致,就可以付款。
如果发生了盗刷,银行会核对账号的所有者。
银行开户
开户时,确定了我们对这个账号的所有权
银行记账
比如发生一笔盗刷,账号0001发生了一笔200元的支出到账号0002,
如果银行确定这笔盗刷,银行可能会撤销这笔记账。
比特币系统
点对点交易,如何在没有第三方(比如银行)的参与下,来确定账号的所有权?
账号 -> 地址
账号是用地址来表示的,转账的过程,是把比特币从一个地址转到另一个地址。
账本上不保存任何个人信息,谁能用这个地址进行支付,谁就有这个账号的所有权。
密码 -> 私钥
比特币用地址表示一个账号,一个地址有一个对应的私钥,
谁拥有这个私钥,谁就能用这个地址进行支付。
比特币的地址和私钥是非对称关系,私钥通过一系列的Hash运算,可以得到比特币的地址。
但比特币地址不能反推出私钥。
非对称加密技术(对交易进行签名)
谁拥有地址的私钥,谁就能用这个地址进行支付。
这时,所有权问题就变为:如何在不泄露私钥的情况下,来证明我们拥有某个地址的私钥。
对交易进行签名,分为两步:
①对交易进行Hash,得到交易的摘要
② 用私钥对摘要进行签名
广播交易
在签名运算后,付款节点会在整个比特币网络中广播。
广播内容包含交易的原始信息、交易的签名信息。
整个广播的过程,是个循环的过程。
当节点收到广播并验证通过后,会向已知相邻的节点再次广播。
验证
其他节点收到广播信息后,会进行验证:
验证签名信息是否为付款方用私钥对交易信息签名产生的。
签名及验证
签名和验证是逆运算:签名是加密过程,验证是解密过程。
补充
关于隐私:整个账本中没有个人信息,保证了比特币的隐私性。
关于安全:银行卡中的¥,银行可以冻结。比特币中,只要我们不泄露私钥,账户的¥就是安全的。
4.3 为什么要参与记账?(挖矿)
4.3.1 为什么记账?
记账:把交易记录、交易时间、序号等信息进行Hash打包的过程消耗资源:Hash打包的过程是消耗计算机资源的既然要付出成本,节点为什么要参与记账呢?
奖励:比特币系统中,完成记账的节点可以获得一定数量的比特币作为奖励。
这个奖励也是比特币发行的过程。
4.3.2 挖矿-工作量证明
规则记账是有奖励的,每次记账,系统都会新发行一定数量的比特币到记账的账户。
如果大家同时去记账,就会出现记账不一致的情况,需要有一定的规则去限制大家记账:
① 一段时间内(通常为10分钟),只有一人可以记账成功
② 通过解决密码学难题(即工作量证明)竞争获得唯一记账权
③ 其他节点复制记账结果
在解决密码学难题时,有一定的随机性。
而记账又可以获得奖励,因此大家形象地把记账的过程称为挖矿。
工作量证明
账本验证时,每次记账时是把上一个账本的Hash值,和当前的账本信息,一起作为原始的信息进行Hash。
如果仅仅是样的过程,显然每个人都可以轻松的完成记账。
为了保证一段时间内,只有一个人可以记账,就必须要提高记账的难度。
因此,比特币系统要求Hash值要满足一定的条件(必须要以N个0开头,比如18)。
为了满足Hash值以N个0开头,在计算Hash值时就要引入一个变量(输入信息的任何微小变化都会引起Hash值的改变)。
通过不断改变随机数的值,每次都会得到一个全新的Hash值,总可以找到N个0开头的Hash值。
率先找到N个0开头的Hash值的节点,就可以获得唯一的记账权。
交易记录集的获取步骤
① 收集广播中还没有被记录到账本的交易
② 验证交易的有效性(交易是否有正确的签名、付款地址是否有足够的余额)
③ 添加一笔给自己转账的交易(挖矿奖励)
如果一个节点比其他节点更快地找到Hash值,整个交易集就会被打包进区块链中。
这样,打包的节点就获取了这笔奖励。
工作量分析
区块的Hash值以18个0开头。
Hash值是16进制的字符串,每位的取值范围为0-F,则为0的概率为1/16。
则连续18位都为0的概率为1/(16的18次方),即理论上要尝试Hash运算的次数为16的18次方。
这么大的计算量,需要投入非常大的计算设备,也需要消耗非常大的电力。
目前已经没有独立的矿工进行挖矿,因为可能几十年都没有办法计算出满足要求的Hash值。
现在基本都是矿工联合起来,组成矿池进行挖矿。矿池中的矿工按照算力的百分比进行收益的分成。
从经济角度上,只要挖矿还有收益,总会有新的矿工加入来加剧竞争,提高算力的难度。
从而挖矿会消耗更多的算力和电力,这样相互作用,最终成本会接近收益。
总结:记账是要消耗资源的,因此比特币系统会奖励参与记账的人,同时引入工作量证明来解决记账冲突的问题。
4.4 以谁的账本为准?(共识机制)
第一个完成工作量证明的节点,优先拥有唯一的记账权,可以打包区块,从而获得奖励。
每个矿工都是独立的完成工作量证明,这样就会出现一种情况:
两个节点同时完成工作量证明,使用谁打包的区块?
比特币系统中,没有中心化的仲裁机构,无法通过仲裁裁决。
矿工之间怎么协商达成共识,让大家都去认可使用谁打包的区块?
比特币系统中,把这个问题称为共识机制。
为什么要遵守协议?
在经济生活中,每个人追求的是利益最大化
节点的工作量只有在其他节点认同的情况下,才是有效的:
新打包的区块,需要其他节点的验证,验证通过后才会加入区块链,
并在网络上传播,打包区块的节点也因此获得收益。
如果不遵守规则,打包的区块就不会被加入区块链,因此也无法获得收益。
因此节点会自发的遵守协议,共识也就是这样达成的。
累计工作量最大的区块链
如果两个节点同时完成了工作量证明,到底用谁的区块?
每个节点只认可累计工总量最大的区块链。
每个节点都是独立的,独立的去选择累计工作量最大的区块链,并去延长这条区块链。
共识机制最终的目的是,保证比特币在工作量最大的区块链上运转。
分叉
主链:包含最多区块的链
同一时刻,两个矿工各自求得了工作量证明的解,各自打了一个包(#3458A、#3458B),并在网络上广播。
每个收到有效区块的节点,都会把这个新区块拼接到主链中。
两个块在传播时,有些节点先收到#3458A,有些节点先收到#3458B,有些节点同时收到#3458A、#3458B。
收到#3458A的节点,会在主链上延长#3458A。
收到#3458B的节点,会在主链上延长#3458B。
同时收到#3458A、#3458B的节点,会对比这两个块,选择工作量更多的块延长主链。
另外一个链作为备用链保存,因为备用链可能因为后续产生更多的块,从而作为主链。
这样就产生了分叉。
分叉解决
收到#3458A区块的节点,会以#3458A作为父区块,在#3458A后打包。
收到#3458B区块的节点,会以#3458B作为父区块,在#3458B后打包。
这时两条链就产生了竞争,但总会有一方抢先发现工作量证明,然后把求解的区块传播出去。
比如以#3458B为父区块的节点,产生了#3459B,并传播出去。
则以#3458A作为父区块的节点,在收到#3458B、#3459B后,发现#3459B的链条更长,
则会舍弃#3458A所在的链,把#3459B所在的链作为主链。
这样分叉问题就解决了。
由于网络有不确定性,有时节点会先收到#3459B,并没有收到#3458B。
这时#3459B会作为孤块,被放在孤块池中。
一旦节点收到#3458B,就可以把这些块串起来。
比特币把区块间隔设计为10分钟,是对更快的交易确认、更低的分叉概率作出的妥协。
更短的区块产生间隔,会让交易更快的完成确认,但也会使分叉更加频繁。
更长的区块产生间隔,会降低分叉数量,但会使交易确认时间更久。
共识机制:采用工作量最大的链作为主链。
完整的工作量机制:工作量证明+最长链的选择。