【Solidity基礎】storageとmemory




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

Solidityのデータ保存について

Solidityではデータの保存にstorageとmemoryの2種類があります。

storageはブロックチェーンにデータを永久に保存するもので、memoryはコントラクト実行時に一時的にデータを保持するものです。

もっと簡単にいうとstorageはブロックチェーンに保存され、memoryはブロックチェーンに保存されることはありません。

Ethereumのスマートコントラクトではこの2つのデータ保持の特性を理解しておくことがコスト節約に対して非常に重要になります。

しかし、基本的にはSolidityのコンパイラが自動でstorageなのかmemoryなのかは判定してくれる素晴らしい仕組みになっています。

ガスコストの高いstorage

Solidityで一番コストが高いのはstorageを使うことです。なぜ高くなるかというと、ブロックチェーンにデータを書き込むからです。

storageに書き込まれたデータは世界中に存在する数千、数万のノードのハードディスクに保存されるため非常にコストが高いです。ノードが増えればそれだけ資源を消費してしまうからです。

Solidityでは必要最低限のデータ以外はstorageに保存せずにmemoryに保存することでコストを削減できます。

ちなみに、関数外で宣言した変数はstorageとなりブロックチェーに保存されます。

コストのかからないmemory

memoryはブロックチェーンに書き込まないのでコストはかかりません。関数内で使われる変数はmemoryとなるので特に意識しなくともSolidityのコンパイラが自動で対応してくれるみたいです。

サンプルコード

下記はstorageとmemoryを使ったサンプルコードです。ここの内容が理解できればstorageとmemoryは理解したと言って大丈夫かと思います。

まとめ

分散アプリケーションはこれまでのWEBサービスを作るときに気をつけるべきことが異なるので戸惑うことが多いなと感じます。今回のstorageとmemoryの考え方は特にそうで、全く違う考え方をしないと行けないのは逆に面白く分散アプリケーションにはどんどんハマっていきそうです。

今後もSolidityの基礎について書いていくので楽しみにしていてください。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です