【Vyper】第5章第3回:Vyperでのトークン作成:ERC20トークンの実装

本記事では、Vyperを使用してERC20準拠のトークンを作成する方法について解説します。Ethereumブロックチェーン上で独自のトークンを発行し、送受信できるようにするための基本概念と実装手順を学びましょう。
0. 記事の概要
この記事を読むメリット
- ERC20トークンの基本概念を理解できる
- Vyperを使ったスマートコントラクトの実装方法を学べる
- 独自のトークンをEthereumネットワーク上で発行・管理できる
1. ERC20トークンとは?
ERC20はEthereum上で動作する標準的なトークン規格です。多くのDeFi(分散型金融)アプリケーションや取引所でサポートされており、トークンの互換性を確保するために使用されます。
1.1 ERC20の主な機能

- totalSupply: トークンの総供給量を取得
- balanceOf: 指定アドレスのトークン残高を確認
- transfer: トークンを他のアドレスへ送信
- approve & transferFrom: 他のアドレスが代わりに送信できるよう許可
- allowance: 送信可能なトークン残高を確認
1.2 ERC20トークンの利用例
- ステーブルコイン: USDTやDAIなどの価格安定型トークン
- ユーティリティトークン: DeFiやゲーム内通貨など
- ガバナンストークン: プロジェクトの意思決定に投票権を提供
2. ERC20トークンの実装
Vyperを使用して基本的なERC20トークンを実装します。
2.1 ERC20トークンの基本コード

# SPDX-License-Identifier: MIT
totalSupply: public(uint256)
balances: public(map(address, uint256))
@public
def __init__():
self.totalSupply = 1000000 # 100万トークン発行
self.balances[msg.sender] = self.totalSupply
@public
def transfer(to: address, amount: uint256) -> bool:
assert self.balances[msg.sender] >= amount, "残高不足"
self.balances[msg.sender] -= amount
self.balances[to] += amount
return True
動作解説
- self.totalSupply – トークンの総供給量を設定
- self.balances – 各アドレスの残高を管理
- transfer関数 – トークンの送信処理
2.2 approveとtransferFromの実装
allowances: public(map(address, map(address, uint256)))
@public
def approve(spender: address, amount: uint256) -> bool:
self.allowances[msg.sender][spender] = amount
return True
@public
def transferFrom(from: address, to: address, amount: uint256) -> bool:
assert self.balances[from] >= amount, "残高不足"
assert self.allowances[from][msg.sender] >= amount, "許可された額を超えています"
self.balances[from] -= amount
self.balances[to] += amount
self.allowances[from][msg.sender] -= amount
return True
動作解説
- approve関数 – 他のアドレスにトークンの送信権限を与える
- transferFrom関数 – 承認されたアドレスが代理で送信
3. 練習問題
3.1 練習問題

以下の課題に挑戦してください。
- トークンの発行量を変更できる機能を追加する
- 所有者のみが新しいトークンを発行できるように制限を追加する
4. まとめ
本記事では、Vyperを使用してERC20トークンを実装する方法を学びました。次回は、スマートコントラクトのデザインパターンについて詳しく解説します。