MultiChain 1.0ベータ2および2.0ロードマップ

ソースノード: 1742567

今日の場所と明日の場所

本日、Linux、Windows、Mac用のMultiChain 1.0の1.0番目のベータ版をリリースできることを嬉しく思います(現在のところ、Macバージョンではコンパイルが必要です)。 これで、MultiChain 1.0の計画的な開発は完了です。バグ修正を除いて、夏のMultiChain XNUMXの最終リリースは変更されません。

今月は、2015年XNUMX月のマルチチェーンの最初のアルファリリースからXNUMX年目を迎えます。他の新製品と同様に、市場がどのように反応するかはわかりませんでした。 最低限の実行可能な製品、つまり、重要な価値を提供するが、設計上は予備的な初期バージョンを意味します。 ありがたいことに、最初の製品とは異なり コインスパーク、MultiChainは強力かつ即時の肯定的な反応を受けました。 これには、賢明な機能リクエストの津波が伴い、その多くは現在実装されています。 製品の開発と並行して、使用量もあらゆる手段で著しく増加しています。 たとえば、3,000年2015月にMultiChainのWebサイトにXNUMX人未満の訪問者があり、現在では毎月そのXNUMX倍の数が表示されています。

マルチチェーンのパフォーマンス

過去XNUMX年間、私たちはマルチチェーンを最適化するために多くの努力を費やしてきました。 Bitcoin Core、パブリックビットコインネットワークのリファレンス実装。 以下は、製品のXNUMXつのバージョンを使用した単一ノードセットアップのトランザクションスループットの比較です。

.throughput td、.throughput th {text-align:right;}

合計トランザクション 1.0アルファ3 1.0アルファ21 1.0アルファ22 1.0 1ベータ 1.0 2ベータ
100 6.5tps 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

APIオーバーヘッド、ビルドと署名、マイニング、トランザクションとブロックの検証を含む、XNUMX秒あたりの平均トランザクション。
を使用して実行されたテスト ab にXNUMXつの同時リクエストを送信するHTTPサーバーベンチマークツール sendtoaddress APIです。
サーバーの仕様:Intel Core i7-4770、4コア@ 3.4 MHz、32 GB RAM、Seagate 2 TB 7200 RPM SATA、CentOS 6.4。

当然のことながら、最大のジャンプはアルファ22でした。 移行した データベース駆動のウォレットに。 しかし、そのリリース以降、MultiChainの速度はほぼ4倍になりました。 ビットコインのXNUMX秒あたりXNUMXトランザクションの制限は、その特定のネットワークパラメーターによるものであり、一般にブロックチェーンとは関係がないことを示したことを願っています。

もちろん、パフォーマンスの最適化は終わりのない作業であり、MultiChainが10,000 tx /秒に到達できない理由はありません 16コアプロセッサ 適切なアーキテクチャの変更。 ただし、ユーザーやパートナーとの会話に基づくと、今後数年間で1,000 tx /秒を超えると予想される人はほとんどいないようです。 そのため、私たちは開発機能を新機能に再び焦点を合わせており、MultiChain 2.0のテーマにうまく対応できます。

MultiChain 2.0の概要

MultiChainのバージョン2.0は、コミュニティ(オープンソース)とエンタープライズ(商用)のXNUMXつのエディションで最初に提供されます。 MultiChain Enterpriseの詳細についてのみ説明しているので、ここでは無料のコミュニティエディションに焦点を当てます。 私たちのパートナー。 いずれの場合でも、CommunityエディションとEnterpriseエディションは高い互換性があります。つまり、(a)Communityエディションで構築されたアプリケーションは変更なしでMultiChain Enterpriseで実行され、(b)両方のエディションは相互に接続してトランザクションを実行できます。同じチェーン上。

MultiChain 2.0の両方のエディションで強化された機能のXNUMXつの主要な領域は次のとおりです。

  • JSONドキュメントを含む、ストリームのより豊富なデータモデル。
  • オンチェーン検証用のカスタムプログラマブルトランザクションフィルター。
  • ブロックチェーンのプロトコルとパラメーターのシームレスな更新。

次に、これらのそれぞれについて詳細に説明します。

ストリームのより豊富なデータモデル

マルチチェーンストリームは2016年XNUMX月に導入され、非常に人気があることが証明されています。 で説明されているように この記事、ストリームは、ブロックチェーンでの汎用データストレージ、インデックス作成、および取得のためのシンプルで自然な抽象化を提供します。 マルチチェーンブロックチェーンには、名前付きストリームをいくつでも含めることができます。それぞれのストリームは、書き込みのためにすべてに対してオープンにするか、特定のアドレスからのみ書き込み可能にすることができます。

MultiChain 1.0では、各ストリームアイテムには、64つ以上のパブリッシャー(署名者)、オプションのキー、最大XNUMX MBのバイナリデータペイロード、およびタイムスタンプ(埋め込まれているブロックから派生)があります。 各ノードは、どのストリームにサブスクライブするかを自由に決定したり、すべてのストリームに自動的にサブスクライブしたりできます。 ノードがストリームにサブスクライブされている場合は、そのストリームのコンテンツにリアルタイムでインデックスを付け、発行者、キー、ブロック、タイムスタンプ、または位置による効率的な取得を可能にします。

MultiChain 2.0は、このストリーム機能をさまざまな方法で強化します。

  • JSONアイテム。 ストリームデータは、バイナリデータと同様に、構造化されたJSONオブジェクトをサポートし、ブロックチェーンに次のような効率的なシリアル化形式で保存されます ウブジソン。 MultiChain APIはすでに全体でJSONを使用しているため、これらのJSONオブジェクトは自然で明白な方法で書き込みおよび読み取り可能になります。
  • 複数のキー。 ストリームアイテムは複数のキーをサポートし、単一のデータに複数の方法でインデックスを付けて、 liststreamkeyitems。 MultiChainに含めるデータベース機能の量を常に評価しており、バージョン2.0のJSONストリームアイテム内のサブ要素のインデックス作成をサポートする予定はありません。 ストリームアイテムごとに複数のキーを許可すると、適切な回避策が提供されます。
  • 複数のアイテムのアトミック書き込み。 MultiChain 1.0では、2.0つのトランザクションで複数のストリームに書き込むことができますが、同じストリームに複数のアイテムを書き込むことはできません。 MultiChain XNUMXはこの制限を取り除きます。
  • JSONマージ。 JSONオブジェクトの順序付きリストは、自然にフラット化または要約して、「マージされた」オブジェクトを作成できます。 マージされたオブジェクトには、個々のオブジェクトに表示されるすべてのキーが含まれます。各キーに対応する値は、そのキーが表示される最後のオブジェクトから取得されます。 必要に応じて、マージされたオブジェクトはデータベース行の最終状態であり、その列は最初のオブジェクトによって定義され、その後のオブジェクトによって拡張または更新されます。 MultiChain 2.0は、特定のキーまたはパブリッシャーを持つストリーム内のJSONアイテムのマージされたオブジェクトを簡単かつ迅速に取得するためのAPIを追加します。

これらの機能は、開発者が現在ストリームを使用している一般的な方法から派生しています。 つまり、アプリケーションレベルで多くの人々がMultiChainの上に構築しているものを観察し、その機能をMultiChain自体に取り入れています。これは、今後も適用する予定のパターンです。 ストリームアイテムにタイプ情報が含まれるようになったので、XMLなどの他のデータ形式をサポートするように簡単に拡張できます。 HDF5 & MIME-識別されたコンテンツ。 透過的なチェーン上の圧縮と暗号化の可能性は言うまでもありません。

MultiChain 2.0は、MultiChain 1.0に実装されたテキストのみのキーと値のペアの代わりに、未加工のトランザクションメタデータ(ストリームアイテムではない)のJSONオブジェクトと、アセット発行およびストリーム作成イベントのメタデータもサポートします。 の listassets APIは、アセットのすべての発行イベントにわたってJSONマージを提供するため、各発行のメタデータは、アセットの最終的な説明を効果的に更新できます。

カスタムトランザクションフィルター

MultiChainにカスタムプログラマブルルールを追加する方法については、多くのことを考えてきました。 イーサリアムの「スマートコントラクト」パラダイムは人気がありますが、高スループットの許可されたブロックチェーンには多くの重要な欠点があります。 まず、スマートコントラクトは、ブロックチェーンの状態全体にグローバルな依存関係を導入し、同時実行性とパフォーマンスを大幅に低下させます。 第XNUMXに、スマートコントラクトは、誤ったトランザクションがブロックチェーンに埋め込まれるのを防ぐことはできませんが、それらのトランザクションがブロックチェーンデータベースの状態を更新するのを防ぐだけです。 長期的には、Ethereum互換の仮想マシンがマルチチェーン内の高レベルの抽象化として提供されることを期待していますが、低レベルの検証には適切なソリューションではないと考えています。

MultiChain 2.0では、トランザクションフィルターと呼ばれる別のパラダイムが導入され、グローバルステートを参照せずに個々のトランザクションを検証します。 フィルターはJavascriptで記述され、次のような組み込みランタイムエンジン内で実行されると想定しています。 v8、Googleで使用されます クロム ブラウザと Node.js プラットホーム。 もちろん、フィルターコードがブロックチェーン内のすべてのノードで同じように実行されるようにする必要があります。 非決定論の原因 時間の読み取り、乱数の使用、ネットワークまたはディスクへのアクセス、ホストサーバーのアーキテクチャに依存する数学演算の実行など。 確定的なJavascriptランタイム環境を作成することは困難ですが、(あまり多くを与えることなく)将来的に他のいくつかのマルチチェーン機能に役立つと信じています。

フィルターには、個々のトランザクションを説明するJSONオブジェクトが渡され、 decoderawtransaction しかし、余分なフィールドがあります。 たとえば、JSONの各トランザクション入力には、それが費やした以前のトランザクション出力を説明する構造が含まれ、各アドレスには、そのアドレスが現在保持している権限のリストが付随します。 フィルターの役割は、トランザクションが受け入れ可能かどうかを示すブール値を返し、受け入れられない場合は、理由を説明するテキストエラーを提供することです。 MultiChainのAPIには、フィルターを作成するコマンド、以前のトランザクションまたは新しいトランザクションでそれらをテストするコマンド、および管理者の合意に従ってそれらをアクティブにするコマンドが含まれます。

スマートコントラクトとは異なり、フィルターのコードでバグが発見された場合、新しいバージョンに簡単に置き換えることができます。 それでも、すべてのチューリング完全コードと同様に、フィルターは依然として無限ループに入る危険性があります。 この問題はXNUMXつの方法で軽減されます。

  • フィルターは、コンセンサスに従って、チェーンの管理者のみがインストールおよびアクティブ化できます。 これにより、各管理者は、アクティブ化するために投票する前に、フィルターのコードを詳細に調べることができます。
  • すべての正常に動作するノードは、それらをピアノードに転送する前に、アクティブフィルターを使用して新しいトランザクションを検証します。 その結果、トランザクションがフィルターを無限ループに送信する場合、トランザクションはそれを作成したノードを越えて伝搬してはなりません。

フィルターの一般的なアプリケーションの1.0つは、ストリームアイテムを検証することです。 たとえば、フィルタを使用すると、ストリームのJSONアイテムの特定のフィールドに特定の範囲の数値が含まれるようになります。 MultiChain 2.0では、ストリームタイプの書き込み(ソースが信頼できる場合)またはそれらの読み取り時に、このタイプの検証をアプリケーションレベルで行う必要があります。 対照的に、MultiChain XNUMXでは、次のように、これらのルールをブロックチェーン自体に埋め込むことができます。 チェック制約 リレーショナルデータベース内。

MultiChain 2.0には、フィルターをさらに強力にするXNUMXつの機能が追加されます。 最初に、MultiChainによって定義されたXNUMXつのアクセス許可とともに存在するユーザー定義のアクセス許可を紹介します。 通常の権限と同様に、これらは管理者(および場合によっては、 activate 特権)とフィルターに渡されたJSONオブジェクトのアドレスと共に含まれます。 たとえば、フィルタを使用すると、特定のユーザー定義の権限を持つアドレスのみが特定のタイプのデータをストリームに書き込んだり、特定のしきい値を超えて特定のアセットで取引したりできるようになります。

次に、MultiChain 2.0は、通常のトランザクション出力内のカスタム(バイナリまたはJSON)メタデータをサポートします。 これにより、すべての出力が一般的なデータベース行として機能し、内部のアドレスによって「所有」されます。 フィルターは、JSON記述の一部として、トランザクションの消費および作成された出力内のメタデータを表示します。 その結果、MultiChainはユニバーサル共有データベースエンジンになり、トランザクションの有効性は、作成および削除する行のカスタマイズ可能な関数によって決定されます。 (これが少し抽象的に聞こえる場合は、いくつかの具体的な例を提供します。)

ブロックチェーンの更新

ブロックチェーンは何年も実行されるように設計されているため、それらの特性は時間とともに変更する必要がある場合があります。 MultiChainの現在のバージョンはすでにある程度の柔軟性を備えており、許可の変更(コンセンサスによる管理者とマイナーの変更を含む)、新しいアセットとストリームの作成、ノードのネットワークへのシームレスな追加または削除が可能です。 それにもかかわらず、MultiChain 1.0では、ブロックチェーンの基本 パラメータ最大ブロックサイズやターゲット確認時間などは、チェーンの作成時に固定され、後で変更することはできません。

MultiChain 2.0では、ブロックチェーンを更新する機能が追加され、チェーンの実行中に、パラメーターの多く(すべてではない)を変更できるようになります。 他の重要な操作と同様に、ブロックチェーンの更新には、カスタマイズ可能なレベルの管理者の合意が必要です。このレベル自体は、変更可能なパラメーターです。 更新は特定のブロックから有効になり、その後、次の更新まですべての後続ブロックに適用されます。

更新できるブロックチェーンパラメーターには次のものが含まれます。

  • プロトコルバージョン。 これにより、XNUMXつのバージョンのマルチチェーンで作成されたブロックチェーンをアップグレードして、JSONストリームアイテムやトランザクションフィルターなどの新しいバージョンの機能をサポートできるようになります。 確かに、プロトコルのバージョン 10008 MultiChain 1.0 alpha 29で導入された(およびベータ版で使用された)は、このタイプのアップグレードに対するドキュメント化されていないサポートにより、将来も保証されています。 MultiChain 1.0ブロックチェーンが2.0プロトコルにアップグレードされると、ここで説明されている他のパラメーターの変更にもアクセスできるようになります。
  • ブロックチェーンのスケーリング。 人気が高まるブロックチェーンは、ターゲット確認時間または最大トランザクションとブロックサイズに設定された初期値よりも大きくなる場合があります。 MultiChain 2.0では、これらの値を必要に応じて増減できます。
  • 許可モデル。 MultiChain 2.0では、許可とガバナンスに関連する次のような多くのパラメーターを更新できます。(a) anyone-can-* ブロックチェーンの開閉方法を制御するパラメーター(b) admin-consensus-* 特定の操作に必要な管理者の合意のレベルを決定するパラメーター、および(c) mining-diversity ラウンドロビンコンセンサスアルゴリズムの厳密さを制御するパラメーター。

この更新機能が実装されると、MultiChainで作成されたブロックチェーンが数十年以上実行できない理由はありません。

今後

私たちはすでにMultiChain 2.0の作業を開始しており、このロードマップでの提供を楽しみにしています。 間違いなく他の拡張機能も含まれます。 MultiChain 1.0と同様に、開発者は実装中に新しい機能を使用および学習できるようにアルファ版をリリースします(もちろん、問題や欠点を報告します)。 当然のことながら、この期間中は引き続きバージョン1.0を維持し、発生するバグを修正します。

最後に、Michael Rozantsev博士が率いる開発チームの卓越した努力と努力に感謝します。 MultiChainは、単純なソフトウェアエンジニアリングプロジェクトであり、コードの品質とテストが何よりも重要です。 複雑な製品ビジョンを、驚くほどの効率とスピードで安定した動作するソフトウェアに変えることができる人々と協力することは、私の特権です。

コメントを投稿してください LinkedInの上に.

タイムスタンプ:

より多くの マルチチェーン