イーサリアムスマートコントラクトを本当に理解する
編集者注: この記事は以下から引用しましたブルーフォックスノート編集者注: この記事は以下から引用しました
ブルーフォックスノート
ブルーフォックスノート
(ID: lanhubiji)、著者: GjermundBjaanes、編集: Dyna、許可を得てリリースされました。
おそらく「スマート コントラクト」について聞いたことがあるでしょうし、それがブロックチェーン上で実行されるコードであることも知っているかもしれません。
しかし、どうやってブロックチェーン上でコードを実行できるのでしょうか?これは簡単に理解できる単純な概念ではありません。
この記事では、イーサリアム ブロックチェーン上でスマート コントラクトがどのように機能するかについて説明します。この記事には例としていくつかの簡単なコードが含まれているため、プログラミングの基本を理解していると役立ちます。技術的な詳細の一部はわかりやすくするために若干簡略化されていますが、概念は有効です。
副題
ブロックチェーン - クイックスタート
ここではあまり詳しく説明しませんが、ブロックチェーン技術の中核となる概念は分散型台帳です。これは、多くの参加者間で共有される特殊なタイプのデータベースです。

この特別なデータベースはトランザクション リストであり、ネットワーク内で発生するすべてのトランザクションを記録します。誰もがコピーを持っています。この分散型配布は、強力な金銭的インセンティブと組み合わせることで、当事者間の信頼の必要性を排除します。
従来、当事者間の信頼は仲介者、つまり Paypal や銀行などの第三者を通じて解決されます。信頼できない相手との取引は、双方が信頼する仲介者を経由します。
全員が同じリストを持っているため、ネットワークをだまして間違ったトランザクションを受け入れるように仕向けるのは非常に困難です。これに暗号化とルールに従った場合の金銭的報酬を組み合わせると、非常に安全なネットワークが得られます。
スマートコントラクトとは何ですか?
また、これらすべてにより、ブロックチェーンはほぼ不変になります。歴史を変更する唯一の方法は、ネットワーク全体の過半数の同意が必要だからです。
副題
スマートコントラクトとは何ですか?
イーサリアムとビットコインの最大の違いは、スマートコントラクトの概念が導入されていることです。ビットコインはデジタル通貨であり、イーサリアムもデジタル通貨ですが、それだけではありません。
「スマート コントラクト」という名前は少し誤解を招きます。これらは実際の契約ではなく、特に賢いものでもありません。これらは、ブロックチェーン上で実行できる単なるコードの一部、つまりコンピューターのロジック操作です。
まず、イーサリアムネットワーク上の特別な種類のアカウントであるスマートコントラクトについて説明します。ユーザー アカウントがあり、スマート コントラクト アカウントもあります。
ユーザー アカウントは次のもので構成されます。
住所 (銀行口座番号と同様 - ビットコインにも存在します)
残高(お金はいくらあるのか)
スマート コントラクト アカウントには次のものが含まれます。
アドレス
残高(イーサリアム)
状態
コード
アドレスは通常のアカウントと同じであり、アカウントの一意の識別子です。
残高と普通口座も同じ概念です。唯一興味深いのは、スマート コントラクトの残高により、コードがお金を所有できることです。お金を扱うこともあれば、コーディングエラーにより誤ってお金を扱うこともあります。

スマート コントラクト アカウントの状態は、スマート コントラクトで宣言されたすべてのフィールドと変数の現在の状態です。これは、ほとんどのプログラミング言語のクラスのフィールド変数と同じように機能します。実際、クラスのオブジェクトをインスタンス化することは、おそらくスマート コントラクトを理解する最も簡単な方法です。唯一の違いは、このオブジェクトが永続的であることです (自己破壊するようにプログラムされていない限り)。

スマート コントラクトに関する興味深い事実: 他のスマート コントラクトを呼び出すことができます。これにより、独自にお金を使って取引を実行できる自律エージェントを作成できるようになります。
上記のコードを使用してスマート コントラクトを作成するとします。このコードには、uint (整数) 型の counter と呼ばれるフィールドがあります。カウンタ変数の内容はコントラクトの状態です。 count() 関数を呼び出すたびに、ブロックチェーン上のこのスマート コントラクトの状態が 1 ずつ増加することが誰でもわかります。
それがどのように機能するかについては、後でさらに例を挙げて説明しますが、最初にイーサリアムとビットコインのトランザクションに戻り、それを使っていくつかのことを説明したいと思います。
副題
トランザクションレベルでは、イーサリアム VS ビットコイン
ビットコインの取引は非常に簡単です。できることは 1 つだけです。トランザクションの一種。細かいことはさておき、要はTO(宛先、誰がお金を受け取るか)、FROM(誰から、誰が支払うか)、そしてAMOUNT(金額、いくら)ということになります。これにより、ビットコインは価値の保存場所となり、ネットワーク参加者間で価値を転送できるようになります。
イーサリアムの違いは、トランザクションにも「DATA」(データ)フィールドがあることです。 「DATA」フィールドは、次の 3 種類のトランザクションをサポートします。
価値の移転(ビットコインと同じ)
TO受信アドレス
DATA フィールドが空であるか、追加するメッセージが含まれています
あなたから
AMOUNT は送信したいイーサリアムの量です
スマートコントラクトを作成する
TO フィールドが空です (スマート コントラクトの作成がトリガーされます)
DATA フィールドには、バイト コードにコンパイルされたスマート コントラクト コードが含まれます
あなたから
AMOUNT は 0、または契約に組み込む任意の量のイーサリアムにすることができます
スマートコントラクトを呼び出す
TO フィールドはスマート コントラクト アカウントのアドレスです
DATA フィールドには、関数名とパラメーター – スマート コントラクトの呼び出し方法が含まれます
あなたから
AMOUNT は 0 または任意の量のイーサリアム (サービス契約に支払う必要がある金額など) にすることができます。
これらのトランザクションにはさらに多くのフィールドと複雑さがありますが、上記で中心となる概念がよく説明されています。これらのトランザクションのより具体的な例をいくつか見てみましょう。
イーサリアム取引

価値の移転
とてもシンプルです。 TO は、一定量のイーサリアム トークンをアドレスに送信します。トランザクションにメッセージを追加することもできます。

前述したように、空の TO フィールドはスマート コントラクトの作成を示します。 DATA フィールドには、バイト コードにコンパイルされたスマート コントラクトが含まれます。
通話契約
これについては後ほど説明しますが、主な概念は、呼び出したいスマート コントラクト アドレスにトランザクションを送信し、関数呼び出しを DATA フィールドに入れることです。
副題
コストと実行に注意を払う
コードの実行の料金は、呼び出し元によってガスと呼ばれるもので支払われます。ガスはイーサリアム仮想マシンを実行するための燃料です。これは、命令 (コード行など) の実行ごとの料金と考えることができます。
特定の契約通話に使用できる最大ガスを設定する必要があります。たとえば、呼び出すコードが永久ループに入った場合、実行中に消費されるガスが設定された最大ガスを超えないことが保証されます。
ガス (実行) のコストは、ネットワークのマイナー (コードを実行するノード) によって決まります。ガスと処刑については学ぶべきことがまだたくさんあります。しかし、上記のことは覚えておく価値があります。
副題
スマートコントラクトはどのように機能しますか?
myObjectReference.myFunction(parameters);
スマート コントラクトがイーサリアム ネットワークに展開されると、誰でもスマート コントラクトの機能を呼び出すことができます。この関数はセキュリティ上の理由からユーザーが呼び出すことができない場合がありますが、自由に試すことができます。
myVariable = myObject.myFunction(parameters);
MyObject 型のオブジェクトがあるとします。このオブジェクトには myFunction という関数があります。これを呼び出すには、オブジェクトのインスタンス、どの関数を呼び出すか、どのパラメータを指定して呼び出すかを参照するだけです。
このような:
スマート コントラクトの呼び出しも概念的には同じです。唯一の違いは、呼び出しに関するすべての情報をトランザクションに入れて署名し、実行のためにネットワークに送信する必要があることです。
スマート コントラクト "0x0123456" にいくつかのパラメーターが含まれる関数 myFunction を呼び出したいとします。スマート コントラクトを呼び出すには 4 つの手順があります。
さて、トランザクションがブロックチェーン内のブロックに入れられると、その状態の変化がネットワーク全体に記録されます。
副題
ワールドコンピューター
ただし、スマート コントラクトはチューリング完全で理論的には何でもできますが、大量の計算作業にはあまり適していないことを覚えておいてください。

契約に必要な計算が増えるほど、実行コストも高くなります。契約が複雑になればなるほど、セキュリティ ホールが存在する可能性が高くなります。そして、スマート コントラクトのセキュリティ ホールに対処するのは困難です。結局のところ、ブロックチェーンは不変です。
副題
例: トークン
文章
本題に戻って、トークンがどのように機能するかを説明したいと思います。
これらのトークンのほとんどはイーサリアム上で作成されており、その概念は非常にシンプルです (うまく機能しますが、あまりに単純すぎてほとんど愚かです)。
Javascript または別のプログラミング言語を使用して単純な通貨システムを作成するにはどうすればよいでしょうか? すべて 1 つのファイルで実行できます。本当にログに記録する必要があるものは次のとおりです。
1.総供給量
2. アカウント

3. 口座残高
4. 資金の流れ

ユーザーと残高間の単純なマッピングにより、123 に対する答えを得ることができます。

このマップは、口座を金額にマッピングするだけです。
コンストラクターを使用すると、自分のアカウントに初期供給を設定できます (または、任意の数のアカウントに分散できます)。

資金の移動は、ある口座から減算し、別の口座に加算する単純な関数を通じて行われます。


