区块链概念简介

Posted Babyface Killer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链概念简介相关的知识,希望对你有一定的参考价值。

写在前面的话

最近加密货币正处在风口浪尖,以比特币为首的各种加密货币行情跌宕起伏。那么加密货币背后的区块链技术到底是什么原理,作为一个新兴的小众技术为什么会受到这么多人的追捧呢?作者最近正好也在对该领域进行学习,那么我就以一个初学者的视角来简单地解释一下我理解的加密货币和区块链技术。

区块链

去中心化(Decentralization)

首先我们来看上面这张图,左边是传统的银行机构(Centralized Ledger),每个银行的支行会把自己的数据汇总起来并且由一个中心化的机构管理和保存。这样做的好处是当客户遇到需要人工处理的事件,比如忘记银行卡密码,给骗子转帐等行为,中心化的机构可以处理类似的事件只要客户可以证明自己的身份。而右边就是一个去中心化的结构(Decentralized Ledger),也就是区块链的概念。在这个结构中每个用户(Peer)之间可以互相连通并且每个用户都有查看,验证所有转账记录的权限。也就是说在区块链网络中没有人来收集每个用户的信息,处理每个用户的紧急事件,管理所有用户的数据,所有人都拥有同等的权力同时也意味着所有人的权力都在去中心化的网络中被最小化。那么我们为什么需要去中心化呢?在Satoshi Nakamoto本人的论文中Ta是这样说的:“The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous.” 简单来说呢就是这个去中心化的系统在保证最大化透明度的基础上同时也最大限度地保留了隐私,而这个特质对于所有需要公平公正的系统都是非常关键的。我最先想到的一个例子就是刚刚结束的美国大选,在川普坚持计票舞弊的情况下由于没有直接证据所以并没有能推翻选举结果的能力。但如果区块链技术被用于投票,那么每一票都是公正公开,虽然所有人都可见但所有投票人的隐私也被保护了起来,这就是去中心化带来的好处。

区块链是怎么工作的


上面这张图展示了使用加密货币交易的过程。如果Alice想付款给Bob,那么在此次交易中Alice拥有的加密货币会被分为两部分,一部分会转给她的收款人Bob,而余下的部分会再次转给她自己。为什么会这样呢?难道Alice不能像微信支付一样输入付款金额吗?其实这是由区块链区块链的特性决定的。下图中每个block都代表一次交易,而每一个block都有一个previous block hash指向之前的block,也就是说Alice的每一次新交易都会指向之前她为收款人的交易,这样才能保证Alice是在使用她拥有的加密货币。在区块链中每一笔交易都需要进行验证,只有验证成功的交易才会被附加在区块链的最末端,也就是说随着交易的增加区块链会越变越长。那么区块链是怎么验证每笔交易的呢?其实这个验证过程就是经常被人所提到的“挖矿”。这个验证过程叫做Proof-of-Work,这个过程通过使用大量的算力计算出一个前端具有n个0的hash(n越大需要的算力越多计算时间越长),最先解开这个hash的验证者会把这个block附加在区块链的末端并获得一定的货币作为奖励。这时可能有读者会问,为什么不把这个hash的验证设置的简单一点,这样每个人获得奖励的几率就更大了。回答这个问题就需要涉及到区块链中防止欺诈的问题。

Double-Spend-Fraud

从上面的介绍我们了解到区块链是一个网络,每个用户是一个结点,每个结点都有一条完整复制的区块链。但在网络中由于传输速度的限制,先发生的交易可能并不一定是先到达验证程序的交易,这就有可能导致Double-Spend-Fraud。举例来说,假设Alice目前只有一个加密货币,Alice使用它购买了一本书,但立刻又把这一个加密货币转给了自己。对于网络中的某些结点先到达的交易是购买书,而另一些结点先到达的交易则是转给自己,这就是Double-Spend-Fraud。区块链解决这个问题的方式也很简单,首先因为区块链在网络中是可传播的,验证了Alice购买书的结点和离它最近的结点会保存对应的区块链,而验证了Alice支付给自己的结点和离它最近的结点也会保存对应的区块链,这就导致了整个网络的分割。但是当下一笔交易发生的时候,最先验证的结点会把新的交易添加到区块链尾端,而这时在区块链网络中就会出现一条最长的区块链,于是区块链网络中所有的结点都会更新为最长区块链。也就是说如果区块链中Alice买书的结点首先验证了一笔新交易,那么Alice买书这笔交易就会通过,而Alice转给自己的这笔交易就会被退回。现在回到之前的问题,为什么验证过程不设计得简单一点?试想如果验证过程设计得过于简单,那么拥有大量算力的用户可以保证自己每次都会首先完成验证,于是该用户就可以控制区块链从而实现欺诈。正是因为验证过程的复杂度才能保证首先完成验证的用户拥有随机性,从而防止欺诈的发生。

示例

在这一部分,我将使用一个Github上的开源项目来简单展示一下区块链的工作过程。(项目地址:https://github.com/dvf/blockchain)
使用Node1进行验证动作来获得货币:

进行交易:

进行验证动作并把之前的交易添加在区块链末端:

打印Node1当前的保存的区块链:


“chain”: [

“index”: 1,
“previous_hash”: “1”,
“proof”: 100,
“timestamp”: 1621741303.761032,
“transactions”: []
,

“index”: 2,
“previous_hash”: “22fd35b79134fc0622c5eae1f92afc59275f72db220187029c376299d1099f90”,
“proof”: 133722,
“timestamp”: 1621741322.1026309,
“transactions”: [

“amount”: 1, (进行验证获得的货币)
“recipient”: “351f3c07e7064435b529d31468a37201”, (Node1的地址)
“sender”: “0”

]
,

“index”: 3,
“previous_hash”: “0ee87cfc58f7b6bc624a9448b2ce0178f497fdcb68c9d18efe5d3c2c211a5ff1”,
“proof”: 81350,
“timestamp”: 1621741616.5367422,
“transactions”: [

“amount”: 1, (Node1交易的货币)
“recipient”: “0db479e0c65b45dda3c9560dc563dff2”,
“sender”: “351f3c07e7064435b529d31468a37201” (Node1的地址)
,

“amount”: 1, (进行验证获得的货币)
“recipient”: “351f3c07e7064435b529d31468a37201”, (Node1的地址)
“sender”: “0”

]

],
“length”: 3

同样的流程我们再对Node2重复一次,不过这一次Node2会进行重复的验证动作来保证Node2中保存的区块链比Node1中保存的区块链长。
在Node1和Node2的网络中注册对方:


使用Node2重复之前Node1的动作但是进行重复的验证动作使Node2保存的区块链比Node1中保存的长。Node2中保存的区块链:


“chain”: [

“index”: 1,
“previous_hash”: “1”,
“proof”: 100,
“timestamp”: 1621742121.2931519,
“transactions”: []
,

“index”: 2,
“previous_hash”: “0c67c79d57c68179f2cf17824a32815df5ea858ac5525fc8f02ef4c48a21db9d”,
“proof”: 116203,
“timestamp”: 1621742307.047818,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 3,
“previous_hash”: “59418d6f135de8b714b50232309a63d72b68426667cdb61771a601161b0eab71”,
“proof”: 133214,
“timestamp”: 1621742381.4947221,
“transactions”: [

“amount”: 1,
“recipient”: “aae141f3eaa341d2bcd4fadff40743da”,
“sender”: “7bcf88769142472a8264df96e51c7aa8”
,

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 4,
“previous_hash”: “9b82c4bf56747cc5fa833a550714bed10af994ffee4451ded33e403e3366baf3”,
“proof”: 24257,
“timestamp”: 1621742386.0482128,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 5,
“previous_hash”: “cef2eb276e551c1219252d745150c92ad16320e3fc27fa980314ab7dc282245b”,
“proof”: 207662,
“timestamp”: 1621742388.5701747,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 6,
“previous_hash”: “b94c91c54836466132fa878822eab6306949ebeaf8bd88cc21a60a152aecc3c7”,
“proof”: 104412,
“timestamp”: 1621742390.2560227,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]

],
“length”: 6

此时Node1和Node2中保存的区块链不一样长,根据之前介绍的区块链机制,短的区块链会被长的区块链替代,我们来看看是不是这样:


“message”: “Our chain was replaced”,
“new_chain”: [

“index”: 1,
“previous_hash”: “1”,
“proof”: 100,
“timestamp”: 1621742121.2931519,
“transactions”: []
,

“index”: 2,
“previous_hash”: “0c67c79d57c68179f2cf17824a32815df5ea858ac5525fc8f02ef4c48a21db9d”,
“proof”: 116203,
“timestamp”: 1621742307.047818,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 3,
“previous_hash”: “59418d6f135de8b714b50232309a63d72b68426667cdb61771a601161b0eab71”,
“proof”: 133214,
“timestamp”: 1621742381.4947221,
“transactions”: [

“amount”: 1,
“recipient”: “aae141f3eaa341d2bcd4fadff40743da”,
“sender”: “7bcf88769142472a8264df96e51c7aa8”
,

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 4,
“previous_hash”: “9b82c4bf56747cc5fa833a550714bed10af994ffee4451ded33e403e3366baf3”,
“proof”: 24257,
“timestamp”: 1621742386.0482128,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 5,
“previous_hash”: “cef2eb276e551c1219252d745150c92ad16320e3fc27fa980314ab7dc282245b”,
“proof”: 207662,
“timestamp”: 1621742388.5701747,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]
,

“index”: 6,
“previous_hash”: “b94c91c54836466132fa878822eab6306949ebeaf8bd88cc21a60a152aecc3c7”,
“proof”: 104412,
“timestamp”: 1621742390.2560227,
“transactions”: [

“amount”: 1,
“recipient”: “7bcf88769142472a8264df96e51c7aa8”,
“sender”: “0”

]

]

正如前面所介绍的,在同一个网络中的结点会使用较长的区块链来替代自己较短的区块链从而保证网络中的信息一致性。
对区块链的简单介绍就到这里了,对区块链感兴趣的读者欢迎和我交流,随着以后自己学习的深入我也会多分享自己的理解。

写在最后的话

各位读者如果对本文有任何意见和建议请在评论区留言
转载请注明出处

以上是关于区块链概念简介的主要内容,如果未能解决你的问题,请参考以下文章

区块链概念简介

区块链概念简介

区块链及智能合约简介&安全相关介绍-1-区块链概念

区块链 智能合约安全 重入攻击(re-entrancy attack)DAO incident

区块链入门的几个简单概念

区块链区块链技术学习总结