Vyper

【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の状態変数とアクセス制御の仕組みについて学びました。適切なアクセス制御を行い、安全なスマートコントラクトを作成しましょう。