Vyper

【Vyper】第2章第5回:関数修飾子(Modifiers)の使い方と応用

本記事では、Vyperにおける関数修飾子(Modifiers)の基本概念、使い方、実際のコード例を詳しく解説します。関数修飾子を活用することで、コードの再利用性とセキュリティを向上させることができます。

0. 記事の概要

この記事を読むメリット

  • Vyperの関数修飾子(Modifiers)の概念を理解できる
  • コードの再利用性を向上させる方法を学べる
  • セキュリティ強化のための実践的な活用方法を習得できる

1. 関数修飾子とは?

関数修飾子(Modifiers)は、関数の実行前に特定の条件をチェックするための仕組みです。VyperではSolidityの修飾子と異なり、明示的に関数をラップする形で実装します。

1.1 関数修飾子の基本構造


        @public
        def only_owner():
            assert msg.sender == self.owner, "許可されていません"
        

動作解説

  • assert msg.sender == self.owner – コントラクトの所有者かどうかを確認
  • “許可されていません” – 条件を満たさない場合のエラーメッセージ

1.2 関数に修飾子を適用する


        @public
        def change_owner(new_owner: address):
            self.only_owner()
            self.owner = new_owner
        

動作解説

  • self.only_owner() – 所有者チェックを行う
  • self.owner = new_owner – 所有者の変更処理

2. 応用的な関数修飾子

2.1 送金制限をかける関数修飾子


        @public
        def check_balance(amount: uint256):
            assert self.balance >= amount, "残高不足"
        

動作解説

  • assert self.balance >= amount – 送金額が残高以下であるか確認
  • “残高不足” – 条件を満たさない場合のエラーメッセージ

2.2 複数の修飾子を組み合わせる


        @public
        def transfer(to: address, amount: uint256):
            self.only_owner()
            self.check_balance(amount)
            send(to, amount)
        

動作解説

  • self.only_owner() – 所有者チェックを行う
  • self.check_balance(amount) – 残高確認を行う
  • send(to, amount) – 実際に送金を実行

3. 練習問題

3.1 練習問題

以下の課題に挑戦してください。

  • 特定のアドレスのみ実行可能な関数を作成する
  • トランザクションが特定額以上でないと実行できない制限を設ける

4. まとめ

本記事では、Vyperの関数修飾子の基本的な使い方と応用について学びました。関数修飾子を活用し、より安全で効率的なスマートコントラクトを設計しましょう。