–区块链背景
在这些前提铺垫下:
2008年中本聪推出了:《比特币:一个点对点的电子现金系统》
比特币 --> 区块链(一系列技术的集合)
发现比特币的底层技术不仅仅可以用于数字货币,还可以应用到其他的领域
将比特币的底层技术
,比如:工作量证明,点对点的网络,加密技术,时间戳方法等等,综合提炼起来
,提出了区块链
的概念,可见区块链不是一个单一的技术,是一系列技术的集合
为啥叫区块链,因为比特币系统
里面的数据是通过区块存储
的,并且通过hash的方式,把一个个区块连接
起来,这样就形成了区块的链条
,所以称为区块链.
前景:资产、记账、不可篡改、点对点、隐私
–货币历史
铜币、金银
银票
法币
银票和法币都是信用货币,本质类似是一张纸,本身没什么价值的,它的价值来源于我们对它的信任。
回归正题,总结一下比特币概念
1> 数字货币
一串数字作为货币,它就有价值来源于大家的信任。在区块链里面称为共识。
–信任从何而来
比特币特点: 财产只受自己控制 无通胀(总量是不变的,2千100万个) 无假钞 流通性好
2> 去中心化的记账系统
–账本如何验证?(验证哪个账本是有效的)
–所有权问题?(如何来证明谁拥有这个货币)
–为什么参与记账?(挖矿)
–以谁的账本为准? (共识机制)
–账本如何验证?(验证哪个账本是有效的)
方案1:
核对账本记录,少数服从多数 (每次海量比较,效率低下,no)
–在中心化的系统中,存储的数据是什么,就是最终的结果,如果数据被篡改,是基本上没法验证.因为只有一方拥有数据,其他人没法证明数据有效性.
比特币方案:
1> Hash函数
哈希函数:hash(原始信息) = 摘要信息 或者说 把复杂的数字映射成简单的数字 特点:
同样的原始信息用同一个哈希函数总能得到相同的摘要信息\ 原始信息任何微小的变化都会哈希出面目全非的摘要信息
从摘要信息无法逆向推算出原始信息–所以 hash(账本信息) = 一串摘要信息(如:888888A) 对比摘要比原始信息高效的多.
2>区块
---------
| 序号 |
| 时间戳 |
| hash值 |
---------
| |
|交易记录|
| |
---------
这样的保存起来,叫区块,上面叫区块头
–此时来了另一个账本信息(这里暂时这样说,后面会说交易记录集)
hash(888888A,另一个账本信息) = 7776699B
如果进行对账,就对比第二个哈希值7776699B,如果对上了,说明第二个账本信息和第一个摘要信息888888A都是正确的(利用特点1,2)
同样,第一个摘要信息对了,说明上账本信息都是对的. 由此形成: 区块1<-区块2<-区块3<-区块4<-区块5<-区块6<-区块n
这样的结构成为区块链
?疑问:
??账本哪来??对账和谁对??怎么对??
–所有权问题?(如何来证明谁拥有这个货币)
比特币系统中
点对点交易,没有第三方参与(和银行交易不同)
账号->地址
{
“付款地址”:“54455d4ddsd1f1g”
“收款地址”:“eijsjng45221211”
“金额”:‘0.2btc’
}
谁能弄这个地址进行支付,谁就拥有了这个账号的所有权
密码->私钥
地址:54455d4ddsd1f1g
私钥:hdnsfnjgjgnsngdngnsgnhnhn21581sdsdf
hash(hash(fun(hdnsfnjgjgnsngdngnsgnhnhn21581sdsdf))) -> 54455d4ddsd1f1g
拥有私钥就可以用地址进行支付.
如何在不泄露私钥的情况下,证明我们拥有某个地址的私钥?
–非对称加密技术(交易签名) 交易进行hash得到摘要 用私钥对摘要进行签名
–签名过程 对交易记录进行hash运算,得摘要信息 hash(
{
“付款地址”:“54455d4ddsd1f1g”
“收款地址”:“eijsjng45221211”
“金额”:‘0.2btc’
} )
-> hgg455d66558 进行签名运算
-参数1为交易摘要
-参数2为私钥
-返回签名信息 sign(“hgg455d66558”,“hdnsfnjgjgnsngdngnsgnhnhn21581sdsdf”) -> “3245d5fegdfg”
–广播交易
包含 交易的原始信息和签名信息
–验证
其他节点收到信息后开始验证
-参数1为签名信息
-参数2为付款方地址
-返回交易摘要 verify(“3245d5fegdfg”,“54455d4ddsd1f1g”) -> hgg455d66558
if(verify("3245d5fegdfg","54455d4ddsd1f1g")==hash(交易信息)):
#写入账本
#广播
else:
#donothing
–其实签名和验证类似逆运算,把付款地址当作公钥
签名是加密过程,验证是解密过程.
??具体算法怎么实现??
-账本里面是没有个人隐私的,安全.
–为什么参与记账?(挖矿)
记账:hash打包过程 这样是要消耗资源的. 既然是要付出成本,节点为啥要参与记账呢?
所以在比特币系统里面,完成记账的节点是可以获得一点数量比特币奖励. 这个奖励就是比特币发行的过程.
每次记账是新发行一定数量的比特币到记账的地址.
–挖矿-工作量证明
这样的奖励就引起大家争相的记账,要用规则去限制,不然不出现记账不一致情况. 规则: 一段时间内只有一个人可以记账成功.
通过解决密码学难题(即工作量证明)竞争获得唯一记账权. 其他节点复制记账结果.-由于在解决密码学难题时候,有一定的随机性,而记账可以获得奖励,所以形象的把记账的过程称为挖矿
-工作量证明:
为了保证一段时间内,只有一个人可以记账,必须提高记账难度. hash(上一个hash值,交易记录集,随机数) = 0000adngngn
摘要应该是若干个0开头的,比特币现在是18个0开头.-交易记录集 收集广播中还没被记录账本的交易 \ 交易的有效性验证 (账本所有权和地址是否够余额)\ 添加一笔给自己转账的交易(挖矿奖励,12.5个比特币)
–如果一个节点比其他节点更快的找到hash值, 整个交易就会被打包成区块,进入到区块链中,打包的节点获得奖励.
工作量分析:
一个0:1/16 16次
2个0:16*16次
以此类推…
16^18次,非常消耗计算资源和电力.
-组成矿池进行挖矿.
–以谁的账本为准? (共识机制)
如果两个节点同时完成工作量证明,使用谁的区块?
比特币里面是无仲裁机构裁决的
如果都说用我的区块 \
矿工之间怎么协商一致,达成共识,都去认可用谁打包的区块
-共识机制
为什么要遵守协议(为啥要共识)?
不可以我用我打包的区块,你用你打包的区块?这是一个经济问题.
追求利益的最大化
节点工作量只有其他的节点认同其是有效的,所以要遵守协议.
–共识怎么达成?
1> 累计工作量最大的区块链
独立
延长最长链
-分叉解决
-比特币将区块间隔设置10分钟
是在更快的交易确认和更低的分叉概率做出的妥协
-更短的区块产生间隔会让交易更快的确认完成,但是也会更加频繁的产生分叉.
相对的是,长间隔减少的分叉数量,但是确实会导致长的确认时间