首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EVM:在执行发送时耗尽气体

EVM:在执行发送时耗尽气体
EN

Ethereum用户
提问于 2021-02-26 04:51:42
回答 1查看 295关注 0票数 0

我想考虑一个场景,假设合同使用send执行传输。此时,气体耗尽发生,并送回-1。现在合同没有天然气,发送不恢复,EVM会发生什么情况,它会因为没有气体而阻塞吗?EVM将如何摆脱这种阻塞局面?请提供一些从Ethereum文档的链接。

代码语言:javascript
复制
contract TestOutofGas{
     :
     :
      function transaction(address otherContract, uint x) public returns () {
       :
       retVal = otherContract.send(1000);//out of gas
       bool success = findPrime(x);
         :
        :
      }//func transaction
}//contract OutofGas

假设另一种情况,

代码语言:javascript
复制
contract TestOutofGas{
     uint trnNo=0;
     :
     function transaction(address otherContract) public returns (uint) {
       :
         retVal = otherContract.send(1000);//out of gas
         require(retVal);
         trnNo++;
       :
       :
     }//func ends
}//contract ends

EVM是否能够执行需求(…)?如果合同没有任何气体的指示?

祖尔菲。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-02-28 03:56:06

让我们分析第二个案例

代码语言:javascript
复制
 function transaction(address otherContract) public returns (uint) {
   :
     retVal = otherContract.send(1000);//out of gas
     require(retVal);
     trnNo++;
   :
   :
 }//func ends

otherContract.send失败时,EVM正在处理一个调用操作码,它将在顶部堆栈条目中留下0 (false)。

EVM将尝试执行下一个操作码,将0赋值给retVal。无论它试图执行的操作码是什么,如果没有足够的汽油来支付,EVM将立即停止任何更改。

require()是返回错误消息的一种奇特的方法。如果存在诸如除法、无效操作码等错误,EVM可以在不需要的情况下恢复。

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

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

复制
相关文章

相似问题

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