Pythonエンジニアが、Dapps開発に学習コスト少なく挑戦する場合の「言語」と「ライブラリ」
PythonエンジニアがDapps開発に学習コスト少なく挑戦する場合、
・Vyperでスマートコントラクトを記述
・JavaScriptでフロントエンドを作成
というのが妥当な選択肢となる。
その理由はこんな感じだ。
定番の「Solidity」×「React」の代わりとなるもの
Dapps開発の場合、Solidityでスマートコントラクトを記述し、Reactでフロント開発というのがよくあるパターンだ。
このSolidityがJavaScriptライクな文法で、JS初心者にとっては「Solidity」も「React」もちょっとした障壁になる。
ここで登場するのが、Vyperとweb3.pyだ。
Vyperとweb3.py
Vyperは、スマートコントラクトを記述言語で、Pythonライクだ。
Dapps開発において、Solidityとほぼ同じ役割を担うが、Pythonっぽくかけるのは、Pythonエンジニアにとって好都合だ。
web3.pyは、Pythonのライブラリでブロックチェーンネットワークに接続する機能を提供する。
つまり、ブロックチェーンネットワークの情報を取得したり、スマートコントラクトで定義した関数を実行したりできる。
ethers.jsと似たような感じだ。
web3.pyとethers.jsの差
しかしながら、web3.pyとethers.jsには大きな違いがある。
ether.jsはフロント側で機能するライブラリであり、
web3.pyはバックエンド側で機能するライブラリだ。
つまり、web3.pyを活用して、MetaMaskのポップアップを立ち上げ、情報を取得するみたいなことができない。
セキュリティリスク
仮に「ether.jsを利用してログイン情報を取得するだけ」の簡易フロントエンドを作成し、FlaskとかでバックエンドAPI的にロジックを制御する構成にしたとする。
この場合、資金移動やガス代を伴うスマートコントラクトの関数を実行する際、POSTリクエストで秘密鍵をサーバに投げる必要が出てくる。
秘密鍵の情報を、ユーザー自身の手元にあるブラウザから外部に流出させることは、セキュリティリスクだ。
したがって、ユーザーがガスを消費する(資金移動やスマートコントラクト関数を実行する)操作は、フロントエンド(ブラウザ)側で行うべきとなる。
web3.pyの使いどころ
つまり、web3.pyの使いどころは、読み取り専用、もしくはすべてサーバ主がガス代払うアプリ(それでもサーバ主の秘密鍵をサーバに置くのでセキュリティ対策は必要)などとなる。
例えば、特定のアドレスのトランザクション履歴の分析、ガス価格の動向の追跡、特定のトークンの取引量の分析とかなら、web3.pyは便利かもしれない。
しかしながら、一般的なDapps作るには、フロント側でJavaScript(Web3.jsやEthers.jsなどのライブラリ)を使用するのが一般的なソリューションとなる。ユーザーのブラウザ(とMetaMaskなどのウォレット)が、ユーザーの秘密鍵を安全に管理しながら、ブロックチェーンと通信するためだ。
したがって
したがって、PythonエンジニアがDapps開発に学習コスト少なく挑戦する場合、
・Vyperでスマートコントラクトを記述
・JavaScriptでフロントエンドを作成
というのが妥当な選択肢となる。