Solidity
通過您的編碼輸入數據獲取雜湊交易
在我的應用程序中,我必須遵循案例:
我需要在 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])