簡體   English   中英

合約尚未部署到檢測到的網絡(網絡/工件不匹配)

[英]Contract has not been deployed to detected network (network/artifact mismatch)

我在確定和連接正確的 MetaMask 網絡時遇到了一些問題。

在 Ganache 中,我的 RPC 服務器是 127.0.0.1.7545,網絡 ID 是 5777。但是,當我嘗試使用此信息在 MetaMask 中創建自定義 RPC 時,出現以下錯誤:

The endpoint returned a different chain ID: 1337

這是我的 truffle-config.js:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*" // Match any network id
    },
    develop: {
      port: 8545
    }
  }
};

我希望這與我指定的任何網絡 ID 匹配,但控制台顯示以下錯誤:

Contract has not been deployed to detected network (network/artifact mismatch)

我已經嘗試過truffle migrate --reset ,但沒有成功。 我還嘗試在 truffle-config.js 中為 testrpc 創建一個顯式網絡 - 這也不起作用。

任何幫助將非常感激!

您看到該錯誤是因為您的合約已部署到 Ganache,但您連接到不同的網絡。

您為加載合約而編寫的代碼應該在try/catch塊內。

內部加載合約邏輯:

export const loadContract = async (name, provider) => {
  // Load the contract

  // set the provider

  let deployedContract = null;
  try {
    // Get the contract
    deployedContract = await _contract.deployed();
  } catch {
    console.error("You are connected to the wrong network");
  }

  return deployedContract;
};

在您使用loadContract的組件中,在useEffect內部調用它。

useEffect(() => {
      // Detect Provider

      if (provider) {
        // contract should be loaded when provider exists
        const contract = await loadContract("ContractName", provider);
       rLoaded: true,
       // Add More logic
      } else {
        console.error("Please, install Metamask.");
      }
    };
  }, []);

現在您需要確保如果您沒有連接到 Ganache,請禁用該按鈕,這樣您的應用程序就不會崩潰。 為此創建一個狀態變量

 // You probably already have logic to get account and contract
  const canConnectToContract = account && contract;

現在寫一個合適的用戶界面:

{!canConnectToContract && (
    <h2>Connect to Ganache</h2>
  )}

  <button
    disabled={!canConnectToContract}
 
  >
    Donate 1 Ethreum
  </button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM