Solidity言語

レッスン3:Solidityの高度なコンセプト⑦

午前の部、第2部を更新しますよ!!
分からないところは素直にわからないと書き、理解できたところは素直に喜ぶ!

人間の本質ですね?w

偽ってちゃいけませんよ、、、無駄に疲れちゃいますし。
さぁ行きましょう!!

CryptoZombies | 
イーサリアムでのゲーム開発を学ぶ

チャプター8:関数修飾子の続き

36

ヘルパーメソッドの追加とな!以前のブログにも書きましたがヘルパー=助手という意味なのですが、関数に付け足すという意味を持っているので、付加価値を追加すると認識しておきましょう。

46

関数修飾子olderThanを宣言し、引数にuint型の_ageと_userIdを渡している。
older thanは 「〜より古い」とG翻訳さんが言ってますな。

requireでuserIdのage(年齢)が_age以下であるか確認してから、実行する。という記述ですね。

使い方としてはその下の関数の宣言でやってくれてますね。

driveCar(uint _userId) public olderThan(16, _userId) {}となっているので

関数修飾子であるolderThanの_ageには16という数値を渡す、という形ですね。
日本であればここは「18」を渡すのが本当ですね。車の運転は18歳からですからね。

それではテストに挑戦だ!!
01

1では、まずはaboveLevelという名前のmodifierを作成せよ!との事で引数は二つなので、、

modifier aboveLevel(uint _level, uint _zombieId) {}

となりますね!
ちなみにaboveLevelとは、、aboveが「上の」という意味なので、上のレベル、でいいでしょうかね?

2ではAがB以上である事を確認できるようにせよ!と言っているので、requireの出番ですな!!

require(zombies[_zombieId].level >= _level);

となります。

3では修飾子の最後に「_;」をつける事で残りの関数を呼び出す事を忘れるな、との事なので、、

_;

を入力すると!

まとめると、、

modifier aboveLevel(uint _level, uint _zombieId) {
require(zombies[_zombieId].level >= _level);
_;
}


となりますね!

あら意外とスムーズに言ったわねw

念のため、高妻さんのブログにmodifierについて書いてある記事がありましたので参考にみてみましょうね!より深く理解できると思います!!
【Solidity基礎】modifier修飾子について

よしっ!この勢いで次っ!!

チャプター9:ゾンビ修飾子

24
おおっ!!ここでゲーム要素としてはめちゃくちゃ重要なレベルアップするためのインセンティブをつける工程にはいりそうですな!!

これは興奮間違いないぞ!!

33
このサンプルは先ほどとほぼほぼ同じものになりますな!

それではテストだ!(はっ、早い!)
49

1では関数を作成せよ、との事なのでfunctionは確定ですね。引数は二つで、externalで先ほど作成したmodifier aboveLevel修飾子を持ち、_levelパラメータに「2」を渡すと。もう一つのパラメータも忘れずに、、という事なので、、、長くなりそうだが、、w

function changeName(uint _zombieId, string _newName) external
aboveLevel(2, _zombieId) {
}

となりますな。

1−1では、requireステートメントを使用して、msg.sender == zombieToOwner[_zombieId]かどうかを確認しろとの事なので、、changeNameの中身は、、

require(msg.sender == zombieToOwner[_zombieId]);

となります。

1−2では、AをBと同等になるようにせよ。との事なので、

zombies[_zombieId].name = _newName;

となります。

1−3では、新しい関数を作成し、定義と内容はchangeNameと同じくして、2番目の引数は変更してaboveLevelの_levelパラメータに20を渡すとの事。これはNameではなくDnaなので、dnaを_newDnaに設定する事、となっているので、、、、、

function changeDna(uint _zombieId, uint _newDna) external
aboveLevel(20, _zombieId) {
require(msg.sender == zombieToOwner[_zombieId]);
zombies[_zombieId].dna = _newDna;
}

となる。。

まとめると、、(なげぇなw)

function changeName(uint _zombieId, string _newName) external
aboveLevel(2, _zombieId) {
require(msg.sender == zombieToOwner[_zombieId]);
zombies[_zombieId].name = _newName;
}

function changeDna(uint _zombieId, uint _newDna) external 
aboveLevel(20, _zombieId) {
require(msg.sender == zombieToOwner[_zombieId]);
zombies[_zombieId].dna = _newDna;
}

となりますw
ちょいと文字数の都合上externalの後ろから改行していますのでご了承ください。

っとこんな感じですね!

今回のチャプターもすんなり行きました!!!ありがと〜!!

今ふと疑問に思いましたが、前回のブログでOwnerとUserの違いを書いたんですね。。
前回の記事👉レッスン3:Solidityの高度なコンセプト⑥

今回zombieToOwner関数を確認するために使ってさ、違うってことに気づいたんですよ。。

Ownerはゾンビの所有者ってことになるから、Owner=開発者っていうのは違っていて、UserはOwnerであるということで、開発者はデベロッパー(developer)ですよね。。

だから作成しながらzombieToOwnerというのは「ソンビの所有者」ってことだから、myZombieに関してもOwnerのゾンビだよって、ことですね。

大変失礼しました。。。

こんがらがって訳が分からなくなってますが、、、プロの方はこう言う風にならないんかねぇw

改めて尊敬しちゃいますわ。。。

っという事で、この辺で午前の第二部終了いたします!

昼からは家族連れて、私の実家に(車で10分)泊まりに行って、今晩は私の送別会?という事なので飲みに行ってきますw

まぁ昼からはもう一本くらい更新はできるので、します!!

CryptoZombies |
イーサリアムでのゲーム開発を学ぶ

ではではまた後ほど!

ABOUT ME
shidayuu
元バンドマンで読書・書評をしている函館在住32歳、しだゆうと申します! このブログでは主に読書した内容を元に、「ヒラメキを発信する」をテーマとして毎日更新しています。 書評をメインに、たまに元バンドマンの知識を発信していきます! あなたの役に立てる記事を書いていきます!