見出し画像

Solidity勉強日誌①可変長配列と固定長配列について

今、Crypto Zombiesという無料でSolidityが学べるサイトで勉強しています。(イーサリアムのスマートコントラクトが書ける言語です)。僕が今からブロックチェーンエンジニアになるのは相当厳しいと思うのですが、ブロックチェーンの事業を創りたいと思ったら、Solidityを"理解"する必要はあると思っています。Solidityを"正しく書く"のは相当にハードルが高いですが、"理解"を目指して、勉強しています。

今日はCrypto Zombiesのレッスン1にある配列について、勉強しました。

配列には、可変長配列と固定長配列があります。その名の通り、可変長配列は配列の数を可変に出来ます。固定長配列は配列の数が固定です。
配列の数は可変の方が便利じゃん!と誰もが思うと思いますが、今はイーサリアムに書き込めるメモリは物凄く小さい!そのため出来る限り固定長配列にしないといけません。こういうところを意識しないとダメ。

固定長配列が2つだと2個しか確保されてないから、アクセス出来るのは下記のようになります。


uint[2] fixedArray;
fixedArray[0] = 10;
fixedArray[1] = 20;
fixedArray[3] = 30;//エラー!!

余談になりますが、この数の決まった配列(固定長配列)を狙ったハッキング手法があります。例えば下記のようなコードがあったとしましょう。


fixedArray[number] = 30;

function setNumber(_number) {
     number = _number;
}

仮に、_numberのところに256という数字をハッキングにより入れられてしまいました!!固定長fixedArrayの256番目の配列にアクセスしようとして、そこで実行エラーを起こしてしまいます。あらゆる手を使って、ハッキングをしようとしてくる輩がいます。彼らの手法を知り尽くして、潰していかないといけません。

ちなみに、上記のsetNumberファンクションのようなバリューを入れることが出来るファンクションは、setterメソッドと呼ばれます。一方、そのファンクションを動かすことで、値を返すものをgetterメソッドと呼びます。

// getter
function getZombies() {
    return zombies;
}

//setter
function setZombies() {
   zombies = _zombies;
}

getterメソッドだけAPIで提供するというのはよくあります。

うーん、ハードルが高い!けどそれを肌感として理解出来たので大変勉強になりました。

参考:Cryptozombies


この記事が気に入ったらサポートをしてみませんか?