区块链-比特币
2018年区块链技术很火,每个投资人张口闭口都是区块链与人工智能,看来是时候了解一波区块链了,这周六参加了一次区块链里世界的技术沙龙,故将这几天对区块链的理解以文章的形式记录下来。
密码朋克(Cypherpunk)
- 智能合约概念的提出者:尼克萨博
- Facebook创始人:肖恩帕克
- 比特币的创始人:中本聪
- Adam Back发明了
Hashcash
,使用了POW
(工作量证明) - Haber/Stornetta 提出时间戳方法保证数字文件安全的协议
- 戴伟 发明了
B-money
,强调点对点交易和不可更改记录 - 哈尔-芬尼 推出了“加密现金”
- 2008年中本聪 《比特币:一个点对点的电子现金系统》
PS:比特币白皮书
区块链前景
-
资产
:数字资产发行,支付(跨境支付),交易,结算 -
记账
:股权交易,供应链金融,商业积分 -
不可篡改
:溯源,众筹,医疗证明,存在性证明 -
点对点
:共享经济,物联网 -
隐私
:匿名交易
比特币是什么
- 比特币是数字货币(存在于网络节点)
- 财产只受自己控制(去中心化)
- 无通胀(总共发行2100万个)
- 没有假钞(账本验证)
- 流通性好(点对点交易)
账本如果验证
Hash函数:
Hash(原始信息) = 摘要信息
PS:MD5也是Hash函数的一种
特点:
- 同样的原始信息用同一个哈希函数总能得到相同的摘要信息。
- 原始信息任何微小的变化都会哈希出面目全非的摘要信息。
- 从摘要信息无法逆向推算出原始信息。
区块
区块头: 1.序号,2.时间戳,3.Hash值..等
区块体: 交易记录(1.付款方,2.收款方,3.金额)。
那么账本是怎么来进行验证的呢?
通过上面关于Hash
函数以及区块的包含内容的讲解,我们可以推算一下。
比如这里有一个账本A,我们通过Hash
交易的内容得到一个摘要信息(我们这里称它为Hash值
)。然后再将Hash值
,账本序号
以及交易时间戳
存为区块头,将交易的内容
存为区块体。那么我们验证的时候通过Hash
区块的内容得到Hash值
与区块头里面的Hash
值进行校验就知道了账本的真实性。例如我们有账本A下一个链的账本B,它的Hash值
运算是将上个链(账本A)的Hash值
与账本B的交易内容
进行Hash
,得到Hash值
存入区块头,这样我们验证的时候验证了账本B,同时可以验证到账本A的Hash值
的正确性,如此链接下去,每次我们验证只需要验证区块链的最后一个区块就能验证这个区块链的真实性。
账户所有权的问题
比特币的账户转账其实就是从一个地址
转到另外一个地址
。那么如果谁拥有了这个地址
就对这个账户有了操作权(就像我们的银行卡一样,当你拥有银行卡的卡号和密码就可以存取款,比特币的密码其实就是私钥)。
账户的密码 -> 私钥 私钥就是对地址进行非对称性加密(包括两次两次Hash)得来的
非对称加密技术(交易签名)
- 交易进行
Hash
得到摘要
hash('
{"付款地址":"xxxxxxxx",
"收款地址":"xxxxxxx",
"金额":"xx"
}') -> 摘要信息
- 用
私钥
对摘要
进行签名
#参数1为交易摘要
#参数2为私钥
#返回签名信息
sign("交易摘要","私钥") -> "签名信息"
- 对周围节点进行
广播
,让其进行验证
#参数1为签名信息
#参数2为付款方地址
#返回交易摘要
verify("签名信息","付款方地址") -> "交易摘要"
if(verify("签名信息","付款方地址"))
== hash('{"付款地址":"xxxxxxxx",
"收款地址":"xxxxxxx",
"金额":"xx"}')
# 写入账本(记账)
# 广播
else:
# donothing
为什么要记账(挖矿)
记账
其实就是Hash
打包的过程。它是需要消耗资源的,每次记账成功都会获得相对应的奖励。
记账规则:
- 一段时间内只有一个人可以记账成功
- 通过解决密码学难题(即
工作量证明
)竞争获得唯一记账权 - 通知其他节点复制记账结果
工作量证明
Hash(上一个Hash值,交易记录集) = Hash值
我们上面提到的账本记账方式
Hash(上一个Hash值,交易记录集,随机数) = Hash值(需要满足Hash值前几位都是0)比特币的记账方式
这里我们需要注意的是比特币的记账方式是我们上面提到的账本验证方式加入了随机数,使其Hash值满足一定的条件,这样其实同样加大了挖矿的难度。
交易记录集
- 收集广播中还没有被记录账本的交易
- 对每笔交易进行有效性验证
- 添加一笔给自己转账的交易
挖矿奖励
共识机制
用来解决两个节点同时完成工作量证明,使用谁的区块的问题(主要因为比特币是去中心化,所以并没有仲裁机构进行判断使用哪个节点来进行记账)。
共识机制特点:
- 遵守协议:节点工作量只有在其他的节点认同才是有效的。
- 累计工作量最大的区块链。
总结
通过以上的分析我们就可以知道,比特币通过区块来存储交易记录(账本),每隔十分钟,通过用户节点挖矿产生的新区块来保存新产生的交易记录(这里又会引入到工作量证明和共识机制),所有的区块串联起来形成区块链。所以区块链相当于一本分布式的账本。所有的区块以双向链表的方式链接起来,且每个区块都会保存其上一个区块的Hash值(这样区块之间的顺序一旦确定就无法更改)。下一节我们来讲讲以以太坊为原型的区块链2.0技术(涉及到智能合约与DAPP)。
网友评论