`Web3.utils` не определен, а `Web3.eth` не определен

#web3

#javascript #web3js

Вопрос:

После обновления Web3 с 1.0.0-beta.34 на 1.0.0-beta.37 попытку получить доступ к любым свойствам Web3.utils , Web3.eth , Web3.bzz и Web3.shh выдаст ошибку. Например, вызов web3.utils.utf8ToHex('some string') at 2_deploy_contract.js следующим образом:

 const Web3 = require('web3');
web3.utils.utf8ToHex('some string');
  

Вызывает следующее исключение:

 > TypeError: Cannot read property 'utf8ToHex' of undefined
  

И я обнаружил, что следующий фрагмент кода:

 const Web3 = require('web3');
console.log("Web3.eth = "   Web3.eth)
console.log("Web3.utils = "   Web3.utils)
console.log("Web3.bzz = "   Web3.bzz)
console.log("Web3.shh = "   Web3.shh)
  

Выведет:

 > Web3.eth = undefined 
> Web3.utils = undefined 
> Web3.bzz = undefined
> Web3.shh = undefined
  

Ответ №1:

Статические свойства ( Web3.utils , Web3.eth и т. Д.) Были удалены, Потому что, если кто-то просто использует utils , Ему, вероятно, следует использовать модуль web3-utils and web3-eth напрямую, вместо того, чтобы связывать полную библиотеку (ссылка).

Пример рабочего кода:

 const Web3Utils = require('web3-utils');
const someString = Web3Utils.utf8ToHex('some string');
  

Примечание: долгосрочной целью будет удаление класса Web3 и создание пространства имен Web3. Но это будет сделано после стабильной версии (ссылка).