本文是参考资料1的学习记录。javascript
一样的商业参与方,并非脱媒的游戏java
共识(CONSENSUS)– 全部的参与方认同交易的有效性node
可证实性(PROVENANCE)– 每一个参与方了解资产从哪里来,其全部权是如
何改变的。python
永恒性(IMMUTABILITY)– 每一个参与方一旦交易被赞成发生则没法篡改。
若是交易是错误的,必须由新交易冲正并全可跟踪c++
权威性(FINALITY)– 只有一个地方来决定资产的归属权及交易的完整性。
这就是共享帐本的做用golang
超级帐本项目主要包括如下几个项目:web
hyperledger fabric。区块链技术实现项目,采用golang语言实现,是目前几个子项目中最成熟的。项目状态:active。算法
sawtoothlake。高度模块化分布式帐本平台,采用python实现。结合intel芯片功能,实现poet consensus,提供transaction template。docker
iroha。轻量级分布式帐本,侧重于在移动端。采用c++实现,实现sumeragi consensus。数据库
blockchain explorer。展现和查询区块链块、事务和相关数据的web应用。采用node.js实现,实际上是一个ui。
cello。Baas的工具集,帮助建立、管理、终止区块链。采用python、javascript实现。服务封装
支持多种底层架构,支持容器化,区块链即服务
fabric sdk项目。为开发者提供fabric的调用。
v0.6逻辑架构
v0.6网络结构
v0.6运行时架构
目标:可伸缩性、性能、安全隔离、可插拔性、可操做性。
新增功能:多通道、事务隔离(子帐本)、可插拔组件(db、ca、共识算法等)、更多类型chainCode。。。
1.0逻辑架构同0.6,可是网络拓扑图不同了。0.6版本至少须要4个validate point,而在1.0中进行了拆分。在原来的0.6中,进行vp节点的扩展是很困难的(缘由todo);而通过1.0拆分后,新加盟的联盟节点能够是endorse或commit,难度大大下降。以下图:
下图为两个版本的运行时架构区别。右侧是1.0中将原0.6的peer节点拆分红了几个逻辑单元。之后的图中,通常E表明Endorser,C表示Committer,O表明o-service
v1.0支持多链,链将参与者和数据(包含chaincode) 进行隔离。链=Peers + Ledger + Ordering Channel。一个Peer节点能够参与多个链,因此须要考虑按照什么业务逻辑去进行划分链。支持链的做用是,一部分数据的影响能够限制在本身的链中,而不影响其余数据。
Channel(通道)提供一种通信机制,将peer和orderer链接在一块儿, 造成一个个具备保密性的通信链路(虚拟)。Fabric的区块链网络缺省包含一个帐本(称为:系统帐本) 和一个通道。子帐本能够被建立, 并绑定到一个通道。
一次事务的执行:
transaction proposal.应用向一个或多个peer节点发送对事务的背书请求;
chaincode。 背书节点执行cc,但并不将结果提交到本地帐本,只是将结果返回给应用;
Endorse - Order - validate。应用收集全部背书节点的结果后,将结果广播给orderers。
store in ledger。Orderers执行共识工程,生成block,经过消息通道批量的将block发布给peer节点。
每一个ChainCode在部署时, 都需 要和背书(ESCC)和验证(VSCC)的系统ChainCode关联。ESCC决定如何对proposal进行背书;VSCC决定事务的有效性(包括背书的正确性)。
Block结构:文件系统存储。State状态: KV数据库维护。
推荐的运行模式,各个类型的节点统一运行在docker容器(轻量级容器)中,便于统一发布、部署。
chaincode是部署在fabric区块链网络节点上的一个接口的实现代码,是与fabric区块链交互的惟一渠道。cc是生成Transaction的惟一来源。
语言:go、java。推荐go,须要依赖shim模块。
两种运行模式:
通常模式,运行在docker容器中。开发调试繁琐。
开发模式,-peer-chaincodedev;运行在本地,开发调试较为容易。
p7 运行原理。开发注册过程,屡次与peer界面交互
transaction,一次chaincode函数的运行。world state:全部变量的值的集合
说明:world state能够用来存储真正的业务数据,包括存证信息、用户操做记录等;transaction能够用来执行用户的存证的流程,设置对应的state;
0.6底层采用的是kv,不支持table的操做,因此这类api有性能损失。注意接口中的参数广义适配性。
channel,通道、子链。同一peer能够加入不一样channel。cc操做基于channel进行。同一channel上的peer节点同步其上执行的结果。
endorser,模拟执行chaincode。分离计算任务,减轻consensus节点负担。支持endorsement policy。
orderer,对cc执行结果consensus。solo/kafaka/sbft
committer,将cc执行结果写入ledger。
区块链是一种容许网络成员查看记录的共享帐本技术。
Block ledger
File system based, only new Blocks appending。基于文件系统,只能添加新区块。
Blocks are stored on all committers and optional subset of ordering service nodes。在因此c节点存储,o节点也可能存储。
State ledger
World/Ledger state holds current value of smart contract data。世界状态反映了当前的合约状态,如vehicleOwner=Daisy
KVS hidden from developer by chaincode APIs
e.g. GetState(), PutState(), GetStateByRange(), etc...。经过cc api访问kv值。
Stored on all committers。全部c节点存储
History ledger
Holding historic sequence of all chain code transactions
e.g. updateOwner(from=John, to=Anthony); updateOwner (from=Anthony, to=Daisy);etc。全部cc事务
Stored on all committers
transaction事务是资产的转移操做。contract合约是事务发生的条件。
readwriteset的逻辑结构
Block{ Transac`ons [
{
"Id" : txUUID2
"Invoke" : “Method(arg1, arg2,..,argN)"
“TxRWSet" : [
{ ”Chaincode” : “ccId”
“Reads”:[{"key" : “key1", "version” : “v1” }]
“Writes”:[{"key" : “key1", ”value" : bytes1}]
} // end chaincode RWSet ] // end TxRWSet
}, // end transac`on with "Id" txUUID2
{ // another transac
on }, ] // end Transac
ons
}// end Block
1 machine fault
(1) Crash faults (CFT): A machine simply stops execuUon and halts,即简单的停机不响应。对应算法:Paxos, RAFT, Zookeeper AB,...
(2) Non-crash (a.k.a. ByzanUne) faults (BFT) .有内奸!可能会有做假节点
2 区块链的意义:从一个企业内的it治理建设,带到企业间的it治理建设。
3 分布式系统没有全局时钟
4 超级帐本与比特币、以太坊的不同之处:
(1)比特币会先记帐,那么有分叉的产生
(2)此处提出的算法,不是先记帐,而是先取得共识。共识的工做节点先作完该作的运算,而后你们比较结果,而后再把承认的结果写进帐本。不会产生分叉。
(3)此处的记帐节点,也是比较稳定的,可是同时须要注意,记帐的是一个节点集合,你们共同记帐。先对当前的操做集合的数量、内容、顺序达成一致,而后再同时记帐。由于以前的帐本一致,而本次的操做顺序也一致,那么新的状态必然一致。
(4)这里看,和咱们设计的随机记帐的方式还不大同样。
5 pbft其中存在一个validating leader,经过leader来协调你们的一直状态。
7 可能的影响一致性的因素
不肯定的value
leader选举
传输慢
从新配置困难
8 p16.endorsement policies:channel互不影响;ordering service排序是很重要的工做;加入一个odering节点很困难;新加入节点的时候,不是ordering节点则困难不大。
1 数字证书采用公钥体制:
数字证书是” 公钥+证书名称信息+签发机构对证书的数字签名” 、 匹配的私钥
数字证书听从X.509国际标准
2 由交易“提交方” 使用本身的“数字证书” 对每一个交易作 “数字签名” 来确保交易没法伪造
3 利用数字签名,伪造一个他人的单个交易很是困难,除非可以得到他人数字证书的私钥。分布式帐本能够防止以下类型的篡改:删除历史交易;伪造本身的历史交易。
4 对称加密和公钥加密
参考数据架构。这个一个过渡期的架构。