2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python派の私がDapp開発でよく利用するツール

Last updated at Posted at 2023-11-17

一覧

ツール名 概要
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コードはこちら

token.vy
# @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。

deploy_to_sepolia.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アカウントを取得するスクリプトはこちら。

app.js
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サービス。

image.png

Ethereumブロックチェーン上のDapp開発では、一例として次のように開発プロセスを進める。

  1. ローカル環境のブロックチェーン"Ganache"にスマートコントラクトをデプロイしてテスト
  2. テストネットワークの"Sepolia"にスマートコントラクトをデプロイしてテスト
  3. 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ライブラリ。多くの場合、ブロックチェーンへのトランザクションは数秒以上の時間がかかります。アニメーションをうまく活用して、待ち時間をいかに伝えるかは、ユーザビリティーの観点で大切なポイントです。

Image from Gyazo

おまけ:Pythonライクなツールを利用したDapp開発のUdemyコース

以上のツールを利用したDapp開発のUdemy講座を作りました。JavaScriptが苦手な私は、DApp開発を勉強する時に勉強に苦労しました。Python派の方にとって、すこしでもスムーズに勉強できればと思い、この講座を作りました。Vyperでスマートコントラクトを記述するところまで無料公開しています。もしご興味あれば、ぜひご視聴ください😊

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?