パフォーマンスとスケーラビリティのための重要な一歩前進
XNUMXか月にわたる集中的な開発とテストの後、完全に書き直されたノード内ウォレットを備えたMultiChainの最新アルファ版をリリースできることを誇りに思います。 この新しいウォレットは、マルチチェーンでのトランザクションの作成、受信、および保存のパフォーマンスとスケーラビリティを変革します。
詳細に入る前に、いくつかの状況を説明します。 マルチチェーンの開発を始めたとき、私たちは Bitcoin Core、開始点としてのパブリックビットコインネットワークの標準ノード。 プログラミング用語では、これはマルチチェーンがビットコインソフトウェアの「フォーク」であることを意味します。 私たちの主な理由は、ビットコインは、何らかの意味で、最も価値があり、最もテストされた暗号通貨エコシステムである(そしてこれからもそうである)ことです。
プラス面として、この決定により、ブロックチェーンノードを最初からコーディングする場合と比較して、迅速に市場に参入することができました。 パブリックブロックチェーンとプライベートブロックチェーンの間には多くの違いがありますが、ピアツーピアプロトコル、トランザクションとブロックの構造、デジタル署名の作成と検証、コンセンサスルール、キー管理、およびノードAPI。 Bitcoin Coreから分岐することで、その成熟度を活用し、MultiChainがブロックチェーンに追加するもの(構成可能性、許可、ネイティブアセットサポート)に焦点を当てることができました。 その結果、開発開始からわずか2015か月後の6年XNUMX月に最初のアルファ版をリリースすることができました。
ただし、これらのメリットに加えて、ビットコインコアの一部の側面が十分に構築されていないという事実も受け入れる必要がありました。 小規模でも問題なく機能しますが、使用量が増えるにつれてパフォーマンスは劇的に低下します。 パブリックビットコインネットワークがXNUMX秒あたり数回のトランザクションに制限されているため、これはほとんどのビットコインコアユーザーにとって長い間問題になりません。 しかし、プライベートブロックチェーンが毎秒数百または数千のトランザクションを目的としているため、遅かれ早かれ、これらのボトルネックを解消する必要があることはわかっていました。
ビットコインコアの財布
ビットコインコア内の「財布」は、常にこれらの問題点の最も重要なものでした。 その仕事は、ノードに特に関連のあるトランザクションを保存することです。これは、ノードが所有するブロックチェーンアドレスまたは「時計のみ」追跡しているアクティビティのアドレス。 たとえば、ノードとの間で資金をやり取りするすべてのトランザクションは、そのノードのウォレットに格納する必要があります。 また、ノードがトランザクションを作成するたびに、ノードは、新しいトランザクションが使用する以前のウォレットトランザクションのXNUMXつ以上の「未使用の出力」を検索する必要があります。
では、ビットコインコアから継承したウォレットの何が問題になっていますか? 実際には、XNUMXつのこと:
- すべてのウォレットトランザクションはメモリに保持されます。 これにより、起動時間が遅くなり、メモリ使用量が急速に増加します。
- 多くの操作は、新旧を問わず、ウォレット内のすべてのトランザクションの非効率的な「フルスキャン」を実行します。
- ウォレット内のすべてのトランザクションは、ノードの観点からは意味がなく、すでにディスク上のブロックチェーンに格納されている任意の「メタデータ」を含め、完全に格納されます。 これは非常に無駄です。
その結果、約20,000のトランザクションが保存され、Bitcoin Coreのウォレットの速度が大幅に低下します。 200,000万人ほどになると、実質的に粉砕して停止します。 さらに悪いことに、マルチチェーンブロックチェーンではトランザクションごとに最大8 MBのメタデータが許可されるため(ビットコインの80バイトと比較して)、ウォレットのメモリ要件は、トランザクション数が少なくても急速に増大する可能性があります。
これらの欠点はビットコインのコアにのみ適用されることを明確にすることが重要です 財布一般的なトランザクション処理能力ではなく、 つまり、メモリではなくディスク上に保持されるため、自身のアドレスに関連しない数百万(場合によっては数十億)のトランザクションを快適に処理および格納できます。 たとえば、多くの一般的なビットコイン取引所とウォレットは、ビットコインコアをそのまま使用しますが、独自のトランザクションをノード内ではなく外部に保存します。
マルチチェーンの新しいウォレット
マルチチェーンユーザーと同じ要求をして、ノードの外部に独自のトランザクションを保存することもできます。 ただし、チェーンの各参加者のセットアップとメンテナンスが非常に複雑になるため、これは適切なソリューションのようには感じられませんでした。 代わりに、弾丸を噛んでウォレットを一から書き直しました。
新しいウォレットはどう違うのですか? データベースの経験がある場合、答えは明白かもしれません:
- ウォレットのトランザクションをメモリに保持するのではなく、それらは適切なフォーマットでディスクに保存され、必要なときに対象のトランザクションが取得されます。
- フルウォレットスキャンを実行する代わりに、特定の条件を満たすトランザクションを迅速に特定できるように、トランザクションにはさまざまな方法で「インデックスが付けられます」。
- 256バイトを超えるトランザクションメタデータはウォレットに保存されません。 代わりに、ウォレットには、ブロックチェーン自体におけるメタデータの位置へのポインターが含まれています。
言い換えると、ノード内のウォレットを適切にデータベース駆動型に再構築しました( レベルDB)、効率的に検索できない単純なメモリ内構造に依存するのではなく、 当然のことながら、(3.4 GHz Intel Core i7で測定した)違いはかなり劇的です。
グラフは、古いウォレットに250,000トランザクションが含まれると、送信レートが3 tx /秒に低下し、ノードのメモリ使用量に600 MBを追加することを示しています。 対照的に、新しいウォレットの持続時間は100 tx /秒を超え、追加されるのは90 MBだけです。 この時点で古いウォレットのテストを停止しましたが、6万から8万のトランザクションが保存されていても、新しいウォレットは100 tx /秒を超えて送信し続け、使用されるRAMは約250 MBになります(データベースキャッシュのため)。
これらのテストは、ノードのウォレットに複数のアドレスとアセット(したがって、多くの未使用のトランザクション出力)を使用して、現実的な条件下で実行されました。 理想的なシナリオ(400つのアドレス、XNUMXつの資産、いくつかのUTXO)では、持続送信レートはXNUMX tx / sを超えていました。 いずれにせよ、この書き直しの一環として、クリーンな内部インターフェースの背後にあるウォレットのすべての機能を適切に抽象化しました。 これにより、他のデータベースエンジンのサポートが容易になり、堅牢性と速度がさらに向上します。
繰り返しになりますが、これらの数値はすべて、ノードがトランザクションを作成、送信、およびローカルウォレットに保存する速度ではなく、他のユーザーが作成したトランザクションの処理に関するスループットを指します。 一般的なネットワークスループットの場合、MultiChainは、実行中のハードウェアに応じて、現在200〜800 tx /秒を処理できます。 (通常のハードウェアで100,000 tx / secのようなブロックチェーンソフトウェアの有望な数値に懐疑的です。これは、ボトルネックがデジタル署名の検証であるため、実行に時間がかかります。ノードが個々のトランザクション署名を検証していない場合、ブロックチェーンを信頼全体で使用できない可能性があります。境界があり、通常の分散データベースよりも優れています。)
最後に、このウォレットの書き換えが必要なMultiChainの次の主要機能について触れておきます。 ストリームと呼ばれるこの機能は、ブロックチェーン上の汎用データストレージ用の高レベルの抽象化とAPIを提供します。 ストリームは、分散、デジタル署名、タイムスタンプ、および不変性のブロックチェーン関連の利点が追加された、時系列またはキーバリューデータベースと考えることができます。 この機能を使用できる多くのブロックチェーンの使用例を知っており、すでにその構築に取り組んでいます。 この空間を見て。
コメントを投稿してください LinkedInの上に.
技術補遺
MultiChain alpha 22以降では、現在実行されているウォレットのバージョンを確認できます。 walletdbversion
のフィールド getinfo
or getwalletinfo
API呼び出し。 の値 1
オリジナルのビットコインコアウォレットを意味し、 2
新しいマルチチェーンウォレットを意味します。
既存のチェーンで新しいバージョンのマルチチェーンを実行しても、すぐには新しいウォレットに切り替わりません。 ノードを停止してから再実行すると、ウォレットをアップグレードできます multichaind
パラメータ付き -walletdbversion=2 –rescan
。 同様にダウングレードできます –walletdbversion=1 –rescan
.
デフォルトでは、新しいチェーンでノードを開始すると、自動的に新しいウォレットが使用されます。 これを実行して変更できます multichaind
パラメータを使用して初めて –walletdbversion=1
.
新しいウォレットでは、すべて マルチチェーンAPI 古いトランザクションクエリAPIを除いて、以前とまったく同じように動作します。 getreceivedbyaddress
, listreceivedbyaddress
& listtransactions
(つかいます listwallettransactions
or listaddresstransactions
代わりに)。 さらに、新しいウォレットは、ビットチェーンコアの実装が不十分で、廃止予定の「アカウント」メカニズムに関連するAPI呼び出しとパラメーターをサポートしていません。これは、MultiChainでは適切にサポートされていませんでした。 これらの呼び出しは安全に無効になり、エラーメッセージが表示されます。
出典:https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/
- 000
- 100
- 目指す
- すべて
- API
- API
- 周りに
- 資産
- 資産
- ビット
- Bitcoin
- ビットコアコア
- ブロックチェーン
- 建物
- 容量
- 例
- 変化する
- コーディング
- 到来
- 注釈
- コマンドと
- コンセンサス
- 続ける
- 作成
- cryptocurrency
- データ
- データストレージ
- データベース
- データベースを追加しました
- 地方分権化
- 需要
- 開発
- デジタル
- 交換について
- 特徴
- 終わり
- 名
- 初回
- フォーカス
- 形式でアーカイブしたプロジェクトを保存します.
- 満たす
- フル
- 資金
- 未来
- Hardware
- HTTPS
- 何百
- 含めて
- インテル
- 関心
- IT
- ジョブ
- 保管
- キー
- 大
- 最新の
- つながる
- 活用します
- ローカル
- 長い
- 主要な
- 作成
- 管理
- 市場
- 百万
- ヶ月
- ネットワーク
- ノード
- 番号
- 業務執行統括
- その他
- 痛み
- パフォーマンス
- 視点
- 人気
- プライベート
- プログラミング
- 公共
- 要件
- ルール
- ラン
- ランニング
- スケーラビリティ
- を検索
- シェアする
- 小さい
- So
- ソフトウェア
- スペース
- スピード
- 過ごす
- start
- スタートアップ
- ストレージ利用料
- 店舗
- サポート
- サポート
- スイッチ
- 技術的
- テスト
- テスト
- 時間
- 追跡
- トランザクション
- 取引
- 信頼
- us
- users
- 値
- 評価
- Verification
- 財布
- 財布
- よく見る
- 以内
- 言葉
- 仕事