スマヌトコントラクトの抂芁

この蚘事では、スマヌト コントラクトずは䜕か、その抂芁を説明し、さたざたなスマヌト コントラクト プラットフォヌムずその機胜に぀いお説明し、それらがどのように機胜し、どのような利点がもたらされるかに぀いおも説明したす。 この資料は、スマヌト コントラクトのトピックに詳しくないが、さらに理解したいず考えおいる読者にずっお非垞に圹立ちたす。

通垞契玄ずの比范スマヌトコントラクト

詳现を掘り䞋げる前に、玙で指定される通垞の契玄ずデゞタルで衚珟されるスマヌト コントラクトの違いの䟋を芋おみたしょう。

スマヌトコントラクトの抂芁

スマヌトコントラクトが登堎する前は、これはどのように機胜しおいたのでしょうか? 䟡倀の分配のための特定のルヌルず条件、および䞎えられたルヌルず条件に埓っおこの分配の実装を保蚌する特定のメカニズムを確立したいず考えおいる人々のグルヌプを想像しおください。 それから圌らは集たり、身分蚌明曞の詳现、条件、関係する䟡倀芳を曞き留めた玙を䜜成し、日付を蚘入し、眲名したす。 この契玄は、公蚌人などの信頌できる圓事者によっお認蚌されたものでもありたす。 さらに、これらの人々は、そのような契玄曞の玙のコピヌを持っお別の方向に進み、契玄自䜓に察応しない可胜性のあるいく぀かの行動を実行し始めたした。぀たり、圌らはあるこずをしたしたが、玙の䞊では䜕かを行うべきであるこずが蚌明されおいたした。党然違う。 そしお、この状況からどうやっお抜け出すのでしょうか 実際、グルヌプのメンバヌの XNUMX 人がこの曞類を受け取り、いく぀かの蚌拠を取り、法廷に持ち蟌んで、契玄ず実際の行為ずの遵守を達成する必芁がありたす。 倚くの堎合、この契玄を公正に履行するこずは困難であり、それが䞍快な結果をもたらしたす。

スマヌトコントラクトに぀いお䜕が蚀えるでしょうか? これらは、契玄条件を蚘述する可胜性ず、契玄を厳密に実行するためのメカニズムの䞡方を組み合わせおいたす。 条件が蚭定され、察応するトランザクションたたはリク゚ストが眲名されおいる堎合、そのリク゚ストたたはトランザクションが受け入れられるず、条件を倉曎したり、その実装に圱響を䞎えたりするこずはできなくなりたす。

XNUMX ぀のバリデヌタヌたたはネットワヌク党䜓ず、実行のために送信されたすべおのスマヌト コントラクトを厳密な時系列順に保存するデヌタベヌスがありたす。 このデヌタベヌスには、スマヌト コントラクトを実行するためのすべおのトリガヌ条件が含たれおいる必芁があるこずも重芁です。 さらに、契玄に蚘茉されおいる配分額そのものを考慮する必芁がありたす。 これが䜕らかのデゞタル通貚に圓おはたる堎合、このデヌタベヌスはそれを考慮する必芁がありたす。

蚀い換えれば、スマヌト コントラクトのバリデヌタヌは、スマヌト コントラクトが操䜜するすべおのデヌタにアクセスできる必芁がありたす。 たずえば、単䞀のデヌタベヌスを䜿甚しお、デゞタル通貚、ナヌザヌ残高、ナヌザヌ トランザクション、タむムスタンプを同時に管理する必芁がありたす。 そしお、スマヌト コントラクトでは、条件は、特定の通貚でのナヌザヌの残高、特定の時間の到来、たたは特定の取匕が実行されたずいう事実だけで、それ以䞊ではありたせん。

スマヌトコントラクトの定矩

䞀般に、この甚語自䜓は研究者の Nick Szabo によっお造られ、1994 幎に初めお䜿甚され、1997 幎にスマヌト コントラクトの抂念そのものを説明する蚘事で文曞化されたした。

スマヌト コントラクトは、事前に定矩された条件にのみ䟝存する䟡倀分配の自動化が実行されるこずを意味したす。 最も単玔な圢匏では、厳密に定矩された条件があり、特定の圓事者によっお眲名された契玄のように芋えたす。

スマヌト コントラクトは、サヌドパヌティぞの信頌を最小限に抑えるように蚭蚈されおいたす。 堎合によっおは、すべおが䟝存する意思決定の䞭心が完党に排陀されるこずがありたす。 さらに、そのような契玄は監査が容易です。 これは、そのようなシステムのいく぀かの蚭蚈機胜の結果ですが、ほずんどの堎合、スマヌトコントラクトによっお、分散環境ず、誰でもデヌタベヌスを分析しお契玄の実行の完党な監査を実行できる機胜の存圚が理解されたす。 これにより、契玄自䜓の履行の倉曎を䌎う遡及的なデヌタ倉曎に察する保護が保蚌されたす。 スマヌト コントラクトを䜜成しお開始する際のほずんどのプロセスをデゞタル化するず、実装のテクノロゞヌずコストが簡玠化されるこずがよくありたす。

簡単な䟋 - ゚スクロヌ サヌビス

非垞に簡単な䟋を芋おみたしょう。 これは、スマヌト コントラクトの機胜の理解に近づくだけでなく、どのような堎合にスマヌト コントラクトを䜿甚する必芁があるかをよりよく理解するのに圹立ちたす。

スマヌトコントラクトの抂芁

ビットコむンを䜿甚しお実装するこずもできたすが、珟時点ではビットコむンはただ本栌的なスマヌトコントラクトのプラットフォヌムずは蚀えたせん。 それで、バむダヌがいお、オンラむンストアを持っおいたす。 顧客はこのストアからモニタヌを賌入したいず考えおいたす。 最も単玔なケヌスでは、賌入者が支払いを完了しお送信し、オンラむン ストアがそれを受け入れお確認し、商品を発送したす。 ただし、この状況では倧きな信頌が必芁です。賌入者はモニタヌの費甚党䜓に぀いおオンラむン ストアを信頌する必芁がありたす。 オンラむン ストアは賌入者の目には評刀が䜎い可胜性があるため、支払いを受け入れた埌、䜕らかの理由でストアがサヌビスを拒吊し、賌入者に商品を発送しないリスクがありたす。 したがっお、賌入者は、そのようなリスクを最小限に抑え、そのような取匕をより信頌できるものにするために、この堎合に䜕が適甚できるかを質問したすしたがっお、オンラむンストアもこの質問をしたす。

ビットコむンの堎合、買い手ず売り手が独立しお仲介者を遞択できるようにするこずが可胜です。 物議を醞しおいる問題の解決に携わっおいる人はたくさんいたす。 たた、参加者は䞀般的な仲介者のリストから信頌できる仲介者を遞択できたす。 これらは䞀緒に 2 of 3 マルチシグネチャ アドレスを䜜成したす。このアドレスには XNUMX ぀のキヌがあり、そのアドレスからコむンを䜿甚するには任意の XNUMX ぀のキヌによる XNUMX ぀の眲名が必芁です。 XNUMX ぀のキヌは賌入者に属し、XNUMX ぀目はオンラむン ストアに、XNUMX ぀目は仲介者に属したす。 そしお、そのようなマルチシグネチャアドレスに、賌入者はモニタヌの支払いに必芁な金額を送金したす。 これで、売り手は、自分に䟝存するマルチ眲名アドレスでしばらくの間資金がブロックされおいるこずを確認した堎合、安党にモニタヌに郵䟿で送るこずができたす。

次に、買い手は小包を受け取り、商品を怜査し、最終的な賌入を決定したす。 圌は提䟛されるサヌビスに完党に同意し、自分のキヌでトランザクションに眲名し、マルチ眲名アドレスから売り手にコむンを転送する堎合もあれば、䜕か䞍満がある堎合もありたす。 XNUMX 番目のケヌスでは、圌は仲介者に連絡しお、コむンを別の方法で配垃する代替取匕をたずめたす。

届いたモニタヌに少し傷があり、オンラむン ストアの Web サむトにはケヌブルがキットに含たれおいる必芁があるず蚘茉されおいたにもかかわらず、キットにはコンピュヌタヌに接続するためのケヌブルが含たれおいなかったずしたす。 次に、買い手は、この状況で隙されたこずを仲介者に蚌明するために必芁な蚌拠を収集したす。サむトのスクリヌンショットを撮り、郵䟿受領曞の写真を撮り、モニタヌの傷の写真を撮り、シヌルが貌られおいたこずを瀺したす。壊れおケヌブルが抜けおしたった。 次に、オンラむン ストアは蚌拠を収集し、仲介者に転送したす。

仲介者は、賌入者の憀りずオンラむンストアの利益の䞡方を同時に満たすこずに関心がありたす理由は埌で明らかになりたす。 これは、マルチシグネチャアドレスからのコむンが賌入者、オンラむンストア、仲介者の間で䞀定の割合で䜿甚される取匕を構成したす。仲介者は自分の仕事の報酬ずしお䞀郚を受け取るためです。 総額の 90% が売䞻に、5% が仲介者に、5% が買䞻に報酬ずしお支払われるずしたす。 調停者は自分のキヌを䜿甚しおこのトランザクションに眲名したすが、ただ適甚できたせん。XNUMX ぀の眲名が必芁ですが、䟡倀があるのは XNUMX ぀だけであるためです。 このようなトランザクションは買い手ず売り手の䞡方に送信されたす。 少なくずも XNUMX 人がコむンを再配垃するためのこのオプションに満足した堎合、トランザクションは事前眲名されおネットワヌクに配垃されたす。 それを怜蚌するには、取匕圓事者の XNUMX 人が仲介者のオプションに同意するだけで十分です。

最初に、双方の参加者が信頌できる調停者を遞ぶこずが重芁です。 この堎合、圌はどちらかの利益ずは独立しお行動し、状況を客芳的に評䟡したす。 仲介者が少なくずも XNUMX 人の参加者を満足させるコむン配垃のオプションを提䟛しない堎合、賌入者ずオンラむン ストアの䞡方が合意した䞊で、XNUMX ぀の眲名を入れるこずで新しいマルチ眲名アドレスにコむンを送信できたす。 新しいマルチ眲名アドレスは、この問題に関しおより有胜で、より良い遞択肢を提䟛する可胜性のある別の調停者によっお線集されたす。

ドミトリヌず冷蔵庫の䟋

スマヌト コントラクトの機胜をより明瀺的に衚瀺する、より耇雑な䟋を芋おみたしょう。

スマヌトコントラクトの抂芁

最近、寮の同じ郚屋に匕っ越しおきた XNUMX 人の男性がいるずしたす。 XNUMX人は自分の郚屋に䞀緒に䜿える冷蔵庫を賌入するこずに興味を持っおいたす。 そのうちのXNUMX人は、冷蔵庫を賌入するために必芁な金額を集めお売り手ず亀枉するこずを志願したした。 しかし、圌らは知り合ったばかりで、信頌関係はただ十分ではありたせん。 明らかに、そのうちの XNUMX 人は XNUMX 人目にお金を䞎えるこずでリスクを負っおいたす。 さらに、売䞻を遞択する際にも合意に達する必芁がありたす。

圌らぱスクロヌサヌビスを利甚するこずができたす。぀たり、取匕の実行を監芖し、物議を醞す問題が発生した堎合に解決する仲介者を遞択するこずができたす。 次に、同意した埌、スマヌトコントラクトを䜜成し、その䞭で特定の条件を芏定したす。

最初の条件は、特定の時間前 (たずえば XNUMX 週間以内) に、察応するスマヌト コントラクト アカりントが特定のアドレスから特定の金額の支払いを XNUMX 回受け取る必芁があるずいうこずです。 これが起こらない堎合、スマヌト コントラクトは実行を停止し、コむンをすべおの参加者に返したす。 条件が満たされる堎合、販売者ず仲介者の識別子の倀が蚭定され、すべおの参加者が販売者ず仲介者の遞択に同意するずいう条件がチェックされたす。 すべおの条件が満たされるず、資金は指定されたアドレスに送金されたす。 このアプロヌチにより、あらゆる偎からの詐欺から参加者を保護するこずができ、通垞は信頌する必芁がなくなりたす。

この䟋では、各条件を満たすためのパラメヌタヌを段階的に蚭定できるこの機胜により、任意の耇雑さずネストされたレベルの深さのシステムを䜜成できるずいうたさに原理がわかりたす。 さらに、最初にスマヌト コントラクトの最初の条件を定矩し、その条件が満たされた埌にのみ、次の条件のパラメヌタヌを蚭定できたす。 蚀い換えれば、条件は正匏に蚘述されおおり、その条件のパラメヌタはその動䜜䞭にすでに蚭定できたす。

スマヌトコントラクトの分類

分類のために、さたざたな基準グルヌプを蚭定できたす。 ただし、技術開発の時点では、そのうちの XNUMX ぀が関連しおいたす。

スマヌト コントラクトは、集䞭型たたは分散型の実行環境によっお区別できたす。 分散化の堎合、スマヌトコントラクトを実行する際の独立性ずフォヌルトトレランスが倧幅に向䞊したす。

たた、条件を蚭定しお満たすプロセスによっお区別するこずもできたす。条件は、自由にプログラム可胜、制限付きたたは事前定矩枈み、぀たり厳密に型指定できたす。 スマヌト コントラクト プラットフォヌム䞊に特定のスマヌト コントラクトが 4 ぀だけある堎合、それらのパラメヌタヌは任意の方法で蚭定できたす。 したがっお、それらの蚭定ははるかに簡単です。リストからコントラクトを遞択し、パラメヌタヌを枡したす。

開始方法によれば、自動化されたスマヌトコントラクト、぀たり特定の条件が発生したずきに自動実行されるコントラクトず、条件が指定されおいるがプラットフォヌムがその履行を自動的にチェックしないコントラクトがありたす。別途開始する必芁がありたす。

さらに、スマヌト コントラクトのプラむバシヌ レベルは異なりたす。 完党にオヌプンにするこずも、郚分的たたは完党に機密にするこずもできたす。 埌者は、サヌドパヌティのオブザヌバヌがスマヌトコントラクトの条件を確認しないこずを意味したす。 ただし、プラむバシヌのトピックは非垞に幅広いため、珟圚の蚘事ずは分けお怜蚎するこずをお勧めしたす。

以䞋では、珟圚のトピックをより明確に理解するために、最初の XNUMX ぀の基準を詳しく芋おいきたす。

ランタむムごずのスマヌトコントラクト

スマヌトコントラクトの抂芁

実行環境に基づいお、集䞭型スマヌト コントラクト プラットフォヌムず分散型スマヌト コントラクト プラットフォヌムが区別されたす。 集䞭型デゞタル契玄の堎合、単䞀のサヌビスが䜿甚されたす。バリデヌタは XNUMX ぀だけあり、バックアップおよび回埩サヌビスもあり、これも集䞭管理されたす。 スマヌト コントラクトの条件を蚭定し、たさにこのサヌビス デヌタベヌスで考慮される倀を配垃するために必芁なすべおの情報を保存するデヌタベヌスが XNUMX ぀ありたす。 このような集䞭型サヌビスでは、クラむアントが特定のリク゚ストに条件を蚭定し、そのような契玄を䜿甚したす。 プラットフォヌムの集䞭型の性質により、認蚌メカニズムは暗号通貚よりも安党性が䜎い可胜性がありたす。

䟋ずしお、移動通信プロバむダヌ (さたざたな携垯電話䌚瀟) を取り䞊げたす。 ある通信事業者が、さたざたな圢匏 (音声通話、SMS 送信、モバむル むンタヌネット トラフィックなど) で送信されるトラフィックの集䞭蚘録をサヌバヌ䞊に保管し、さたざたな暙準に埓っお蚘録を保持しおいるずしたす。ナヌザヌ残高䞊の資金の。 したがっお、移動通信プロバむダヌは、提䟛されるサヌビスの䌚蚈凊理ずその支払いをさたざたな条件で行うための契玄を䜜成できたす。 この堎合、「○○の番号に○○のコヌドを蚘茉したSMSを送信するず、○○の条件でトラフィックを分散したす」ずいった条件を蚭定するのが簡単です。

もう XNUMX ぀の䟋ずしお、むンタヌネット バンキングの拡匵機胜ず、定期支払い、入金の自動換算、指定口座ぞの利息の自動匕き萜ずしなどの非垞にシンプルな契玄を備えた埓来の銀行を挙げるこずができたす。

分散型実行環境を備えたスマヌト コントラクトに぀いお話しおいる堎合、バリデヌタヌのグルヌプが存圚したす。 理想的には、誰でもバリデヌタヌになれるのです。 デヌタベヌス同期プロトコルず合意に達したこずにより、圢匏が頻繁に倉曎され、オヌプンな仕様がない䞀郚の条件付きク゚リではなく、厳密に蚘述されたコントラクトを持぀すべおのトランザクションを保存する共通デヌタベヌスができたした。 ここで、トランザクションには、厳密な仕様に埓っお契玄を実行するための指瀺が含たれたす。 この仕様はオヌプンであるため、プラットフォヌム ナヌザヌ自身がスマヌト コントラクトを監査および怜蚌できたす。 ここで、分散型プラットフォヌムは独立性ず耐障害性の点で集䞭型プラットフォヌムより優れおいるこずがわかりたすが、その蚭蚈ずメンテナンスははるかに耇雑です。

条件の蚭定ず履行方法によるスマヌトコントラクト

ここで、スマヌト コントラクトが条件を蚭定および満たす方法においおどのように異なるかを詳しく芋おみたしょう。 ここで、ランダムにプログラム可胜でチュヌリング完党なスマヌト コントラクトに泚目したす。 チュヌリング完党スマヌト コントラクトでは、曞き蟌みサむクル、確率を蚈算するための関数など、独自の電子眲名アルゎリズムに至るたで、ほずんどすべおのアルゎリズムをコントラクト実行の条件ずしお蚭定できたす。 この堎合、本圓に恣意的なロゞックの蚘述を意味したす。

任意のスマヌト コントラクトもありたすが、チュヌリング完党なものはありたせん。 これには、独自のスクリプトを備えたビットコむンずラむトコむンが含たれたす。 これは、特定の操䜜のみを任意の順序で䜿甚できるこずを意味したすが、ルヌプや独自のアルゎリズムを䜜成するこずはできなくなりたす。

さらに、事前定矩されたスマヌト コントラクトを実装するスマヌト コントラクト プラットフォヌムもありたす。 これらには、Bitshares や Steemit が含たれたす。 Bitshares には、取匕、アカりント管理、プラットフォヌム自䜓ずそのパラメヌタヌの管理のためのさたざたなスマヌト コントラクトがありたす。 Steemit も同様のプラットフォヌムですが、Bitshares のようなトヌクンの発行や取匕ではなく、ブログに焊点を圓おおいたす。぀たり、コンテンツを分散型で保存および凊理したす。

任意のチュヌリング完党コントラクトには、むヌサリアム プラットフォヌムずただ開発䞭の RootStock が含たれたす。 したがっお、以䞋ではむヌサリアム スマヌト コントラクト プラットフォヌムに぀いおもう少し詳しく説明したす。

開始方法別のスマヌトコントラクト

開始方法に基づいお、スマヌト コントラクトは、自動化ず手動 (自動化されおいない) の少なくずも XNUMX ぀のグルヌプに分けるこずもできたす。 自動化されたものは、既知のパラメヌタヌず条件がすべお䞎えられた堎合、スマヌト コントラクトが完党に自動的に実行されるずいう事実によっお特城付けられたす。぀たり、远加のトランザクションを送信したり、埌続の実行ごずに远加の手数料を費やす必芁がありたせん。 プラットフォヌム自䜓には、スマヌト コントラクトがどのように完了するかを蚈算するためのすべおのデヌタが含たれおいたす。 そこでのロゞックは恣意的なものではなく、あらかじめ決められおおり、これらはすべお予枬可胜です。 ぀たり、スマヌトコントラクトの実行の耇雑さを事前に掚定し、それに䞀定の手数料を䜿甚するこずができ、その実装のためのすべおのプロセスがより効率的になりたす。

自由にプログラムされたスマヌト コントラクトの堎合、実行は自動化されたせん。 このようなスマヌト コントラクトを開始するには、事実䞊すべおのステップで、次の実行ステヌゞたたは次のスマヌト コントラクト メ゜ッドを呌び出す新しいトランザクションを䜜成し、適切な手数料を支払い、トランザクションが確認されるのを埅぀必芁がありたす。 スマヌト コントラクト コヌドは任意であり、氞遠ルヌプ、䞀郚のパラメヌタヌず匕数の欠劂、ハンドルされない䟋倖など、いく぀かの予枬䞍可胜な瞬間が発生する可胜性があるため、実行は正垞に完了するかどうかが決たりたす。

むヌサリアムアカりント

むヌサリアムアカりントの皮類

むヌサリアムプラットフォヌムにはどのような皮類のアカりントがあるかを芋おみたしょう。 ここにはアカりントの皮類が XNUMX ぀だけあり、他のオプションはありたせん。 XNUMX ぀目のタむプはナヌザヌ アカりントず呌ばれ、XNUMX ぀目は契玄アカりントず呌ばれたす。 それらがどのように異なるのか芋おみたしょう。

ナヌザヌアカりントは電子眲名の個人キヌによっおのみ管理されたす。 アカりント所有者は、ECDSA (楕円曲線デゞタル眲名アルゎリズム) アルゎリズムを䜿甚しお、電子眲名甚の独自のキヌ ペアを生成したす。 このキヌで眲名されたトランザクションのみが、このアカりントの状態を倉曎できたす。

スマヌト コントラクト アカりントには別のロゞックが提䟛されたす。 これは、スマヌト コントラクトの動䜜を完党に決定する事前定矩された゜フトりェア コヌドによっおのみ制埡できたす。぀たり、特定の状況䞋でコむンをどのように管理するか、どのナヌザヌの䞻導で、どのような远加条件の䞋でこれらのコむンが配垃されるかなどです。 開発者がプロ​​グラムコヌド内でいく぀かの点を芏定しおいない堎合、問題が発生する可胜性がありたす。 たずえば、スマヌト コントラクトは、どのナヌザヌからもさらなる実行の開始を受け付けない特定の状態を受け取る堎合がありたす。 この堎合、スマヌト コントラクトにはこの状態を終了するための芏定がないため、コむンは実際には凍結されたす。

むヌサリアムでのアカりントの䜜成方法

ナヌザヌ アカりントの堎合、所有者は ECDSA を䜿甚しお独自にキヌ ペアを生成したす。 むヌサリアムは電子眲名にビットコむンずたったく同じアルゎリズムずたったく同じ楕円曲線を䜿甚したすが、アドレスの蚈算方法が若干異なるこずに泚意するこずが重芁です。 ここでは、ビットコむンのように二重ハッシュの結果は䜿甚されなくなりたしたが、256 ビットの長さの Keccak 関数を䜿甚しお単䞀ハッシュが提䟛されたす。 最䞋䜍ビットは結果の倀から切り取られたす。぀たり、出力ハッシュ倀の最䞋䜍 160 ビットです。 その結果、むヌサリアムのアドレスを取埗したす。 実際には 20 バむト必芁です。

むヌサリアムのアカりント識別子は、アドレスがチェックサムを远加しお 58 進数で゚ンコヌドされるビットコむンや他の倚くのシステムずは異なり、チェックサムを適甚せずに XNUMX 進数で゚ンコヌドされるこずに泚意しおください。 これは、むヌサリアムでアカりント識別子を扱うずきは泚意する必芁があるこずを意味したす。識別子に XNUMX ぀でも間違いがあるず、コむンの損倱に぀ながるこずが保蚌されたす。

重芁な特城があり、それは、最初の入金を受け取った時点で、䞀般デヌタベヌス レベルのナヌザヌ アカりントが䜜成されるこずです。

スマヌト コントラクト アカりントの䜜成には、たったく異なるアプロヌチが必芁です。 最初に、ナヌザヌの XNUMX 人がスマヌト コントラクトの゜ヌス コヌドを䜜成し、その埌コヌドがむヌサリアム プラットフォヌム甚に特別なコンパむラヌに枡されお、独自のむヌサリアム仮想マシンのバむトコヌドが取埗されたす。 結果のバむトコヌドは、トランザクションの特別なフィヌルドに配眮されたす。 開始者のアカりントに代わっお認蚌されたす。 次に、このトランザクションはネットワヌク党䜓に䌝播され、スマヌト コントラクト コヌドが配眮されたす。 取匕に察する手数料、およびそれに応じお契玄の実行に察する手数料は、開始者のアカりントの残高から匕き萜ずされたす。

各スマヌト コントラクトには、必ず (このコントラクトの) 独自のコンストラクタヌが含たれたす。 空の堎合もあれば、コンテンツが含たれおいる堎合もありたす。 コンストラクタヌが実行されるず、スマヌト コントラクト アカりント識別子が䜜成され、これを䜿甚しおコむンを送信したり、特定のスマヌト コントラクト メ゜ッドを呌び出したりするこずができたす。

むヌサリアムのトランザクション構造

より明確にするために、むヌサリアム トランザクションの構造ずスマヌト コントラクト コヌドの䟋を芋おいきたす。

スマヌトコントラクトの抂芁

Ethereum トランザクションは耇数のフィヌルドで構成されたす。 これらの最初の nonce は、トランザクションを配垃し、その䜜成者であるアカりント自䜓に関連する、トランザクションの特定のシリアル番号です。 これは二重取匕を区別する、぀たり同じ取匕が二床受け付けられた堎合を排陀するために必芁である。 識別子を䜿甚するこずにより、各トランザクションは䞀意のハッシュ倀を持ちたす。

次に次のようなフィヌルドが来たす ガス代。 これは、むヌサリアム基本通貚がガスに倉換される䟡栌を瀺し、スマヌトコントラクトの実行ず仮想マシンリ゜ヌスの割り圓おの支払いに䜿甚されたす。 それはどういう意味ですか

ビットコむンでは、手数料は基本通貚、぀たりビットコむン自䜓によっお盎接支払われたす。 これは、単玔な蚈算メカニズムのおかげで可胜になりたす。぀たり、トランザクションに含たれるデヌタの量に察しお厳密に料金を支払いたす。 むヌサリアムでは、トランザクション デヌタの量に䟝存するこずが非垞に難しいため、状況はさらに耇雑です。 ここで、トランザクションには仮想マシン䞊で実行されるプログラム コヌドも含たれる堎合があり、仮想マシンの各操䜜の耇雑さは異なる堎合がありたす。 倉数にメモリを割り圓おる操䜜もありたす。 これらには独自の耇雑さがあり、各操䜜の支払いはそれに䟝存したす。

ガス換算での各操䜜のコストは䞀定です。 これは、特に各操䜜の䞀定コストを決定するために導入されおいたす。 ネットワヌクの負荷に応じお、ガス䟡栌、぀たり手数料を支払うために基本通貚がこの補助単䜍に倉換される係数が倉化したす。

むヌサリアムのトランザクションにはもう XNUMX ぀の特城がありたす。仮想マシンで実行するために含たれるバむトコヌドは、䜕らかの結果 (成功たたは倱敗) で完了するたで、たたは手数料を支払うために割り圓おられた䞀定量のコむンがなくなるたで実行されたす。 。 䜕らかの゚ラヌが発生した堎合に、送信者のアカりントのコむンがすべおコミッションに費やされおしたう状況 (たずえば、仮想マシンで開始されたある皮の氞遠のサむクル) を避けるために、次のフィヌルドが存圚したす。 ガスを始動する (ガス制限ずも呌ばれたす) - 送信者が特定のトランザクションを完了するために䜿甚できるコむンの最倧量を決定したす。

次のフィヌルドは 宛先アドレス。 これには、コむンの受信者のアドレス、たたはそのメ゜ッドが呌び出される特定のスマヌト コントラクトのアドレスが含たれたす。 埌は畑です 倀、宛先アドレスに送信されるコむンの量が入力されたす。

次は、ず呌ばれる興味深いフィヌルドです。 デヌタ、構造党䜓が収たる堎所。 これは個別のフィヌルドではなく、仮想マシンのコヌドが定矩される構造党䜓です。 ここに任意のデヌタを配眮できたす。これには別のルヌルがありたす。

そしお最埌のフィヌルドは 眲名。 これには、このトランザクションの䜜成者の電子眲名ず、この眲名の怜蚌に䜿甚される公開キヌの䞡方が同時に含たれおいたす。 公開キヌから、このトランザクションの送信者のアカりント識別子を取埗できたす。぀たり、システム自䜓で送信者のアカりントを䞀意に識別できたす。 トランザクションの構造に関する重芁なこずがわかりたした。

Solidity のスマヌト コントラクト コヌドの䟋

次に、䟋を䜿甚しお最も単玔なスマヌト コントラクトを詳しく芋おみたしょう。

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

䞊蚘は、ナヌザヌのコむンを保持し、オンデマンドで返すこずができる簡略化された゜ヌス コヌドです。

したがっお、次の機胜を実行する銀行スマヌト コントラクトがありたす。残高にコむンを蓄積したす。぀たり、トランザクションが確認され、そのようなスマヌト コントラクトが発行されるず、残高にコむンを含めるこずができる新しいアカりントが䜜成されたす。 ナヌザヌずナヌザヌ間のコむンの分配を蚘憶したす。 残高管理にはいく぀かの方法があり、ナヌザヌの残高を補充、匕き出し、確認するこずができたす。

゜ヌスコヌドの各行を芋おみたしょう。 このコントラクトには定数フィヌルドがありたす。 そのうちの XNUMX ぀は、アドレス型で、所有者ず呌ばれたす。 ここで、コントラクトは、このスマヌト コントラクトを䜜成したナヌザヌのアドレスを蚘憶したす。 さらに、ナヌザヌのアドレスず残高の間の察応を維持する動的な構造がありたす。

これに Bank メ゜ッドが続きたす。これは契玄ず同じ名前です。 したがっお、これはそのコンストラクタヌです。 ここで、owner 倉数には、このスマヌト コントラクトをネットワヌク䞊に配眮した人のアドレスが割り圓おられたす。 これがこのコンストラクタヌで発生する唯䞀のこずです。 ぀たり、この堎合の msg は、このコントラクトのコヌド党䜓を含むトランザクションずずもに仮想マシンに転送されたデヌタそのものです。 したがっお、msg.sender は、このコヌドをホストするこのトランザクションの䜜成者です。 圌はスマヌトコントラクトの所有者になりたす。

入金方法では、取匕ごずに䞀定数のコむンを契玄アカりントに送金できたす。 この堎合、これらのコむンを受け取ったスマヌト コントラクトは、それらを貞借察照衚に残したすが、これらのコむンが誰に属しおいるかを知るために、これらのコむンの送信者が誰であるかを正確に残高構造に蚘録したす。

次のメ゜ッドはwithdrawず呌ばれ、パラメヌタをXNUMX぀取りたす。これは、誰かがこの銀行から匕き出したいコむンの量です。 これにより、このメ゜ッドを呌び出しお送信するナヌザヌの残高に十分なコむンがあるかどうかがチェックされたす。 十分な数のコむンがある堎合、スマヌト コントラクト自䜓がその数のコむンを呌び出し元に返したす。

次に、ナヌザヌの珟圚の残高を確認する方法です。 このメ゜ッドを呌び出した人は、スマヌト コントラクト内のこの残高を取埗するために䜿甚されたす。 このメ゜ッドの修食子が view であるこずに泚意しおください。 これは、メ゜ッド自䜓はクラスの倉数を䞀切倉曎せず、実際には読み取りメ゜ッドであるこずを意味したす。 このメ゜ッドを呌び出すために別のトランザクションが䜜成されるこずはなく、手数料も支払われず、すべおの蚈算がロヌカルで実行され、その埌ナヌザヌは結果を受け取りたす。

kill メ゜ッドは、スマヌト コントラクトの状態を砎棄するために必芁です。 ここでは、このメ゜ッドの呌び出し元がこのコントラクトの所有者であるかどうかを远加チェックしたす。 そうであれば、コントラクトは自己砎棄され、砎棄関数は XNUMX ぀のパラメヌタヌ、぀たりコントラクトが残高に残っおいるすべおのコむンを送信する先のアカりント ID を受け取りたす。 この堎合、残りのコむンは自動的に契玄所有者のアドレスに送られたす。

むヌサリアムネットワヌク䞊のフルノヌドはどのように機胜したすか?

このようなスマヌト コントラクトがむヌサリアム プラットフォヌム䞊でどのように実行され、完党なネットワヌク ノヌドがどのように機胜するかを抂略的に芋おみたしょう。

スマヌトコントラクトの抂芁

Ethereum ネットワヌク䞊のフル ノヌドには少なくずも XNUMX ぀のモゞュヌルが必芁です。
2 ぀目は、他の分散プロトコルず同様に、PXNUMXP ネットワヌキング モゞュヌルです。これは、ネットワヌク接続および他のノヌドずの連携のためのモゞュヌルであり、ブロック、トランザクション、および他のノヌドに関する情報が亀換されたす。 これは、すべおの分散型暗号通貚の䌝統的なコンポヌネントです。

次に、ブロックチェヌン デヌタの保存、凊理、優先ブランチの遞択、ブロックの远加、ブロックのリンク解陀、これらのブロックの怜蚌などを行うモゞュヌルがありたす。

XNUMX 番目のモゞュヌルは EVM (むヌサリアム仮想マシン) ず呌ばれたす。これは、むヌサリアム トランザクションからバむトコヌドを受け取る仮想マシンです。 このモゞュヌルは、特定のアカりントの珟圚の状態を取埗し、受信したバむトコヌドに基づいおその状態を倉曎したす。 各ネットワヌク ノヌド䞊の仮想マシンのバヌゞョンは同じである必芁がありたす。 各むヌサリアム ノヌドで行われる蚈算はたったく同じですが、非同期で行われたす。誰かがこのトランザクションを先にチェックしお受け入れ、぀たりトランザクションに含たれるすべおのコヌドを実行し、その埌誰かがこのトランザクションを確認しお受け入れたす。 したがっお、トランザクションが生成されるずネットワヌクに配信され、ノヌドがそれを受け付け、怜蚌時にはビットコむンでビットコむンスクリプトが実行されるのず同じように、ここでも仮想マシンのバむトコヌドが実行されたす。

トランザクションに含たれるすべおのコヌドが実行され、特定のアカりントの新しい状態が生成され、このトランザクションが適甚されたかどうかが明確になるたで保存された堎合、トランザクションは怜蚌されたずみなされたす。 トランザクションが適甚されるず、この状態は完了しただけでなく、珟圚の状態ずもみなされたす。 各ネットワヌク ノヌドの各アカりントの状態を保存するデヌタベヌスがありたす。 すべおの蚈算が同じ方法で行われ、ブロックチェヌンの状態が同じであるため、すべおのアカりントの状態を含むデヌタベヌスも各ノヌドで同じになりたす。

スマヌトコントラクトの誀解ず限界

むヌサリアムず同様のスマヌトコントラクトプラットフォヌムに存圚する制限ずしおは、以䞋のものが挙げられたす。

  • コヌドの実行。
  • メモリを割り圓おる。
  • ブロックチェヌンデヌタ。
  • 支払いを送る。
  • 新しい契玄を䜜成したす。
  • 他の契玄を呌び出したす。

仮想マシンに課せられる制限を芋お、それに応じおスマヌト コントラクトに関するいく぀かの誀解を払拭しおみたしょう。 仮想マシンでは、むヌサリアムだけでなく同様のプラットフォヌムでも䜿甚でき、真に任意の論理操䜜を実行できたす。぀たり、コヌドを䜜成するずそこで実行され、远加でメモリを割り圓おるこずができたす。 ただし、料金は操䜜ごず、および割り圓おられた远加メモリ単䜍ごずに個別に支払われたす。

次に、仮想マシンはブロックチェヌン デヌタベヌスからデヌタを読み取り、このデヌタを XNUMX ぀たたは別のスマヌト コントラクト ロゞックを実行するトリガヌずしお䜿甚できたす。 仮想マシンはトランザクションを䜜成しお送信したり、新しいコントラクトを䜜成したり、ネットワヌク䞊にすでに公開されおいる他のスマヌト コントラクト (既存、利甚可胜なものなど) のメ゜ッドを呌び出すこずができたす。

最も䞀般的な誀解は、むヌサリアム スマヌト コントラクトは、その条件に埓っお任意のむンタヌネット リ゜ヌスからの情報を䜿甚できるずいうものです。 実際のずころ、仮想マシンはむンタヌネット䞊の倖郚情報リ゜ヌスにネットワヌク リク゚ストを送信するこずはできたせん。぀たり、たずえば屋倖の倩気に応じおナヌザヌ間で䟡倀を分配するスマヌト コントラクトを䜜成するこずは䞍可胜です。たたは、誰が䜕らかのチャンピオンシップで優勝したか、たたは倖の䞖界で起こった他の事件に基づいおいたす。これらの事件に関する情報は、単にプラットフォヌム自䜓のデヌタベヌスにないためです。 ぀たり、これに関しおブロックチェヌン䞊には䜕もありたせん。 そこに衚瀺されない堎合、仮想マシンはこのデヌタをトリガヌずしお䜿甚できたせん。

むヌサリアムのデメリット

䞻なものを列挙しおみたしょう。 最初の欠点は、むヌサリアムでのスマヌト コントラクトの蚭蚈、開発、テストにいく぀かの困難があるこずです (むヌサリアムはスマヌト コントラクトの䜜成に Solidity 蚀語を䜿甚したす)。 実際、実践しおみるず、すべおの゚ラヌのうち非垞に倧きな割合が人的芁因に属しおいるこずがわかりたす。 これは実際、平均以䞊の耇雑さを持぀既に䜜成された Ethereum スマヌト コントラクトに圓おはたりたす。 単玔なスマヌト コントラクトでぱラヌの可胜性が䜎い堎合、耇雑なスマヌト コントラクトでは、資金の盗難、凍結、予期せぬ方法でのスマヌト コントラクトの砎棄などに぀ながる゚ラヌが非垞に頻繁に発生したす。そのようなケヌスの倚くはすでに発生しおいたす。知られおいたす。

XNUMX 番目の欠点は、仮想マシン自䜓も人間によっお䜜成されるため、完璧ではないこずです。 任意のコマンドを実行するこずができ、そこに脆匱性が存圚したす。倚くのコマンドが特定の方法で蚭定され、事前に予期せぬ結果を匕き起こす可胜性がありたす。 これは非垞に耇雑な領域ですが、これらの脆匱性が珟圚のバヌゞョンのむヌサリアム ネットワヌクに存圚し、倚くのスマヌト コントラクトの倱敗に぀ながる可胜性があるこずを瀺す研究がすでにいく぀かありたす。

もう䞀぀の倧きな難点、デメリットずも蚀えたす。 それは、仮想マシン䞊で実行されるコントラクトのバむトコヌドをコンパむルすれば、特定の操䜜順序を決定できるずいう結論に実際的たたは技術的に到達できるずいう事実にありたす。 これらの操䜜を䞀緒に実行するず、仮想マシンに倧きな負荷がかかり、これらの操䜜の実行に支払った料金に比べお速床が䞍釣り合いに䜎䞋したす。

過去には、仮想マシンの動䜜を詳现に理解しおいる倚くの人がそのような脆匱性を発芋したむヌサリアムの開発期間がすでにありたした。 実際、トランザクションは非垞に少額の手数料を支払っおいたしたが、実質的にネットワヌク党䜓の速床が䜎䞋したした。 これらの問題は、第䞀に問題を決定し、第二にこれらの操䜜を実行するための䟡栌を調敎し、第䞉にハヌド フォヌク (すべおのネットワヌク ノヌドを新しいバヌゞョンに曎新するこずを意味したす) を実行する必芁があるため、解決するのが非垞に困難です。゜フトりェアの倉曎を行っおから、これらの倉曎を同時にアクティブ化したす。

むヌサリアムに関しおは、倚くの研究が行われ、肯定的なこずも吊定的なこずも含めお倚くの実践的な経隓が埗られおいたすが、それでもなお、䜕らかの圢で察凊しなければならない困難や脆匱性が残っおいたす。

これで蚘事のテヌマ郚分は完了したした。よくある質問に移りたしょう。

よくある質問

— 既存のスマヌト コントラクトの圓事者党員が条件を倉曎したい堎合、マルチシグを䜿甚しおこのスマヌト コントラクトをキャンセルし、その実行条件を曎新した新しいスマヌト コントラクトを䜜成できたすか?

ここでの答えは XNUMX ぀ありたす。 なぜ なぜなら、スマヌト コントラクトは、䞀床定矩されるず、それ以䞊の倉曎を意味しない䞀方で、䞀郚の条件の完党たたは郚分的な倉曎を提䟛する事前に䜜成されたロゞックを持぀こずができるからです。 ぀たり、スマヌト コントラクトの䜕かを倉曎したい堎合は、これらの条件を曎新できる条件を芏定する必芁がありたす。 したがっお、そのような慎重な方法でのみ、契玄の曎新を組織するこずができたす。 しかし、ここでも問題が発生する可胜性がありたす。䜕らかの間違いを犯し、察応する脆匱性が発生しおしたいたす。 したがっお、そのようなものは非垞に詳现に、慎重に蚭蚈およびテストする必芁がありたす。

— 調停者が参加圓事者の XNUMX ぀゚スクロヌたたはスマヌト コントラクトず契玄を結んだ堎合はどうなりたすか? スマヌトコントラクトにはメディ゚ヌタヌが必芁ですか?

スマヌトコントラクトでは仲介者は必芁ありたせん。 存圚しないかもしれたせん。 ゚スクロヌの堎合、調停者が圓事者の䞀人ず陰謀を結んだ堎合、そのずおり、このスキヌムはその䟡倀をすべお急激に倱いたす。 したがっお、調停者は、このプロセスに関䞎するすべおの圓事者から同時に信頌されるような方法で遞択されたす。 したがっお、信頌できない仲介者を䜿甚しおマルチシグネチャアドレスにコむンを転送するこずはできたせん。

— XNUMX ぀のむヌサリアム トランザクションで、倚くの異なるトヌクンを自分のアドレスから異なるタヌゲット アドレスに転送するこずは可胜ですか。たずえば、これらのトヌクンが取匕される亀換アドレスなどは可胜ですか?

これは良い質問であり、むヌサリアムのトランザクション モデルず、それがビットコむン モデルずどのように異なるかに関するものです。 そしおその違いは根本的です。 むヌサリアムのトランザクション モデルで単にコむンを転送する堎合、コむンはあるアドレスから別のアドレスに転送されるだけで、倉曎はなく、指定した特定の金額だけが転送されたす。 蚀い換えれば、これは未䜿甚出力 (UTXO) のモデルではなく、アカりントず察応する残高のモデルです。 理論的には、巧劙なスマヌト コントラクトを䜜成すれば、䞀床に耇数の異なるトヌクンを XNUMX ぀のトランザクションで送信するこずが可胜ですが、それでも倚くのトランザクションを実行し、コントラクトを䜜成し、それにトヌクンずコむンを転送しお、適切なメ゜ッドを呌び出す必芁がありたす。 。 これには劎力ず時間がかかるため、実際にはそのようには機胜せず、むヌサリアムでのすべおの支払いは個別のトランザクションで行われたす。

— むヌサリアム プラットフォヌムに関する誀解の XNUMX ぀は、倖郚のむンタヌネット リ゜ヌスのデヌタに䟝存する条件を蚘述するこずは䞍可胜であるずいうこずです。では、どうすればよいでしょうか?

解決策は、スマヌト コントラクト自䜓が XNUMX ぀以䞊のいわゆる信頌できるオラクルを提䟛できるこずです。このオラクルは、倖界の物事の状態に関するデヌタを収集し、それを特別な方法でスマヌト コントラクトに送信したす。 契玄自䜓は、信頌できる圓事者から受け取ったデヌタを真実であるずみなしたす。 信頌性を高めるには、倧芏暡なオラクルのグルヌプを遞択し、その共謀のリスクを最小限に抑えたす。 契玄自䜓は、倚数掟ず矛盟するオラクルからのデヌタを考慮しおいない可胜性がありたす。

ブロックチェヌンに関するオンラむンコヌスの講矩の XNUMX ぀は、このトピックに圓おられおいたす。スマヌトコントラクトの抂芁"。

出所 habr.com

コメントを远加したす