
編集者注:ブロックチェーンには、インターネットの最下層から未知の暗号に至るまで、多くの技術が関わっていますが、通貨の価格に注目する人が多く、技術を学ぶ人が少ないことが多いです。強気相場の時はみんなコイン投機の勉強をしますが、弱気相場の時はとにかく何もすることがないのでもっと勉強できると思います。文系学生である私には、理系学生が馬鹿げていると思われるような質問が確かにたくさんあります。記者として、業界を理解し、人間的な言葉で説明してくれる人を見つけるのは難しくありませんし、面と向かって私を嫌がることはほとんどありません。
みんなと共有するために勉強ノートを書きました。今回は仮想マシンの勉強をしているのですが、クロスチェーン、VRF、オープンソースの歴史と文化、ネットワークアーキテクチャとブロックチェーンの階層化システムの比較、「通貨圏を国とみなした場合の通貨」なども学ぶ予定です。この国は何を経験しているのか」。他に興味深い質問がございましたら、画像の説明
このメモは予想よりも本当に長いです
スマート コントラクトは、現在のパブリック チェーンを完成させるための主要な方向性です。
イーサリアムのスマート コントラクトには多くの抜け穴があり、業界では一般に、スマート コントラクトは柔軟性が高すぎる、つまりイーサリアムはスマート コントラクト チューリングを完成させようとしていると考えられています。以前にインタビューしますArcBlock CEO の Mao Zhihong 氏は、イーサリアムのスマート コントラクトの抜け穴は、第一に柔軟性が高すぎるため、第二に、仮想マシンと言語が新しく成熟していないためであると結論付けました。 「少し前に発生したオーバーフローの問題(Meitu 通貨の問題は整数オーバーフローによって引き起こされます)は、言語レベルで解決されるべきでした。」
イーサリアムのこれら 2 つの問題に基づいて、私が報告したように、「より良いイーサリアムの作成」または「イーサリアムの垂直バージョン」に特化したプロジェクトは、元のベースで改善するか、独自のスマート コントラクト言語を発明するでしょう。Zilliqa、シャーディングを特徴とするパブリック チェーン、電子商取引パブリック チェーン CyberMiles です。
CyberMiles の仮想マシン (CVM) と高水準プログラミング言語 Lity が最近リリースされました。私はその機会を利用して、同社の主任研究員 Michael Yuan に仮想マシンの基本について質問し、会話を整理しました。
私の記憶では、私が仮想マシンに初めて触れたのは、学校のネットワークセンターのネットワーク管理者でした(文系学生がネットワークセンターで潰された悲劇の話はここでは1万字省略)、比較的権限が高いため、学校のデータ センターに仮想マシンがあり、そのマシン上のアカウント、その後、私が財新でインターンをしていたときに、同僚が Mac システムに Wonder をインストールするために Win 仮想マシンをインストールしました。そしてAlibaba CloudとDockerの連携について報告したとき, 仮想マシンもDockerも仮想化技術なので、その時に両者の違いを学び、最後にJava仮想マシンとイーサリアム仮想マシン(EVM)について聞きました。
副題
仮想マシンとは何ですか?
名前が示すように、仮想マシンは物理マシンに相対的なものです。たとえば、同じコンピュータを使用している場合は、コンピュータを持っているように感じさせます。多くのコンピュータを使用している場合は、自分がコンピュータを持っていると感じさせます。 1 台のコンピューターを使用して。もちろん、ドゥ・ニアンのようなものを見つけるのは簡単ですが、半分理解されていることがよくあります——仮想とは、完全なハードウェア システム機能を備え、ソフトウェア シミュレーションを通じて完全な環境で実行される完全なコンピューター システムを指します。。しかし、オペレーティング システム上の仮想マシンはそうではないようです。
マイケルの人間的な言葉での説明により、仮想マシンについての理解が深まりました。仮想マシンの登場は Windows などのオペレーティング システムやインターネットよりも早く、もともとはコンピューターのタイムシェアリング リースの問題を解決するためにあったと彼は教えてくれました。
シャオミン:仮想マシンの役割とは具体的には何ですか?初めて登場したのはいつですか?
Michael:「最初、その大きなコンピューターは多くのユーザーによって共有されていました。つまり、あなたはそれを 10 秒間使用し、私はそれを 10 秒間使用します。あなたはこのマシンがずっとあなたのものだと思っていました、そして私はそれが常に私のものだったと思います。でも、私はずっとそれを待っていました。10 秒かかります。コンピューターがあなたから私のものに切り替わったら、あなたは今計算したものをすべて復元して、あなたに表示しなければなりません。それから 10 秒後、あなたのものを削除して、私のすべてをさらけ出しなさい。見せてください。」
「私たちは同じハードウェアを使用していますが、その上には異なる仮想マシンが存在します。誰もがこのハードウェアを自分のものだと思っていますが、実際にはソフトウェアによって実現されており、これはメインフレーム上に仮想マシンを実装する実践です。その後、個人用の仮想マシンの役割が生まれます」 「小さいから使う必要がない。1997年にJavaが登場するまでは、仮想マシンが特に重要になった。当時はWindowsやUnixなどさまざまなOSがあったから。Javaが最初に言ったのは、Javaだった」仮想マシンはこれらすべてを統合するので、Windows 用と Unix 用に 1 つずつ作成する必要はありません。Java で作成でき、その上に仮想マシンがあります。」
「仮想マシンは抽象化されたものです。私の仮想マシンには独自の言語があり、仮想マシン内で何かを書くことができますが、仮想マシンの下には異なるハードウェアとソフトウェア、さらには同じハードウェアが存在する可能性があります。どのように分割すればよいでしょうか。」 」
最も初期の仮想マシンは 1965 年頃に IBM によって発明されました。IBM モデルを通じて、単一のコンピューター システムが、異なるオペレーティング システムを搭載した複数のコンピューターをシミュレートできます。これにより、ユーザーは 1 台のコンピューター上で仮想マシンの複数の異なるコピーを作成および管理できるようになります。 IBM モデルの重要な機能は、コンピューター リソースを分割し、プログラムを完全に分離することによって、プログラムが同じハードウェアを共有できるようにすることです。 (「」からのコピー)仮想マシンの概要》)
1990 年代までに Java プログラミング言語が普及し、これにより仮想マシン アプリケーションが注目を集めるようになりました。当時、ネットワークは異なるオペレーティング システム、異なるブラウザ、異なるデバイスにまたがっていたため、同じアプリケーション プログラムを実行するのは非常に困難でしたが、Java はまさにこの需要に応えました (Java 仮想マシンの主な特徴は、プログラムを作成できることです) JAVA仮想マシンを利用してマルチプラットフォームで実行可能)と時代のニーズに合わせて普及し、当時のキャッチフレーズは「一箇所でコンパイルしてどこでも実行」でした。 (「」からのコピー)VMの履歴》)
2005 年までに Google は Dndroid システムを買収し、2007 年に最初のオープンソース バージョンをリリースしました。このシステムには dalvik と呼ばれる仮想マシンがあり、これは Java 仮想マシンに似ていますが、異なるものです。主に携帯電話やタブレットなど、限られたメモリと低い CPU 周波数を備えたマシン上で実行されるように設計されており、現在、無数の携帯電話アプリケーションがこの仮想マシンで実行されています。 Android システムの包囲に関係なく、IT 業界の最初の 30 年は Intel Inside で要約でき、次の 30 年は Android Inside で説明できると言えます。この仮想マシンは元々、組み込みデバイス上で動作するように SUN によって設計されましたが、今日の dalvik 仮想マシンになって初めて、本来の優れたアプリケーションを真に実現し、すべてのデバイス向けの統合プラットフォームの機会を実現することができます。 (「」からのコピー)副題》)
なぜブロックチェーンには仮想マシンが必要なのでしょうか?
仮想マシンの「統合」の役割を理解した上で、本来の認識仮想マシンのパフォーマンスは物理マシンを直接呼び出すよりも明らかに劣っており、ある程度の損失が発生します。レイヤーが多ければ多いほど、損失が大きくなるのは当然です。ブロックチェーン自体に仮想マシンのレイヤーを追加する必要があるのはなぜですか?また、ブロックチェーンを統合するには何が必要ですか?
簡単に言うと、ブロックチェーンにはコンセンサスメカニズムがあるため、全員が同じ計算結果を得る必要がありますが、従来の仮想マシンはこれをサポートしておらず、後者は基盤となるハードウェアが異なるために異なる結果を出力する可能性があるため、V God はこれを実現したいと考えています。もう一つ書いてください。ラオマオへの前回のインタビューで、彼はまた、「イーサリアムが新しい言語Solidityを書くことを選んだ理由は、スマートコントラクトコードを実現するためです。一貫性。”
シャオミン:ブロックチェーン上の仮想マシンは、従来の連絡先とどう違うのでしょうか?なぜ仮想マシンが必要なのでしょうか?
Michael :Mainframe メインフレームの仮想マシンはオペレーティング システムの下にあり、Java 仮想マシンはオペレーティング システムの上にあるため、これらは異なる仮想マシンです。一体化されたブロックチェーンの仮想マシンとは一体何なのでしょうか?ブロックチェーン仮想マシンは異なるノードを統合し、各ノードは異なります。
たとえば、基礎となる言語は C++ で構築され、仮想マシンは Vyper または Solidity のいずれかであるか、仮想マシンに独自の言語があります。第一世代のブロックチェーンには仮想マシンがありませんし、ビットコインにも仮想マシンはありません。ビットコインは A から B に送金するトランザクションですが、イーサリアムの天才的なアイデアは、なぜトランザクションで A から B に送金しなければならないのかということです。 A から B までのプロセスをコードにできないのはなぜですか?ただし、このコードを実行するには、コードを実行する上位のレベルが必要です。このレベルが仮想マシンです。
現時点では、ブロックチェーンの役割は、送金でミスをしないことから、コードの実行でミスをしないことへと変化しており、同じ結果を得るにはすべてのノードが同じコードを実行する必要があります。
この実行されたコードではすべてのノードで同じ結果が得られますが、これは非常に要求が厳しいものです。 Java 仮想マシンなどの従来の仮想マシンではこれを実現できないためです。マシンによっては 64 ビット、一部のマシンは 32 ビットであるため、10 のマイナス 10 乗、A マシン上の表現と B マシン上の表現は異なります。これを計算すると、各ノードで次のことを行うのは容易ではありません。コンセンサスに達するため、彼は独自の仮想マシンを作成する必要があります。したがって、Vitalik はイーサリアム仮想マシンの最初のバージョンを作成しました。
この仮想マシンは攻撃から保護する必要があります。仮想マシン内であらゆるコードを実行できるとは言えないためです。そうしないと、誰かが無限ループで実行されるコードを作成することになります。したがって、仮想マシンでガスを作るには、このもののストレージ容量がどのくらいかを知る必要があります(スマートコントラクトのコードはブロックチェーン上に保存され、コードが長いほどガス料金が高くなります)。これについては、仮想マシンのセキュリティを確保するために、取引手数料を通じてお金を集めるお手伝いをします。したがって、ブロックチェーン仮想マシンと一般的なコンピューティング仮想マシンの要件は異なりますが、実際には、コードを実行するという機能は似ています。
シャオミン:では、イーサリアム仮想マシンは何を変えるのでしょうか?これを行うことで何か害はありますか?
Michael:彼はパフォーマンスを犠牲にし、いわゆる Java 仮想マシンのパフォーマンスが大幅に向上しました。ジャストインタイム (JIT、ジャストインタイムコンパイル)、仮想マシンは、現在のコード部分に基づいて、次のコード部分が何になるかを予測します。 Java 仮想マシンは、多額の費用が費やされ、多くの最適化が行われているため、非常にスマートです。イーサリアム仮想マシンはそもそもこれを行ったことはありません。2016 年までは誰もこれにお金を費やしませんでしたし、誰もがそれは子供がやったことだと思っていたからです。これもそのうちの 1 つです。
次に、最適化プロセスも非常に複雑ですが、Java 仮想マシンは、異なる仮想マシンからの結果のわずかな違いを許容します。これは可能です。しかし、ブロックチェーン内ではそうではなく、ブロックチェーン内のすべての結果は同じでなければなりません。
現在、ブロックチェーン仮想マシンには、実際には 3 つのジャンルがあります。 1 つは Ethereum から変更されました。次に、EOS は、EOS より前に存在した JavaScript 仮想マシンである WebAssembly から変更され、ブロックチェーンに一致しないものを削除しました。今では、Lua Lua にいくつかの変更が見られます。 Lua は、 IoTでよく使われます。
副題
なぜ一部のチェーンは新しい言語を発明する必要があるのでしょうか?
冒頭で述べたように、一部のプロジェクトでは新しい仮想マシンを開発することになり、多くの場合、新しい仮想マシン言語が伴います。これはどういう意味ですか?
しばらく離婚して、仮想マシンと仮想マシン言語(高級言語)とコンパイラの関係について話します。
簡単に言えば、仮想マシンは仮想マシン言語を決定し、コンパイラはこの言語を記述するためのツールです。
はどうかと言うと
はどうかと言うと翻訳者の一般的な役割は、人間が理解できる言語をコンピュータが理解できる言語に翻訳することに似ています。
コンピュータ言語には、機械語、アセンブリ言語、高級言語の 3 つがあります (「」を読むことをお勧めします)。コンピュータシステムの深い理解(3.1)-----アセンブリ言語と機械語")。最初のものだけがコンピュータによって直接認識され、実行されます。バイナリコード人は覚えるのが難しいと言われています。そこで、人々が覚えて理解できるようにいくつかの命令を抽象化したアセンブリ言語があります。
ただし、これらは両方ともハードウェア/プロセッサーに直接面しており、両方ともプロセッサーのタイプにバインドされています。これは、高度にカプセル化されたプログラミング言語である Java、C、C++、C#、Python などの高級言語には当てはまりません。それによって書かれたソフトウェア ソース コードは、コンパイラーによってさまざまなプロセッサの言語に翻訳することもできます。
「低レベル言語」はより「高レベル」である可能性があることがわかります。なぜなら、言語は柔軟性があり(言語が低ければ低いほど、その効果はより強力になります)、習得がより難しく、理解する人が少ないからです。それ。
話題に戻りますが、新しい言語を開発するには、実際には、新しい仮想マシンを作成して、イーサリアム仮想マシンでは実行できないことを実行する必要があります。
CyberMiles は主に垂直シナリオ向けに最適化されています。 CyberMiles 仮想マシン (CVM) は、イーサリアム仮想マシンをベースに修正されているため、イーサリアム仮想マシン言語である Solidity と互換性があり、イーサリアム仮想マシンがサポートしていない一部の機能もサポートしています。これは、すでにSolidityを知っている場合はSolidityで書くことができますが、CVMの一部の機能を使用したい場合はLityで書くことができ、CVMは両方を「理解」できることを意味します。
Michael :LityとCVM、CyberMilesにとって最も重要なポイントは、Ethereumではできないことを可能にすることです。実際、私たちはイーサリアム コミュニティに所属しています。私たちはイーサリアムと競合関係にあるとは考えていません。私たちはイーサリアムとは異なる哲学を持っています。彼らは別の目標を追求しており、世界コンピュータの目標を追求していますが、私たちはそうではありません。私たちは、90% のことはできないが、10% のことはできることを認めています。そのため、Lity と CVM は、特定のシナリオに合わせてイーサリアムのチューリング完全システムを最適化します。
Vitalik は 2015 年に私たちのアプローチについて知っていましたが、イーサリアムを電子商取引やクロスチェーンに最適化された仮想マシンにすることに消極的であり、一般的な解決策を見つけることを望んでいたため、それには乗り気ではありませんでした。 「これは世界観の問題です。イーサリアムが話しているのは世界のコンピュータです。私たちは世界のコンピュータになりたくありません。誰も世界のコンピュータにはなれないと考えています。よくできたブロックチェーンは垂直です。」
副題
CyberMiles は EVM に基づいてどのような最適化を行いましたか?
では、EVM と比較して、CyberMiles の仮想マシン CVM の最適化はどこにあるのでしょうか? CyberMiles によって行われた一部の最適化は、イーサリアムの特性を理解するのにも役立ちます。
まず、動的に拡張できること、CyberMiles が開発した言語は、さまざまなビジネス シナリオに合わせて最適化してパフォーマンスを向上させることができます。
CyberMiles の公式紹介によると、「Lity の柔軟性は、新しい言語 OTA アーキテクチャから来ています。このバージョンでは、LibENI 機能がハイライトです。CyberMiles 仮想マシンの新しい OPCODE を通じて、ユーザーは Lity 言語にさらに多くの機能を追加できるようになりました。これは」拡張機能は、ブロックチェーン ソフトウェアを停止したりアップグレードしたりすることなく、スーパーノードのコンセンサスを通じて CyberMiles ブロックチェーンに動的にデプロイできます。」
公式の紹介文に理解できないメモをいくつか追加します (詳細については、最後の参考記事を参照してください)。
OTA とは Over the air のことで、仮想マシンを再起動せずにシステム自体のソフトウェアを動的にアップグレードすることです。同様の技術は、携帯電話の無線アップグレードシステムでも使用されています。
OPCODE はオペレーション コード、つまり機械語の命令セットの束です。簡単に言えば、これは命令シーケンス番号であり、どの命令を実行する必要があるかを CPU に伝えるために使用されます。。 CVMはEVMにはないOPCODEを追加して独自の機能を実現します。
Michael :運用中に新しい機能や機能を追加できることは非常に重要です。たとえば、新しい暗号化アルゴリズムを持っていますが、これをイーサリアムに実装するには非常に高価なので、C++ を使用して追加でき、マシンがダウンしていないときに何かを追加できます。
電子商取引のパブリック チェーンとして、開発した仮想マシンや言語を拡張できます。また、完全に使用可能なテイクアウト パブリック チェーンや金融パブリック チェーンを作成したいと考えている人もいます。そのため、私たちはオープンソース共有を行っています。
次に、Lity コンパイラーと CVM にコード検査モードをインストールします。簡単に言うと、CyberMiles チームは、Ethereum Solidity スマート コントラクトによって引き起こされる既知のセキュリティ問題を分類し、一般的なパターンを抽出しました。 Lity は、コンパイラーと仮想マシンの最適化を通じて、整数のオーバーフローやサポートされていないコントラクト アドレスへのトークンの誤転送など、Solidity の一般的なセキュリティ問題を事前に防止できます。
Michael :たとえば、先ほど BEC のセキュリティの脆弱性について話しましたが、safemath を追加するのを忘れたため、整数オーバーフローの問題が発生し、数億ドルが失われることになります。 BEC 契約は CyberMiles でコンパイルし、仮想マシン上で実行できます。ただし、仮想マシンは実行時に整数がオーバーフローしているかどうかをチェックし、エラーを報告するため、同じ問題は仮想マシンでは発生しません。これはEVMの成熟度を示していると思います。このようなことは Java にも登場していますが、Java は 1997 年に始まったので、Java にはチェックがなく、後から追加されたものです。
3番目は、時計ベースの長期スマートコントラクトです。 Lity は将来起こる何かを実行することができます。
Michael :イーサリアムにはもう 1 つの大きな問題があります。それは、イーサリアムのコントラクトを単独で開始できないことです。契約が将来の日に始まるように目覚まし時計を設計することはできません。しかし、送金や配送などの電子商取引ではよく起こります。イーサリアムではこれを行うことは不可能です。イーサリアムには、イーサリアム目覚まし時計と呼ばれる特別なものがあります。これは、資金を集め、特定の時間にイーサリアム契約を実行するのを支援するオフライン組織です。それを仮想マシンにしました。
このことは小さなことのように聞こえます。 Javaの開発の歴史を見てみると、エンタープライズアプリケーションなので、この機能がないと分割払いができないということが起こってきました。
たとえば、現在、Solidity は小数計算を実行できず、整数のみを実行できます。異なるマシンでは 10 進演算の結果が同じではないため、合意に達する方法はありません。次に、ここでこれを変更し、数学的演算のライブラリがほとんどです。お金を扱いたい場合は、やはり小数計算が必要です。ホワイトペーパーで言及されているルールエンジンなど、他の機能ももちろんあると思います。
副題
これらの「最適化」にはどのようなコストがかかりますか?
Michael とチャットすると、多くの CVM が垂直産業向けに最適化されており、Ethereum は実際には「できない、やってはいけない」ことがわかります。一般的なコンピューティングのパブリック チェーンの場合、これらの機能を実現するために犠牲になるものがいくつかありますが、最も直接的なものはガバナンス メカニズムです。 CVMが高いパフォーマンスを実現できる理由は、基盤となるOSとの通信がある程度必要となるが、イーサリアムではネットワークに参加するノードに特定のシステムを要求することは不可能だが、DPOSのCyberMilesを利用することでモジュール化が可能となっている。仮想マシン レベルのスケーラブルにも、DPOS スーパー ノードの全会一致の同意が必要です
言い換えれば、CyberMiles の言語は、イーサリアムが採用したくない DPOS コンセンサスメカニズムの採用と切り離せないのです。
仮想マシンのパフォーマンスの最適化について
シャオミン:今回のいくつかの機能、LibENI 関数、および先ほど述べたコード インスペクションは、言語自体ではインスペクションされるかどうかを判断できないため、これは主に仮想マシン自体にあるように感じます。
Michael :言語には言語の文法とそのコンパイラが含まれており、チェックすべき内容は言語システムの一部であるコンパイラに置かれます。ただし、LibENI は言語ドメインに実装する必要があります。イーサリアムの分野には概念があるので追加できる機能はなく、ホワイトペーパーにもイーサリアムについて明記されています。次に、OPSCODE を追加します。これは言語自体への変更です。目覚まし時計のようなものもありますが、目覚まし時計も3日で10日で実行すると言えるように、言語のキーワードをマスターする必要があります。
シャオミン:冒頭の質問に戻りますが、仮想マシンのレベルが高くなるほど損失が大きくなるような気がします。
Michael: はい、これが EVM が非効率である理由の 1 つであり、EVM は OS の上に存在します。 Ethereum クライアントは 2 つあり、1 つは Geth で、もう 1 つは Parity です。 Ethereum 権限を実行したい場合は、Geth または Parity を実行して、大きなデータ パッケージをダウンロードできます。新しいトランザクションが入ってきてブロックを生成する必要がある場合、コンピューターのイーサリアム仮想マシンはそれをすべて実行する必要があります。ダウンし続ける前に、他のネットワーク上のものと一致する必要があります。そうしないと、このネットワーク上に存在できなくなります。 。
シャオミン:ということは、仮想マシンも同じなのでしょうか?
Michael Yuan 博士: 同じですが、私たちの仮想マシンには暗号化アルゴリズム LibENI が搭載されています。なぜLibENIと呼ばれるのでしょうか? ENIとはイーサリアムのローカルインターフェースのことであり、その基盤となるオペレーティングシステムはC++言語を使用する方法であり、上記はすべて数学で証明できるものです。これに C++ ポートを作成したので、暗号化と復号化を計算したい場合は、そのポートを通過し、オペレーティング システムのレベルの下でアクセスします。もちろん、パフォーマンスはそれよりもはるかに高速です。
シャオミン:このように、基盤となるオペレーティングシステムが異なったり、基盤となるハードウェアも異なったりすると、先ほどおっしゃったような不整合が生じることはないでしょうか。
Michael: はい、これは LibENI の内部メカニズムなので、LibENI がモジュールを生成するときは、いくつかのシステム モジュールを生成する必要があります。たとえば、Ubuntu Linux、Windows などです。しかし、スーパー ノードは制御可能であり、一定数のスーパー ノードがあり、スーパー ノードにこれらのオペレーティング システムの使用を要求できるため、利点があります。
シャオミン:LibENI について要約していただけますか?
マイケル: 2つの部分から構成されています。 1 つは Lity レベルで、仮想マシン言語で何が表示されるかを定義する必要があります。これが来ると、C++ レベルで導入する必要があり、2 つの部分になります。次に、スーパーノードに同意させます。このプロセス中に、スーパー ノードは独自のオペレーティング システムをサポートしているかどうかをチェックします。サポートされていない場合はチェックできません。
シャオミン:LibENI は、何か速いものがあると判断したのでしょうか?
Michael: LibENI がそこに何かを追加しているのです。DApp の作成は Lity で作成され、仮想マシン CVM 上で実行されます。ただし、仮想マシンを変更したい場合は、LibENI と呼ばれる別のものを使用します。 LibENI は C++ 言語を使用する Lity の拡張機能です。これは、仮想マシン自体を変換することに相当し、仮想マシンは C++ で記述されており、C++ をモジュールにカプセル化して棚に置くのと同じです。
シャオミン:これは基礎となる C++ 言語へのインターフェイスであるのに、なぜその関数をすべての言語から呼び出すことができないのでしょうか?
Michael: このように仮想マシン全体をモジュール化するように変更するということですか?すべての関数が関数を使用できるわけではなく、仮想マシンにはルールやその他の構造が存在します。関数で問題を解決できるのであれば、解決できます。関数とは何ですか?インプットとアウトプットというものがあります。例えば秘密鍵とテキストが出てくると暗号化されたテキストが出てきます。
シャオミン:一般の人が理解できる例を挙げていただけますか?関数ではできません。
マイケル: 例えば、今挙げたルールは、1から10までのサイクルなど、制御に関わるものです。先ほど述べたルール エンジンは、実際には、この問題が完了した後に、この問題を実行します。ここで行うことのそれぞれは関数ですが、全体の構造は関数ではありません。
シャオミン:したがって、関数は単一のものであることがよくあります。
Michael: 重要なのは、インプットとアウトプットを与えることです。
言語の拡張性とガバナンスメカニズムの関係
シャオミン:CyberMiles は、電子商取引のシナリオに合わせてカスタマイズされていることを強調していますが、拡張性が比較的高いことも強調しています。ここでよくわからないことが 1 つあります。
マイケル: 拡張性が高いため、CyberMiles チェーンの使用と CVM に追加された機能はすべて電子商取引に関連しています。ただし、LibENI と CVM を使用して別のパブリック チェーンを作成し、食品の配達、タクシーの乗車、証券トークンの発行に使用できます。技術的にはこれを提供しており、独自のニーズに応じて CVM を拡張できます。
CyberMiles は電子商取引のパブリック チェーンとエコロジーを運営したいと考えているため、これは CyberMiles の範囲を超えています。 「しかし、私たちが開発するソフトウェアはこれよりも多用途です。これは私が今言ったことです。私たちは皆が私たちのものをコピーすることを非常に望んでいます。いつか人々があなたのコードをコピーしなければ、誰もが私のコードをコピーするでしょう。私はこれがそうだと思います」私たちの成功の証です。
シャオミン:私たちの言語はスケーラビリティが高いとおっしゃいましたが、スケーラビリティが低い言語とはどのようなものでしょうか?あるいは、言語が強いかどうかを定義する基準は何ですか?
Michael: EVM と Solidity は拡張性がなく、変更することができません。変更する必要がある場合は、ソフトウェア システム全体を更新する必要があります。 EVM ソフトウェアは約 1 年に 1 回更新されます。 EVM で何かを変更する場合は、基本的に Vitalik 自身を知る必要があります。Vitalik はすべてのコア開発を行っています。
私たちは仮想マシンを誰もが変更できるものに変えました。たとえば、Solidity でポートを開き、C++ ポートを直接挿入できるようにしたため、これは C++ で実行できますが、イーサネット仮想マシン上で実行する方法はありません。ソフトウェアのコアコンポーネントであるソフトウェアを更新せずにソフトウェア上の仮想マシンを更新する必要があるため、PoW では実現できません。これにはネットワーク全体のすべてのノードの合意が必要です。イーサリアムに関してすべてのマイナーにコンセンサスに達することを要求するのは非常に困難ですが、私たちは DPoS を行っているため、スーパーノードのコンセンサスを使用してこれを行うことができます。
シャオミン:これは先ほどおっしゃったことですが、開発者が提案してノードに受け入れられる機能がたくさんあります。
Michael: パッケージ化されたツールを使用して問題点を認識できる方法を提供しています。これは仮想マシンで処理されます。たとえば、以前は仮想マシンで RSA 暗号化を実行できました。今は DES 暗号化を実行したいと考えています。つまり、別の暗号化です。関数。それをパッケージにパックしてスーパーノードに同意させ、同意後に暗号化することができます。飛行機はエンジンを交換しながら飛行しています。
シャオミン:ということは、実際のところ、私たちのスケーラビリティは言語によって決まるのではなく、ガバナンスメカニズムによって決まるということでしょうか?
Michael: 私たちの言語、仮想マシン、ガバナンス メカニズムは連携して機能しており、切り離すことはできません。私たちの言語ではこの種のキーワードを追加できるため、このキーワードの機能を仮想マシンに直接追加できるモジュラー方式を用意しました。これはイーサリアムではサポートされていないため、現在不可能です。
仮想マシンに関する俊敏性とセキュリティの議論
シャオミン:多くの人がイーサリアムのスマートコントラクト自体に整数オーバーフローなどの抜け穴が多いと批判していますが、これは仮想マシン自体の設計がうまくいっていないのではないか?
Michael: そうだと思います。仮想マシンや言語を書く人は、それはスマート コントラクトを書く人の問題だと言うでしょう。あなたのプログラマはあまりにも貧弱なので、この問題が発生します。全員が同じ間違いをする場合、それはあなたの設計が良くないことを意味するので、設計を変更する方法を見つけなければなりません。以前 Java にいたときも、この種の問題に遭遇しました。このバグはプログラマーの問題によって引き起こされたのでしょうか?それはプログラマの問題であり、言語がこの問題を防ぐことができないため、私は常にこの問題があると思っていました。
これは、工学的解決策と科学的解決策の違い、または学術的思考と工学的思考の違いです。
私が大学で学んだとき、私たちが設計するものはチューリング完全であり数学的に証明可能であると学術的な考え方で言われるだろうとはっきりと確信していました。たとえば、整数オーバーフローですが、なぜそれがバグだと言えるのでしょうか?私の言語ではこのように書くことができるからです。プログラマーは、自分がそれをやりたかったことを証明するために、このように書きました。しかし、実際には、99.99% の確率で、プログラマがそれを実行したのではなく、間違って書いたのです。
Java が以前に行ったことを私たちは行いました。つまり、整数がオーバーフローすると、実行を続行できなくなり、仮想マシンはエラーを報告します。
シャオミン:Java 仮想マシンでは以前にこれが許可されていましたか?
Michael: すべての仮想マシンはこの議論を経験します。これはバグですか、それとも機能ですか?私たちは誰もがこれを行うことを許可します。
シャオミン:柔軟であることの「デメリット」。仮想マシンはオペレーティング システムの最上位にあるということは、運用中にオペレーティング システムに実際に仮想マシンが存在する可能性があることを意味しますが、下位層はこれが起こったことを知ることができますか?止められないの?
Michael: 基盤となる仮想マシンに対してこれを実行してもよろしいですか?仮想マシンのレベルが低いほど、これを実行する可能性が高くなります。整数オーバーフローのように見えるものは、実際には整数オーバーフローではない可能性があります。したがって、下に行けば行くほど、人々に自由を与える必要があります。したがって、ソフトウェアのレベルが低いほど、プログラマに対する要求は高くなります。たとえば、機械語で何かを書きたい場合、非常にエラーが発生しやすくなりますが、柔軟性と最適化能力が最も高く、システム全体のすべてのリソースを使用できます。しかし、Java レイヤーや EVM レイヤーになると、システム内の多くのものが単純に見えなくなります。記憶は抽象化されてしまうので、どこにあるのかすらわかりません。
シャオミン:下位レベルの仮想マシンでは特定の動作が許可されていないが、上位レベルの仮想マシンでは許可されていると仮定して、その動作を再度作成した場合、下位レベルはそれをブロックしますか?
参考記事:
私は Odaily の編集者、Lu Xiaoming です。私は実際のブロックチェーンを研究しています。ニュース速報とコミュニケーションのために WeChat lohiuming を追加してください。名前、部隊、役職、および理由を書き留めてください。
参考記事:
仮想マシン入門 (9) - 仮想マシンの概要: 現在使用されている 4 つの仮想マシンの概念モデルの簡単な紹介
仮想マシン入門 (4) - 仮想マシンの歴史: 仮想マシンの主な歴史的出来事の付録
仮想マシンの歴史: 単純な仮想マシンの履歴
コンピュータシステムの深い理解(3.1)-----アセンブリ言語と機械語