Vyperスマートコントラクト言語の初心者ガイド

Vyperは、Python 3の構文と規則から派生し、イーサリアム仮想マシン(EVM)を対象とするスマートコントラクト言語パラダイムです。.

EVMは、イーサリアムのブロックチェーン台帳と並行して実行されるシミュレートされたグローバルシングルトンコンピューターであり、より複雑なトランザクションの構築と、スマートコントラクトオブジェクトをエンコードした条件付き自己実行契約を可能にします。.

イーサリアムプラットフォーム自体は機能がなく、価値にとらわれず、スマートコントラクトをどのようにまとめるかのバックボーンとどのアプリケーションのコンテキストでのみ提供します.

ヴァイパー プルーフオブステーク(キャスパー)への今後の移行で活用され、監査可能性、構文の単純さ、および単純さに焦点を当てた、スマートコントラクトの読み取りと書き込みのためのより実用的なミニマリスト体制を提供することを目的としています.

バイパーvs.ソリディティ

Solidityロゴ

その点で、Vyperは事実上の主流のSolidityから大きく逸脱しています。オンチェーン計算はリソースに制約があるため、目的の機能の最低限の必要性の範囲内で厳密に定義する必要があります。Vyperは、スマートコントラクトに対してこの還元的なアプローチを採用し、他のほとんどすべてを除外しながら、読みやすいユーザーロールとストーリーとしてフレーミングします。.

Solidityからのすぐに目立つ逸脱は、優先順位の階層内の複数のコントラクトファイル間をジャンプして、散在する断片をつなぎ合わせるのではなく、「同じページ」に物事を維持するために継承を廃止することです。プログラムは内部で行われています.

代わりに、セキュリティの前提を緩和することなく、構文を強制することなく、洗練された、簡素化された構成とモジュール性(所有者、メンテナ、トークン、期限、「ガスが残っている間」などの可能な表現)に重点が置かれます。契約および分散型台帳の性質に沿って、物事を即座に明白にし、簡単に監査できるようにする透明性.

セキュリティ機能

信頼できないビジネスロジックを作成するための透明な公証人および一般化された機関として機能することを目的とした、コンセンサス統合されたグローバルに分散された環境でのスマートコントラクトのコンテキストでは、セキュリティが最も重要です。.

これらの目標に沿って、Vyperは表現の明確さ、厳密な明確な明確さ、強い型付けに焦点を当てています。そのため、演算子のオーバーロードを排除し、可能な限り断片化せず、明確に表現しようとしています(厳密に必要なものに焦点を当てます)。誤解を招くコードを書きにくくするため。実際、明白で自明のコードパターンを適用することによってスマートコントラクトのセキュリティを強化することを目的として、それらを困難にするために意図的にいくつかのことを禁止しています.

再帰呼び出しと無限長ループも、ガス制限攻撃の可能性を開くために除外されます。代わりに、Vyperは、関数呼び出しのガス消費量の正確な上限を推定することにより、ガスメトリックを最適化することを目指しています。配列アクセスと算術演算の境界とオーバーフローのチェックが含まれ(SafeMathライブラリは不要)、状態を変更するための修飾子や定数は許可されていません。.

コンパイラ内部とコード構文

Vyperは、説明している内容の核となるEVMに近い構文規則に固執しようとします。 Vyperスクリプトは、解釈されるのではなく、EVMバイトコードに直接コンパイルされます。これは、Pythonについての珍しい考え方です。内部的には、VyperとSolidityの両方が同じ方法と一連の手順でバイトコードにコンパイルされるため、大部分は相互運用可能です(そして、互いのコントラクト間で外部呼び出しを行うことができます).

簡単に言うと、コードはパーサーによって取り込まれ、パーサーがコードを命令の抽象構文ツリー表現に分解し、そこからタイプチェックプロセスがツリーを反復処理して、対応するタイプを下から上に割り当てます。静的分析チェックを実行した後、バイトコードが生成されます.

契約の一般的な構造

Vyperは機能的に完全であり、現在監査とベータテストを待っています。 Vyperの命名規則は、Python風の種類ではありますが、そのコードが記述しようとしているもののコア(つまり、プロセッサと呼ばれるものの最低限と同じくらい単純なEVM)にできるだけ近づけようとします。方法の.

2種類の整数は、それぞれ非負の整数と符号付き整数を表すunit256とint128として表されます。ほとんどのアプリケーションはint128のみを必要とするため、複雑さが増すため、unit256は数値型として完全にはサポートされていません。 unit256は、ERC-20標準との相互運用性を確保するために含まれています.

イーサリアムのスマートコントラクトは通常、状態変数と関数で構成されています.

状態変数は、コントラクトストレージに永続的に格納される値であり、数値、文字列、アドレス、またはブール値のtrue / false式タイプにすることができます。.

状態変数は単純に宣言されます。

StoredData:int256

マッピングは、キーのセットと対応する値を定義する状態変数です。 Vyperでは、次のように定義され、アクセスされます。

plainMapping:decimal [int256]

plainMapping [0] = 10.1

最初に値が宣言され、次にタイプが宣言されます。マッピングにアクセスする際、テーブル内の位置は角括弧内に指定されます.

関数は、トリガーできる動作の種類を定義するコントラクト内の実行可能なコード単位です。 Pythonと同様に、Vyperの関数は「def」で宣言されます.

スマートコントラクトの関数は、読み取り関数(高速でガスを消費しない)または書き込み/実行関数(ブロックチェーンに刻印されるため、サイクルごとにガスを消費し、次のブロックで実現する)のいずれかです。.

Solidityの慣例によりコントラクトと同じ名前を持つコンストラクター関数は、指定されたコントラクトとその基本パラメーターをブロックチェーン上でインスタンス化します。この関数は1回だけ実行され、VyperではPython __init__メソッド(そのクラスのオブジェクトが作成されるたびに呼び出される特別なメソッド)の形式を取ります。たとえば、単純なトークン契約では、次のようになります。

@公衆

def __init __(_ name:bytes32、_symbol:bytes32、_decimals:uint256、_initialSupply:uint256):

  self.name = _name

  self.symbol = _symbol

  self.decimals = _decimals

  self.totalSupply = uint256_mul(_initialSupply、uint256_exp(convert(10、 ‘uint256’)、_ decimals))

selfメソッドは、セマンティックを明確にするために、そのクラスの特定のインスタンス変数を明示的にアサートします.

可視性のレベルに応じて、関数は@publicまたは(デフォルトで)@privateのいずれかで装飾されます。パブリックビジビリティとは、メソッドがコントラクトのABI(Application Binary Interface)で公開されていることを意味します。これにより、外部のアクターがメソッドを呼び出すことができます。.

上記の例では、コンストラクター関数は、トークンコントラクトを記述する基本変数、つまり、名前、ティッカー、分割可能小数点、および流通しているミントトークンの総供給量をインスタンス化します。.

他のデコレータには、状態を読み取るだけのメソッドをデコレーションするための@constant、および支払いで呼び出すことができるメソッドを指定するための@payableが含まれます。.

例えば:

@公衆

@payable

def bid()://関数

外部通話は、契約の上部で外部契約のABIを定義することでサポートされます。

クラスFoo():

   foo(bytes32):合格

イベントはインデックス構造に記録できるため、クライアントはイベントを検索できます.

支払い:__ log __({金額:int128、arg2:indexed(address)})

total_paid:int128

@公衆

def pay():

  self.total_paid + = msg.value

  log.Payment(msg.value、msg.sender)

イベントは、グローバル宣言と関数定義の前に宣言する必要があります.

環境の設定

Ubuntuでは、Python 3.6の実行に問題がある場合、「スナップ」としてvyperをインストールするのが簡単な方法です。

$ sudo apt-get install snapd

$ sudo snap install vyper –edge –jailmode

コントラクトをバイトコードにコンパイルするのは次のように簡単です:vyperfilename.v.py(ファイル拡張子は一般に.vyを意味しますが、現在Python構文の強調表示のために.v.pyを保持しています)

ABIを取得するには:

viper -f json example.vy

または、統合オンラインコンパイラは次のURLで提供されます。 vyper online Solidity互換などの豊富な例もあります ERC-20トークン, 金融イベント ロガー とオンチェーン マーケットメーカー. ただし、Remix for Solidityとは異なり、テスト実行プラットフォームは付属していませんが、バイトコードにコンパイルされ、契約のABIを提供するだけです。.

コントラクトをテストするには、ローカルブロックチェーン環境をスピンする必要があります。 ガナッシュ Truffleスイートからの(以前のTestRPC)はオプションですが、移行はコンソールから手動で行う必要があります.

別の方法が実行されており、事前構成されたDockerイメージ(単一ノードのProof-of-Authorityブロックチェーンを含む)が提供されているプラ​​イベートチェーンモードのParityクライアントで実行できます。 ここに. コンテナが実行されると、localhost:8180のブラウザからグラフィカルユーザーインターフェースにアクセスできます。ブラウザベースのインターフェースにより、アカウントと契約をローカルに展開して操作できます.

ただし、pyethereum(Python用のEthereumコアライブラリ)は、軽量で全体的にPythonと互換性があり、 プラグイン 開発中の契約をネイティブにテストするため.

開発と関与

多くの宣伝や主流の注目、あるいはごく最近まで多くの文書が不足しているにもかかわらず、Vyperはかなり長い間静かに取り組んできましたが、最近になってからです。.

ただし、スマートコントラクト開発者やセキュリティ監査人の注目を集め始めています OpenZeppelin, そして、Solidityの短所に不満を持っている人々の派遣団は、より直感的にシンプルでスイスの少ないアーミーナイフのような代替品を探しています.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me