[toc]
- “链” 是信任的描点,所有的信任都来自于链。
- 有自己的沙盒执行环境(EVM)。
- solidity编写智能合约以及部署。
- 不会拆散了来用。
- 每个智能合约都能创建新的链,也可以和其他智能合约共用一个链。
- 使用了docker机制实现智能合约。
- 可以使用多个语言开发智能合约。(我们使用Go语言开发chaincode,node.js,vue.js)
- 身份管理
- 灵活性更高
- 更像一个区块链云服务平台,让用户方便的在基础平台上,使用各个模块创建一个一个的链(链码)进而实现一个一个的应用。
fabric是一个高度模块化和可配置架构(a,b,c),不同组块之间可插拔实现。
- 都是基于区块链技术实现的
- 比特币 1 秒 7 笔交易,以太坊 1 分钟几百笔,hyperledger 理论上一分钟 50 万笔交易
- hyperledger 因为不用挖矿,不需要很强的硬件支持,也不耗费资源
- hyperledger 没有 51% 攻击问题,加入链中的成员要经过 CA 认证,是有许可的网络
-
目标:做企业级
联盟链的基础设施
- 公有链:全网公开,没有类似 CA 的用户验证
- 联盟链:只针对某个特定群体的成员和有限的第三方,内部指定多个预选节点为记账人,每个块的生成由所有的预选节点共同决定
- 私有链:所有网络中的结点都掌握在一家机构手中
- 联盟链和私有链可统称为许可链
-
可插拔的共识机制(solo 和 kafka 等)
-
多链多通道隔离,可以做业务隔离,保护业务数据隐私
- fabric CA
- 自动生成认证证书
- 创建账户
- 是一个工具集
- fabric Peer
- 可以有很多 Peer,是 Ledger 和 blockchain 存储的位置
- 一个 peer 可以加入不同的 channel
- fabric ordering service
- 提供排序服务,用来做共识
- 创建 block 区块
- 使用 solo 排序,配置成使用 kafka 排序(优先状态机)
- 智能合约
- go
- java
- SDK
- java
- node.js(官方推荐,效率)
- go(大坑,支持是最差的)
- python
- 每个 channel 可以理解成独立的 fabric 实例
- 不同的 channel 是私有的子网,类似于微信群,隔离业务数据
- peer 是微信里的人,peer 可以加入不同的 channel
- 还可以设置允许什么人加入
- chaincode(链码) 就是智能合约,是一个应用程序
- 用于更新账本数据,由 peer 去执行 chaincode
- 在 fabric 里,chaincode 是数据唯一的更新方式
- chaincode 属于某一个 channel
- chaincode 的生命周期
- 安装链码
- 实例化(调用 init 方法)
- 调用使用(调用 invoke 方法)
- 每个 chaincode 有不同的背书策略(如何去达成共识)
- 可能有的 chaincode 是所有人都同意才可以
- 可能有的 chaincode 是至少有一个人同意才可以
- 可能有的 chaincode 是有 4 个人同意才可以
- 适应企业复杂应用场景
- 是一组重要的密码学签名工具
- 定义了你是谁,你在哪(在哪个 channel 中)
- CA 去颁发证书
- channel 数据通道,独立的 fabric 实例,不同 channel 数据是隔离的
- world state 是世界状态,是 ledger 里面存放的数据,是 KV(key-value)数据的存储,可以用 leveldb 和 couchdb 存储
- ledger:账本,记录当前所有的世界状态,从底层架构上保证了数据一致性,不可篡改性
- chaincode:链码,编写智能合约,ledger 的变化只能通过调用链码实现
- peer:是整个网络的基础,每一个 peer 的可以持有一个或多个 ledger,每一个 peer 也可以有一个或多个 chaincode
- network:是有 peer 组成的网络,形成区块链网络,在同一个网络中 peer 实现同步记账,保证了 peer 的数据一致性
- ordering service:排序服务,进行排序和验证,验证通过的数据,写入 peer 节点的 ledger,具体还要看背书策略
- msp:peer 节点的认证和标识