如何部署Hyperledger Fabric应用程序

时间:2017-07-31 11:51:48

标签: api hyperledger hyperledger-fabric

我有我的链码,4个同伴和一个订货人准备好了。我可以通过CLI查询我的链代码,但是如何使用API​​查询它以及如何将其部署为webapp。有人可以对此发表评论吗?

2 个答案:

答案 0 :(得分:3)

提供了多个SDK,因此您可以在应用程序中利用它们。

  1. Node SDK
  2. Java SDK
  3. Go SDK
  4. Python SDK
  5. 您可以根据自己的需要选择其中一种,例如,您可以在此处使用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编写应用程序。