Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hyperledger fabric 在hyperledger结构中处理多个背书_Hyperledger Fabric - Fatal编程技术网

Hyperledger fabric 在hyperledger结构中处理多个背书

Hyperledger fabric 在hyperledger结构中处理多个背书,hyperledger-fabric,Hyperledger Fabric,我有一份需要多个组织签署的申请。当没有指定背书策略时,链码工作良好。但当我给出AND('Org1.member','Org2.member')的背书策略时,链码所做的更新不会提交 链码是使用JavaSDK调用的。以下是代码片段: public String[] invoke1() throws Exception { HFClient client; Channel sdkChannel; String chaincode; String function;

我有一份需要多个组织签署的申请。当没有指定背书策略时,链码工作良好。但当我给出AND('Org1.member','Org2.member')的背书策略时,链码所做的更新不会提交

链码是使用JavaSDK调用的。以下是代码片段:

public String[] invoke1() throws Exception {

    HFClient client;
    Channel sdkChannel;
    String chaincode;
    String function;
    String args[];

    chaincode= config.getChaincode();
    args= config.getArgs();
    function= config.getFunction();


    client=  HFClient.createNewInstance();
    client.setCryptoSuite(CryptoSuite.Factory.getCryptoSuite());
    client.setUserContext(config.getUser());

    sdkChannel = client.newChannel(config.getChannel());
    sdkChannel.addPeer(client.newPeer(config.getPeer1Name(), config.getPeer1Url(), config.getPeer1Properties()));  //anchor peer Org1
    sdkChannel.addPeer(client.newPeer(config.getPeer2Name(), config.getPeer2Url(), config.getPeer2Properties()));  //anchor peer Org2
    sdkChannel.addOrderer(client.newOrderer(config.getOrdererName(), config.getOrdererUrl(), config.getOrdererProperties())); // orderer
    sdkChannel.initialize();

    final TransactionProposalRequest proposalRequest = client.newTransactionProposalRequest();
    final ChaincodeID chaincodeID = ChaincodeID.newBuilder()
            .setName(chaincode)
            .build();
    // chaincode name
    proposalRequest.setChaincodeID(chaincodeID);
    // chaincode function to execute
    proposalRequest.setFcn(function);
    // timeout
    proposalRequest.setProposalWaitTime(60000);
    // arguments for chaincode function
    proposalRequest.setArgs(args);

    System.out.println(proposalRequest.getChaincodeEndorsementPolicy());
    // Sending transaction proposal

    final Collection<ProposalResponse> responses = sdkChannel.sendTransactionProposal(proposalRequest, sdkChannel.getPeers());
    sdkChannel.sendTransaction(responses, client.getUserContext());
    String ret[]= new String[responses.size()];
    int i= 0;
    for (ProposalResponse resp : responses) {
        System.out.println(resp.getStatus());
        if (!resp.isVerified()
                || resp.getStatus() != ProposalResponse.Status.SUCCESS) {
            String str= "Error while executing chaincode from peer " + resp.getPeer().getName() + " status: "+ resp.getStatus() + ". Messages: " + resp.getMessage()+ ".";
            throw new RuntimeException(str);
        }
        else
            ret[i++]= new String(resp.getChaincodeActionResponsePayload());
    }
    System.out.println(sdkChannel.sendTransaction(responses));
    return ret;
} 
公共字符串[]invoke1()引发异常{
HFC客户端;
信道SDKC信道;
字符串链码;
字符串函数;
字符串args[];
chaincode=config.getChaincode();
args=config.getArgs();
function=config.getFunction();
client=HFClient.createNewInstance();
client.setCryptoSuite(CryptoSuite.Factory.getCryptoSuite());
setUserContext(config.getUser());
sdkChannel=client.newChannel(config.getChannel());
sdkChannel.addPeer(client.newPeer(config.getpeername(),config.getPeer1Url(),config.getPeer1Properties());//锚点对等点Org1
sdkChannel.addPeer(client.newPeer(config.getPeer2Name(),config.getPeer2Url(),config.getPeer2Properties());//锚点对等点Org2
sdkChannel.addOrderer(client.newOrderer(config.getOrderName(),config.getOrderUrl(),config.getOrderProperties());//orderer
sdkChannel.initialize();
final TransactionProposalRequest proposalRequest=client.newTransactionProposalRequest();
final ChaincodeID ChaincodeID=ChaincodeID.newBuilder()
.setName(链码)
.build();
//链码名称
proposalRequest.setChaincodeID(chaincodeID);
//要执行的链码函数
proposalRequest.setFcn(功能);
//超时
proposalRequest.setProposalWaitTime(60000);
//链码函数的参数
proposalRequest.setArgs(args);
System.out.println(proposalRequest.getChaincodeEndorsementPolicy());
//发送交易建议
最终收集响应=sdkChannel.sendTransactionProposal(proposalRequest,sdkChannel.getPeers());
sendTransaction(响应,client.getUserContext());
String ret[]=新字符串[responses.size()];
int i=0;
对于(建议响应:响应){
System.out.println(resp.getStatus());
如果(!resp.isVerified()
||resp.getStatus()!=ProposalResponse.Status.SUCCESS){
String str=“从对等方执行链码时出错”+resp.getPeer().getName()+“状态:“+resp.getStatus()+”。消息:“+resp.getMessage()+”;
抛出新的RuntimeException(str);
}
其他的
ret[i++]=新字符串(分别为getChaincodeActionResponsePayload());
}
System.out.println(sdkChannel.sendTransaction(responses));
返回ret;
} 
在两个锚节点上的链码执行都成功,但是链码所做的更改没有提交。 以下是对等日志:


有人能帮我解决这个问题吗。

您确定交易提案能送达所有同行吗?此外,您在chaincode container
ccenv
上获得了哪些日志?是的,所有同行都收到了该提案。从对等日志中可以看到,由于签名集不满足批注策略,因此引发了VSCC错误。您是否尝试将批注策略更改为或('Org1.member'、'Org2.member')?如果某个事务由于某个对等事务而失败,这可能有助于调试。是的,我尝试了OR('Org1.member','Org2.member')。它给出了相同的错误。你能分享你的链码容器日志吗?很可能您的链码登录失败!您是否确定交易建议已送达所有对等方?此外,您在chaincode container
ccenv
上获得了哪些日志?是的,所有同行都收到了该提案。从对等日志中可以看到,由于签名集不满足批注策略,因此引发了VSCC错误。您是否尝试将批注策略更改为或('Org1.member'、'Org2.member')?如果某个事务由于某个对等事务而失败,这可能有助于调试。是的,我尝试了OR('Org1.member','Org2.member')。它给出了相同的错误。你能分享你的链码容器日志吗?很可能您的链码登录失败!