0

私はtestrpcとweb3を使用しています。

以下のイディオムを使用して、以前に定義されたユーザーのみが何かを実行できるようにしました。

function doSomethingProtected() {
        if ( msg.sender != authorizedUser )
                throw;

        flagSomething = true;
   }

次のように、web3 でインスタンス化されたコントラクトで関数を呼び出す場合:

myContract.doSomethingProtected( { from: "0x..." } );

出来た。最初は満足しましたが、web3 API では秘密鍵などのパスフレーズを提供する必要がないことに気付きました。

誰かの公開鍵/アドレスの簡単な知識を持つ人は誰でもこの関数を呼び出すことができますか?

例でこのイディオムを使用することで、Ethereum コントラクトの利点は、msg.sender が暗号的に保証されることであると信じるようになりました。

4

4 に答える 4

2

その理由は、アカウントをロックしない testRPC を使用しているため、パスワードは必要ありません。

これを geth で行う場合、送信する前にアカウントのロックを解除する必要があります。

秘密鍵がないと、その関数はエラーをスローするため、その認証方法を使用することは正しいです。

于 2016-04-15T14:14:02.740 に答える
2

あなたのコードをもっと見ないと断定するのは難しいですが、トランザクションを送信するのではなく、ローカル ノードでコントラクトを呼び出していた可能性が高いようです。トランザクションは、アカウントの秘密鍵を持つ誰かによってのみ署名できます。つまり、msg.sender正確であると信頼できますが、ローカル ノードで実行されるメッセージはそれを強制しません。ただし、それらが行った変更はロールバックされ、状態には適用されないため、ローカル呼び出しが何を行うかは問題ではありません。

于 2016-04-15T13:48:04.987 に答える
0

私の推測では、関数を呼び出した時点で、アカウントは既にロック解除されていました。あなたのアカウントが web3 でロック解除された後、ロック解除された正確な期間は覚えていません。私は間違っているかもしれませんが。これをコメントとして追加したかったのですが、今は許可されていません。

于 2016-04-15T13:50:08.653 に答える