簡単な言葉でのスマートコントラクトについて

こんにちは 以前は、ブロックチェーンのトピックに関するブログ投稿がありました。そこでは、ブロックチェーンでの分散コンピューティングに関する議論がしばしば起こりました。 これらの議論に基づいて、この投稿が生まれました。



それでは、今日スマートコントラクト(スマートコントラクト)とは何かを理解してみましょう。 最初に、概念自体を非常に一般的に説明し、次に、Ethereumブロックチェーンを例として使用してスマートコントラクトの実装を少し掘り下げます。



スマートコントラクトの概念について



「スマートコントラクト」という用語は既に確立されており、本質的には、ブロックチェーンプラットフォーム上で実行される特定のコードを意味し、その実行は独立した当事者によって検証されます。



これはどういう意味ですか? 分散コンピューティングですか? しかし、通常の理解では、いいえ。



画像



分散コンピューティングについて話すとき、通常は負荷分散を意味します。 巨大なテキストファイル内の特定の単語の出現をカウントするタスクがあるとします。 ファイルをいくつかの部分に分割し、これらの部分を異なるノードに分散して(たとえば、Hadoopを使用して)、それぞれがカウントを実行して回答します。 答えをまとめて結果を得ます。 したがって、タスクを大幅に高速化します。



スマートコントラクトについて話すと、まったく異なる状況になります。 ここでは、ファイルを個別の部分にカットせず、ファイル全体を各ノードに渡します。各ノードは同じ結果を提供します(理想的には)。 質問に戻りましょう。このようなアクションは、分散コンピューティングの定義に該当しますか? まあ、一般的に、なぜですか? それらは分散され、計算されますか? この場合にのみ、負荷の分散についてではなく、信頼の分散について話します。



もちろん、必要なメカニズムが最初に組み込まれていなかったため、このような概念のスケーリングは難しいことに注意してください。 なぜそのような設計が必要なのでしょうか? 最も明白な例は、2つ以上の関係者間の社会的契約(契約)の作成です。 したがって、コンセプトの名前-「スマートコントラクト」。 当事者は、特定のイベントの発生が事前定義されたコードの実行を自動的にトリガーするように、プログラミング言語を使用して、関係を開発するためのシナリオの実行に関する合意と条件を修正します。



Nick Szaboによって1996年に説明されたこのような契約の典型的な例は、自動販売機です。 厳格なルールセットに従って常に自動的に動作します。お金を預け入れ、選択を行う-機械が商品を提供します。 お金を稼いだので、心を変えて戻ってくるように頼むことはできません。 スマートコントラクトの場合、コードは一種の法律になり、異議を唱えることはできず、必要な条件が満たされたときに常に実行されます。



ここで、スマートコントラクトの現在の実装(今後もイーサリアムネットワークについて説明します)は、本質的にブロックチェーン環境に閉じ込められたストーリーであることを明確にする必要があります。 これはどういう意味ですか? 外部(気象データプロバイダーなど)からデータを受信し、このデータにロジックを実装する契約を作成することはできません。 いくつかの進歩があります。たとえば、マイクロソフトは地下室の概念に取り組んでいる、またはいわゆるオラクルがありますが、これまでのところ、そこに成長する余地があると思います。



したがって、ブロックチェーンで完全に閉じられたスマートコントラクトの別の例を提供します。 宝くじ、そして絶対に正直で透明。 スマートコントラクトのアドレスにトランザクションを送信すると、勝つかどうかに関係なく、そこに定められたロジック(ランダマイザーになります)に従って決定を行います。 勝った場合、スマート契約で蓄積されたすべての現金を獲得し、負けた場合、取引は将来のプレーヤーのために共通の貯金箱に送られます。



これらの例はすべて比較的単純で、実際の生活とは多少異なります。 スマートコントラクトを真剣に考えた場合、スマートコントラクトの作業からどのようなメリットが得られますか? 検証可能なコード実行の概念により、以前はアクセスできなかった、または作成が非常に困難だったシステムを構築できます。



何らかの決定を下す必要がある特定のコミュニティがあるとします。 この決定が非常に重要であり、コミュニティが個々のメンバーを単に信頼する傾向がないと仮定します。 たとえば、銀行のコンソーシアムを考えてみましょう。 特に最も重要な決定がこれらの計算に基づいて行われる場合、コンソーシアムの単一のメンバーが計算を1つの銀行に委任することを望んでいないと仮定することは論理的です。 結局のところ、データとこれらの計算を片手で実行する能力の両方を与えてしまうと、ビジネスを危険な状況に陥れる可能性があり、オープンな計算コードでさえ、外部サーバーでのこのコードの正しい実行を納得させません。 この実装を確認する必要があります。 そして、ここでは、検証可能な実行の概念から非常に利益を得ます。参加者は、共通のタスクを完了するために団結し、中央のオペレーターなしで意思決定を行うことができ、ビジネスの効率を高めます。



はい、スマートコントラクトは含まれていないため、現在の実装ではあまり拡張しません。 しかし、今でも、スマートコントラクトの環境の外で重い計算を実行し、当事者が岸で合意できる特定の基準点のみを修正することが可能であり、それによっていくつかのシナリオで必要な速度に達します。



問題の技術面



次に、Ethereumブロックチェーンを例として使用して、スマートコントラクトの実装の技術面について話してみましょう。 スマートコントラクトを作成、公開、実行するプロセスは何ですか?



このネットワークでは、Solidityを使用して、スマートコントラクトを作成します。これは、JSにやや似ており、チューリング完全です(つまり、任意の計算可能な機能を実装できます)。



コード自体は、いわゆるイーサリアム仮想マシン(EVM)で実行されます。 各スマートコントラクトによるリソースの消費を何らかの形で制限する特定のメカニズムが必要なため、コードはシステムのすべての参加者によって実行およびチェックされることに注意する必要があります(そうでなければ、無限ループを作成できます)。 したがって、エンティティガス(燃料)はイーサリアムに導入されます。 Ethereumのコントラクトは、任意の命令の実行、他のコントラクトの呼び出し、データの書き込みおよび読み取りなどを行うことができます。 これらの操作はすべて燃料を消費し、燃料は暗号通貨(エーテル)によって支払われます。 Ether暗号通貨燃料の価格は、市場によって動的に形成されます。 契約実行トリガーはトランザクションです。 特定のトランザクションで消費される燃料のコストは、トランザクションを開始したアカウントから削除されます。 さらに、燃料消費制限があります。これは、契約書の記述ミスからアカウントを保護するために作成されたものであり、このアカウントでのすべての暗号通貨の制御不能な書き込みにつながる可能性があります。



スマートコントラクト環境は、通常のコード実行環境とは非常に異なっていることに注意することが重要です。 間違いは非常に高価な場合があり、操作自体は高価で時間がかかります。 スマートコントラクトを更新するメカニズムは複雑です。 あなたは本質的に新しいものを書いており、この新しいスマート契約を使用するように当事者を説得しなければなりません。 契約の新しいバージョンに切り替える方法はないとは言えませんが、多くの場合、新しいソーシャル契約です。 考えてみると、集中システムの更新を消費者に公開し、消費者の意見にあまり興味を持たないのに慣れているとき、それは大きな違いです。 スマートコントラクトの現実のシナリオで作業するためのある種のシステムを構築する場合、これらの制限を理解する必要があります。



All Articles