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
この記事が気に入ったらサポートをしてみませんか?