Solidity

通過您的編碼輸入數據獲取雜湊交易

  • January 25, 2022

在我的應用程序中,我必須遵循案例:

我需要在 Ropsten (eth testnet) 區塊鏈上記錄任何文件雜湊。雜湊是唯一的,我在我的智能合約中使用映射來完成此操作。沒問題。

由於散列是唯一的,如果使用者嘗試將已註冊的文件散列放在區塊鏈上,他將得到我處理的 catch 錯誤。此時,在處理過的消息下方,我想顯示已註冊文件雜湊的事務的雜湊。

如果可能的話,也許我將不得不對文件雜湊進行編碼以匹配交易的編碼輸入數據。

我知道如何通過他的雜湊交易獲取交易數據(getTransaction(txHash, callback))

問題是:除了通過他自己的雜湊(txHash)之外,還有其他方法可以獲取交易數據嗎?

目前我正在為 eth 客戶端使用 web3js 1.0.0。

對不起我的英語不好:|

編輯:

這是我想做的事情。

就我而言,如果文件雜湊已經在交易的輸入數據欄位中註冊,我想顯示交易雜湊。

所以首先,一個小測試是獲取一個區塊的交易列表。我將每個 tx 雜湊傳遞給 (getTransaction(txHash, callback)),但我面臨一個問題,即我無法獲得 getTransaction 的回調。

我的程式碼:

async function getInputTransaction(tx) {
   web3.eth.getTransaction(tx, function(err, cb){
       console.log('got here');
       let decodeInput = web3.utils.hexToAscii(cb.input);
       decodeInput = decodeInput.split("_").pop();
       if(!err){
           console.log(cb);
           console.error('\nInput decoded: ' + '\u001b[1;32m' + decodeInput + '\u001b[0m');
       }else{
           console.error('error: ' + error);
   }}
   )
}

var tx;

web3.eth.getBlock(6339515, function(err, result){
   for(var i = 0; i <= result.transactions.length; i++){
       tx = result.transactions[i];
       getInputTransaction(tx).
       then(function() {
       })
       .catch(function(error) {
           console.log('error: \n' + error);
       });
   }
})

當我調試時,回調“cb”沒有被觸發。

在這種情況下,請嘗試在您的智能合約中添加一個類似getById的函式,該函式將返回您交易的所有數據。然後你在新交易之前比較或做任何事情。

您詢問了另一種獲取交易數據的方法,而不是通過其雜湊查詢。

這是一個:

您可以通過提供包含交易的區塊號/區塊雜湊以及該交易在區塊中的位置索引來獲取交易詳情。

getTransactionFromBlock(hashStringOrNumber, indexNumber [, callback])

從塊中獲取交易

引用自:https://ethereum.stackexchange.com/questions/79817