首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免煤气异常

如何避免煤气异常
EN

Ethereum用户
提问于 2016-09-19 08:50:26
回答 2查看 1.3K关注 0票数 4

据我所知,在稳固性方面没有任何习惯的例外。唯一的例外是Out of Gas。无论我们用契约代码编写throw,它都会抛出out-of-gas异常。

但是,有什么办法我可以抓住这个例外吗?我的意思是,当出现异常时,我是否可以执行一段代码?即使在使用geth控制台时,我也没有收到任何异常发生的通知。

我认为很有可能捕捉到这样的异常,因为Mist能够在异常发生时显示Intrinsic gas too low错误消息,所以它一定是在某个地方处理了该异常。

编辑:

问题基本上是:

在发送事务之前,我们如何知道该事务将消耗所有所提供的气体?

我不是在问如何为我的交易提供足够的汽油,而是如何知道我的交易将耗尽汽油。

这样做的一种方法是发送事务,让它被挖掘,然后检查是否存在gasUsed=gasSend,是否存在thow use debug.traceTransaction

但是我想知道,如果不发送交易,我的事务是否会完成。在Mist中,每当我试图发送将遇到throw语句的事务时,它都会在发送事务之前显示Intrinsic gas too low。我也想从geth那里做同样的事情。

EN

回答 2

Ethereum用户

发布于 2016-09-19 09:34:18

Solidity没有提供尝试/catch(对于Java/c#)那样的异常管理机制。

由于EVM代码无效,抛出消耗所有提供的气体终端,并恢复对当前合同执行所作状态的所有更改和对以太平衡的更改。这一概念旨在防止网络垃圾邮件。

在黄皮书中提到:

与合同创建一样,如果执行以一种例外的方式停止(即由于耗尽的气体供应、堆栈下流量、无效的跳转目的地或无效指令),则不向调用方退还任何气体,并且状态将恢复到平衡转移之前的点(即σ)。

作为“内在气体太低”的信息

迷雾在不执行任何代码的情况下检查气体的数量,它告诉您事务将失败,因为您没有提供足够的气体来执行事务。

票数 2
EN

Ethereum用户

发布于 2016-09-19 14:04:21

如果您想像Mist那样估计气体,可以调用eth_estimateGas

进行调用或事务,该调用或事务不会添加到区块链中并返回使用过的气体,该气体可用于估计使用过的气体。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/8714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档