如何在智能合约上捕获异常?
How can catch exception on Smart Contract?
您好,先谢谢您了!
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...`)
)
您好,先谢谢您了!
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...`)
)