hyperledger fabric 智能合約開發


 

開發步奏:

1.創建教育聯盟

2.區塊鏈服務平台自動生成通道id

3.區塊鏈網絡服務人員通過命令行在區塊鏈網絡中創建對應通道

4.創建相關教育組織

5.邀請相關組織加入聯盟

6.區塊鏈網絡管理人員通過命令行在區塊鏈網絡創建組織並加入通道

7.教育組織相關開發人員通過區塊鏈網絡進行系統開發

 

實現功能:

聯盟管理

組織管理

聯盟邀請

證書下載

實現聯盟相關組織簽名同意機制、實現智能合約在線上傳

 

 

其他需求:

1、把區塊鏈顯示儀表盤的接口實現換成Java的(目前:node.js)

2、Java查看區塊鏈信息的api接口 ------------- blockWalker

 

借鑒騰訊區塊鏈平台搭建思想

①創建聯盟

②創建網絡(選擇區塊鏈引擎[Fabric、Bcos、TrustSQL])

=======================> ③選擇區塊鏈類型:私有鏈、公有鏈 =====> 創建對應channel

④設置網絡信息 ------> 邀請組織(綁定channel中的org、peer)

 

 

 

 

智能合約部分

運行在docker容器里面,如果需要調試只能通過打日志log方式

一個合約,就是一個用戶用go/java/ node編寫的文件(包括:字符,方法,返回信息)

在區塊中 chaincode目錄下),一個合約只能對應一個目錄

 

用戶上傳的智能合約都是存放在hyperledger安裝的以下目錄:(注:src目錄結構之前的是用戶自定義安裝目錄結構)

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/chaincode

 

下面目錄有用go/java/node語言開發智能合約的代碼

 

下面網址可以查看channel跟存入的數據等(一個合約跟一個channel會生成一個庫)

一個channel下可以安裝多個合約,每個合約都會生成一個數據庫

 

安裝合約

命令行代碼

 

解釋:

-n : 合約名稱

-v:合約版本

-p:合約所在目錄

說明:

合約所在目錄從github.com開始,因為前面會自動從根目錄(opt)目錄層拼上路徑

安裝后,狀態查看

 

 

 

實例化合約

實例化操作是會存到區塊鏈上的,需要指定是在哪個channel里面上傳區塊。

指令:

說明:

  -n、-v跟上面指令相同

  -o:指定order的節點 //上塊操作都必須指定order節點

  --tls --cafile:指定tls證書 //保證數據的安全性

  -c:執行方法名參數 //-c '{"Args":["init"]}'

  -P:指定倍數策略 //上面指令只裝一台節點

實例化后,狀態查看

 

 

 

 

實例化完整之后,可以觸發合約

往合約里面上傳一條數據【invoke命令】

 

查詢剛剛上傳的數據【調用自定義的合約方法】

 

調用自定義的query方法,查詢結果

 

通過create database查看上傳的數據

 

合約代碼調試(log打印方式)

 

 

升級合約

情景:增加新功能、有新的優化等

注意:不需要再實例化

 

1、修改、

2、重新安裝當前合約(版本更改2.0)

3、調用升級指令(會在區塊鏈上生成一個區塊)

  a、升級之前先查詢當前channel區塊信息

  結果:高度 = 9

 

  b、執行升級指令

 

  c、升級之后再查詢一次channel區塊信息,看height增加了沒有

  注意:更新之后,調用原來合約的查詢方法,得到的都是最新數據,原來的版本數據作廢

 

合約里對私有數據(字段)處理【只能指定人查看】

使用private data

 

1、修改合約代碼

 

調用api存儲和取值時,換成保存私有數據的api

 

 

2、定義一個json

說明:

name:私有字段名稱

policy:策略(允許哪些組織機構訪問)

requiredPeerCount:除了倍數節點以外,哪些節點還可以作為私有數據的存儲備份

maxPeerCount:私有數據備份的最大數量

blockToLive:私有數據存儲上鏈之后,增加?個塊,當前私有數據消失(0:永遠不消失)

memberOnlyRead:只有當前定義的組織機構成員可以訪問

 

3、指定實例化合約的路徑

說明:所有的策略都是在實例化的時候指定的

channel部分

創建channel

方法一、服務器命令行創建

 

 

方法二、Java sdk 創建

1、在服務器生成tlx證書文件

命令: configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

說明:紅色部分是證書名

 

 

 

first-network目錄下面執行當前命令

查看當前生成的證書

 

 

2、將證書文件下載到本地

channel-artifacts目錄下....

 

3、編寫userContext類;編寫FabricClient類;測試

 

 

FabricClient:

 

 

上面獲取channel方法需要修改

 

 

 

測試:

 

 

 

 

優化:

先創建channel,返回后再加入peer跟order ...

查看新創建的channel

 

 

問題點:

1、docker沒有正常啟動 ---- > docker ps

· 命令查看,重新啟動

 

 

生成tx證書

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/ws.tx -channelID ws

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

 

通過生成的證書創建channel

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/fabric-ca-server/ca-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

/home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem

 

peer channel create -o orderer.example.com:7050 -c testChannel -f ./channel-artifacts/testChannel.tx --tls --cafile /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

 

peer channel fetch config config_block.pb -o orderer.example.com:7050 -c testchainid

 

ideal:

阿里有區塊鏈API,下下來,直接調用。

https://help.aliyun.com/document_detail/141372.html?spm=a2c4g.11186623.6.606.281c379evInTeZ

 

 

鏈碼里不寫業務  不同的業務控制接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM