区块链技术+比特币 初识

—–比特币是什么

–区块链背景
密码朋克(Cypherpunk):一套加密的电子邮件系统。“密码朋克”是一个社区、更是一种精神
2008年中本聪:《比特币:一个点对点的电子现金系统》
比特币->区块链(一系列技术的集合)
前景:资产、记账、不可篡改、点对点、隐私

–货币历史
铜币、金银
银票
法币
银票和法币都是信用货币,本质类似是一张纸,本身没什么价值的,它的价值来源于我们对它的信任。

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分钟
是在更快的交易确认和更低的分叉概率做出的妥协

-更短的区块产生间隔会让交易更快的确认完成,但是也会更加频繁的产生分叉.
相对的是,长间隔减少的分叉数量,但是确实会导致长的确认时间

猜你喜欢

转载自blog.csdn.net/eebaicai/article/details/81453230
今日推荐