イーサリアムは、グローバルな分散型金融および新しいアプリケーション プラットフォームです。イーサリアムでは、スマート コントラクト コードを通じて資産を制御し、世界中のどこからでもアクセスできるアプリケーションを構築できます。今日は簡単なスマートコントラクトのコードを自分で書き、スマートコントラクトの謎を探っていきます。
【スマートコントラクト】
スマート コントラクト (英語: Smart Contract ) は、情報を提供する方法で契約を通信、検証、または執行するように設計されたコンピュータープロトコルです。スマート コントラクトにより、第三者を介さずに、追跡可能で取り消しできない信頼できるトランザクションが可能になります。
スマート コントラクトの目的は、従来のコントラクトよりも優れたセキュリティの方法を提供し、コントラクトに関連するその他の取引コストを削減することです。
【EVM仮想マシン】
イーサリアム仮想マシンは、スマート コントラクト コードの実行者です。スマート コントラクトはバイナリ ファイルにコンパイルされた後、ブロックチェーン上にデプロイされます。ユーザーは、スマート コントラクトのインターフェイスを呼び出すことで、スマート コントラクトの実行をトリガーします。EVM はスマート コントラクトのコードを実行し、現在のブロックチェーン上のデータ (状態) を変更します。
言い換えれば、イーサリアム上でスマートコントラクトを実行するために使用されるエグゼキューターは、イーサリアムでスマートコントラクトを実行できます。
[堅固な言語]
Solidity は、イーサリアム仮想マシン (EVM) スマート コントラクト用の言語です。Solidity はブロックチェーン プロジェクトをプレイするために必要なスキルだと思います。ほとんどのブロックチェーン プロジェクトはオープンソースであり、コードを理解できれば、多くの赤字プロジェクトを回避するのに役立ちます。
Remix は、イーサリアムによって公式に推奨されているスマート コントラクト開発ツールです。初心者に適しています。ブラウザでスマート コントラクトを迅速にデプロイしてテストできます。ローカルにプログラムをインストールする必要はありません。
URL: remix.ethereum.org
【初めてのスマートコントラクトを作成する】
remix に入ると、一番左のメニューに 3 つのボタンがあり、ファイル (コードを記述する場所)、コンパイル (コードを実行する)、デプロイ (チェーンにデプロイする) に対応します。「新規ファイルの作成」ボタンをクリックして、空の Solidity コントラクトを作成します。
「新規」をクリックした後、右側の編集ウィンドウにスマートコントラクトのコードを入力します。
プラグマ ソリッドティ ^0.4.17;
コントラクト蛇口 {
関数draw(単位量) public {
require(金額 <= 1000000000000000000);
msg.sender.transfer(金額);
}
function() 公的支払額{}
}
これは、蛇口の動作をシミュレートするスマート コントラクトです。つまり、ユーザーがイーサリアムのテストネットワーク上のフォーセットを通じてテストコインを受け取るプロセスです。この契約の各行を詳しく説明しましょう。
最初の行
プラグマ ソリッドティ ^0.4.17;
すべての Solidity ソース コードは、コードを壊す可能性のある将来の新しいコンパイラーを避けるために、Solidity コンパイラーのバージョンを示す「バージョン プラグマ」でマークする必要があります。
現在のバージョンは Solidity 0.4.17 です
二行目
契約蛇口 { }
契約書
蛇口契約名(カスタマイズ可能)
{ } に含まれるコンテンツは、コントラクトの基本モジュールです。
Solidity のコードはコントラクトにラップされています。コントラクトはイーサリアム アプリケーションの基本モジュールです。すべての変数と関数はコントラクトに属し、すべてのアプリケーションの開始点となります。
3行目
関数draw(単位量) public {
関数関数
draw(uint amount)はwithdrawという名前の関数名を定義し、パラメータは単位の量(符号なし整数型)です。
public この関数は公開されており、外部から呼び出すことができます。
{ } は関数の内容です
4行目
require(金額 <= 1000000000000000000);
require 条件判定文は、文が真(True)の場合は実行され、文が偽(False)の場合は実行されません。
amount <= 1000000000000000000 ここでの amount はイーサ通貨の量を表し、単位はウェイです。ビットコインと同様に、イーサも無限に分割できるわけではなく、イーサの最小単位はウェイです。
5行目
msg.sender.transfer(金額);
msg.sender は、現在のコントラクト呼び出しのアドレスを示します。
transfer(amount)は、送金金額を示します。
6行目
function() 公的支払額{}
これはフォールバック機能です (Fallback Function)
コントラクトには匿名関数を含めることができます。この関数はパラメータを持つことができず、値を返すこともできません。指定された関数識別子に一致する関数が他にない場合、またはデータがまったく提供されない場合、コントラクト呼び出しが実行されます。
さらに、コントラクトがデータのないプレーン イーサを受信するたびに、フォールバック関数が実行されます。さらに、イーサを受け取るには、フォールバック関数が支払い可能としてマークされている必要があります。このような機能がなければ、コントラクトは通常の取引を通じてイーサを受け取ることができません。
平たく言えば、このフォーセットコントラクトをデプロイするためにETHを送金する必要はなく、ガスを消費するだけで済みます。フォールバック機能がなければ、コントラクトは通常のトランザクションを通じてイーサを受け取ることができません。
【コードのコンパイルとデプロイ】
コンパイルされたページをクリックし、バージョンを選択して、「コンパイル」をクリックします。または、コード編集のページで Ctrl+S を押してコードをコンパイルします。
コンパイル後、左側のメニューの「デプロイ」ボタンをクリックしてデプロイメントページに入ります。デフォルトでは、Remix は JS 仮想マシンを使用してイーサリアム チェーンをシミュレートし、ブラウザーでテスト チェーンを実行するのと同様にスマート コントラクトを実行します。そして、リミックスは、それぞれ 100 ETH (テスト トークン) を持ついくつかのテスト アカウントを割り当てます。[展開] (黄色のボタン) をクリックして、書面による契約を展開します。
デプロイが成功すると、下にフォーセットという名前のコントラクトが表示されます。下部の赤いボックス内にデプロイされたコントラクトのアドレスが表示されます。スマート コントラクトがチェーン上に正常に展開されると、改ざんすることはできなくなります。変更して再デプロイする場合は、別の契約になります。
これは単純なスマート コントラクト コードです。興味深いと思いませんか? この記事がお役に立てば幸いです。一緒にさらに多くのスマート コントラクト テクノロジを解き明かしていきましょう。
作者:ソロクローバー
ツイッター: https://twitter.com/ZhiyuanQi
参考文献:
@0xAA_Science 「Solidity Minimalist 入門」GitHub - AmazingAng/WTFSolidity: 詳細を固めるために、最近 Solidity を再学習しています。また、初心者向けに「Solidity Minimalist 入門」も書いています (プログラマーは別のチュートリアルを見つけることができます)。1 -毎週3つの講義が更新されます。