Vyperチュートリアルの最初の契約


文書ディレクトリ
  • は前の
  • に書いてあります
  • 第1契約
  • 契約ファイル
  • を作成する
  • バージョン番号
  • 状態変数
  • 関数
  • 最後の
  • に書いてあります
    前に書く
    前回のVyperチュートリアルの開発環境構築では、開発環境を構築しました.本稿では、私たちの最初のVyper契約について説明します.
    最初の契約
    契約は、契約にイーサ坊を格納し、契約からイーサ坊を取り出す機能(財布のようなスマート契約)を簡単に実現します.次に、この契約をVyperで実現し、vyperの基礎知識を理解します.
    契約ファイルの作成
    Vyperの契約はファイルに含まれており、各ファイルはスマート契約です.Vyperのファイルは、オブジェクト向け言語のクラスに似ています.ファイルwalletを作成vy
    バージョン番号
    pythonと同様に、#記号はコメントを表します
    # @version 0.1.0b17
    

    Vyperは、互換性のない変更を導入する可能性のある将来のコンパイラバージョンのコンパイルを拒否するためのバージョンコンパイル指示をサポートします.
    じょうたいへんすう
    ステータス変数は、契約ストレージに永続的に格納される値であり、任意の関数の外で宣言する必要があります.ここでは、契約内のエーテル坊の数を格納するための整数変数valueを宣言します.
    value: wei_value
    

    変数にはいくつかのタイプがあります.詳細は、「タイプ」セクションを参照してください.一般的な数字はint 128タイプ、wei_valueは、Vyperに内蔵されているタイプ(uint 256ベース)で、エーテル坊の数を表します.
    関数#カンスウ#
    次に、契約から金額を取り出す最初の関数を作成します.
    @public
    def withdraw(_amount: wei_value):
        assert _amount <= self.value
        self.value -= _amount
        send(msg.sender, _amount)
    

    関数名はwithdrawで、整数(wei_value)名は_amountのパラメータは、引き出し金額の数として使用されます.
    関数は@publicで装飾され、公有関数を表し、外部から呼び出されるだけで、他のほとんどの言語とは異なり、内部から呼び出されないことを意味します.プライベート関数は@privateで装飾され、その他の修飾子は公式ドキュメントの関数部分を参照します.
    関数体では、まずassert関数を使用して、入金金額が格納されている金額を超えてはいけないと判断します.そうしないと、assert関数は契約の実行を停止し、失敗します.
    その後、格納金額残高の変数valueから取り出した金額を減算します.amount.
    最後に引き出したいアドレス(つまりこの引き出し申請の送信者:msg.sender)送信_amount数のwei、ここでは契約書で提供した内蔵変数msgを使用して、msgを通過することができます.senderは取引送信者のアドレスを取得し、msgを通過する.valueは取引で送信されたイーサー坊の数を取得します.
    msg.senderとmsg.valueは共通関数からのみアクセスできます.プライベート関数でこれらの値が必要な場合は、それらをパラメータとして渡す必要がある.
    次に、イーサー坊を受信する関数payを書きます.
    @public
    @payable
    def pay():
        self.value += msg.value
    

    @payable修飾により、関数はイーサ坊を受信し、関数は受信したイーサ坊の数をvalue変数に加算します.
    契約には構造関数が必要です.
    @public
    @payable
    def __init__():
        self.value = msg.value
    

    コンストラクション関数は、契約の導入時に実行されます.
    最終的に私たちの契約書の作成はwallet.を完成しました.vy:
    # @version 0.1.0b17
    
    value: wei_value
    
    @public
    @payable
    def __init__():
        self.value = msg.value
    
    @public
    def withdraw(_amount: wei_value):
        assert _amount <= self.value
        self.value -= _amount
        send(msg.sender, _amount)
    
    @public
    @payable
    def pay():
        self.value += msg.value
    

    最後に書く
    次に、この契約のコンパイルを試みます.次のVyperチュートリアルの導入契約のコンパイル