Сообщение new bignumber not a base 16 number null код bignumber error

Обновлено: 05.07.2024

Эта функция возвращает номер ошибки, которая вызвала выполнение блока CATCH конструкции TRY. CATCH.

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Типы возвращаемых данных

int

Возвращаемое значение

При вызове в блоке CATCH функция ERROR_NUMBER возвращает номер ошибки, вызвавшей выполнение блока CATCH.

Функция ERROR_NUMBER возвращает значение NULL в случае вызова вне блока CATCH.

Remarks

Функцию ERROR_NUMBER можно вызывать в любом месте области действия блока CATCH.

Функция ERROR_NUMBER возвращает соответствующий номер ошибки независимо от количества ее выполнений или от места ее вызова в области действия блока CATCH . В этом ее отличие от таких функций, как @@ERROR, которые возвращают номер ошибки только в той инструкции, которая непосредственно следует за инструкцией, вызвавшей ошибку.

Во вложенном блоке CATCH функция ERROR_NUMBER возвращает номер ошибки, соответствующий области действия блока CATCH , который ссылался на данный блок CATCH . Например, блок CATCH внешней конструкции TRY. CATCH может содержать внутреннюю конструкцию TRY. CATCH . Во внутреннем блоке CATCH функция ERROR_NUMBER возвращает номер ошибки, вызвавшей внутренний блок CATCH . Если функция ERROR_NUMBER выполняется во внешнем блоке CATCH , она возвращает номер ошибки, вызвавшей внешний блок CATCH .

Примеры

A. Использование функции ERROR_NUMBER в блоке CATCH

В приведенном ниже примере показана инструкция SELECT , вызывающая ошибку деления на ноль. Блок CATCH возвращает номер ошибки.

Б. Использование функции ERROR_NUMBER в блоке CATCH с другими средствами обработки ошибок

В приведенном ниже примере показана инструкция SELECT , вызывающая ошибку деления на ноль. Вместе с номером ошибки блок CATCH возвращает сведения о ней.

Я использую truffle serve и веб-страницу для нового контракта.

app.js регистрирует адрес 0x1d379f2ab48ad20319e9f81cb45af415aa6f2966 , и я хочу использовать этот адрес для вызова wakeUp() в payontime.sol через другое приложение index.js .

2 ответа

contractInstance.wakeUp.call вызывает функцию как постоянную, но функция не определена как постоянная:

Если ваша функция Solidity не меняет состояние блокчейна и просто читает данные, вы должны определить его как константу.

Ниже приведен код моего контракта для тестирования события.

и сторона Javascript, которая работает в браузере Chrome.

тогда я получаю результат, как показано ниже.

web3.js = 0,16
Geth = 1.3.5
Версия Solidity редактора Solidity = v0.3.1

Это должно быть исправлено.

Самый полезный комментарий

Привет, я просто хотел вмешаться и сообщить людям, что ошибка web3, связанная с невозможностью декодировать индексированный динамический тип из события, исправлена ​​в web3 1.0 beta 18

Простое обновление до 1.0 полностью устранило это для меня.

Все 39 Комментарий

Вы разрешили это? У меня была аналогичная ошибка, когда у меня не было чего-то другого. Например, web3.personal.unlockAccount сообщает, что он не реализован. Мне сообщили, что web3 не дает вам возможности создавать сеансы для учетных записей.

Я видел это, когда мой узел не был полностью синхронизирован. Контракт ожидал, что будет возвращена строка, но поскольку эта строка еще не была установлена, он возвращал null, что могло бы взорваться при синтаксическом анализе.

Я считаю, что то же самое может произойти при указании адреса, который на самом деле не реализует этот API. Если резервная функция не возвращает строку, у вас возникнут проблемы с ее анализом.

Просто убедитесь, что ваш блокчейн синхронизирован и вы указываете на правильную учетную запись. Это может возникнуть из-за других проблем, но это похоже на два распространенных сценария, которые могут вызвать эту ошибку.

@ se3000, спасибо, мы должны правильно уловить это на web3.js и не пытаться анализировать его.

В документе Solidity, похоже, указывается, что строки МОГУТ индексироваться.

Если в качестве индексированных аргументов используются массивы (включая строку и байты), вместо этого хеш-код sha3 сохраняется как тема.

Так может это баг на мероприятиях? Может кто-нибудь подтвердить?

Спасибо @sharkfisher за указание на ключевое слово indexed . Была такая же ошибка BigNumber, но работала должным образом при исключении ее из параметров события.
Выглядит странно непоследовательно, особенно с упомянутым выше значением возможности использовать indexed для string в документации .

На всякий случай, если это кому-то поможет, удаление всех node_modules и установка npm решила для меня эту проблему.

Да, Web3 неправильно анализирует типы индексированных массивов как есть (строки, байты, массив). Возвращаемое значение на самом деле является хешем SHA3 реального значения .

Та же проблема. Не использовались события или установка индекса, простой constant returns(string).. и web3 сообщали BigNumber() not a base 16 number .

Сброс testrpc , а затем повторное развертывание с помощью truffle migrate --reset решили проблему.

  • TestRPC v2.0.9
  • Трюфель v2.0.8
  • Web3 0.16.0

Я могу подтвердить, что могу воспроизвести эту ошибку с индексированными строковыми аргументами для событий.

Я создал тестовый контракт с событием:

и я могу правильно смотреть и справляться с этим. Если я изменю его на:

Любое обновление, я получаю эту ошибку. Я использую Geth
Версия: 1.4.12-stable-421df866
Версии протокола: [63 62]
Идентификатор сети: 1
Версия Go: go1.7.1
ОС: дарвин
ГОПАТ =
GOROOT = / usr / local / Cellar / go / 1.7.1 / libexec
Пожалуйста, дайте мне знать, что нужно сделать.

попробуйте синхронизировать вашу цепочку

Привет Белладж,
спасибо за ответ .. не могли бы вы сообщить мне, как синхронизировать цепочку .. Я использую сеть DEV.
Заранее спасибо.
С Уважением,
Бала

Та же проблема, при использовании события с индексированной строкой, что-то вроде его:

Затем возникает ошибка, когда я выполняю Index1.deployed (). AllEvents (). Get (callback))

Та же проблема, но, что любопытно, только при удалении indexed:

event NewRequest(bytes16 indexed hash, uint salt, string hint, uint max_length); в порядке
event NewRequest(bytes16 hash, uint salt, string hint, uint max_length); - норвежские кроны

Возникла та же проблема, пришлось удалить ключевое слово 'indexed' из типа 'string' в событии, чтобы обойти это. Надеясь на возможное исправление этого.

Извините, я не могу быть более полезным. Это все так давно :-)

Эта проблема сохраняется в последней версии web3.js (0.19.0).

@clowestab эта ошибка возникает по разным причинам. вы можете предоставить более подробную информацию. иногда это происходит из-за ошибки в коде web3js dapp.

Как заявляли другие; вы можете повторно синхронизировать свой блокчейн, чтобы обойти это. В моем случае; Я только что перезапустил testrpc ; перераспределил мой контракт, и моя строка заработала.

Рассматривалась ли эта ошибка? Потому что это все еще происходит через 1 год.

никто не решает эту проблему?

У меня такое же исключение, вызванное ошибкой вне индекса. Кажется, что Solidity не может четко описать причину ошибки

Некоторые параметры не могут быть декодированы, если они являются индексированными параметрами события. Поскольку они хранятся в тематическом слоте размером 32 байта, Solidity плотно упаковывает их и sha256.
Web3.js в настоящее время не поддерживает это, поэтому эти ошибки.

Напоминание: массивы, строки и байты плотно упакованы и хешируются, все статические типы сохраняются как есть

Как использовать строку и адрес как индексированные в событиях? Я использую geth 1.6.6-stable, web3 api 0.20.1. По-прежнему сталкиваюсь с той же проблемой. Решает ли проблему какая-либо другая версия? Пожалуйста, дайте мне знать.

Сегодня у меня такая же проблема, но когда я воспроизвел средство наблюдения за событиями, чтобы начать заново с начального блока, все прошло идеально. Иногда у меня возникает эта проблема, иногда - нет. Может ли это быть проблемой синхронизации блокчейна?

@frozeman, любые обновления по этому

Я считаю, что это также может быть проблема с файлами json, которые создает цикл сборки. Эта ошибка возникает у меня, казалось бы, случайным образом, однако, если я удалю все файлы .json (кроме migrations.json) в папке сборки и повторно запустил компиляцию / миграцию в консоли трюфеля, все будет работать гладко.

Привет, я просто хотел вмешаться и сообщить людям, что ошибка web3, связанная с невозможностью декодировать индексированный динамический тип из события, исправлена ​​в web3 1.0 beta 18

Простое обновление до 1.0 полностью устранило это для меня.

@ glitch003 web3.js 1.0 не выпущен, как обновиться до 1.0? Спасибо

Есть ли известная проблема с анализом событий, содержащих строки, в Truffle/Web3?

Я использую трюфель со следующим простым контрактом

Когда я вызываю shout(_), foo настроен правильно и запускается событие Shout, и я могу его слушать без каких-либо проблем.

Однако, когда я смотрю TextEvents со следующим кодом

Я получаю следующую ошибку, которая, похоже, связана с преобразованием bytes32 в строку:

Итак, вопрос в том, как вы можете прослушивать события, содержащие строки в Web3, не сталкиваясь с этой ошибкой?

3 Ответа 3

Я видел это, когда мой блокчейн не был полностью синхронизирован. Контракт ожидал, что будет возвращена строка, но, поскольку эта строка еще не была установлена, он возвращал null, который взорвался бы при синтаксическом анализе.

Я считаю, что то же самое может произойти при указании адреса, который на самом деле не реализует этот API. Если резервная функция не возвращает строку, у вас возникнут проблемы с ее синтаксическим анализом.

Просто убедитесь, что ваш блокчейн синхронизирован и вы указываете на нужную учетную запись.

Из выпуска Github:

Поэтому попробуйте удалить все индексы в строковых полях в определении события, пока они не исправят ошибку.

Afr

Afr спросил: 6 лет назад

Читайте также: