chaincode:一种类似于智能合约的代码,通过执行这个代码与账本交互。chaincode存储在节点上
transaction:一次chaincode的运行过程
contract:满足某个条件下,将要运行的transaction
block ledger:区块账本
存储于文件系统中。 存储于peer中,部分存储于order中
state ledger:状态账本
存储于记账节点中。用户或者账户的状态,可以通过block
history ledger:历史交易信息。存储与levelDB可替换
主要是block ledger的索引
客户端发送请求给背书节点,背书模拟执行交易,整理出要读到哪些key和要写入哪些key。背书节点将处理结果发回给客户端,再通过order排序,然后发送给peer节点写入账本。
crash faults:因为宕机发生的错误。
non crash:非宕机造成的错误,恶意的节点,数据错误
CFT:可以容忍宕机,但不能容忍恶意节点 2F+1 性能好
BFT: 可以容忍恶意节点,3f+1 性能差
XFT: 可以容忍恶意节点,2f+1 好于BFT
分布的节点接受消息的顺序不同,可能造成结果不一致。 例如有100块钱,一个请求要求扣掉60,另一个要求扣掉80. 接收的顺序不同,会造成执行结果的差异。而造成无法进行共识。
多个节点选一个领袖,领袖来进行排序,保证执行的一致性。
事务或者执行程序的结果必须是确定的,相同的输入不能有不同的输出,才能保证一致性。(例如处理过程中涉及到了随机数)
fabirc1.0包含的节点
peer
endorsement peer 背书节点(做试运算节点,加快处理速度)
order 节点排序
cran提供(QQ:34429255):
chaincode里面可以查到某个值改变记录的tx_id,一个chaincode的多次写库tx_id是一样的..sdk里面可以根据tx_id查询相关的记录的.
fabric区块结构