如何在Hyperledger Fabric中提交(或完成)事务时获取时间戳

时间:2018-01-21 16:44:45

标签: hyperledger-fabric hyperledger-composer

我需要计算“提交事务时的时间戳”和“事务提交时的时间戳”之间的差异。是否可以在结构中获取tx提交(或完成)时间戳?

我尝试在我的编辑器频道上运行Hyperledger Explorer。我可以在块内看到tx时间戳。但我不确定它是创建还是提交时间戳。另外,我可以将资源管理器时间戳转换为ISO 8601格式吗?

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

enter image description here

我更改了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