У меня есть приложение, в котором мне нужно одобрить несколько организаций.Цепной код хорошо работает, когда не указана политика одобрения.Но когда я даю политику подтверждения AND ('Org1.member', 'Org2.member'), обновление, выполненное с помощью цепного кода, не фиксируется.
Цепной код вызывается с использованием Java SDK.Ниже приведен фрагмент кода:
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;
}
Выполнение цепного кода на узле привязки завершается успешно, однако внесенные цепным кодом изменения не фиксируются.Ниже приведен журнал одноранговой связи:
Может кто-нибудь, пожалуйста, помогите мне с этим.