获取挖掘块而不是假定的返回值

Getting mined blocks instead of the supposed returned values

我刚刚使用以太坊钱包部署了智能合约。 我得到了智能合约地址,我从 remix 复制了它的 ABI 并在以太坊钱包上验证了它,它是活跃的,我可以看到它的所有方法。

然后我尝试从我的 nodejs 调用它 server.I 做到了,我没有收到任何错误... 但是我得到的不是像下面方法的返回值那样的经典响应,而是我挖掘的块……我认为这很奇怪…… 我应该如何获得方法输出(returns)?

之后我尝试部署另一个合约,这次是一个非常简单的合约,具有相同的方法名称、智能合约名称、参数,但方法内部没有代码,只有一个基本的硬编码 return.When 我部署了这份合同我也得到了相同的开采智能合同地址...这很奇怪,在我看来...

我一直在使用 1.0.0-beta.46 , nodejs , expressjs 当我说 eth wallet 时,我的意思是......在 /#wallet page

上用 puppeth 生成的网站

这是我第二次尝试部署的基本智能合约 time.The 结果与第一个智能合约相同。

实用性 >= 0.4.22 < 0.6.0;

合同基本合同{

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;
}

}

有两种方法可以调用智能合约中的函数:通过发送到网络的交易或通过本地 call

交易没有 return 值。你从用于进行交易的库中得到的通常是交易哈希。您调用的函数中的任何 return 值都将被丢弃。

本地 call 不涉及网络交易,因此无法更改任何状态。但它确实给了你一个 return 值。

大多数库默认选择哪种方法取决于函数是否会改变状态。如果您将函数标记为 viewpure,它会告诉库这些函数不会更改状态,然后可以安全地在本地 called 以获得 return 价值。因此,上述代码的简单 "fix" 就是使这些函数成为 pure。对于 do 改变状态的函数,您需要从使用 return 值切换到发出事件,这些事件可以在交易被挖掘后读取。