六、hyperledger fabric 投票应用(java-sdk)

继上篇文章编写的投票链码,并且在fabric网络中测试成功,本节将通过java-sdk调用写好的投票链码。

一、编写启动脚本,包含启动网络、初始化链码、安装链码。

#!/bin/bash
#
# Copyright IBM Corp All Rights Reserved
#
# SPDX-License-Identifier: Apache-2.0
#
# Exit on first error
set -e

# don't rewrite paths for Windows Git Bash users
export MSYS_NO_PATHCONV=1

CC_SRC_PATH=github.com/vote

starttime=$(date +%s)

# launch network; create channel and join peer to channel
cd ../basic-network
./start.sh

# Now launch the CLI container in order to install, instantiate chaincode
# and prime the ledger with our 10 cars
docker-compose -f ./docker-compose.yml up -d cli

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode install -n vote -v 1.0 -p "$CC_SRC_PATH"
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n vote -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
sleep 10
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n vote -c '{"function":"getUserVote","Args":[""]}'

二、启动网络

三、Java调用链码程序(java-sdk)

1、注册admin用户

public void enroll(String username, String password, String certDir) throws Exception {
        HFClient client = HFClient.createNewInstance();
        CryptoSuite cs = CryptoSuite.Factory.getCryptoSuite();
        client.setCryptoSuite(cs);
        Properties prop = new Properties();
        prop.put("verify", false);
        HFCAClient caClient = HFCAClient.createNewInstance("http://192.168.137.3:7054", prop);
        caClient.setCryptoSuite(cs);
        Enrollment enrollment = caClient.enroll(username, password);
        CertUtils.saveEnrollment(enrollment, certDir, username);
    }

2、注册普通用户

public void regist(String username, String certDir) throws Exception {
        HFClient client = HFClient.createNewInstance();
        CryptoSuite cs = CryptoSuite.Factory.getCryptoSuite();
        client.setCryptoSuite(cs);
        Properties prop = new Properties();
        prop.put("verify", false);
        HFCAClient caClient = HFCAClient.createNewInstance("http://192.168.137.3:7054", prop);
        caClient.setCryptoSuite(cs);
        RegistrationRequest rr = new RegistrationRequest(username, "org1");
        String enrollmentSecret = caClient.register(rr,  new CarUser(
                "admin",
                CertUtils.loadEnrollment("cert", "admin")));
        Enrollment enrollment = caClient.enroll(username, enrollmentSecret);
        CertUtils.saveEnrollment(enrollment, certDir, username);
    }

3、给指定用户投票、存在则票数+1,不存在则新建用户

public void voteUser(final String name) throws Exception {
        HFClient client = HFClient.createNewInstance();
        Channel channel = initChannel(client);
        TransactionProposalRequest req = client.newTransactionProposalRequest();
        ChaincodeID cid = ChaincodeID.newBuilder().setName("vote").build();
        req.setChaincodeID(cid);
        req.setFcn("voteUser");
        req.setArgs(name);
        Collection<ProposalResponse> resps = channel.sendTransactionProposal(req);
        channel.sendTransaction(resps);
    }

4、查询所有用户的票数情况

public void queryVote() throws Exception {
        HFClient client = HFClient.createNewInstance();
        Channel channel = initChannel(client);
        QueryByChaincodeRequest req = client.newQueryProposalRequest();
        ChaincodeID cid = ChaincodeID.newBuilder().setName("vote").build();
        req.setChaincodeID(cid);
        req.setFcn("getUserVote"); // queryAllCars
        req.setArgs("");
        Collection<ProposalResponse> resps = channel.queryByChaincode(req);
        for (ProposalResponse resp : resps) {
            String payload = new String(resp.getChaincodeActionResponsePayload());
            System.out.println("response: " + payload);
        }
    }

查询结果

猜你喜欢

转载自blog.csdn.net/u010857052/article/details/83931574