我们设置了一个结构服务器,并将一些事务放入其中。我们有一些应用程序将与Fabric服务器合作。这是一种情况。
fabric-sdk-java
或fabric-sdk-node
发送交易如你所知,chaincode
的执行将耗费一些时间。特别是,chaincode
将在几十秒后提交。所以我希望blockchain
回调一个peer
或者只是让应用程序知道执行的结果。有可能吗?
您可以注册到甚至集线器并列出正在提交的块/事务的通知。如果您正在寻找示例,请考虑从url
查看fabcar。特别是你可能想看看fabric-samples。
invoke.js
Java和Golang SDK中也存在类似的API。
Hyperledger Composer改变了我们使用Hyperledger Fabric Blockchain的方式。虽然我不能在这里给你所有的介绍,但我提供了一段关于如何(var options = {
wallet_path: path.join(__dirname, './creds'),
user_id: 'PeerAdmin',
channel_id: 'mychannel',
chaincode_id: 'fabcar',
peer_url: 'grpc://localhost:7051',
event_url: 'grpc://localhost:7053',
orderer_url: 'grpc://localhost:7050'
};
let eh = client.newEventHub();
eh.setPeerAddr(options.event_url);
eh.connect();
let txPromise = new Promise((resolve, reject) => {
let handle = setTimeout(() => {
eh.disconnect();
reject();
}, 30000);
eh.registerTxEvent(transactionID, (tx, code) => {
clearTimeout(handle);
eh.unregisterTxEvent(transactionID);
eh.disconnect();
if (code !== 'VALID') {
console.error(
'The transaction was invalid, code = ' + code);
reject();
} else {
console.log(
'The transaction has been committed on peer ' +
eh._ep._endpoint.addr);
resolve();
}
});
});
eventPromises.push(txPromise);
)的代码:
1)定义事件:在这里,我有一个由医生,患者和消息组成的事件。
credits to
2)从事务中发出事件:这里我们将拥有Chain代码的逻辑。
event MedicalEvent {
--> Doctor thedoctor
--> Patient thePatient
o String theMessage
}
transaction sampleTransaction {
--> Doctor thedoctor
--> Patient thePatient
}
3)听取事件:在这里我让我的Nodejs听取事件。
/**
*@ALL NECCESSARY DECORATIONS GO HERE
/
sampleTransaction(obj) {
var factory = getFactory();
var patient = obj.thepatient;
var doctor = obj.thedoctor;
var message = 'Take your medications PROPERLY';
return getParticipantRegistry('org.acme.WHATEVER.Patient')
.then(function(patientRegistry) {
var basicEvent = factory.newEvent('org.acme.WHATEVER', 'addMeLiveEvent');
basicEvent.theDoctor=doctor;
basicEvent.thePatient=patient;
basicEvent.theMessage = message;
emit(basicEvent);
})
}