見出し画像

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でフロントエンドを作成

というのが妥当な選択肢となる。

この記事が気に入ったらサポートをしてみませんか?