我刚刚用电子钱包部署了一份智能合同。我得到了,我从混合中复制了它的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 {
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;
}}
发布于 2019-04-25 13:17:22
在智能契约中调用函数有两种方法:通过发送到网络的事务或通过本地call。
事务没有返回值。您从用于进行事务处理的库中获得的通常是事务哈希。调用的函数的任何返回值都将被丢弃。
本地call不涉及到网络的事务,因此不能更改任何状态。但它确实给出了一个返回值。
对于大多数库来说,默认情况下选择哪种方法取决于该函数是否在状态更改。如果将函数标记为view或pure,它将告诉库这些函数不会更改状态,然后可以安全地在本地进行call编辑以获得返回值。因此,上述代码的一个简单“修正”是将这些函数设置为pure。对于确实改变状态的函数,您需要从使用return值切换到释放事件,这些事件可以在挖掘事务之后读取。
https://stackoverflow.com/questions/55849414
复制相似问题