Вызов web3js не выполняется из-за отсутствия адреса контракта

Чтобы развернуть контракт на моей локальной установке, я использую трюфель. Сеть разработки управляется Ganache. Также отправка данных в сеть из приложения A не проблема (с использованием пакетов с трюфелями / трюфелями). Я запускаю это приложение в том же рабочем каталоге, что и компилирую и переношу контракты.

Однако, когда у меня есть другое приложение, подключенное к этой сети, и я пытаюсь получить данные, я сталкиваюсь с проблемами. Это не использует ничего трюфеля, только web3js.

Я получаю данные следующим образом:

let contractInstance = new web3.eth.Contract(abi, result.contractHashes)
if (!contractInstance) handleError('Could not find contract instance... Shutting down')

for (let i in result) {
  let internalId = result[i]._id

  contractInstance.methods.getStartDate(internalId).call(function(error, result) {
    if (error) handleFatalError(error, mongoClient) // This error is triggered

    console.log(result)
  })
}

Это всегда возвращает меня:

Ошибка: для этого объекта контракта еще не установлен адрес. Сначала укажите адрес.

Из 48609913 я понимаю это происходит, когда вы забываете упомянутый шаг, как описано, однако я не создаю новый контракт, я просто ссылаюсь на счет, уже существующий в сети. Для меня не имеет смысла, если я ссылаюсь на контракт по его адресу, он не знает адрес контракта? Основываясь на этой статье, я попытался использовать пропущенный шаг (след и ошибка) после адрес параметров web3, но то же сообщение об ошибке.

Также используя

call().then(....)

or

call({ from: result.contractHashes }, function(error, result) {....})

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


person Crittje    schedule 11.07.2018    source источник
comment
Какую версию web3.js вы используете и каково значение result.contractHashes?   -  person user94559    schedule 11.07.2018
comment
Это переменная со странным названием, которая должна быть адресом контракта.   -  person user94559    schedule 11.07.2018
comment
Привет, smarx, Спасибо за уделенное время. У меня версия 1.0.0-beta.34. Также я согласен с наименованием, должно быть contractAddress, необходимо изменить его в другом проекте.   -  person Crittje    schedule 12.07.2018
comment
И в чем его ценность? Вы это регистрировали? (Я предполагаю, что он пустой.)   -  person user94559    schedule 12.07.2018
comment
Smarx, спасибо! Итак, я зарегистрировал результат и увидел значение contractHashes. Однако я не видел, чтобы на самом деле это был результат [0] .contractHashes. Немного глупо, но спасибо за предложение посмотреть поподробнее.   -  person Crittje    schedule 13.07.2018
comment
Есть новости по этому поводу?   -  person mtsfaria    schedule 01.11.2018
comment
Привет, mtsfaria, да, проблема в том, что он возвращает массив. Поэтому мне пришлось вызвать result [0] .contractHashes вместо result.contractHashes   -  person Crittje    schedule 01.11.2018


Ответы (2)


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

person babs    schedule 24.05.2020
comment
Это не дает ответа на вопрос. Как только у вас будет достаточная репутация, вы сможете комментировать любой пост; вместо этого предоставит ответы которые не требуют пояснений от автора вопроса. - Из отзыва - person Graviton; 25.05.2020

Сначала проверьте правильность предоставленного адреса или сначала разверните контракт, а затем попытайтесь получить к нему доступ, потому что thecontractInstance.options.address = null.

person Dhiraj Bhor    schedule 15.10.2020