日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fabric 转账_Fabric 学习笔记-架构初探

發(fā)布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fabric 转账_Fabric 学习笔记-架构初探 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文介紹了Fabric的架構(gòu),以及通過一個簡單的Demo來熟悉整個交易流程。

Hyperledger fabric V1.0的架構(gòu)

如下圖所示:

application提供各種語言的SDK接口。

membership也就是fabric-ca提供成員服務(wù),用來管理身份,提供授權(quán)和認(rèn)證。

peer負(fù)責(zé)模擬交易和記賬

  • Endorser(背書)用來當(dāng)peer執(zhí)行一個交易以后返回yes/no。
  • Committer將驗(yàn)證過的區(qū)塊追加到通道上各個賬本的副本。
  • Ledger就是賬本啦。
  • Chaincode用來編寫業(yè)務(wù)邏輯,交易指令用來修改資產(chǎn),可以理解為 fabric 網(wǎng)絡(luò)對外提供的一個交互接口(智能合約)。
  • Event是fabric提供的一個事件框架,比如鏈代碼事件,拒絕事件,注冊事件等,在編寫代碼的時候可以訂閱這些事件來實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。

o-service用來實(shí)現(xiàn)共識。

交易流程

交易過程如下圖所示:

  • Application向一個或多個peer節(jié)點(diǎn)發(fā)送對交易的背書請求。
  • Peer的endorse執(zhí)行背書,但并不將結(jié)果提交到本地賬本,只是將結(jié)果返回給應(yīng)用。
  • 應(yīng)用收集所有背書節(jié)點(diǎn)的結(jié)果后,將結(jié)果廣播給orderers,orderers執(zhí)行共識,生成block,通過消息通道批量的將block發(fā)布給peer節(jié)點(diǎn),更新lerdger。

可以看一下下面這張圖,一樣的過程,更加突出了多個peer背書的過程。

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

channel是構(gòu)建在Fabric網(wǎng)絡(luò)上的私有區(qū)塊鏈,實(shí)現(xiàn)了數(shù)據(jù)的隔離和保密。channel是由特定的peer所共享的,并且交易方必須通過該通道的正確驗(yàn)證才能與賬本進(jìn)行交互。

如下圖所示:

可以看到不同顏色的channel隔離了不同的peer之間的通信。

構(gòu)建Fabric網(wǎng)絡(luò)

Fabric提供了一個first-network的demo來學(xué)習(xí)整個流程。

first-network有兩個組織,每個組織各有兩個個peer節(jié)點(diǎn),以及一個排序服務(wù)。兩個peer節(jié)點(diǎn)無法達(dá)成共識,三個peer節(jié)點(diǎn)無法容錯,四個peer節(jié)點(diǎn)剛好完成演示。

Demo啟動以后會自動完成一筆轉(zhuǎn)賬,并且打印出整個操作過程。

啟動網(wǎng)絡(luò)以后可以看到非常多的日志,這里我們只追蹤關(guān)鍵步驟。

... ########################################################## ######### 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 ...

可以看到,在轉(zhuǎn)賬之前首先進(jìn)行了fabric網(wǎng)絡(luò)的初始化過程,創(chuàng)建了創(chuàng)世區(qū)塊,配置了channel和生成了membership(MSP)身份服務(wù)。

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

接著可以看到在轉(zhuǎn)賬前首先創(chuàng)建了channel,其中包括了身份認(rèn)證的ca文件,key以及通信的socket信息和MSP的信息。

Attempting to Query PEER0 ...3 secs2018-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

接著在很不起眼的地方看到了上面這些日志,差點(diǎn)看瞎我~重點(diǎn)來了~

在轉(zhuǎn)賬之前使用默認(rèn)的ESCC(背書鏈碼),VSCC(驗(yàn)證鏈碼),以及自身的簽名查詢了Peer0得到余額是100。

2018-02-05 07:14:14.950 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK" > payload:"n 3703165...,k363_(n212027" > 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 =====================

調(diào)用鏈碼進(jìn)行轉(zhuǎn)賬操作,發(fā)現(xiàn)兩邊的狀態(tài)碼都是200表示轉(zhuǎn)賬成功,其中payload是發(fā)送轉(zhuǎn)賬的一些具體信息。

Attempting to Query PEER3 ...3 secs2018-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發(fā)現(xiàn)余額只有90了,這樣就完成了一個最小區(qū)塊鏈網(wǎng)絡(luò)的交易示例。

總結(jié)

以上是生活随笔為你收集整理的fabric 转账_Fabric 学习笔记-架构初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。