获取挖掘块而不是假定的返回值
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 值。
大多数库默认选择哪种方法取决于函数是否会改变状态。如果您将函数标记为 view
或 pure
,它会告诉库这些函数不会更改状态,然后可以安全地在本地 call
ed 以获得 return 价值。因此,上述代码的简单 "fix" 就是使这些函数成为 pure
。对于 do 改变状态的函数,您需要从使用 return
值切换到发出事件,这些事件可以在交易被挖掘后读取。
我刚刚使用以太坊钱包部署了智能合约。 我得到了智能合约地址,我从 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 值。
大多数库默认选择哪种方法取决于函数是否会改变状态。如果您将函数标记为 view
或 pure
,它会告诉库这些函数不会更改状态,然后可以安全地在本地 call
ed 以获得 return 价值。因此,上述代码的简单 "fix" 就是使这些函数成为 pure
。对于 do 改变状态的函数,您需要从使用 return
值切换到发出事件,这些事件可以在交易被挖掘后读取。