web3.toAscii(хэш транзакции) для web3js версии 1

Когда я использовал, web3.toAsciiя получил следующую ошибку:

введите описание изображения здесь

Я думаю, причина в моей версии web3, т.е.'1.0.0-beta.34'

Если да, то есть ли альтернативная команда для версии 1 web3 для следующей команды?

transaction = web3.eth.getTransaction('0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498')
input = web3.toAscii(transaction.input)
console.log(input)

Я также использовал следующую команду:

web3.utils.hexToAscii(0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498)

Однако я получаю следующую ошибку:

введите описание изображения здесь

Это означает, что его ввод не может быть хешем транзакции.

Ответы (2)

Эквивалент должен быть web3.utils.hexToAscii .

web3.utils.hexToAscii('0x4920686176652031303021');
> "I have 100!"
Спасибо, я уже пробовал это, однако его ввод не может быть хэшем транзакции. Я объяснил это в своем вопросе.
@sas Вам не хватает "вашего параметра web3.utils.hexToAscii("0x0c485e0f155f7f216d06e70ef85b684392c9b190c2f7c0af67ec1b56d6945498"). В любом случае не имеет особого смысла использовать hexToAsciiхэш транзакции или файл transaction.input. Он предназначался для использования в некоторых полях, созданных asciiToHexподобными block.extraData. Если вы хотите проанализировать ввод транзакции, вам нужен контракт abi и использование библиотеки, такой как ethereumjs-abi , для чтения значений параметров вызова.
Вы правы, однако на этот раз результат не такой, как ожидалось: '\fH^\u000f\u0015_!m\u0006ç\u000eø[hCɱÂ÷À¯gì\u001bVÖT'". Потому что согласно этому ответу: ethereum .stackexchange.com/questions/11144/… Я хочу декодировать данные транзакции так, чтобы их можно было прочитать.
Он работает в ссылке, потому что был сгенерирован toHex(эквивалентно сегодняшнему asciiToHex). Это не работает в вашем случае, потому что это необработанный вызов функции. Как я уже сказал, вам понадобится контрактный ABI и анализатор ABI для извлечения информации из параметров вызова.

Как упоминал Исмаэль, вы должны использовать hexToAsciiс web3@^1.0

Но похоже, вы используете его на transaction.hash, а не наtransaction.input

РЕДАКТИРОВАТЬ: пример:

Отправить транзакцию:

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);
});

Затем получите транзакцию:

web3.eth.getTransaction('<TRANSACTION-HASH>')
        .then((transaction) => {
          const inputData = Web3.utils.hexToAscii(transaction.input);
          console.log(inputData); // Hello world!
        });
не могли бы вы привести пример для transaction.input? Я имею в виду использование web3.utils.hexToAscii. Спасибо.
Пример добавлен выше
Спасибо. Теперь это читабельно. Я собираюсь установить синтаксический анализатор abi следующим образом: github.com/ethereumjs/ethereumjs-abi для декодирования данных tx.
Зависит от вашей цели, но если вы просто хотите прочитать входные данные, вам не нужно использовать ethereum-abi, я обновил свой пример простым рабочим скриптом
Спасибо. На самом деле я намереваюсь получить данные Tx, используя HTML и JavaScript. Я создал репозиторий github здесь: github.com/s1241/GUI-for-Smart-Contract , его смарт-контракт успешно протестирован, однако html и javascript не завершены. Вам интересно взглянуть на его HTML-файл?
Вам просто нужно реализовать то, что я отправил вам выше :) После похоже, что вы не хотите использовать transaction.input, а смарт-контракт в вашем случае...