3

关于宠物商店Dapp案例实现的问题报错Contract has not been deployed to detected net...

 3 years ago
source link: https://learnblockchain.cn/question/1850
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
关于宠物商店Dapp案例实现的问题报错Contract has not been deployed to detected network (network/artifact mismatch)

5 关于宠物商店Dapp案例实现的问题报错Contract has not been deployed to detected network (network/artifact mismatch)

回答问题即可获得 5 经验值,回答被采纳后即可获得 10 学分。
markAdopted: function(adopters, account) {
    var adoptionInstance;
    
    App.contracts.Adoption.deployed().then(function(instance) {
		
      adoptionInstance = instance;
      
      // 调用合约的getAdopters(), 用call读取信息不用消耗gas
      return adoptionInstance.getAdopters.call();
      
    }).then(function(adopters) {
      
      for (i = 0; i < adopters.length; i++) {
        if (adopters[i] !== '0x0000000000000000000000000000000000000000') {
          $('.panel-pet').eq(i).find('button').text('Success').attr('disabled', true);
        }
      }
    }).catch(function(err) {
      console.log('contract fail',err.message);
    });
  },

上面截取来 app.js 文件

总是报错 contract fail Contract has not been deployed to detected network (network/artifact mismatch),但是上面这段代码我始终解决不了,我合约用 truffle 正常编译部署在本地了,但是还是这样,完整代码如下(https://www.jianshu.com/p/9844d97ef1d0


自己尝试的时候把 App.contracts.Adoption.deployed().then(function(instance)
改成了 App.contracts.Adoption.at("我的合约部署地址").then(function(instance)
这个时候 instance 能正常返回一个实例了,但是用 deployed(),instance 就不能正常返回一个实例,报错在这里,希望有大佬能解答一下疑惑。


App = {
  web3Provider: null,
  contracts: {},

  init: async function() {
    // Load pets.
    $.getJSON('../pets.json', function(data) {
      var petsRow = $('#petsRow');
      var petTemplate = $('#petTemplate');

      for (i = 0; i < data.length; i ++) {
        petTemplate.find('.panel-title').text(data[i].name);
        petTemplate.find('img').attr('src', data[i].picture);
        petTemplate.find('.pet-breed').text(data[i].breed);
        petTemplate.find('.pet-age').text(data[i].age);
        petTemplate.find('.pet-location').text(data[i].location);
        petTemplate.find('.btn-adopt').attr('data-id', data[i].id);

        petsRow.append(petTemplate.html());
      }
    });

    return await App.initWeb3();
  },

  initWeb3: function() {
    // Is there an injected web3 instance?
    if (typeof web3 !== 'undefined') {
      App.web3Provider = web3.currentProvider;
    } else {
      // If no injected web3 instance is detected, fall back to Ganache
      // 优先调用MetaMask提供的web3的实例
      App.web3Provider = new Web3.providers.HttpProvider('http://localhost:8545');
    }
    web3 = new Web3(App.web3Provider);

    return App.initContract();
  },

  initContract: function() {
    // 加载Adoption.json,保存了Adoption的ABI(接口说明)信息及部署后的网络(地址)信息,它在编译合约的时候生成ABI,在部署的时候追加网络信息
  $.getJSON('../Adoption.json', function(data) {
    // 用Adoption.json数据创建一个可交互的TruffleContract合约实例。
    var AdoptionArtifact = data;
	console.log();
    App.contracts.Adoption = TruffleContract(AdoptionArtifact);
	console.log(App.contracts.Adoption);
    // Set the provider for our contract
    App.contracts.Adoption.setProvider(App.web3Provider);

    // Use our contract to retrieve and mark the adopted pets
    return App.markAdopted();
  });
  return App.bindEvents();
  },

  bindEvents: function() {
    $(document).on('click', '.btn-adopt', App.handleAdopt);
  },

  markAdopted: function(adopters, account) {
    var adoptionInstance;
    
    App.contracts.Adoption.deployed().then(function(instance) {
		
      adoptionInstance = instance;
      
      // 调用合约的getAdopters(), 用call读取信息不用消耗gas
      return adoptionInstance.getAdopters.call();
      
    }).then(function(adopters) {
      
      for (i = 0; i < adopters.length; i++) {
        if (adopters[i] !== '0x0000000000000000000000000000000000000000') {
          $('.panel-pet').eq(i).find('button').text('Success').attr('disabled', true);
        }
      }
    }).catch(function(err) {
      console.log('contract fail',err.message);
    });
  },


  handleAdopt: function(event) {
    event.preventDefault();

    var petId = parseInt($(event.target).data('id'));

    var adoptionInstance;

    // 获取用户账号
    web3.eth.getAccounts(function(error, accounts) {
      if (error) {
        console.log('no get account',error);
      }
    
      var account = accounts[0];
    
      App.contracts.Adoption.deployed().then(function(instance) {
        adoptionInstance = instance;
    
        // 发送交易领养宠物
        return adoptionInstance.adopt(petId, {from: account});
      }).then(function(result) {
        return App.markAdopted();
      }).catch(function(err) {
        console.log('adoption fail',err.message);
      });
    });
  },
  

};


$(function() {
  $(window).load(function() {
    App.init();
  });
});

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK