プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

イーサリアムのスマートコントラクトで何ができる?

大きな声では言えないが、小さな声では聞こえない。
テキトー発言が多い「軽く熊」です。

前回はスマートコントラクト(solidity)について少し試してみましたが、
「結局が何が出来るの?」と思う人は多いのではないでしょうか?

今回は技術的な部分はほっといてSmart Contractの動作について
簡単に説明してみよう
と思います。信憑性は低いですが。
※記事の内容は執筆者のイメージです。

続きを読む

ROSを起動してカメさんを動かしてみる

こんにちは、プラスプラスの真山です。きっとこれが公開される頃は梅雨です。嫌ですね。

今回は実際にROSを起動させて基本的な操作を行なっていこうと思います。
公式ホームページにも載っている turtlesimパッケージを使用したチュートリアルです。

続きを読む

geth-controlスクリプトをいくつか改善しました

こんにちは。

Ethereum のブロックチェーンに簡単に接続するスクリプト geth-control をいつくか改善しましたので、 ブログの方にも内容のまとめとお知らせを兼ねて書きたいと思いいます。v1.2です。

geth-constrolスクリプトについては説明はこちら。

イーサリアムのクライアントソフト go-ethereum (geth)を制御するスクリプトを作りました - プラスプラス開発者ブログ

f:id:plusplus-sawada:20180622122442p:plain
v1.2のファイル

主な変更点

  • ポート番号がデフォルトのままの場合は設定ファイルを持たなくても動作するようにした
  • 開発時に、mistを使うケースがありますので、作成したプライベートネットに mist を繋げられるようにスクリプトを追加 launch-mist-private-net.sh
  • Geth JavaScript console を簡単に呼び出せるようにスクリプトを追加 attach-to-geth-console.sh
  • 二重起動の対策をプロセスIDから実際にプロセスが存在するか、確認するように修正した

というあたりです。

GitHubで公開しています。MITライセンスです。

github.com

イーサリアム公式ウォレット mist はこちらからダウンロードできます。

Releases · ethereum/mist · GitHub

追加になったスクリプトの使い方

launch-mist-private-net.sh

これはそのまま、引数無しでコンソールで実行すると mist を起動してくれます。

attach-to-geth-console.sh

実行しますとこのような形でコンソールが出ます。 終了は exit を入力します。

$ ./attach-to-geth-console.sh
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.3-unstable/darwin-amd64/go1.9.2
coinbase: 0x0ece****************************444
at block: 69812 (Tue, 29 May 2018 17:40:15 JST)
 datadir: /Users/********/geth-control/private-net
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

是非活用してみてください。

ROSインストールでコマンドなるものと格闘中(頑張ってセットアップするぞ!!)

こんにちは、プラスプラスの真山です。
ROSをインストールしてみます。手順はROSのHPに載っている一般的なインストール方法です。 ターミナルを開いてコマンドをコピーペーストするだけです。簡単です。

続きを読む

スマートコントラクトの関数を実行する際に必要なGASはどれくらいか?の実験

こんにちは。

Ethereum でスマートコントラクトを動かす際に問題になるのが、GAS(手数料のようなもの)ですが、 実際のところいくらぐらい掛かるものなのかを実験してみました。

この記事は作成したプライベートネットで実験した結果をもとに記載しています。

文字列をそのまま保存する場合

サンプルとして使用するスマートコントラクトです。

ソースコードはこちらです。

単純に、関数の実行者のアドレス単位で文字列を保持・照会・削除する・・・というだけのものです。 (この処理に意味があるのかはここでは問いません)

GAS単価 18(単位:Gwei)の場合でこのような結果となりました。

※JPYは 1 ETHER = 61,911JPY で計算しています。

1文字の場合

  • GAS USED 64,997
  • 0.001169946 ETHER
  • 72 JPY

100文字の場合

  • GAS USED 123,025
  • 0.00221445 ETHER
  • 137 JPY

1,000文字の場合

  • GAS USED 695,538
  • 0.012519684 ETHER
  • 775 JPY

5,000文字の場合

  • GAS USED 3,097,979
  • 0.055763622 ETHER
  • 3,452 JPY

ざっくりしか調べていないですが、6000文字以上はGASリミットで実行もできなかったので、 プライベートネットでETH使わない状況でも大きなデータストアには向かないようです。

文字列をハッシュ化して保存する場合

次に、文字列そのものを保持するのではなく、与えられた文字列をハッシュとして保持するスマートコントラクトで実験をしてみました。

ソースコードはこちらです。

1文字

  • GAS USED 64,024
  • 0.001152432 ETHER
  • 71 JPY

100文字

  • GAS USED 41,035
  • 0.00073863 ETHER
  • 46 JPY

1,000文字

  • GAS USED 105,008
  • 0.001890144 ETHER
  • 117 JPY

5,000文字

  • GAS USED 389,321
  • 0.007007778 ETHER
  • 434 JPY

10,000文字

ハッシュ化して保存しますので、思い切って10,000文字の実験も行ってみました。

  • GAS USED 744,999
  • 0.013409982 ETHER
  • 830 JPY

文字そのものを保管するよりは削減できましたがそれでもまだ高いかなと思います。

実際の設計ではこういったGASの料金も考慮に入れてどういった情報をスマートコントラクトに保持しておくのが良いか、考える必要がありそうです。

サンプルコード

今回の記事で使用したサンプルコードはこちらに公開しています。