我需要计算“提交事务时的时间戳”和“事务提交时的时间戳”之间的差异。是否可以在结构中获取tx提交(或完成)时间戳?
我尝试在我的编辑器频道上运行Hyperledger Explorer。我可以在块内看到tx时间戳。但我不确定它是创建还是提交时间戳。另外,我可以将资源管理器时间戳转换为ISO 8601格式吗?
请帮我解决这个问题。
答案 0 :(得分:0)
我更改了blockchain-explorer / main.js代码以转换时间格式。
app.post("/api/tx/getinfo", function(req, res) {
let txid = req.body.txid
if( txid != '0' ){
query.getTransactionByID(peer,ledgerMgr.getCurrChannel(),txid,org).then(response_payloads=>{
var header = response_payloads['transactionEnvelope']['payload']['header']
var data = response_payloads['transactionEnvelope']['payload']['data']
var signature = response_payloads['transactionEnvelope']['signature'].toString("hex")
res.send({
'tx_id':header.channel_header.tx_id,
'timestamp':header.channel_header.timestamp,
'channel_id':header.channel_header.channel_id,
'type':header.channel_header.type,
})
})
}else{
res.send({ })
}});
要
app.post("/api/tx/getinfo", function(req, res) {
let txid = req.body.txid
if( txid != '0' ){
query.getTransactionByID(peer,ledgerMgr.getCurrChannel(),txid,org).then(response_payloads=>{
var header = response_payloads['transactionEnvelope']['payload']['header']
var data = response_payloads['transactionEnvelope']['payload']['data']
var signature = response_payloads['transactionEnvelope']['signature'].toString("hex")
res.send({
'tx_id':header.channel_header.tx_id,
'timestamp':new Date(header.channel_header.timestamp).toISOString(),
'channel_id':header.channel_header.channel_id,
'type':header.channel_header.type,
})
})
}else{
res.send({ })
}});
答案 1 :(得分:0)
您看到的时间戳是认可时间戳,您可以在链代码调用期间使用以下API访问它:
// GetTxTimestamp returns the timestamp when the transaction was created. This
// is taken from the transaction ChannelHeader, therefore it will indicate the
// client's timestamp, and will have the same value across all endorsers.
GetTxTimestamp() (*timestamp.Timestamp, error)
如果您想计算两个事件之间的差异,我建议利用事件中心来直接通知正在提交的事务。您基本上需要订阅等待您的交易的事件,然后您将能够计算差异,请注意您需要计算平均请求RTT以从最终结果中扣除它以获得更准确的评估。要了解如何订阅活动,您可以在此处查看示例(Deprecated)block_listener.go。