一覧
ツール名 | 概要 |
---|---|
Vyper | スマートコントラクトを記述するPythonライクな言語 |
web3.py | ブロックチェーンとのやり取りに関するメソッドを提供するPythonライブラリ |
Ethers.js | web.pyのJavaScript版。フロントエンド開発で使う。 |
Brownie | スマートコントラクト開発のためのPythonペースなフレームワーク |
Alchemy | DApp開発に関する多様なサービス群 |
Sepolia | 公開されているEthereumのテストネットワーク |
Sepolia Testnet Explorer | Sepoliaのトランザクションを閲覧できるWebサービス |
MetaMask | JavaScriptメソッドを提供するツール。MetaMaskログイン機能などには必要となる |
Vercel | 手軽なデプロイを支援するサービス |
Animate.css | アニメーション関連のクラスを提供するCSSライブラリ |
以下、もう少し詳しい紹介です。
Vyper
スマートコントラクトを記述するPythonライクな言語。
スマートコントラクトの言語で有名なのはSolidityだが、構文がJavaScriptやC++に似ている。一方でVyperはPythonに似た構文で、Pythonデベロッパーであれば、学習コストを抑えられる。
👇例えば、架空のトークンの送信を記述したVyperコードはこちら
# @version 0.3.7
event Transfer:
sender: address
receiver: address
value: uint256
totalSupply: public(uint256)
balances: public(HashMap[address, uint256])
@external
def __init__(total_supply: uint256):
assert total_supply > 0
self.totalSupply = total_supply
self.balances[msg.sender] = total_supply
@external
def transfer(receiver: address, val: uint256) -> bool:
assert self.balances[msg.sender] >= val
self.balances[msg.sender] -= val
self.balances[receiver] += val
log Transfer(msg.sender, receiver, val)
return True
web3.py
ブロックチェーンとのやり取りに関するメソッドを提供するPythonライブラリ。
トランザクションの送信や、スマートコントラクトとのやり取り、ブロックデータの読み込みなどの関数やクラスを提供する。
👇例えば、スマートコントラクトをSepoliaにデプロイする時のpythonスクリプトはこちら。インポートしているWeb3
がweb3.py。
import json
import os
from web3 import Web3
from dotenv import load_dotenv
# .env読み込み
load_dotenv()
# Web3クラスのインスタンス作成
NODE_URL = os.getenv("ALCHEMY_URL")
w3 = Web3(Web3.HTTPProvider(NODE_URL))
# スマートコントラクトのインスタンス作成
contract_compiled_file = "../contracts/token.json"
with open(contract_compiled_file, "r") as file:
data = json.load(file)
bytecode = data["token.vy"]["bytecode"]
abi = data["token.vy"]["abi"]
contract = w3.eth.contract(bytecode=bytecode, abi=abi)
# トランザクションの構築
total_supply = 10000
account = os.getenv("METAMASK_ACCOUNT")
nonce = w3.eth.get_transaction_count(account)
tx = contract.constructor(total_supply).build_transaction({'from': account, 'nonce': nonce})
# トランザクションの署名
private_key = os.getenv("METAMASK_PRIVATE_KEY")
signed_tx = w3.eth.account.sign_transaction(tx, private_key)
# トランザクションの送信
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
# トランザクションの完了待ち
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
Ethers.js
ブロックチェーンとのやり取りに関するメソッドを提供するJavaScriptライブラリ。
フロントエンドからサーバを介さずにブロックチェーンにアクセスするには、どうしてもJavaScriptが必要となる。
👇例えば、ユーザーのMetaMaskアカウントを取得するスクリプトはこちら。
import { ethers } from "https://cdnjs.cloudflare.com/ajax/libs/ethers/6.7.0/ethers.min.js";
// ブロックチェーンとやり取りするインスタンスを作成
const provider = new ethers.BrowserProvider(window.ethereum);
// signerオブジェクト取得
const signer = await provider.getSigner();
// アカウント取得
const signerAccount = await signer.getAddress();
Brownie
スマートコントラクト開発のためのPythonベースなフレームワーク。
- スマートコントラクトのコンパイル
- コンソールでのスマートコントラクトの動作確認
- スマートコントラクトのテストスクリプト作成
- スマートコントラクトのデプロイ
などを、シンプルなコマンドで実施できる。有名なのはHardhatだが、JavaScriptベースのフレームワークなので、スクリプトもJavaScriptで書かなきゃいけない。一方でBrownieは、Pythonベースのフレームワーク。Pythonデベロッパーであれば、学習コストを抑えられる。
例えば、以下のようなコマンドを実行すると、Brownieコンソールが起動し、Ganacheと呼ばれるローカル環境でのブロックチェーンが立ち上がり、スマートコントラクトの関数を実行できる。
Brownieコンソールの起動
brownie console
スマートコントラクトのインスタンス化
>>> contract = token.deploy(10000, {'from': accounts[1]})
transfer関数の実行
>>> contract.transfer(accounts[2], 100, {'from': accounts[1]})
Alchemy
DApp開発に関する多様なサービス群。
例えば、以下のような用途でAlchemyを利用できる。
- ブロックチェーンノードの構築
- テストネットワークのETH取得
- Dappに対するリクエスト数のモニタリング
※ブロックチェーンノードの構築に関しては、Infuraというサービスも有名。
Sepolia / Sepolia Testnet Explorer
Sepoliaは、Ethereumブロックチェーンのテストネットワーク。
テストネットワークと言えど、全世界に公開されており、誰でもスマートコントラクトをSepoliaにデプロイし、運用できる。
Sepolia Testnet Explorerは、Sepolia上での取引情報を確認できるWebサービス。
Ethereumブロックチェーン上のDapp開発では、一例として次のように開発プロセスを進める。
- ローカル環境のブロックチェーン"Ganache"にスマートコントラクトをデプロイしてテスト
- テストネットワークの"Sepolia"にスマートコントラクトをデプロイしてテスト
- Ethereumメインネットにスマートコントラクトをデプロイしてテスト
MetaMask
MetaMaskは、仮想通貨のウォレットとして有名だが、JavaScriptメソッドを提供するツールでもある。MetaMaskログイン機能の実装などには必要となる。
👇例えば以下は、MetaMaskのウォレットアドレスの提供をユーザーに要求するリクエスト
await window.ethereum.request({"method": "eth_requestAccounts"});
Vercel
デプロイを支援するサービス。
GitHub(GitLab, BitbucketもOK)と連携するだけで、フロントエンドやAPIをデプロイできる。Dapp開発では、スマートコントラクトをブロックチェーンにデプロイするため、Webへのデプロイはフロントエンドのみとなるケースが多い。ここで、Vercelが用いられることが多い。
Animate.css
アニメーション関連のクラスを提供するCSSライブラリ。多くの場合、ブロックチェーンへのトランザクションは数秒以上の時間がかかります。アニメーションをうまく活用して、待ち時間をいかに伝えるかは、ユーザビリティーの観点で大切なポイントです。
おまけ:Pythonライクなツールを利用したDapp開発のUdemyコース
以上のツールを利用したDapp開発のUdemy講座を作りました。JavaScriptが苦手な私は、DApp開発を勉強する時に勉強に苦労しました。Python派の方にとって、すこしでもスムーズに勉強できればと思い、この講座を作りました。Vyperでスマートコントラクトを記述するところまで無料公開しています。もしご興味あれば、ぜひご視聴ください😊