久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

(八)Fabric2.0Java SDK實(shí)踐...

 落塵伊人 2021-01-11

總目錄:
(0) 如何利用區(qū)塊鏈保護(hù)知識(shí)產(chǎn)權(quán)
(一)HyperLedger Fabric 2.0-release測(cè)試網(wǎng)絡(luò)部署
(二)Fabric2.0 first-network 生成配置說(shuō)明
(三)Fabric2.0啟動(dòng)網(wǎng)絡(luò)腳本配置剖析
(四)Fabric2.0通道實(shí)踐
(五)Fabric2.0 智能合約實(shí)踐- 安裝以及定義智能合約
(六)Fabric2.0 智能合約實(shí)踐- 升級(jí)智能合約
(七)Fabric2.0智能合約實(shí)踐-設(shè)置背書策略
(八)Fabric2.0Java SDK實(shí)踐-合約交易
(九)Fabric2.0 通道實(shí)踐-更新通道配置
(十)Fabric2.0-動(dòng)態(tài)添加組織
(十一) Fabric2.0-使用編輯器調(diào)試go智能合約
(十二)Fabric2.0-實(shí)現(xiàn)外部構(gòu)建啟動(dòng)合約
工具人大膽試探raft共識(shí)-你沒(méi)見(jiàn)過(guò)的raft算法解釋


根據(jù)前面的步驟,,我們基于cli客戶端完成了一系列操作,但是正常情況下,,我們的工程一般會(huì)使用SDK去調(diào)用
網(wǎng)絡(luò)完成交易,,因此從這一章開(kāi)始實(shí)踐何基于Java SDK調(diào)用Fabric2.0網(wǎng)絡(luò)完成交易。

1.Gateway

在進(jìn)行實(shí)踐前,,有一個(gè)比較新的概念需要了解就是Gateway,。
為了應(yīng)對(duì)由于Fabric網(wǎng)絡(luò)中的變化頻繁所造成的后果,F(xiàn)abric2.0 原本的SDK之上蓋了一層網(wǎng)關(guān)Gateway,,用于減輕應(yīng)用程序的負(fù)擔(dān),。

具體拓?fù)浣Y(jié)構(gòu)如下:
在這里插入圖片描述

MagnetoCorp和DigiBank應(yīng)用程序(發(fā)行和購(gòu)買)將各自的網(wǎng)絡(luò)交互委托給其網(wǎng)關(guān)。每個(gè)網(wǎng)關(guān)都了解網(wǎng)絡(luò)通道拓?fù)?,其中包括兩個(gè)組織MagnetoCorp和DigiBank的多個(gè)peers和order,,使應(yīng)用程序?qū)W⒂跇I(yè)務(wù)邏輯。節(jié)點(diǎn)間可以使用gossip協(xié)議在組織內(nèi)部和組織之間相互共識(shí)交互,。

2.環(huán)境準(zhǔn)備

系統(tǒng)工具版本備注
Window10
Fabric2.0已部署好mychannel通道以及mycc合約到兩個(gè)組織節(jié)點(diǎn)
Java1.8
Maven3.5.2

Fabric網(wǎng)絡(luò)結(jié)構(gòu)

節(jié)點(diǎn)類型節(jié)點(diǎn)名所屬組織ip服務(wù)端口
ordererorderer.example.com-192.168.2.1047050
peerpeer0.org1.example.comorg1192.168.2.1047051
peerpeer1.org1.example.comorg1192.168.2.1048051
peerpeer0.org2.example.comorg2192.168.2.1049051
peerpeer1org2.example.comorg2192.168.2.10410051
caca1.org1.example.comorg1192.168.2.1047054
caca2.org1.example.comorg2192.168.2.1048054

3.創(chuàng)建基礎(chǔ)工程

新建一個(gè)Maven工程,,添加以下依賴:

<dependency>
  <groupId>org.hyperledger.fabric</groupId>
  <artifactId>fabric-gateway-java</artifactId>
  <version>2.0.0</version>
</dependency>

4.創(chuàng)建connectionProfile

connectionProfile用于創(chuàng)建一個(gè)連接網(wǎng)絡(luò)對(duì)象,如果有跑過(guò)first-network的朋友,,相比記得一個(gè)ccp.sh的命令,,生成的connection-org1.json、connection-org1.yaml這種文件,,其實(shí)這些就是我們所需要的connectionProfile,,可以直接使用。當(dāng)然也可以自行編寫,,自行編寫請(qǐng)參考官方模板

4.1 配置文件結(jié)構(gòu)說(shuō)明

整體connectionProfile結(jié)構(gòu)如下
在這里插入圖片描述
包含對(duì)象說(shuō)明:

參數(shù)名描述
name自定義網(wǎng)絡(luò)名稱
version自定義網(wǎng)絡(luò)版本
client客戶端相關(guān)信息
channels網(wǎng)絡(luò)所包含的通道信息
organizations網(wǎng)絡(luò)中組織信息
orderers排序節(jié)點(diǎn)信息
peerpee節(jié)點(diǎn)信息
certificateAuthoritiesca節(jié)點(diǎn)信息

4.1.1 client

在這里插入圖片描述

4.1.2 channels

在這里插入圖片描述
其中節(jié)點(diǎn)對(duì)象有4中角色定義

角色描述
endorsingPeer具有背書權(quán)限節(jié)點(diǎn)
chaincodeQuery具有合約查詢權(quán)限節(jié)點(diǎn)
ledgerQuery具有賬本查詢權(quán)限節(jié)點(diǎn)
eventSourceevent hub節(jié)點(diǎn)

4.1.3 organizations

在這里插入圖片描述

其中admin私鑰與admin簽名證書支持路徑與文件內(nèi)容,,路徑使用參數(shù)path,對(duì)應(yīng)值填寫路徑,,文件內(nèi)容使用參數(shù)pem,,對(duì)應(yīng)值填寫私鑰或者證書內(nèi)容。

4.1.4 orderers

在這里插入圖片描述

4.1.5 peer

與排序節(jié)點(diǎn)類似,,如果是tls必須配置tlsCACerts
在這里插入圖片描述

4.1.6 certificateAuthorities

與排序節(jié)點(diǎn)類似,,如果是tls必須配置tlsCACerts

在這里插入圖片描述

5. JAVA工程目錄說(shuō)明

新建的工程目錄如下
在這里插入圖片描述

src/main/java : 存放demo主程序類
src/main/resources/connection.json : 上面新建好的connectionProfile
src/main/resources/crypto-config: 存放fabric網(wǎng)絡(luò)證書內(nèi)容(選擇用到的就行)

6. 實(shí)踐

6.1 創(chuàng)建網(wǎng)關(guān)賬戶

網(wǎng)關(guān)賬戶就是相當(dāng)于連接fabric網(wǎng)絡(luò)的fabric用戶對(duì)象,。

          //使用org1中的user1初始化一個(gè)網(wǎng)關(guān)wallet賬戶用于連接網(wǎng)絡(luò)
            Wallet wallet = Wallets.newInMemoryWallet();
            Path certificatePath = credentialPath.resolve(Paths.get("signcerts", "[email protected]"));
            certificate = readX509Certificate(certificatePath);

            Path privateKeyPath = credentialPath.resolve(Paths.get("keystore", "priv_sk"));
            privateKey = getPrivateKey(privateKeyPath);
             //放進(jìn)wallet
            wallet.put("user",Identities.newX509Identity("Org1MSP",certificate,privateKey));

賬戶對(duì)象都可以存放到wallet里面,方便存取,。
證書對(duì)象使用的是org1的user私鑰,,證書。

6.2 創(chuàng)建網(wǎng)關(guān)

通過(guò)connectionProfile以及網(wǎng)關(guān)賬戶創(chuàng)建網(wǎng)關(guān)

 //根據(jù)connection-org1.json 獲取Fabric網(wǎng)絡(luò)連接對(duì)象
            GatewayImpl.Builder builder = (GatewayImpl.Builder) Gateway.createBuilder();

            builder.identity(wallet, "user").networkConfig(NETWORK_CONFIG_PATH);

NETWORK_CONFIG_PATH : connectionProfile文件路徑

6.3 連接網(wǎng)關(guān)

           //連接網(wǎng)關(guān)
            gateway = builder.connect();
            //獲取mychannel通道
            Network network = gateway.getNetwork("mychannel");
            //獲取合約對(duì)象
            Contract contract = network.getContract("mycc");

網(wǎng)關(guān)連接后
getNetwork:可以根據(jù)通道名稱獲取Fabric具體通道網(wǎng)絡(luò)
network.getContract:可以根據(jù)合約名稱獲取部署到對(duì)應(yīng)通道的智能合約對(duì)象

6.4 交易

基于上一部分的智能合約,,有一個(gè)addTen的交易,,結(jié)果是對(duì)象加10

首先我們對(duì)合約對(duì)象a當(dāng)前的值進(jìn)行查詢

      //查詢合約對(duì)象evaluateTransaction
            byte[] queryAResultBefore = contract.evaluateTransaction("query","a");
            System.out.println("交易前:"+new String(queryAResultBefore, StandardCharsets.UTF_8));

然后調(diào)用addTen 進(jìn)行a+10

 // 創(chuàng)建并且提交交易
            byte[] invokeResult = contract.createTransaction("addTen")
                    .setEndorsingPeers(network.getChannel().getPeers(EnumSet.of(Peer.PeerRole.ENDORSING_PEER)))
                    .submit("a");
            System.out.println(new String(invokeResult, StandardCharsets.UTF_8));

此處setEndorsingPeers 設(shè)置背書節(jié)點(diǎn),這里選擇了通道中背書權(quán)限節(jié)點(diǎn)集合

交易完成后再次進(jìn)行查詢

  //查詢合約對(duì)象evaluateTransaction
            byte[] queryAResultAfter = contract.evaluateTransaction("query","a");
            System.out.println("交易后:"+new String(queryAResultAfter, StandardCharsets.UTF_8));

最后控制臺(tái)輸出:
在這里插入圖片描述

交易成功,。

7. 總結(jié)

在調(diào)用交易方面,,通過(guò)網(wǎng)關(guān)這種確實(shí)簡(jiǎn)單了很多,后面應(yīng)用程序進(jìn)行設(shè)計(jì)的時(shí)候,,可以將網(wǎng)關(guān)這個(gè)包單獨(dú)封裝,,應(yīng)用程序再進(jìn)行調(diào)用,可以基于網(wǎng)關(guān)這層保障應(yīng)用程序的業(yè)務(wù)穩(wěn)定性,。而再創(chuàng)建通道,、加入通道、部署合約等操作應(yīng)該還是SDK那套,,后續(xù)章節(jié)也將繼續(xù)實(shí)踐,。需要本章源碼的可以評(píng)論留言。

源碼:https://github.com/llzz9595/fabricdemo

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多