本節分享有關拆超級帳本的概念以及體驗部署過程。
1、簡介
2、爲何用超級帳本?
- 會員衆多:包括Cisco、 IBM、 Intel、 J. P. Morgan、 荷蘭 銀行、 SWIFT 等。
- 擁抱監管和審查。
- 良好的擴展性,可插入各類功能模塊。
- 成員管理
- 身份管理
- 網絡隱私
- 保密和審查
- 智能合約
-
- JAVA
- GO
- NODEJS
- 其它
- 在fabric中成爲鏈碼
- 在沙箱中運行
- 鏈碼語言
- 支持事件
- 適合企業級應用
傳統的業務模型很難作到跨機構的交易被一個互信的機構監督執行。每一個交易方都有本身獨立的帳本。發生交易時各自更改,形成帳本同步的成本高昂且效率低下。僅有少數的中心繫統,因此商業網絡比較脆弱。fabric提供了受權維護帳本的機制,所以相對保證了數據的私密,公司做爲上市主體,以盈利爲目的,不可能全部的數據都公開。那麼超級帳本做爲聯盟鏈供企業使用比較合適。企業級區塊鏈四大平臺要素:1. 共享帳本 2. 共識 3. 隱私和保密 4. 智能合約。 當前公鏈好比以太坊eos等其它三點都能知足惟獨隱私無法保證,另外效率廣泛不高,沒有最終肯定性,又是被極客們主導的,不符合商業主流趨勢,從而也限制了企業性質的應用。html
企業級商用區塊鏈網絡比較適合使用聯盟鏈和許可制。這樣在一個限定的範圍內,只有受權的節點和用戶才能參與到交易和智能合約的執行中 來,而任何匿名節點或非受權用戶均被拒絕服務。從團體聯盟的角度 來看,這增長了區塊鏈網絡的安全可靠。 當前,在歐美主流的區塊鏈應用大部分是行業鏈或者是聯盟 鏈,也就是某一個行業的上下游,或者核心企業聯合 起來,一塊兒構建的半公開化的區塊 鏈。從這個角度講,超級帳本具有成爲將來最主要商用區塊鏈技術平臺的 潛力,值得技術開發人員花時間和精力進行學習和研究。
3、特性
- 用go語言開發
- 更適合聯盟鏈
- 須要在容器裏運行
- 應用場景: 構建 商品 溯源、 貿易 融資、 信用證、 供應 鏈 以及企業貸款
- 是對傳統區塊鏈模型的革新
- 提供 一個 針對 身份 識別、 可 審計、 隱私 安全 和 健壯 的 模型
- 可插拔的共識算法及共識模型
- 智能合約
4、安裝和調用
Fabric依賴docker容器, 所以須要先安裝和配置docker.(請參考docker的章節)
下載超級帳本源代碼
1.若是沒有安裝git則執行
sudo apt install git
2.經過git安裝
部署調用
- 下載Docker鏡像文件
-
- 進入目錄: cd fabric/ scripts
- 修改讀寫權限 chmod +x bootstrap.sh
- 改寫.sh文件
-
- 執行下載: ./bootstrap.sh
- 體驗部署過程
-
- 下載一個簡單的例子
-
- 進入目錄並執行
-
- cd fabric- samples/ basic-network docker-compose -f docker-compose.yml up -d
- 查看啓動的容器
-
- 會輸出如下內容: localhost: basic- network clarity$ docker ps CONTAINER ID IMAGE NAMES efddfbf4fc0a hyperledger/ fabric- peer: x86_ 64- 1. 0. 0 peer0. org1. example. com 606d13c1e7a2 hyperledger/ fabric- couchdb: x86_ 64- 1. 0. 0 couchdb d8c870db8634 hyperledger/ fabric- ca: x86_ 64- 1. 0. 0 ca. example. com c6f25a5e6fd6 hyperledger/ fabric- tools: x86_ 64- 1. 0. 0 cli a5f6331c5bc5 hyperledger/ fabric- orderer: x86_
- 建立通道,加入通道
-
-
加入 通道
peer channel join -b mychannel.block
-
建立通道
peer channel create -o orderer. example. com: 7050 -c mychannel -f /etc/ hyperledger/ configtx/ channel. tx
-
切換 環境 到 管理員 用戶 的 MSP, 進入 Peer 節點 容器 peer0. org1. example. com
docker exec -it -e "CORE_ PEER_ MSPCONFIGPATH=/ etc/ hyperledger/ msp/ users/ Admin@ org1. example. com/ msp" peer0. org1. example. com bash
-
退出 Peer 節點 容器
exit
-
進入 cli 容器 安裝 鏈 碼 和 實例 化
進入容器
docker exec -it cli/bin/bash
-
安裝鏈碼
實例化鏈碼
peer chaincode instantiate -o orderer. example. com: 7050 -C mychannel -n mycc -v v0 -c '{"Args":["init","a","100","b","200"]}'
-
鏈碼調用和查詢
peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":["query","a"]}'
-
-
模擬轉帳
從「 a」 轉移 10 到「 b」: peer chaincode invoke -C mychannel -n mycc -v v0 -c '{"Args":["invoke","a", "b"," 10"]}'
-
在分別查詢a和b的zhi
peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":[" query"," a"]}' peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":[" query"," b"]}'
- Fabric初體驗
-
-
配置bin目錄的path
爲了讓系統可以在任何地方識別bin裏的內容,須要配置path:
* 經過編輯器打開這個文件~/.bash_profile
* 添加一行export PATH=<上一步下載的路徑>/bin:$PATH
* 再執行source ~/.bash_profile讓配置生效
-
最後,該腳本會將
Docker Hub中的Hyperledger Fabric docker映像下載到本地Docker中,並將其標記爲「最新」。
注意:
若是出現這種錯誤:
解決方案是:
輸入docker ps -a列出全部運行中的容器
若是能搜索出容器,則執行docker ps -qa | xargs docker rm
而後再執行docker-compose -f docker-compose.yaml up -d
若是出現這個信息表示成功啓動了fabric網絡
-
下載hyperledger / fabric-samples 簽出適當的版本標籤
將指定版本的Hyperledger Fabric二進制文件和配置文件安裝到fabric-samples存儲庫的根目錄中
下載指定版本的Hyperledger Fabric docker鏡像
-
命令解析:
-
執行bootstrap.sh文件
該腳本將下載並提取設置網絡所需的全部特定於平臺的二進制文件,並將它們放入您在上面建立的目錄中。
其中bin目錄它包含了如下文件:
cryptogen,
configtxgen,
configtxlator,
peer,
orderer,
idemixgen, and
fabric-ca-client
- 部署網絡
-
-
配置環境變量
CORE_PEER_LOCALMSPID="Org1MSP"
-
建立通道和創世區塊
- 加入通道peer channel join -b mychannel.block
-
更新錨點
-
安裝鏈碼
全部準備完成以後,開始安裝鏈碼。
分別支持三種語言:
Golang
Node.js
Java
-
實例化鏈碼
Golang
Node.js
Java
-
調用鏈碼的函數
先查詢一下有多少值
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
而後轉帳一部分
最後再次查詢
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
會發現數值已經發生了變化,表示轉帳成功
-
定義錨點
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
- 根據配置生成加密相關的材料../bin/cryptogen generate --config=./crypto-config.yaml
- 進入目錄cd crypto-config
- 生成的材料會放到crypto-config文件夾裏,把當前的路徑導出成全局變量export FABRIC_CFG_PATH=$PWD
- 進入目錄cd fabric-samples/first-network
-
生成網絡組件./byfn.sh generate
這時會建立目錄crypto-config併產生一些文件, 包括公私鑰和證書等
-
構建網絡./byfn.sh up若是想用node生態使用./byfn.sh up -l node
這一步是建立鏈碼語言對應的鏡像
-
加密生成器
咱們將使用加密工具爲咱們的各類網絡實體生成加密材料(x509證書和簽名密鑰)。
這些證書表明身份,它們容許在咱們的實體進行通訊和交易時進行簽名/驗證身份驗證。
- 生成創世區塊文件../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
- 生成通道配置文件export CHANNEL_NAME=superchannel && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
- 啓動網絡docker-compose -f docker-compose-cli.yaml up -d
- 進入客戶端docker exec -it cli bash
- 開發應用
-
- 註冊以前先打開日誌docker logs -f ca.example.com
- 運行註冊腳本node enrollAdmin.js
- 應用開發模型