【Vyper】第3章第3回:状態変数とアクセス制御:publicとprivateの使い分け

本記事では、Vyperにおける状態変数(State Variables)とアクセス制御の仕組みについて解説します。適切なアクセス制御を行うことで、セキュリティを強化し、安全なスマートコントラクトを設計できます。
0. 記事の概要
この記事を読むメリット
- Vyperの状態変数の仕組みを理解できる
- publicとprivateの使い分けを学べる
- 安全なスマートコントラクトを設計できる
1. 状態変数とは?

状態変数とは、スマートコントラクト内で保持されるデータのことです。ブロックチェーン上に保存され、コントラクトのライフサイクル全体にわたってアクセス可能です。
1.1 状態変数の基本
# コントラクト内に保存される変数
owner: public(address)
balance: public(int128)
動作解説
- owner: public(address) – コントラクトの所有者アドレス
- balance: public(int128) – コントラクトの残高
1.2 状態変数の初期化

@public
def __init__():
self.owner = msg.sender
self.balance = 0
動作解説
- self.owner = msg.sender – コントラクトのデプロイ時に所有者を設定
- self.balance = 0 – 初期の残高を0に設定
2. publicとprivateの使い分け

Vyperでは、状態変数のアクセスレベルを設定できます。publicは外部から参照可能、privateは内部のみで利用可能です。
2.1 public変数の定義
# 外部から参照可能な変数
owner: public(address)
動作解説
- public – 外部から直接値を取得できる
- getter関数を定義しなくても、自動で値を取得できる
2.2 private変数の定義
# 内部のみで利用する変数
secret_code: int128
動作解説
- private – コントラクト内部でのみ利用可能
- 外部からは直接アクセスできないため、セキュリティが向上する
3. 練習問題
3.1 練習問題
以下の課題に挑戦してください。
- privateな状態変数を作成し、getter関数を定義して値を取得できるようにする
- public変数を定義し、その値を変更するsetter関数を作成する
4. まとめ
本記事では、Vyperの状態変数とアクセス制御の仕組みについて学びました。適切なアクセス制御を行い、安全なスマートコントラクトを作成しましょう。