首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取地雷块,而不是假定返回的值

获取地雷块,而不是假定返回的值
EN

Stack Overflow用户
提问于 2019-04-25 12:34:08
回答 1查看 51关注 0票数 0

我刚刚用电子钱包部署了一份智能合同。我得到了,我从混合中复制了它的ABI,并在ethereum钱包上验证了它,它是活动的,我可以看到它的所有方法。

然后我试着从我的nodejs服务器调用它。我做了,我没有发现任何错误。但是,不是像下面方法的返回值那样的经典响应,而是挖掘了blocks....and,这非常奇怪,我认为.如何获得方法输出(返回)?

在此之后,我尝试部署另一个契约,这次是一个非常简单的契约,它具有相同的方法名称、智能契约名称、参数,但是没有方法内部的代码--我只部署了一个基本的硬编码return.When --我也部署了这个契约--我也得到了相同挖掘的智能契约address...which,在我看来,这是很奇怪的。

我一直在使用1.0.0-beta.46,nodejs,高速公路,当我在/#wallet页面上说eth钱包我用傀儡生成的网站时

下面是我尝试部署的基本智能契约,第二个time.The结果与第一个智能契约相同。

pragma坚实度>= 0.4.22 < 0.6.0;

合同BasicContract {

代码语言:javascript
复制
function function1(uint16 a,uint16 b,uint16 c,uint16 d) external payable returns(uint256){
    //a,b,c,d doesn't matter
    return 68;
}


//buy a ticket
function function2(uint128 a,uint16 b) external payable returns(uint128){
    //a,b doesn't matter
    return 94;
}

function function3(uint128 a) external payable returns(bool){
    //a doesn't matter
    return false;
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 13:17:22

在智能契约中调用函数有两种方法:通过发送到网络的事务或通过本地call

事务没有返回值。您从用于进行事务处理的库中获得的通常是事务哈希。调用的函数的任何返回值都将被丢弃。

本地call不涉及到网络的事务,因此不能更改任何状态。但它确实给出了一个返回值。

对于大多数库来说,默认情况下选择哪种方法取决于该函数是否在状态更改。如果将函数标记为viewpure,它将告诉库这些函数不会更改状态,然后可以安全地在本地进行call编辑以获得返回值。因此,上述代码的一个简单“修正”是将这些函数设置为pure。对于确实改变状态的函数,您需要从使用return值切换到释放事件,这些事件可以在挖掘事务之后读取。

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

https://stackoverflow.com/questions/55849414

复制
相关文章

相似问题

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