メインコンテンツまでスキップ

スマートコントラクトでどんなデータを保存できる

· 約4分

アカウント毎の残高ぐらいは全然良いけど、URLとか、ファイルとか、画像とか、どこまで保存できるかを確認したい

環境

  • ganache を使って、プライベートネットワークを作る
  • browser-solidity アプリでコントラクトを操作する

確認したいこと

  • 文字列を保存する際、長さの制限はどのぐらい?
pragma solidity ^0.4.0;

contract StringSaver {
string storedData;

function set(string newString) public {
storedData = newString;
}

function get() public constant returns (string data) {
return storedData;
}
}

手順

  • https://ethereum.github.io/browser-solidity/ を使って、上記 ganache で起動しているネットワークに接続する
    • ganache デフォルトは 7545 ポートを起動しているので、browser-solidity の Environment から Web3 provider を選択し、Endoint を127.0.0.1:7545設定し接続しておく

image0.png image1.png image2.png

  • 上記コントラクトをbrowser-solidityの編集エリアに入力し、右側の'create'ボタンをクリックし、デプロイする

image3.png

  • プライベートネットワークなので、すぐデプロイされ、下記画像のように関数を操作できるようになります。

image4.png

  • setの右側のフィールドに設定したい値を入力してsetをクリックすれば、set関数が呼び出されて、最終的にブロックチェーンに書き込まれる

試してみた結果

ganache でトランザクションなどを確認すると下記のようになっています。長い文字列を保存できますが、gasは結構かかります。

image5.png

一番上のトランザクションは関係ないです。

文字列gas
'あいうえお'43,615
'あいうえお' 10回138,174
'あ' 2,000回4,135,042

を 10,000 回すると、out of gasエラーになりましたが、アカウントの残高が足りなかっただけでした

まとめ

  • 長い文字列などのデータでも保存できますが、その分の gas が掛かるので、今までの普通のシステムのように使うのは、あんまり現実的ではない
  • アカウントの残高制限ではなく、トランザクションまたはブロック単位の上限を確認できなかったが、調べてみたら、下記の回答がありました。

image6.png

参考記事