以太坊智能合约无功能回报值



我是智能合约的新手,我已经部署了该测试合同

contract test {
    function callme(address dest, uint num, bytes data, uint nonce)
        public
        returns (bytes32 myhash)
    {
        myhash = sha3(dest, num, data, nonce);
        return (myhash);
    }
}

i然后致电test.callme(eth.accounts [0],10,0xaaaaa,1234),期望它返回传递的参数的sha3哈希,但没有返回值。

> test.callme(eth.accounts[0], 10, 0xaaaaa, 1234)
INFO [12-24|19:35:40] Submitted transaction                    fullhash=0x694e0e38d0cf8744e62113750339a65f1d5a35cdc634eeb02b93581a926fea1a recipient=0xed712462999f8f68BbF618C3845F4333eDC31cD5
"0x694e0e38d0cf8744e62113750339a65f1d5a35cdc634eeb02b93581a926fea1a"

任何帮助都将受到赞赏

您的语法有些关闭 - 您不需要命名返回值myhash。这样的事情应该可以解决:

contract test {
    function callme(address dest, uint num, bytes data, uint nonce)
        public
        constant
        returns (bytes32)
    {
        bytes32 myhash = sha3(dest, num, data, nonce);
        return myhash;
    }
}

我还投入了constant关键字,因为该功能没有计划更改合同存储中的任何内容。这是一个很小的变化,但对于您想做的事情都是必要的。

包括常数使您能够获得"返回"价值,可以这么说,因为它说您不需要修改区块链 - 本质上,您是"阅读"链,而不是"写作"'

想象一份这样做的合同:

contract test {
    uint example;
    function callme()
        public
        returns (uint)
    {
        example = example + 1;
        return example;
    }
}

我们发送到callme的事务实际上必须在之前执行我们返回值(因为我们正在修改区块链)。因此,我们不能真正立即返回最终值(而是我们返回有关交易的信息),因为我们必须等待首先更新区块链。

相关内容

  • 没有找到相关文章