导语:本文比较详细的描述区块链利用分布式部署 P2P 网络和同步更新方式,以解决传统中心化网络部署方式所带来的众多问题。并且从技术角度,具体分析了如数字加密、P2P 网络等区块链的核心技术。
区块链的出现主要解决的是传统中心化网络部署方式所带来的众多问题,包括 :
1) 交易非公开化,中心节点掌握分布节点信息,分节点不掌握其他节点信息 ;
2) 系统安全性取决于中心节点安全性,中心节点存在道德风险,可利用大数据进行数据变现,存在隐私泄露风险 ;
3) 系统风险性随着网络规模扩大而上升 ;
4) 中心节点维护系统运行涉及较高成本等。
源于比特币,区块链利用分布式部署 P2P 网络和同步更新完成了对于以上问题的解决 :
1) 分布式方面:
区块链每个节点掌握各个节点信息,信息可以采用匿名化原则,但交易公开,且系统内交易批准取决于所有节点共识性原则,规则对于所有节点公平且强制,因此,随着网络规模扩大,系统风险性反而下降 ;
2) 同步更新方面:
由于每个节点都存有过去所去所有交易的历史记录,且每 10 分钟交易所组成的比邻区块之间存在逻辑嵌套关系,故随着时间推移,交易增多,每个节点内同步更新的链条愈发变长,愈发难以被篡改。
比特币完成了区块链「从 0 到 1」的诞生,比特币区块链交易简易流程:
1) 交易定义
公共钥匙加密 (PublicKeyCryptography)。比特币区块链 PKC 目前为每位网络参与者提供两把钥匙,一个为其他用户所知的公匙 (相当于用户用户名),一个只为用户自己所知的私匙 (相当于用户密码),任何有你公匙的参与者可以给你发送一条加密信息,该信息只有你可以读到。
使用私匙,发信人可以在加密信息中进行数字签名,向收信人证明发信人是你自己。KPC 采用椭圆不对称加密技术,安全性较强。
如何发送比特币 ? 例 : A 向比特币区块链网络中发送一条或多条信息, A 在信息中指名发送人和收件人的地址。对于每个收件人地址,A 指名发送的比特币数量。
A 在信息中利用私匙对信息进行数字签名,向收件人证明身份。信息发送后,A 等待比特币区块链网络对于信息进行验证和确认。
2) 单节点交易核查
A 的交易信息发送后,当比特币区块链网络内任一节点上的机器收到了信息,其开始做以下处理 :
检查该机器自身是否已经处理过此次交易 (确定交易唯一性); 检查交易涉及地址是否合法有效 ; 检查数字签名,以确保原发信者是 Input 地址合法有效的拥有者 ; 检查发件人这笔比特币有没有在别的地方被花费提取过 ; 检查发件人比特币数量至少是和收件人预收的比特币数量相同 (Input>Output,任何不同差额为手续费用)。
如果以上检查没有问题,节点将交易标注成有效,将其列入「未确认交易」名单。
然后将信息广播至网络内其它节点,网络内众节点开始对交易进行节点共识验证,并在网络中进行广播。进行单点验证的矿工可以获得一小部分比特币获得奖励。
3) 加入区块,区块创造
该笔交易被一个挖矿节点验证,验证成功后会被添加到区块中。每个节点要正确无误的给这十分钟的每一笔交易盖上时间戳并记入最新的区块中,所以每个区块包含过去十分钟的所有交易。
4) 节点共识验证
每个矿工节点需通过解 SHA256 的算法来竞争过去十分钟区块的合法记账权,并争取得到 12.5 个比特币的奖励 (该数量基本是每四年递减一半,目前已挖出 1600 万以上比特币)。
若一个矿工节点解开了这十分钟的 SHA256 难题,其将向全网公布其这十分钟区块记录的所有盖时间戳交易,并由全网其他矿工节点核对。
5) 区块成链
全网其他矿工节点核对该区块记账的正确性 (因为他们同时也在盖时间戳记账,只是没有竞争到合法区块记账权,因此无奖励),没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块单链,也就是比特币支付系统的总账—区块链。
一般来说,每一笔交易,必须经过六次区块确认,也就是六个十分钟共计 60 分钟,才能最终在区块链上被承认合法交易。
比特币区块链本身是一种全球分布式数据库,最大的特点是没有*管理员,因此无法被单一方所控制,但同时可以做到交易传输数据的可信性。
网络节点 (nodes) 为矿工,负责承载网络运输任务,同时其负责交易的验证以及信息记录储存。
个人用户,商家等可以通过钱包和交易所形式介入比特币区块链网络,但其不涉及区块链的交易验证和记录储存。
区块链核心技术之一:数字加密
比特币的所有权通过数字**、比特币地址和数字签名予以确认,比特币钱包中只有**,不包含比特币。
由于每笔交易需一个有效签名才能被处理存储,因此拥有**相当于拥有了帐户中比特币的所有和控制权。
公私钥为 1 对 1 成对出现,公钥相当于用户名,私钥相当于密码,私钥为随机生成的数字,通过不可逆椭圆曲线运算加密函数运算出公钥,公钥经过哈希函数运算得出一个比特币地址,可公开且分享。
区块链核心技术之二:P2P 网络
拥有去中心化、抗攻击、协助传输、韧性强的特点。
区块链核心技术之三:区块和链
挖矿流程 (1/2)
挖矿由矿工型节点共同参与,由于需要保证节点之间的同步,所以新区块的添加速度不能太快。
因为每个区块的后面,只能跟着一个区块,矿工永远只能在最新区块的后面,生成下一个区块。
因此若区块添加速度过快,就会出现刚刚同步了一个区块并准备基于其生成下一个区块,别的节点又有新区块生成的情况。因此比特币区块链白皮书协议中设置故意让添加新区块变得较困难—平均每 10 分钟,全网才能生成一个新区块。
需注意,这种产出速度并非由白皮书硬性命令规定,而是通过使海量计算成为得出有效 Hash 的先决条件,从而控制区块产生时间约为 10 分钟。
目标值 (TheTarget):
解密的过程为各个矿工在区块头所包含的叠加内容 (参见「区块头」部分) 基础上放置随机数字链 (工作量,ProofofWork),经过 SHA256 反复计算后达成目标值。
矿工解密运算 Hash 的有效性跟目标值密切相关,只有小于目标值的 Hash 才有效,不然则无效,必须重算。
每个区块头包含一个难度系数,此值决定了计算 Hash 难度。区块链协议规定,使用一个常量除以难度系数 (Target=TargetMax/Difficulty),可得到目标值。难度系数越大,目标值就越小。
随着全网算力提升,难度系数快速上升。例,第 10000 个区块难度系数为 14,484.16,而第 504,000 个区块难度系数已上升为 2,227,847,638,503.63。
为了将产出速率恒定在十分钟,比特币区块链白皮书内设计了难度系数的动态调节机制。难度系数每两周 ( 2016 个区块) 调整一次。
若 2 周内,区块平均生成速度是 8 分钟,就意味着比法定速度快了 20%,因此难度系数就要调高 20%; 若平均生成速度是 12 分钟,就意味着比法定速度慢了 20%,难度系数就要调低 20%。
随机数 (TheNonce):
随机数为只能使用一次的密码数字,若矿工通过哈希运算产生了一个大于目标数的哈希值,则其需选择随机值重新进行计算,直到找到小于或等于目标数的哈希值。
更具体和直接解释整个流程 (3) 挖矿流程 (2/2)
MerkleRoot 是区块头部分内的 Hash 值,代表了区块体部分内的所有交易。在比特币区块链中,每笔交易产生后,都已经被 Hash 成一段代码并广播给各节点。
在各节点的区块中,可能包含数百笔到数千笔的交易,因此,为节省储存空间并减少资源耗费,比特币区块链的设计原理採用 MerkleTree 机制,让这些数百到数千笔的交易 Hash 值经由两两一组形成一个新 Hash 值的方式,不断重複进行,直到最后产生一组最终的 Hash 值,也就是 MerkleTreeRoot,这个最终的 Hash 值便会被记录到 BlockHeader 中,只有 32 Bytes 的大小。
MerkleTree 机制可大幅减少资料传输量与运算资源消耗,验证时,只需验证这个 MerkleTree 的 Root 值即可。
分叉和六度认证
分叉 :
区块链中,每个子区块只有一个父区块,但当不同的矿工发现不同的区块时 (两个矿工同时解出了 SHA256 算法,并进行全网广播),会出现一个父区块暂时拥有很多子区块的情况,这种情况被称为分叉。
在任何区块里,第一条都没有转出地址,就是所谓的 CoinBase (挖矿交易),没有任何人付给矿工这笔钱,矿工只是理所应当的写上自己获得了 12.5 比特币。
若所有节点皆认可矿工这样写,则矿工得到该笔挖矿收入。不同的矿工在填写区块的时候,数据一定是不一样的,因为每个矿工的第一条肯定不一样,矿工只会把挖矿收入转入自己的地址。
所以比如说矿工 A 的 CoinBase 是「 A 获得了 12.5 比特币」,矿工 B 的 CoinBase 是 「 B 获得了 12.5 比特币」。
由于每个矿工的区块数据皆不同,所以他们解题得出的结果也是不一样的,都是正确答案,只是区块不同。
由于距离远近,不同的矿工看到这两个区块是有先后顺序的。通常情况下,矿工们会把自己先看到的区块复制过来,然后接着在这个区块后开始新挖矿工作。
从分叉的区块起,由于不同的矿工跟从了不同的区块,在分叉出来的两条不同链上,算力存在差别,形象地说,就是跟从两个链矿工的数量是不同的。
由于解题能力和矿工的数量成正比,因此两条链的增长速度也会不一样。一段时间后,总有一条链的长度要超过另一条。
当矿工发现全网有一条更长的链时,其就会抛弃他当前的链,把新的更长的链全部予以复制,在这条链的基础上继续挖矿。所有矿工都这样操作,这条链就成为了主链,分叉出来被抛弃掉的链就消失。
最终网络内只有一条链会被保留,成为真正账本,其他分链皆为无效。交易区块所引伸的区块「长度」越长 (包含算力越强),越不容易被网络内其他节点所改变或否认,一般来说一笔交易要经过 6 次确认才会被最终记录下来,「六级」是比特币用户所认可的最终确认等级。