区块链原理和fabric概念介绍

一、区块链的基本原理
区块链包括三个基本概念:
1、交易(transaction):一次对账本的操作,导致账本状态的一次改变,如添加一次转账记录;
2、区块(block):记录一段时间内发生的所有交易和状态的结果,是对当前账本状态的一次共识;
3、链(chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。


二、Ledger-账本
账本是fabric中所有状态转换的记录,具有有序和防篡改的特点。
账本是由一条区块链构成的,并将不可变的、有序的记录存放在区块中;同时包含一个状态数据库来记录当前的fabric状态。每个通道中都各有一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的账本副本。


三、Chain-链
链是一个交易日志,它由哈希值链接的区块构造而成,每个区块中包含N个有序的交易。块头中包含了本区块所记录交易的哈希值,以及上一个区块头的哈希值。通过这种方式,账本中的所有交易都被有序的、加密的形式串联在一起。换言之,如果不破坏哈希链的话,是无法篡改账本数据的。

链被存放于节点的文件系统中(本地或者挂载),有效地支持着区块链工作量只能追加的特性。


四、State Database-状态数据库
账本的当前状态信息呈现,是链交易日志中记录过的所有键的最新值。由于当前状态表示的是通道已知的所有键的最新值,由此也常被称作世界状态。

链码调用基于当前的状态数据执行交易。为了使链码调用高效运行,所有键的最新值被存储在状态数据库中。状态数据库是链的交易日志的索引视图,因此它可以随时从链中重新导出。节点启动的时候,在接受交易之前,状态数据库将被自动恢复(或者根据需要产生)。


五、Transaction Flow - 交易流程
{
概括而言,交易流程由应用客户端发送给背书节点交易提案组成。背书节点验证客户端的签名,然后执行链码来模拟交易。产生的输出就是链码结果,一组链码读取的键值版本(读集合),和一组被写入的链码的键值集合(写集合)。交易提案的响应被发送回客户端,同时包含了背书签名。

客户端汇总所有的背书到一个交易有效载荷中,并将它广播到排序服务。排序服务将排好序的交易放入区块并发送到通道内的所有节点。

在提交之前,节点们会验证交易。首先它们会检查背书策略来保证足够的指定节点正确地对结果进行了签名,并且会认证交易有效载荷中的签名。

其次,节点们会对交易的读集合进行版本检查,从而保证数据的一致性并防范一些攻击,比如双花(双重支付,一笔钱花了两次)。
}

六、State Database options-状态数据库选项
状态数据库选项包括LevelDB和CouchDB(beta)。LevelDB是节点流程中集成的缺省键值状态数据库。CouchDB是可选的外部状态数据库。类似于LevelDB的键值库,CouchDB能存储任何链码中建模的二进制数据(CouchDB附件功能被内部用于非JSON格式的二进制数据)。但作为一个JSON格式文档库,当链码的数据(比如资产)以JSON格式建模时,CouchDB额外提供了许多针对链码数据的查询方式。

CouchDB作为独立的数据库进程跟节点一起运行,所以安装、管理和操作的时候需要一些额外的考虑。你可以尝试开始的时候用缺省集成的LevelDB,然后当你需要额外的复杂查询时再切换到CouchDB。将链码的资产数据以JSON格式建模是一个非常好的实践,这样有利于你将来进行复杂多样的查询

你可能感兴趣的:(区块链)