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