My program is relaying raw transactions to a geth node from a mobile client.
I noticed that a transaction with the identical content will yield an identical hash. e.g. calling the same function with the same parameters.
If I send this raw transaction more than once in quick succession (before there was time to mine it) I get the known transaction
error.
How can I check if my transaction is known? Or put it another way: How can I compute the transaction hash from the raw transaction string?
In the code below, I am looking for a solution to someWayToComputeHashFrom
This is how I create my transaction string with eth-lightwallet. The contract
object is a web3 contract.
getCertificateContract().then((contract) => {
let payloadData = undefined;
let functionName = undefined;
functionName = 'registerAuditReport';
payloadData = contract.registerAuditReport.getData(result.hash, documentId);
let gasEstimate = w3.toHex(w3.eth.estimateGas({
to: contract.address,
data: payloadData
}) + 10000);
let nonce = w3.toHex(w3.eth.getTransactionCount(profile.address) + 10000);
var rawTx = {
nonce: nonce,
gasPrice: gasPrice,
gasLimit: gasEstimate,
to: contract.address,
from: profile.address,
value: '0x00',
data: payloadData
};
let rawTxString = txutils.functionTx(contract.abi, functionName, [result.hash, documentId], rawTx);
let signedTxString = signing.signTx(wallet.keystore, wallet.pwDerivedKey, rawTxString, '0x' + senderAddress);
let txHash = someWayToComputeHashFrom('0x' + rawTxHexString);
w3.eth.sendRawTransaction('0x' + rawTxHexString, function (err, hash) {
console.log('transaction hash is', hash);
})
})