Ethereum
VIPER

Pythonライクなスマートコントラクト言語Vyperについて

この記事は BlockChain Advent Calendar 2017 の22日目の記事です。

前回Pythonのスマートコントラクト開発フレームワークPopulusで新言語Viperを使ってみるという記事を書きました。

Pythonライクに書けるスマートコントラクト開発言語Vyperをもう少し深く掘り下げていきたいのと日本語の記事がまだ少なく、英語を読むのが辛いので見返しやすいようにドキュメントを追って、つらつらと書いていきたいと思います。

まだまだ開発途上なので、順次アップデートしていく予定です。

環境構築などは前回の記事を参照してください。
vyperのバージョンは 0.0.2

Solidityとの違い

  • modifyが使えない(関数をあとから修飾したりする機能)
  • クラスの継承ができない

拡張子

  • v.pyもしくは.vyでもOK。エディタの設定を活かすためにv.pyが推奨されている。

状態変数

storedData : num

pythonでは見慣れないですが、型を宣言するために状態変数は先に宣言します。
この状態変数を関数内で利用する場合はself.storedDataのようにしてデータを格納することができます。

関数

@public
def Function(): // Function
  // ...
}

関数は宣言時に@publicもしくは@privateでデコレートする必要があります。

イベント

Payment: __log__({amount: num, arg2: indexed(address)})

total_paid: num

@public
def pay():
    self.total_paid += msg.value
    log.Payment(msg.value, msg.sender)

イベントは効率的に検索できるようにインデックスで紐付けすることができます。
イベントは、グローバル宣言と関数定義の前に宣言する必要があります。

サンプルコードの紹介やViperについてもっと詳しく書きたかったのですが、体調と時間の関係でここまでとさせて頂きます。申し訳ありません。
この記事は随時アップデートしていきます。

  • 2/4追記(Viper -> Vyperに変更)