前提需要:已搭建好fabric2.x版本環境,有connection.json檔案,實作Java sdk 連接上區塊鏈網路,
1.配置connection.json
{
"name": "basic-network",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": {
"orderers": [
"orderer.example.com"
],
"peers": {
"peer0.org1.example.com": {
"endorsingPeer": true,
"chaincodeQuery": true,
"ledgerQuery": true,
"eventSource": true
},
"peer0.org2.example.com": {
"endorsingPeer": true,
"chaincodeQuery": true,
"ledgerQuery": true,
"eventSource": true
}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca-org1"
],
"adminPrivateKeyPEM": {
"path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk"
},
"signedCertPEM": {
"path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
}
},
"Org2": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.example.com"
],
"certificateAuthorities": [
"ca-org2"
],
"adminPrivateKeyPEM": {
"path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/priv_sk"
},
"signedCertPEM": {
"path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem"
}
}
},
"orderers": {
"orderer.example.com": {
"url": "grpcs://你的虛擬機ip:7050",
"mspid": "OrdererMSP",
"grpcOptions": {
"ssl-target-name-override": "orderer.example.com",
"hostnameOverride": "orderer.example.com"
},
"tlsCACerts": {
"path": "src/main/resources/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt"
},
"adminPrivateKeyPEM": {
"path": "src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/priv_sk"
},
"signedCertPEM": {
"path": "src/main/resources/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem"
}
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://你的虛擬機ip:7051",
"grpcOptions": {
"ssl-target-name-override": "peer0.org1.example.com",
"hostnameOverride": "peer0.org1.example.com",
"request-timeout": 120001
},
"tlsCACerts": {
"path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
}
},
"peer0.org2.example.com": {
"url": "grpcs://你的虛擬機ip:9051",
"grpcOptions": {
"ssl-target-name-override": "peer0.org2.example.com",
"hostnameOverride": "peer0.org2.example.com",
"request-timeout": 120001
},
"tlsCACerts": {
"path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
}
}
},
"certificateAuthorities": {
"ca-org1": {
"url": "https://你的虛擬機ip:7054",
"grpcOptions": {
"verify": true
},
"tlsCACerts": {
"path": "src/main/resources/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"
},
"registrar": [
{
"enrollId": "admin",
"enrollSecret": "adminpw"
}
]
},
"ca-org2": {
"url": "https://你的虛擬機ip:8054",
"grpcOptions": {
"verify": true
},
"tlsCACerts": {
"path": "src/main/resources/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem"
},
"registrar": [
{
"enrollId": "admin",
"enrollSecret": "adminpw"
}
]
}
}
}
查看虛擬機ip使用命令ifconfig,選擇enw33的ip地址
2.Java sdk demo
// Load an existing wallet holding identities used to access the network.
Path walletDirectory = Paths.get("wallet");
Wallet wallet = Wallets.newFileSystemWallet(walletDirectory);
// Path to a common connection profile describing the network.
Path networkConfigFile = Paths.get("connection.json");
// Configure the gateway connection used to access the network.
Gateway.Builder builder = Gateway.createBuilder()
.identity(wallet, "user1")
.networkConfig(networkConfigFile);
// Create a gateway connection
try (Gateway gateway = builder.connect()) {
// Obtain a smart contract deployed on the network.
Network network = gateway.getNetwork("mychannel");
Contract contract = network.getContract("basic");
注意我這里安裝的鏈碼是basic,還有一種是fabcar,可根據自己的默認安裝選擇,操作一樣,改一下引數名即可,
3.呼叫鏈碼,獲取資料
byte[] queryAllAssets = contract.evaluateTransaction("GetAllAssets");
System.out.println("--------------");
System.out.println("所有資料:"+new String(queryAllAssets,StandardCharsets.UTF_8));
System.out.println("--------------");
結果顯示如下:

如圖,是一整串字串,接下來我們要想辦法把他封裝成類的形式
1.先創建一個物體類
@Data
public class Basic {
private String ID;
private String color;
private String size;
private String owner;
private String appraisedValue;
}
2.創建下列方法:
private static void ByteToClassArray(byte[] bytes){
String str = new String(bytes, StandardCharsets.UTF_8);
JSONArray jsonArray = JSONArray.parseArray(str);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
Basic basic1 = JSONObject.parseObject(object.toJSONString(),Basic.class);
System.out.println(basic1.toString());
}
}
3.使用方法并展示結果:
byte[] queryAllAssets = contract.evaluateTransaction("GetAllAssets");
System.out.println("--------------");
System.out.println("所有資料:"+new String(queryAllAssets,StandardCharsets.UTF_8));
System.out.println("--------------");
System.out.println("-----將資料處理后的結果");
ByteToClassArray(queryAllAssets);
結果如下:

如此便可實作對鏈碼資料的處理
3.獲取單個資料的處理:
byte[] queryOneAsset = contract.createTransaction("ReadAsset")
.submit("asset6");
System.out.println("讀取asset6的內容:"+new String(queryOneAsset, StandardCharsets.UTF_8));
System.out.println("----------------");
System.out.println("將string 封裝成 物件");
JSONObject jsonObject = JSON.parseObject(new String(queryOneAsset,StandardCharsets.UTF_8));
basic.setAppraisedValue(jsonObject.getString("appraisedValue"));
basic.setColor(jsonObject.getString("color"));
basic.setID(jsonObject.getString("id"));
basic.setOwner(jsonObject.getString("owner"));
basic.setSize(jsonObject.getString("size"));
System.out.println("------------------");
System.out.println("封裝之后的單體basic物件:"+basic.toString()+"\t 獲得單個屬性color: "+basic.getColor());
System.out.println("------------------");
如果如下圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/304021.html
標籤:其他
下一篇:Hadoop之生產調優(六)
