如何在智能合约上捕获异常



你好,提前感谢

const comprarCapsula = () => {
const compraCapsula = async () => {
console.log("Iniciando transacción...");
// ------------------------
const pago = web3.utils.toWei(precioFinal.toString(), 'ether');
// Mensaje de información
infoAlert();
// Petición al SC
const transaction = await contract.myFunction(cantidad, {
from: props.currentAccount,
value: pago.toString()}
).then((result) => {
console.log("RESULT:", result);
successAlert(result.tx);
}).catch((error) => {
console.error("TESTING: ", error.message);
errorAlert(error.message);
});
console.log("TRANS: ", transaction);
// ------------------------
}
contract && compraCapsula()
}

当我使用MetaMask(错误(取消操作时,我的应用程序会检测到,但如果智能合约抛出错误,它不会被捕获

MetaMask - RPC Error: Internal JSON-RPC error. 
Object { code: -32603, message: "Internal JSON-RPC error.", data: {…} }
Data: Object { code: 3, message: "execution reverted: Exception: must have minter role to mint"

错误"必须具有铸造者角色才能铸造";它在我的智能合约中

为什么?我正在尝试几种方法来收集Metamask抛出的RPC错误,但我找不到方法。

你能检查一下这样调用合同函数吗:

contract.myFunction.call

而不是

contract.myFunction

我在制定合同时也遇到过类似的问题。call可以用来查看函数是否会抛出错误,尤其是结构错误、修饰符检查错误,但仅使用call不会调用函数的全部行为。使用call检查错误后,可以再次调用该函数。

使用call的函数调用使我们能够捕捉到这些错误。我当时使用了这样一个结构:

await contract.myFunction.call(`parameters...`)
.then(
contract.myFunction(`parameters...`)
)

最新更新