据我所知,在稳固性方面没有任何习惯的例外。唯一的例外是Out of Gas。无论我们用契约代码编写throw,它都会抛出out-of-gas异常。
但是,有什么办法我可以抓住这个例外吗?我的意思是,当出现异常时,我是否可以执行一段代码?即使在使用geth控制台时,我也没有收到任何异常发生的通知。
我认为很有可能捕捉到这样的异常,因为Mist能够在异常发生时显示Intrinsic gas too low错误消息,所以它一定是在某个地方处理了该异常。
编辑:
问题基本上是:
在发送事务之前,我们如何知道该事务将消耗所有所提供的气体?
我不是在问如何为我的交易提供足够的汽油,而是如何知道我的
当我通过Remix调用函数时,我没有问题。但是,当我试图通过浏览器调用它时,我会得到错误:
Error: Returned error: VM Exception while processing transaction: out of gas
有时我在Remix中会出现以下错误:超过了阻塞气体限制。
代码:
const smartVotingContract = new web3.eth.Contract(abi, myContractNumber, {
from: myAccountNumber,
gas: '3000000',
gasLimit:
From the global context: msg.gas (uint): remaining gas
我想了解这个全局上下文变量是何时以及如何更新的。在Remix中,我连续多次运行回退函数,但它似乎从未改变过msg.gas .
在什么意义上?这个用户可用的总数?这一特定交易的剩余金额?交易完成后或之前还剩下什么?如果您在函数foo()中检查它,函数foo()即将调用函数bar(),而函数bar()也要花费汽油,那该怎么办?它在每个函数中的价值是什么?它到底是什么时候换的?这些全局上下文变量究竟存储在哪里?
我正在使用ethers.js来调用我自己的智能契约。我得到了这样的结果:
Error: cannot estimate gas; transaction may fail or may require manual gas limit
当我使用estimateGas调用ethers.js函数时,我也会得到上面的消息,所以我也不能这样做:
const estimation = await contract.estimateGas.myFunction(x, y, z);
那么,既然我有我的智能合同的源代码,我如何计算正确的气体输入量?
我在网上发现的其他答案似乎都是4+的,我不确定
我正在尝试创建一个交易,如下面所示,但我看不到结果在任何地方。我查过钱包,从客户那里查询过。
var proposalsFunction = contract.GetFunction("newProposal");
var transactionOfProposal = await proposalsFunction.SendTransactionAsync( addressFrom,p.Recipient,p.Amount,p.Description,true);
这是我要执行的合同方法。(出于某种原因,它希望bool作为最后一个参数)
function newPropos
我试着用松露把合同部署到腐朽的网络上。我检查了最后一个气体限值,我给出了最后一个块的气体极限值,但是我得到了这个错误:
"Migrations" exceeded the block limit (with a gas value you set).
然后我增加了气体值,我又得到了一个错误:
ran out of gas (using a value you set in your network config or deployment parameters.
我能自动地得到用于ropsten的块菌配置文件中的气体值吗?
谢谢