磨链(mochain)社区分享

磨链(mochain)社区-4.11分享-Fabric学习笔记-

2018-04-11  本文已影响30人  磨链社区

群内分享

1.浙大将开“区块链与数字货币”课程,注重“技术与实战” 

2.以太坊傻瓜教程如何创建私链? 

3.谈谈我所理解的区块链游戏 

4.案例|以钢铁行业为例,分享区块链在仓储领域的应用实践

Fabric 学习笔记-架构初探

作者-趣链科技-清源 

原文链接:https://zhuanlan.zhihu.com/p/35255567 

本文介绍了Fabric的架构,以及通过一个简单的Demo来熟悉整个交易流程。 

Hyperledger fabric V1.0的架构 

如下图所示: 

application提供各种语言的SDK接口。

membership也就是fabric-ca提供成员服务,用来管理身份,提供授权和认证。

peer负责模拟交易和记账

Endorser(背书)用来当peer执行一个交易以后返回yes/no。 

Committer将验证过的区块追加到通道上各个账本的副本。 

Ledger就是账本啦。 

Chaincode用来编写业务逻辑,交易指令用来修改资产,可以理解为 fabric 网络对外提供的一个交互接口(智能合约)。 

Event是fabric提供的一个事件框架,比如链代码事件,拒绝事件,注册事件等,在编写代码的时候可以订阅这些事件来实现自己的业务逻辑。

o-service用来实现共识。

交易流程

交易过程如下图所示: 

Application向一个或多个peer节点发送对交易的背书请求。

Peer的endorse执行背书,但并不将结果提交到本地账本,只是将结果返回给应用。

应用收集所有背书节点的结果后,将结果广播给orderers,orderers执行共识,生成block,通过消息通道批量的将block发布给peer节点,更新lerdger。

可以看一下下面这张图,一样的过程,更加突出了多个peer背书的过程。 

在介绍一下在交易过程中扮演重要角色的channel 

channel是构建在Fabric网络上的私有区块链,实现了数据的隔离和保密。channel是由特定的peer所共享的,并且交易方必须通过该通道的正确验证才能与账本进行交互。 

如下图所示: 

可以看到不同颜色的channel隔离了不同的peer之间的通信。

构建Fabric网络 

Fabric提供了一个first-network的demo来学习整个流程。 

first-network有两个组织,每个组织各有两个个peer节点,以及一个排序服务。两个peer节点无法达成共识,三个peer节点无法容错,四个peer节点刚好完成演示。 

Demo启动以后会自动完成一笔转账,并且打印出整个操作过程。 

启动网络以后可以看到非常多的日志,这里我们只追踪关键步骤。

...

##########################################################

#########  Generating Orderer Genesis block ##############

##########################################################

2018-02-05 15:13:08.760 CST [common/configtx/tool] main -> INFO 001 Loading configuration

2018-02-05 15:13:08.816 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block

2018-02-05 15:13:08.819 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################

### Generating channel configuration transaction 'channel.tx' ###

#################################################################

2018-02-05 15:13:08.845 CST [common/configtx/tool] main -> INFO 001 Loading configuration

2018-02-05 15:13:08.849 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx

2018-02-05 15:13:08.850 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################

#######    Generating anchor peer update for Org1MSP  ##########

#################################################################

2018-02-05 15:13:08.876 CST [common/configtx/tool] main -> INFO 001 Loading configuration

2018-02-05 15:13:08.880 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update

2018-02-05 15:13:08.881 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

...

可以看到,在转账之前首先进行了fabric网络的初始化过程,创建了创世区块,配置了channel和生成了membership(MSP)身份服务。

Channel name : mychannel

Creating channel...

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key

CORE_PEER_LOCALMSPID=Org1MSP

CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock

CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt

CORE_PEER_TLS_ENABLED=true

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

CORE_PEER_ID=cli

CORE_LOGGING_LEVEL=DEBUG

CORE_PEER_ADDRESS=peer0.org1.example.com:7051

2018-02-05 07:13:13.382 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP

2018-02-05 07:13:13.382 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity

2018-02-05 07:13:13.406 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized

2018-02-05 07:13:13.409 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP

dd

接着可以看到在转账前首先创建了channel,其中包括了身份认证的ca文件,key以及通信的socket信息和MSP的信息。

Attempting to Query PEER0 ...3 secs

2018-02-05 07:13:55.998 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP

2018-02-05 07:13:55.998 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity

2018-02-05 07:13:55.998 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc

2018-02-05 07:13:55.998 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc

2018-02-05 07:13:55.999 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08B388E0D30510...6D7963631A0A0A0571756572790A0161

2018-02-05 07:13:55.999 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: D6BB27BAC40E5A58ED3CF0AFB147280B60E305053D9B97A38461A398736ED7C7

Query Result: 100

接着在很不起眼的地方看到了上面这些日志,差点看瞎我~重点来了~

在转账之前使用默认的ESCC(背书链码),VSCC(验证链码),以及自身的签名查询了Peer0得到余额是100。

2018-02-05 07:14:14.950 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 009 ESCC invoke result: version:1 response: payload:"\n \370\316\5...,k\363_(\n\212\027" >

2018-02-05 07:14:14.952 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 00a Chaincode invoke successful. result: status:200

2018-02-05 07:14:14.953 UTC [main] main -> INFO 00b Exiting.....

===================== Invoke transaction on PEER0 on channel 'mychannel' is successful =====================

调用链码进行转账操作,发现两边的状态码都是200表示转账成功,其中payload是发送转账的一些具体信息。

Attempting to Query PEER3 ...3 secs

2018-02-05 07:14:18.566 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP

2018-02-05 07:14:18.566 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity

2018-02-05 07:14:18.566 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc

2018-02-05 07:14:18.566 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc

2018-02-05 07:14:18.567 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08CA88E0D30510...6D7963631A0A0A0571756572790A0161

2018-02-05 07:14:18.567 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 9E93A6D0549C627788C5074633DE28C9D08F36A4763EFF55479613B2DD32CADB

Query Result: 90

2018-02-05 07:14:37.014 UTC [main] main -> INFO 007 Exiting.....

最后查询Peer3发现余额只有90了,这样就完成了一个最小区块链网络的交易示例。

群内讨论

群内线下活动:

磨链线下聚会-北京 4.15号 下午14:00 

地址:北京中关村 3W咖啡 

分享内容: 

1.北京单向科技 李强:白话DAG : 新一代区块链3.0前沿技术。

磨链线下聚会-深圳 4.21号 下午14:00 

地址:深圳南山区蛇口海上世界海景广场15E 牵牛投资俱乐部 

分享内容: 

1、陈日红 资深区块链开发 比特币技术原理分享 

2、南瓜地 区块链技术爱好者 区块链学习之路

磨链(mochain)计划各学习小组动态

磨链(mochain)学习小组清单

PS:想加入学习小组,请加磨链组织者微信(jackyjin09)。欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术

关于磨链和相关合作

磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。 

磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。 

你可以在这里找到我们: 

磨链社区公众号: 

1. 磨链社区:http://mochain.info 

2. Github : https://github.com/mochain 

3. Gitter 聊天: https://gitter.im/mochain 

4. 知识星球: https://t.zsxq.com/M3BMVZN 

5. 知乎:https://www.zhihu.com/people/mochain 

(持续更新中)

上一篇下一篇

猜你喜欢

热点阅读