我有我的链码,4个同伴和一个订货人准备好了。我可以通过CLI查询我的链代码,但是如何使用API查询它以及如何将其部署为webapp。有人可以对此发表评论吗?
答案 0 :(得分:3)
提供了多个SDK,因此您可以在应用程序中利用它们。
您可以根据自己的需要选择其中一种,例如,您可以在此处使用Java SDK查询链码的简短示例:
// Get an instance of Hyperledger Fabric client
final HFClient client = HFClient.createNewInstance();
// Set default crypto suite for HF client
client.setCryptoSuite(CryptoSuite.Factory.getCryptoSuite());
现在,您需要设置用户内容以提供用户名和加密材料,以识别其组织中的用户。
// Set user context
client.setUserContext(new User() {
public String getName() {
return "testUser";
}
public Set<String> getRoles() {
return null;
}
public String getAccount() {
return null;
}
public String getAffiliation() {
return null;
}
// Enrollment is an interface to retrieve certificate and private key of the user in context
public Enrollment getEnrollment() {
return new Enrollment() {
public PrivateKey getKey() {
return privateKey;
}
public String getCert() {
return certificate;
}
};
}
public String getMspId() {
return "Org1MSP";
}
});
接下来需要在上下文中创建频道实例。
// Create new channel
final Channel channel = client.newChannel("mychannel");
// Setup ordering service
channel.addOrderer(client.newOrderer("orderer0", "grpc://localhost:7050"));
// COnfigure endorsing peers
channel.addPeer(client.newPeer("peer0", "grpc://localhost:7051"));
// Finally initialize the channel
channel.initialize();
最后我们准备发送交易提案。
// Create transaction request
final TransactionProposalRequest proposalRequest = client.newTransactionProposalRequest();
final ChaincodeID chaincodeID = ChaincodeID.newBuilder()
.setName("myCC")
.setVersion("1.0")
.setPath("github.com/some_package/package/chaincode/myCC")
.build();
// chaincode name
proposalRequest.setChaincodeID(chaincodeID);
// chaincode function to execute
proposalRequest.setFcn("some_function");
// timeout
proposalRequest.setProposalWaitTime(TimeUnit.SECONDS.toMillis(10));
// arguments for chaincode function
proposalRequest.setArgs( // Set arguments based on CC );
// Sending transaction proposal
final Collection<ProposalResponse> responses = channel.sendTransactionProposal(proposalRequest);
CompletableFuture<BlockEvent.TransactionEvent> txFuture = channel.sendTransaction(responses, client.getUserContext());
获得执行结果:
BlockEvent.TransactionEvent event = txFuture.get();
System.out.println(event.toString());
使用其他SDK代码看起来非常相似,在这里您可以查看类似的Go SDK example。
答案 1 :(得分:1)
以下是文档中的首选tutorial,其中显示了如何通过查询Fabric分类帐的Node.js SDK编写应用程序。