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