Web3/Metamask: ошибка: контракт не был развернут в обнаруженной сети (несоответствие сети / артефакта) в сети Kovan

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

Итак, во-первых, я установил метамаску в качестве текущего поставщика, а затем развернул экземпляр контракта следующим образом:

  deployContract = (contract) => {
   contract.deployed().then(function(instance) {
    let proxy = instance;
    return proxy.ProxyAddress()
    }).then(function(result){
      this.setState({
      address: result,
    });
 })
}

Но тогда я получаю следующую ошибку:

Uncaught (in promise) Error: Contract has not been deployed to detected network (network/artifact mismatch)
at eval (webpack:///./~/truffle-contract/contract.js?:429)
at <anonymous>

Я обнаружил, что это вызвано тем, что сетевой идентификатор web3 неверен. Мой сетевой идентификатор web3 установлен Metamask, который должен ввести web3 с правильным идентификатором. Но когда я получаю идентификатор сети, я получаю совершенно другой результат:

web3.version.getNetwork(function(err,res){console.log(res)})
> 3

Есть ли способ установить сеть версии web3 вручную? Я посмотрел в документации и GitHub, но не было никакой полезной информации.

РЕДАКТИРОВАТЬ:

Похоже, что закрытие и повторное открытие Chrome решают проблему с идентификацией. Итак, теперь у меня оба идентификатора установлены как 42, но ошибка все та же, что и раньше. Возвращается на круги своя...

1 ответ

Решение

Итак, в конце концов, проблема была вызвана импортом моих контрактов. Мой предыдущий импорт был сделан так:

let contract = require('truffle-contract');
let Factory = contract("../contracts/Factory.json");

Хотя это на самом деле должно быть импортировано следующим образом:

let contract = require('truffle-contract');
let json = require("../contracts/Factory.json");
let Factory = contract(json);

Итак, если подвести итог, если такая ошибка случится с вами, сначала выполните эти проверки:

-Проверить контракт на импорт.

-Проверьте своего веб-провайдера. console.log(window.web3.currentProvider)

-Проверьте сетевой идентификатор web3. web3.version.getNetwork(function(err,res{console.log(res)})

Другие вопросы по тегам