संकट
मैं कोशिश कर रहा हूँ इसलिए टेस्टनेटवर्क (रोपस्टेन) में एक अनुबंध की एक विधि का उपयोग करें, लेकिन यह इस त्रुटि के कारण विफल हो जाता है:
कारण: 'गैस का अनुमान नहीं लगा सकता; लेन-देन विफल हो सकता है या मैन्युअल गैस सीमा की आवश्यकता हो सकती है', कोड: 'UNPREDICTABLE_GAS_LIMIT'
कोड
मैंने स्मार्ट अनुबंध का एक उदाहरण बनाया और इसकी रजिस्टर विधि को कॉल करना चाहता था:
const registrationContract = new ethers.Contract(ADDRESS, abi, signer);
const hashedDomain = utils.keccak256(utils.toUtf8Bytes(domain));
const register = await registrationContract.register(hashedDomain, walletAddress);
क्या ethers.js अनुबंध की सीमा निर्धारित करने के लिए कोई फ़ंक्शन प्रदान करता है? या यह अन्यथा किया जा सकता है? मुझे दस्तावेज़ीकरण में कोई नहीं मिला।
1 उत्तर
आप एक साधारण हस्तांतरण लेनदेन के लिए अंतिम तर्क के रूप में किसी वस्तु के साथ गैस सीमा निर्धारित कर सकते हैं, आप ऐसा कुछ कर सकते हैं:
const tx = {
to: toAddress,
value: ethers.utils.parseEther(value),
gasLimit: 50000,
nonce: nonce || undefined,
};
await signer.sendTransaction(tx);
यदि आप एक स्मार्ट अनुबंध के लिए लेन-देन कर रहे हैं, तो विचार समान है, लेकिन सुनिश्चित करें कि आपने अपनी अबी विधियों में से एक में अंतिम पैरामीटर सेट किया है, उदाहरण:
const tx = await contract.safeTransferFrom(from, to, tokenId, amount, [], {
gasLimit: 100000,
nonce: nonce || undefined,
});
यह UNPREDICTABLE_GAS_LIMIT त्रुटि को ठीक कर सकता है, क्योंकि इसे मैन्युअल रूप से सूचित करने के बाद से ईथर परिकलित गैस_लिमिट का अनुरोध करने वाले प्रदाता को एक आरपीसी विधि कॉल छोड़ देता है।
x
के साथ सेट करते हैं:uniswap.swapExactTokensForETH(tokenAmount, ethAmount, etc., {gasLimit: x})