首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ethereum智能合同要求功能

Ethereum智能合同要求功能
EN

Ethereum用户
提问于 2019-09-04 04:02:45
回答 2查看 843关注 0票数 0

关于智能合同的“要求功能”,我有一个问题。职能如下,

代码语言:javascript
复制
function set(uint currentTs) public {
    require(msg.sender == owner);
    ts = currentTs;
}

我不是所有者,但是我用参数调用这个函数(对于exmaple,1567569109)。因此,原始事务包含合同地址、我的EOA、gas、.和当前is ( 1567569109 )。

但是,我的EOA在require函数中不符合条件。此时,我发送的交易是否会被成功挖掘,但智能合同的状态不会改变。(如果我扫描整个区块链上的所有事务,我可以找到1567569109,但当我查询智能契约中的变量ts时,ts不会改变。)

是对的吗?或者,如果require中的条件不匹配,事务就会失败,并且不会被挖掘。

谢谢!

EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-09-04 04:15:10

简短的回答:交易将失败,并将被挖掘。你将被收取天然气费用,但智能合同的状态不会改变。事务状态将为0x0 (失败)。

长答案:伪函数revert检查条件,如果条件为假,则恢复当前智能契约调用到目前为止所做的所有更改。它还递归地恢复由当前智能契约调用执行的所有智能契约调用和所有以太传输所做的更改。它还向发送方返回与当前智能契约调用一起发送的所有以太。不过,如果该智能契约被另一个智能契约调用,require将不会恢复调用另一个智能契约所做的更改。另外,天然气是不退还的。因此,即使条件为false,require也不需要还原当前事务所做的所有更改,而只恢复当前调用所做的更改,不退还气体成本,也不阻止挖掘事务。事务状态仅反映事务内最高级智能契约调用的执行状态,而不受嵌套调用(成功或不成功)的影响。但是,当从外部拥有的地址调用智能契约时,当前事务和当前智能契约调用几乎是一回事。

票数 0
EN

Ethereum用户

发布于 2019-09-04 04:23:40

当require中的条件不匹配时,事务可以被挖掘并插入到块中,但是事务状态将“失败”。require语句之前的所有状态更改都将恢复到以前的状态。剩余的天然气如有,将予以退还。

所以,你在你的案例中所发现的是正确的。事务被添加到链中,但由于请求失败,状态不变。

进一步解释,见此处

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

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

复制
相关文章

相似问题

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