Bei der Nutzung web3.toAscii
habe ich folgende Fehlermeldung erhalten:
Ich denke, der Grund ist meine Web3-Version, dh'1.0.0-beta.34'
Wenn ja, gibt es einen alternativen Befehl für web3 Version 1 für den folgenden Befehl?
transaction = web3.eth.getTransaction('0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498')
input = web3.toAscii(transaction.input)
console.log(input)
Ich habe auch folgenden Befehl verwendet:
web3.utils.hexToAscii(0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498)
Allerdings erhalte ich folgenden Fehler:
Das bedeutet, dass seine Eingabe kein Transaktions-Hash sein kann.
Das Äquivalent sollte web3.utils.hexToAscii sein
web3.utils.hexToAscii('0x4920686176652031303021');
> "I have 100!"
Wie Ismael erwähnt hat, müssen Sie hexToAscii
mit web3@^1.0 verwenden
transaction.hash
Aber sieht so aus, als ob Sie es auf dem und nicht auf dem verwendentransaction.input
EDIT: Beispiel:
Transaktion einreichen:
const Tx = require('ethereumjs-tx');
const web3 = require('web3');
const data = web3.utils.toHex('Hello world!');
const rawTx = {
nonce: web3.utils.toHex(nonce),
gasPrice: web3.utils.toHex(gasPrice),
gasLimit: web3.utils.toHex(gasCost),
to: '0x0000000000000000000000000000000000000000',
value: '0x00',
data,
};
const privateKeyWithoutZero = privateKey.startsWith('0x') ? privateKey.slice(2, privateKey.length) : privateKey;
const privateKeyBuffer = new Buffer(privateKeyWithoutZero, 'hex');
const transaction = new Tx(rawTx);
transaction.sign(privateKeyBuffer);
const serializedTx = transaction.serialize();
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.on('transactionHash', (txHash) => {
console.log('Transaction hash', txHash);
})
.on('receipt', (receipt) => {
console.log('Transaction sent with sucess. debug:', receipt);
});
Dann getTransaction:
web3.eth.getTransaction('<TRANSACTION-HASH>')
.then((transaction) => {
const inputData = Web3.utils.hexToAscii(transaction.input);
console.log(inputData); // Hello world!
});
Fragesteller
Ismael
"
um deinen Parameter herumweb3.utils.hexToAscii("0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498")
. Auf jeden Fall macht es wenig Sinn,hexToAscii
mit einem Transaktions-Hash oder einertransaction.input
. Es sollte für einige Felder verwendet werden, die vonasciiToHex
like generiert wurdenblock.extraData
. Wenn Sie eine Transaktionseingabe analysieren möchten, benötigen Sie den Vertrag abi und die Verwendung einer Bibliothek wie ethereumjs-abi , um die Parameterwerte des Aufrufs zu lesen.Fragesteller
Ismael
toHex
(entspricht dem heutigenasciiToHex
). Es funktioniert in Ihrem Fall nicht, da es sich um einen rohen Funktionsaufruf handelt. Wie gesagt, Sie benötigen die Vertrags-ABI und einen ABI-Parser, um Informationen aus den Parametern des Anrufs zu extrahieren.