イーサリアムでのゲーム開発を学ぶチャプター3:Msg.senderあ〜、今朝同様、、、あんまししっかりと理解できてないやーつですな。msg.senderって何?っていうのが正直な気持ちですが、全ての関数で利用できるグローバル変数っていうのがこの「msg.sender」という事だという説明ですよね。全ての関数で利用できるってことは、Solidity言語の中では共通語という認識でいいじゃないでしょうか。どこからでも呼び出せるという認識にしておきましょう。このmsg.senderを使うと、それを呼び出したユーザーのaddressを参照できる、とのこと。ふむふむ、、、まぁ次に行きましょか。こちらが使用例と、、、mappingは今朝のブログ記事を参照いただければわかりやすいと思います。下手くそながらリンク↑↑貼りましたよ!//の説明が長くて見切れてしまっていますが、例としてはこのように使いますよ、という流れを見てもらえるといいと思いますな。_myNumber;っていうのが、マッピングにデータを格納する方法ということらしい、、??そうなのね、、、としか言えませんww、、、この説明ではなんとも言えないので、次にすすみます。さっきの例は理解やすいように簡単にしてあるってさ、、、ヤベェw大事なことはmsg.senderを利用することによってセキュリティが強化されるから、使わないとダメよ!ということですかね。呼び出したユーザーのaddressを参照できるってことなので、一人一つのアドレスしか持てないのでセキュリティ上も安心して使えますよって事なんじゃなかろうか。2割くらいしか理解できなかったが、テストだ!!orz...まずは_createZombieメソッドを更新して、と書いてあるので、そこまでカーソルを持っていく。すると//ここから始めるのだ、と入れる場所を教えてくれる。1では、マッピングを更新せよ。言っているので、マッピングの更新は前の方で書いてあるので、まずはそれを参照してみよう。=となるのだが、ここで文章を確認してみよう。「まず最初は、新しいゾンビのidを取得して、id下にmsg.senderを格納して」と言っています。msg.sender;となります。2では、このmsg.senderでownerZombieCountを増やせ。言っていて、その下には増やし方の例が書いてあるので、そのまま名前を変えて入力してみます。ownerZombieCount[msg.sender]++;とこの二行が正解となりました。2の部分は、何を増やしたいかっていうのを考えると、msg.senderは増やすっていう概念がないものだと思うので、増やしたいのはownerZombieCountだから、ownerZombieCount[msg.sender]という形になったと、、、変に?理解しましたwそもそもmsg.senderで利用できるのって、その人のaddressってことだから、、数字(uint)と文字(string)の羅列が入ってくる事になるから、そのままZombieToOwnerに代入する事ができないって事であって、zombieToOwnerはuint型じゃないとKeyとして受け取れないからValue(値)は渡しませんよと言われちゃうって事なのかな。msg.sender;とする事によって、コンパイルしてValueを格納する、という事になるのかな、、、コンパイルの使い方違う気がしますが、あくまでイメージとしてwそれだと少し納得ができるかな。zombieToOwner[msg.sender]としてしまうと、msg.sender自体がuintではないので、mappingは機能しませんよ、っていうイメージ。う〜ん、、、ごめんなさい、よくわからんとです。進むうちに理解できることを祈りながら、次行きましょうwチャプター4:Requireりくわぃあって読むのかね?wこの説明を読むと、requireは正しいかどうかチェックしてもらうプログラムってことですかね。google翻訳さんで調べると「要求する」という意味。使い方の例を見てみましょう。//文章がまたして尻切れしておりますな、、またしてもケッカク256さんの登場!!説明としてだけ出てきているので、keccak256の説明は何回目かに書いたブログを読んでくださいw説明文の中に「solidityはネイティブで文字列比較ができない」とあります。“Vitalik”」という比較ができないから、keccak256を使用して乱数で同じ文字列かどうかを比較させているんですね!!知らなかったのでありがたい情報ですな!はい、それではテストだ!!!注意書きから読むと、答え合わせの際、本来であれば順番は違っても処理できるけど、このゲーム上ではownerZombieCount[msg.sender]を先に書いてくれって事ですなwこれそのまま使うんだよって、、答え教えてくれてます。0);というのが正解になりますね。ゲーム上だとこれで正解ですが、Solidityのプログラム的にはrequireの中身が逆でもOKです、というのが注意書きの説明ですね。ownerZombieCount[msg.sender]);ちなみにイコール(=)が二個っていうのは、比較演算子だからですね。比較するために使う場合は2個使います。※今回の例1個だと値を代入する場合となります。このブログでは主に読書した内容を元に、「ヒラメキを発信する」をテーマとして毎日更新しています。役に立ってくれると嬉しいです。