Contract-Invocation
是否需要 ABI 呼叫與 ethers.js 的合約?
從文件:
// The Contract interface let abi = [ ... ]; // Connect to the network let provider = ethers.getDefaultProvider(); // The address from the above deployment example let contractAddress = "..."; // We connect to the Contract using a Provider, so we will only // have read-only access to the Contract let contract = new ethers.Contract(contractAddress, abi, provider);
我了解這是如何工作的,但我很好奇您是否需要 ABI?在 web3.js 中,你不需要,這要歸功於將合約方法作為字元串傳遞的能力:
// in web3.js contract.methods["someMethod()"]()
至少從 v4 開始,答案是肯定的,必須提供合約 ABI。創建沒有 ABI 且沒有提供者或簽名者的契約:
let tokenContract = new ethers.Contract(tokenAddress);
產生此錯誤:
TypeError:無法讀取未定義的屬性“forEach”
創建沒有提供者或簽名者的契約:
let tokenContract = new ethers.Contract(tokenAddress, erc20Abi);
產生另一個錯誤:
錯誤:無效的簽名者或提供者(arg=“signerOrProvider”,value=undefined,version=4.0.41)