После обновления Web3 с 1.0.0-beta.34
на 1.0.0-beta.37
попытка доступа к любым свойствам Web3.utils
, Web3.eth
, Web3.bzz
и Web3.shh
выдаст ошибку. Например, вызов web3.utils.utf8ToHex('some string')
в 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.info("Web3.eth = " + Web3.eth)
console.info("Web3.utils = " + Web3.utils)
console.info("Web3.bzz = " + Web3.bzz)
console.info("Web3.shh = " + Web3.shh)
Выведет:
> Web3.eth = undefined
> Web3.utils = undefined
> Web3.bzz = undefined
> Web3.shh = undefined
Статические свойства (Web3.utils
, Web3.eth
и т. д.) были удалены, потому что если кто-то просто использует utils
, то ему, вероятно, следует использовать модули web3-utils
и web3-eth
напрямую, а не связывать полную библиотеку (ссылка).
Пример рабочего кода:
const Web3Utils = require('web3-utils');
const someString = Web3Utils.utf8ToHex('some string');
Примечание. Долгосрочной целью будет удаление класса Web3 и создание пространства имен Web3. Но это будет сделано после выхода стабильной версии (ссылка).
потому что зачем иметь один пакет, когда можно иметь 3 пакета