![](/img/trans.png)
[英]Is it possible to update or alter smart contract (chaincode) deployed in Hyperledger network
[英]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.