1. 程式人生 > >Hyperledger fablic 0.6 在centos7環境下的安裝與部署

Hyperledger fablic 0.6 在centos7環境下的安裝與部署

maker ber gin sudo 管理 lease nts eve blank

原文:http://blog.csdn.net/zhaoliang1131/article/details/54617274

Hyperledger Fabric超級賬本

項目約定共同遵守的 基本原則 為:重視模塊化設計,包括交易、合同、一致性、身份、存儲等技術場景;代碼可讀性,保障新功能和模塊都可以很容易添加和擴展;演化路線,隨著需求的深入和更多的應用場景,不斷增加和演化新的項目。


目錄

  • Hyperledger Fabric超級賬本
      • 目錄
      • 一安裝docker
      • 二安裝docker-compose
      • 三下載鏡像
      • 四安裝git
      • 五使用PBFT模式
      • 六開始部署chaincode
      • 七權限管理
      • 八超級賬本資源管理頁面


一、安裝docker

  • 執行代碼如下:
curl -sSL https://get.daocloud.io/docker | sh
  • 1
  • 1
  • 安裝完成後,查看安裝情況:
docker -v
  • 1
  • 1

技術分享

二、安裝docker-compose

先安裝Python-pip,具體安裝步奏如下:

  • 1.首先安裝epel擴展源:
sudo yum -y install epel-release
  • 1
  • 1
  • 2.然後安裝python-pip
sudo yum -y install python-pip
  • 1
  • 1
  • 3.安裝完成後,清除以下緩存 cache
sudo yum clean all
  • 1
  • 1

下面開始安裝Docker-compose

  • 1.安裝docker-compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 1
  • 1
chmod +x /usr/local/bin/docker-compose
  • 1
  • 1
  • 2.查看安裝情況:

技術分享

配置以下docker鏡像加速,目的是下載鏡像速度更快:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
  • 1
  • 1

重啟docker服務:

sudo service docker restart
  • 1
  • 1

三、下載鏡像

 docker pull hyperledger/fabric-peer:x86_64-0.6.1-preview   && docker pull hyperledger/fabric-membersrvc:x86_64-0.6.1-preview   && docker pull yeasy/blockchain-explorer:latest   && docker tag hyperledger/fabric-peer:x86_64-0.6.1-preview hyperledger/fabric-peer   && docker tag hyperledger/fabric-peer:x86_64-0.6.1-preview hyperledger/fabric-baseimage   && docker tag hyperledger/fabric-membersrvc:x86_64-0.6.1-preview hyperledger/fabric-membersrvc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 下載完成後,查看下載鏡像

技術分享

四、安裝git

1.安裝依賴包:

sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
  • 1
  • 1

2.下載Git源碼並解壓安裝:

$ wget https://github.com/git/git/archive/v2.3.0.zip
$ unzip v2.3.0.zip
$ cd git-2.3.0
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3.編譯安裝:

make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
  • 1
  • 2
  • 1
  • 2

4.修改環境變量:

sudo vim /etc/profile
然後在文件的最後一行,添加下面的內容,然後保存退出。
export PATH=/usr/local/git/bin:$PATH
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5.使用source命令立即保存:

source /etc/profile
  • 1
  • 1

6.查看版本

git version 
  • 1
  • 1

技術分享

五、使用PBFT模式

PBFT 是經典的分布式一致性算法,也是 hyperledger 目前最推薦的算法,該算法至少需要 4 個節點。

  • 1.首先,下載 Compose 模板文件。
git clone https://github.com/yeasy/docker-compose-files
  • 1
  • 1
  • 2.查看下載情況:

技術分享

  • 3.進入 hyperledger/0.6/pbft 目錄,查看包括若幹模板文件

技術分享

以下節點可以快速啟動的詳細情況:
4-peers.yml: 啟動 4 個 PBFT peer 節點。
4-peers-with-membersrvc.yml: 啟動 4 個 PBFT peer 節點 + 1 個 CA 節點,並啟用 CA 功能。
4-peers-with-explorer.yml: 啟動 4 個 PBFT peer 節點 + 1 個 Blockchain-explorer,可以通過 Web 界面監控集群狀態。
4-peers-with-membersrvc-explorer.yml: 啟動 4 個 PBFT peer 節點 + 1 個 CA 節點 + 1 個 Blockchain-explorer,並啟用 CA 功能。

  • 4.快速啟動一個 4 個 PBFT 節點+1 個 CA 節點 + 1 個 Blockchain-explorer,並啟用 CA 功能的集群:
docker-compose -f 4-peers-with-membersrvc-explorer.yml up
  • 1
  • 1

六、開始部署chaincode

  • 集群啟動後,進入一個 VP 節點。以 pbft 模式為例,節點名稱為 pbft_vp0_1
docker exec -it pbft_vp0_1 bash
  • 1
  • 1

技術分享

  • 部署example02
 peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c ‘{"Function":"init", "Args": ["a","100", "b", "200"]}‘
  • 1
  • 1

技術分享

  • 記錄到環境變量 CC_ID 中。
CC_ID="ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
  • 1
  • 1

技術分享

  • 查詢 chaincode
peer chaincode query -n ${CC_ID} -c ‘{"Function": "query", "Args": ["a"]}‘
  • 1
  • 1

技術分享

  • 調用 chaincode
peer chaincode invoke -n ${CC_ID} -c ‘{"Function": "invoke", "Args": ["a", "b", "10"]}‘
  • 1
  • 1

技術分享

  • 再次查詢a的值
peer chaincode query -n ${CC_ID} -c ‘{"Function": "query", "Args": ["a"]}‘
  • 1
  • 1

技術分享
到此已經完成超級賬本的 轉賬的實例,每轉一次,都會記錄一個塊。

七、權限管理

當啟用了權限管理後,首先需要登錄,例如以內置賬戶 jim 賬戶登錄。
登錄 vp0,並執行登錄命令。

docker exec -it pbft_vp0_1 bash
  • 1
  • 1

用內置jim賬戶登錄

peer network login jim
  • 1
  • 1

內置密碼為:

6avZQLwcUe9b
  • 1
  • 1

登錄情況如下圖:

技術分享

登錄成功後,以下為具體操作。

  • 首先部署交易資產
peer chaincode deploy -u jim -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c ‘{"Function":"init", "Args": ["a","100", "b", "200"]}‘
  • 1
  • 1

說明:部署時給a,b各初始值100 200

技術分享

部署之後會產生一個name 值為:

name:"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539" 
  • 1
  • 1

把name值 賦給變量 CC_ID

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539
  • 1
  • 1

查詢下賦值結果:

echo ${CC_ID}
  • 1
  • 1

技術分享

重要說明:部署成功後,會創建docker容器,創建docker容器會有延遲,所以有時查詢不出來,等創建好了,在查詢就可以啦。
可以看到創建了很多容器,如下圖:

技術分享

下面咱們來執行查詢操作試試,查下a的值:

peer chaincode query -u jim -n ${CC_ID} -c ‘{"Function": "query", "Args": ["a"]}‘
  • 1
  • 1

技術分享

查下b的值:

peer chaincode query -u jim -n ${CC_ID} -c ‘{"Function": "query", "Args": ["b"]}‘
  • 1
  • 1

技術分享

下面咱們來執行下 轉賬操作:
如:a向b轉賬10元

peer chaincode invoke -u jim -n ${CC_ID} -c ‘{"Function": "invoke", "Args": ["a", "b", "10"]}‘
  • 1
  • 1

技術分享

轉賬成功後,咱們來執行下查詢 a和b的值是多少:

peer chaincode query -u jim -n ${CC_ID} -c ‘{"Function": "query", "Args": ["b"]}‘
  • 1
  • 1

技術分享

peer chaincode query -u jim -n ${CC_ID} -c ‘{"Function": "query", "Args": ["a"]}‘
  • 1
  • 1

技術分享

權限管理能正確 轉賬查詢。

下面使用REST方式咱們來執行下查詢:

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539
  • 1
  • 1

用這個CC_ID來做查詢

POST  HOST:7050/chaincode
  • 1
  • 1

Request:

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
      },
      "ctorMsg": {
         "function":"query",
         "args":["a"]
      },
    "secureContext": "jim"
  },
  "id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

查詢a的值為:

技術分享

Request:

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
      },
      "ctorMsg": {
         "function":"query",
         "args":["b"]
      },
    "secureContext": "jim"
  },
  "id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

查詢b的值為:

技術分享

這時,a是145,b是155

  • 下面再執行以下 a向b轉賬35
{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
      },
      "ctorMsg": {
         "function":"invoke",
         "args":["a","b","35"]
      },
    "secureContext": "jim"
  },
  "id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如圖:

技術分享

下面執行 查詢 a,和 b的值,請求參數 如上,直接上圖啦。
a的值為 120

技術分享

b的值為180

技術分享

下面查詢以下區塊信息:

GET  HOST:7050/chain/blocks/2
  • 1
  • 1

Response:

{
  "transactions": [
    {
      "type": 2,
      "chaincodeID": "EoABNzhjYTMyZmMxMjlmMDExMjllMDEwYzM3YTc4ZDU2ODhiODEyNjY1NWI5NDU2MTNkMjFiMmM2MGJjYjNlMTFkYTFjZGViYTljMjM1NjNjMzhmYTQ3MTc3YWYwZGU2ZTNkOTRmNjc4MWQzMDlhMzBlN2QxOTBhNjU1NWU3YWU0ZWY=",
      "payload": "Cp0BCAESgwESgAE3OGNhMzJmYzEyOWYwMTEyOWUwMTBjMzdhNzhkNTY4OGI4MTI2NjU1Yjk0NTYxM2QyMWIyYzYwYmNiM2UxMWRhMWNkZWJhOWMyMzU2M2MzOGZhNDcxNzdhZjBkZTZlM2Q5NGY2NzgxZDMwOWEzMGU3ZDE5MGE2NTU1ZTdhZTRlZhoTCgZpbnZva2UKAWEKAWIKAzEwMA==",
      "txid": "8616608f-9762-44cc-bc09-ef93b88eb770",
      "timestamp": {
        "seconds": 1484792805,
        "nanos": 467224609
      },
      "nonce": "QTKtub7Nu/JJFXV5LhjcDYsxIViB27YF",
      "cert": "MIICQTCCAeegAwIBAgIQW9A+u+4IT7CRRcHJPxU1ZjAKBggqhkjOPQQDAzAxMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDDAKBgNVBAMTA3RjYTAeFw0xNzAxMTkwMjI0MjBaFw0xNzA0MTkwMjI0MjBaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEgMB4GA1UEAxMXVHJhbnNhY3Rpb24gQ2VydGlmaWNhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQylvGqiwlIwjfef1J0o+2lBPEs0PQc90mooN/iQeJesX3Gw7hvX51NQ0R9Azhs3HzqwDT6/0oUJ5881BGCGufjo4HMMIHJMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwTQYGKgMEBQYHAQH/BEArLNyVnxK3ZTvPvUStqnu90Soz7fkorQD0znFSKd32vwi8nVzKPLKuziDfULFQskeHV7UAVL28xjKPXjpa4tOUMDoGBioDBAUGCAQwdCe6zf7KXUkQavqTErscZyXjnx3YI1QbmuNIiYXptTkzhPCI+tKPa5nMxwlBbqbNMAoGCCqGSM49BAMDA0gAMEUCIQC/tJPRxcPq4l4F3hWoLT6OWO5f1A9HG1aPyurduM4oowIgbTibDjL98J7Dt7fw3TBCMVBSDska9FwlddqdSE/3bWA=",
      "signature": "MEUCIQCTxcHIu3kL5AuTOS11tnV4wp35pDtdQ7QCfXMr9txPBAIgH64AARCnRinLNN7V69ha75sdVqOKn/OPKYDWHxofsFM="
    }
  ],
  "stateHash": "zHYqtOW0tZ9g1jbfaWgXB9udEETDocwet6HcsonKEJ9ncYZaCjLNAJS4Fao9W6AQR6FOkZR7FR7bvmocjtF00w==",
  "previousBlockHash": "Q3b82oFuJu0God7J4QGllDlAA4iW7cwu2yg6/oNnNQCAwYJXs/4WFgKXo75FGfdmvmeDputIQMdjc4vmrvkw8w==",
  "consensusMetadata": "CAI=",
  "nonHashData": {
    "localLedgerCommitTimestamp": {
      "seconds": 1484794929,
      "nanos": 31349065
    },
    "chaincodeEvents": [
      {}
    ]
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

如圖:

技術分享

到這裏 REST請求完成。以上是權限管理的具體操作。

八、超級賬本資源管理頁面

下面我們來看下節點的端口,如下圖:

技術分享

這時我們在谷歌瀏覽器裏就可以訪問啦,

HOST:9090
  • 1
  • 1

訪問正常頁面為:

技術分享

查詢的具體的信息,如下圖:

技術分享

查看交易詳情,如下圖:

技術分享

到此,整個Hyperledger Fabric超級賬本環境已經部署完成。

Hyperledger fablic 0.6 在centos7環境下的安裝與部署