本文介绍在已搭建好fabric区块链网络的基础上,如何使用fabric-java-sdk实现对链码的操作。
调用的流程图:
1、ca认证
区块链的认证体系在此略过,有兴趣去了解相关资源即可。我们实现的例子是基于部署了fabric-ca服务,并开启了tls认证的区块链。
static FabricService fs = new FabricService();
private static String caUrl = "https://ca.bank.notax.com:7054";
private static String mspCaPempath = "E:\\crypto-config\\peerOrganizations\\bank.notax.com\\ca\\ca.bank.notax.com-cert.pem";
FabricClient fc = fs.createFabricClient(caUrl, "admin", "adminpw", "BankMSP", mspCaPempath);
createFabricClient方法的参数说明:
* @param caUrl CA服务地址,如https://ca.traffic.notax.com:7054
* @param userName 认证用户名称
* @param userPw 认证用户密码
* @param mspId 如BankMSP
* @param mspCaPempath 用户所属Msp CA证书路径,如E:\\crypto-config\\peerOrganizations\\traffic.notax.com\\ca\\ca.traffic.notax.com-cert.pem
2、初始化通道
ca认证通过后,指定order节点和peer节点,初始化服务要连接的channel。
List<Peer> peers = new ArrayList<Peer>();
List<Orderer> orderers = new ArrayList<Orderer>();
Peer p0 = fc.createPeer("peer0.bank.notax.com", "grpcs://192.168.0.93:7051", "E:\\crypto-config\\peerOrganizations\\bank.notax.com\\peers\\peer0.bank.notax.com\\tls\\ca.crt");
peers.add(p0);
Orderer order0 = fc.createOrderer("orderer0.notax.com", "grpcs://192.168.0.90:7050", "E:\\crypto-config\\ordererOrganizations\\notax.com\\orderers\\orderer0.notax.com\\tls\\ca.crt");
orderers.add(order0);
ChannelClient cc = fc.initializeChannelCli("finnotax", orderers, peers, null);
createPeer方法说明:
* @param peerName peer域名,如peer0.traffic.notax.com
* @param peerUrl peer访问路径 ,如grpcs://192.168.0.90:7051
* @param peerTlsCaCrtPath peer TLS证书路径,如E:\\crypto-config\\peerOrganizations\\traffic.notax.com\\peers\\peer0.traffic.notax.com\\tls\\ca.crt
createOrderer方法说明 :
* @param ordererName order域名,如orderer0.notax.com
* @param ordererUrl orderer访问地址,如grpcs://192.168.0.90:7050
* @param ordererTlsCrtPath order TLS证书路径,如E:\\crypto-config\\ordererOrganizations\\notax.com\\orderers\\orderer0.notax.com\\tls\\ca.crt
3、调用链码交易
1)调用链码的invoke方法
ChannelClient cc = fc.initializeChannelCli("finnotax", orderers, peers, null);
String uuid = UUID.randomUUID()+"";
String[] targs = {uuid};
CompletableFuture<TransactionEvent> resp = cc.transactionByChainCode("traffic1", "create", targs);
transactionByChainCode方法说明:
* @param chaincodeName 链码名
* @param functionName 方法名
* @param args 参数
2)调用链码的query方法
String[] qargs = {"95e9811f-f435-45b9-8b2c-a56d7e785196"};
Collection<ProposalResponse> qresp = cc.queryByChainCode("traffic1", "query", qargs);
queryByChainCode方法说明:
* @param chaincodeName 链码名
* @param functionName 方法名
* @param args 参数
至此,完成了对fabric区块链的基本操作。