2017-12-24 24 views
0

私はスマート契約に新たなんだと私は、このテスト契約イーサリアムスマート契約ノー関数の戻り値

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

     return (myhash); 
    } 
} 

を展開してきた私は、その後(eth.accounts [0]、10、0xaaaaa、test.callmeを呼び出します1234)、渡されたパラメータのsha3ハッシュを返すことを期待しますが、戻り値はありません。

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

すべてのヘルプは

+0

私はリミックスでこれを再現することはできません - この関数は私に適切な戻り値を与えます。あなたが何をしているのかはっきりしていませんが、コマンドが返り値を返すことになっていると確信していますか?あなたがその電話を送ったことを確認しているように見えますが、必ずしも何も返されていないとは限りません。 – elsyr

+0

私はgethコンソールを使用しています。 "あなたはコマンドがあなたに戻り値を返すことになっていると確信していますか" - 返される予定の "return(myhash)"がありますか? – kinvo88

+0

私は間違った誤りを再現しようとしていた - 解決策を掲載しました。 – elsyr

答えて

0

あなたの構文は少しオフで評価されて - あなたは、戻り値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; 
    } 
} 

(私たちはblockchainを修正しているので)私たちは値を返す前に、我々はcallmeに送る取引が実際に実行する必要があります。したがって、ブロックチェーンが最初に更新されるのを待たなければならないので、実際には最終的な値を即座に返すことはできません(そして、トランザクションに関する情報を返します)。

+0

ありがとうございます!これは今より意味をなさない。答えの2番目の部分については、ブロックチェインが更新された後、どのように 'example'値を取得するのですか? (私が持っているのはトランザクションハッシュです) – kinvo88

+0

AFAIK、あなたは(少なくとも現在の状態のSolidityでは)できません。 – elsyr