什么是区块链?
区块链是一个虚拟账本,每个记账明细记录就是一个区块。这些记录分发给网络中的每个人,可以读取和添加,但不能修改。你不能在CRUD中删除或更改它们。如果您想删除或更改它们,您可以添加一个新记录来抵消原始值。比如财务核算的时候,前面加一个“错借”的科目,后面再加一个“借”。比如上市公司经常发布季报修正,上个月盈利500万(国内某上市公司卖了一套房),次月发布公告,上个月盈利修正为300万。这和你说的差不多,像泼出去的水,收不回来,用橡皮擦也修改不了。在财务中,如果你想用SQL update修改数据库记录之类的记录,篡改财务账本就是犯罪。区块链中的街区是这样一个与前一个记录相联系的记录,就像幼儿园的孩子们手牵着手,互相盯着对方,就像一个联系列表,这样就没有人能篡改这个链条。当然,这种高度的序列化和事务ACID的序列化一样,造成了性能的限制,所以制约区块链广泛应用的一个瓶颈就是它的吞吐量和并发性能,这是它的高事务安全性造成的牺牲方面。
区块链实际上是一个高一致性的分布式交易数据库,维护着一个不断增长且有序的交易记录列表。其分布式事务实现不同于集中式数据库分布式事务实现,后者通常使用Paxos或Raft实现共识凝聚,最终将所有服务器节点的状态修改为一致状态;区块链的分布式交易机制也不同于传统的2PC两阶段交易机制,主要通过锁定交易参与者的资源来实现。区块链的交易机制非常类似于事件源的交易机制。区块链不仅保证了交易的高交易完整性,还结合或耦合了安全加密算法。这种一体化设计非常适合各种与货币相关的转账交易、智能合约或加密货币应用。
区块链中的每个块都包含一个头和一个体:
这些是每个块拥有的数据。此外,每个块都有开发者定义的最大字节数。当达到此最大值时,此数据块将被添加到区块链,并将创建新的数据块。
字组号
链中的每个块都有一个数字,代表该块在整个链中的位置。链中的第一个块有一个特殊的名字,它们被称为创世块,即起始块和创造块。
以前的块号PrevBlockHash
每个块在头中都有对前一个块的散列号的引用,这非常重要,因为这是区块链保持一致和控制不变性的方式。创世块没有什么可以参考前面的块,因为是第一块。
默克鲁特
MerkleRoot是块中所有事务的哈希结果。如果块内有任何更改,这个哈希值也会更改,并使已更改的块和下一个块无效。
现在你可以想:为什么这个字段叫MerkleRoot而不是blockHash?这是因为比特币使用Merkle树算法从块数据中生成哈希值。
目前
这是一个与区块开采过程相关的32位数字。这个数字仅用于查找匹配区块链难度的哈希值。
创造时间戳
这是块创建的时间戳。
数据
这是所有交易数据的保留位置。
混杂
哈希算法实际上取决于区块链的每个实现。比特币使用长度为256位的SHA-256(安全哈希算法)。
区块链
区块链通过prevBlockHash将块链接在一起:
MerkleRoot值由数据信息生成。如果有任何改变,merkleRoot也会改变,改变后的块链接到prevBlockHash的剩余块将不再有效。这就是为什么区块链是不可改变的。
就业证明
工作证明是区块链的一个重要特征,而且是必要的;在区块链经常提到的其他功能(如安全性)是次要的,有用但不是必需的。
在任何分类账中,顺序都是绝对必要的。一个人不能花没收到的钱,也不能花已经花了的钱。区块链交易(或区块链交易)必须有明确的顺序,不需要可信的第三方来协调顺序。这就是前面提到的分布式事务机制。如果事务是由来自世界各地的匿名参与者生成的,并且没有一个集中式的组织负责事务之间的排序(不同于集中式分布式事务数据库),但是事实确实需要排序,那么我们该怎么办?虽然一个事务(或块)可能包含时间戳,但是如何信任这些时间戳呢?
在分布式系统中无法将事件与时间点关联起来,这是一个尚未解决的问题。直到中本聪发明了区块链工作来证明这一解决方案,分散式账本才得以实现。
区块链的工作被证明是满足一定要求的阿沙-2散列值。这个值很难找到。困难在于哈希小于一个特定的数。数字越小,输入值越稀少,越难找到。它被称为“工作证明”,因为众所周知,具有这种哈希的值非常罕见,这意味着找到新的这种值需要大量的试错,也就是“工作”。这反过来意味着消耗“时间”。比特币的搜索难度是动态调整的,每十个钟平就能找到一个正确的哈希值。
也就是说,区块链没有办法决定谁能最快计算出哈希值(因为每个参与者的服务器时钟不可能像手表一样准确),所以如果延迟一段时间,比如10分钟,谁先算出谁赢,然后快速相乘,谁的链条越长越有优势。这是10分钟内可能有两个中奖者的附加判断条件。
事件追踪是区块链最方便有效的手段。首先用事件聚合的概念对系统建模,然后决定是否统一共享存储事件日志?还是复制事件日志?统一共享方式相对简单可行;但是,对于分布式存储,需要选择一个主节点来附加特殊的事件日志,以保证事件日志的顺序,其他节点会复制并保存这个新的事件日志备份。这样做的好处是没有单点集中的风险。在去单点中心化的方向上,区块链是更完美的实现。与其投入巨资建设数据中心或数据湖,不如通过区块链在全球范围内共享数据。