今回は、Solanaの公式が明記している「Solanaの機能」について解説します。
公式が明記している文章はこちらです。
https://solana.com/solana-whitepaper.pdf
全文英語で、専門用語もかなり出てくるため、日本語で砕いて説明します。
(専門用語が多いですがそこは砕けないためご了承ください。)
ネットワーク設計
任意の時間にシステムノードが次のように指定されます。
・Proof of Historyを生成するリーダーで、ネットワークをグローバルに読み取ることができ、時間の経過を検証することができる
・リーダーはユーザーメッセージの順番を決め、他の人が効率的に処理できるようにし、スループットを向上させる
・RAMに格納されている現在の状態について、トランザクションを後悔する
・最終状態の著名を、Verfiersという複製ノードに送信する
・Verfiersは状態のコピーに対して同じトランザクションを実行し、その状態に対して計算した著名を確認として公開する
・公開された確認はコンセンサスアルゴリズムの投票として機能する
・非パーティション化された状態では、どの時点でもリーダーは1人
・各Verifierノードは、リーダーと同じハードウェア能力を有すし、POSに基づく選挙によって行われる
・CPAの定理では、パーティション(区間)が発生した場合、有効性よりも一貫性が選択される
・大きなパーティションが発生した場合、パーティションからネットワークの制御を回復するメカニズムを提案する
POH
これに関しては、投資において重要のためこちらにまとめました。→仮想通貨における【 POH(Proof of History)とは 】SOLが実装
システム
・システムは、関数を実行しないと出力が予測できない
・あるランダムな開始値からその関数を実行し、その出力を入力として再び同じ関数に私、その関数が呼び出された回数とその時の出力を記録する
・選択したハッシュ関数が対衝突性である限り、このハッシュのセットは1つのコンピュータのスレッドによってのみ順次計算される
・ハッシュ値を予測することは不可能のため、インデックス300は実際にアルゴリズムを開始点から実行しない限り300回繰り返す
タイムスタンプ
・ハッシュ列は、あるデータの一部を記録するために使用することもできる
・コンバインを使用することにより、データの一部を現在のハッシュと結合させることができる
・で0たは単に任意の暗号化されたハッシュであっても良い
・結合関数は、単純なデータの追加または任意のもので良い
・各データのタイムスタンプは、そのデータの後にしか生成できない
・使用したハッシュ関数が対衝突性である限り、そしてどのようなデータがシーケンスに統合されるかという事前知識に基づいて、将来のシーケンスを決定することができる
・シーケンスに混合されるデータは、生データそのものであっても、あるいはでーたのハッシュとそれに付随するメタデータだけである
検証
・配列は、マルチコアコンピュータによって生成に要した時間よりもかなり短時間で正しく検証することができる
・シーケンスの作成時間にかかる予想時間=総ハッシュ数/1コアにおける1秒あたりのハッシュ数
・シーケンスの正しさを確認するための予想時間=総ハッシュ数/(1秒あたりのハッシュ数/コア * 検証可能なコア数)
水平方向のスケーリング
・複数のPOHジェネレータを混合して同期させることが可能である
・シーケンス状態を各ジェネレータから他のジェネレータに転送し、その結果POHジェネレータの水平スケーリングはシャーディング(データを複数のノードのディスクに分割配置)を行わずに両ジェネレータの出力は再構築するために必要である
・定期的に発電機を同期させることにより、それぞれの発電機は外部からのトラフィックの一部を処理し、システム全体としてより多くのトラフィックを処理することができる
・追跡するイベントの量は多くなるが、その分時刻の正確さが損なわれ、ネットワークの遅延がハッシエスする(グローバルな秩序はまだ達成可能)
整合性
・ユーザーは、最後に観測された出力を挿入することによって、生成された配列の一貫性を強制し、攻撃に耐えられるようにする
・一度に全てのイベントにアクセスできる場合、またはイベントの順序を逆にすることができる場合、より高速な隠しシーケンスを生成することができる
・部分的な並べ替え攻撃の場合、クライアントは、そのハッシュが生成された回数に制限される
オーバーヘッド
・毎秒400ハッシュの場合、更に160KBのデータが生成される
・4000コアのGPUが必要になり、0.25〜0.75秒かかる
攻撃
逆転
・逆順の生成には、攻撃者が悪意のある攻撃を開始する必要がある
・この遅延により、悪意のないピアツーピアが下の順序について通信することができる
速度
・複数のジェネレーターを持つことで、展開がより攻撃されにくくなる可能性がある
・あるジェネレーターは高帯域幅で、多くのイベントを受信して混合することができる
・別のジェネレーターは高速低帯域で、そのシーケンスに組み込むことができる
・高速シーケンスは、でーたの二次シーケンスを作成するが、攻撃はその逆を行わなければならない
長距離攻撃
・長距離攻撃では、破棄された古いクライアント秘密鍵を取得し、改ざんさてた元帳を生成する
・POHは、ある種の保護長距離攻撃に対して悪意のあるユーザーが古い秘密鍵にアクセスし、それと同じだけの時間をかけて履歴を再セク性しなければならない
・攻撃者が偽造しようとすると、現在ネットワークで使用されているよりも多くの歴史の長さに追いつくことはできない
・時間のソースが1つであるため、よりシンプルなProof of Replication(詳細は後述)は、ネットワークの全ての参加者が単一の履歴に依存するように設計されている
・PoRepとPoHが一緒になれば、空間と時間の両方の防御になるはず
・これらは大腸の偽造に抵抗するためのシステム
ステークコンセンサスの証明
説明
・POS(詳細→仮想通貨における【 POW・POSの違い 】どちらが良い?)の特定のインスタンスは、以下のことを素早く確認するために設計されている
∟歴史証明生成器によって生成された現在のシーケンスに投票するため
∟不正なバリデーターを罰するため
用語の説明
・ボンド:POWにおける資本支出に相当するものであり、マイナーハードウェアと電力を購入し、1つのブランチにコミットする(バリダータがコミットするコイン)トランザクションを検証している間、担保としてスラッシングプルーフにおけるNothing at stake問題の解決策として提案されたもの
∟別のブランチの議決権行使の証明があった場合、そのブランチはバリデーターボンドを破壊することができる
∟これは経済的インセンティブはバリデーターが確認することを抑制するように設計されている
・スーパーマジョリティー:加重平均したもの。超多数決は、ネットワーク以下に到達したことを示す
∟コンセンサスが得られており、投票しなければならない
・このブランチが無効であるためには、悪意がなければならないーこの場合の経済コストはコイン時価総額の1.5倍
ボンディング
・ボンディング取引は、ある量のコインを取り、それをボンディングに移動させる取引
・ボンディングアカウントにあるコインは、ユーザーがそれを削除するまでアカウントに残さなければならない
・ユーザーはタイムアウトしたコインを削除することができる
投票
・POHジェネレータは、以下のものを公開することができると予想される
∟荒化にめ定義された周期で状態の著名を行う
∟各保証IDは自分自身の著名付き著名を公開することによって、その著名を確認する
・投票は単純な賛成票であり、反対票はない
・タイムアウト時間内に結合されたアイデンティティの超多数が投票した場合、このブランチは有効とみなされる
アンボンディング
・N回の投票を逃すと、そのコインは古くなり、もはや投票する資格はない
・ユーザーはあぼんど取引を発行してアボンドを解除することができる
・Nは有効票に対する無効票の比率に基づく動的な値である
・Nは、古くなった表の数が増加するにつれて増加する
・大規模なネットワークパーティションは、より大きなブランチがより速く回復することができる
選挙
・新しいPOHジェネレータの選挙は、POHジェネレータの故障が発生したときに発生する
・最も投票数の多いバリデータ、または最も公開鍵の多いバリデータが選ばれる
・アドレスが同数の場合、新しいPOHジェネレータとして選ばれる
・新しいシーケンスには、超多数の確認が必要になる
・新リーダーは、超多数の確認が取れる前に失敗する
・次に高いバリデーターが選ばれ、新しい確認が要求される
・投票を切り替えるには、より高いPOHシーケンスで投票する必要がある
・カウンタがあり、新しい投票に切り替えたい票が含まれている必要がある
・そうでない場合、2票目は切り捨て可能
・票の切り替えは、以下のように予想される
・過半数を超えない高さでしか発生されないように設計されている
・POHジェネレータが確立されると、セカンダリを選出することができ、トランザクション処理業務を引き継ぐ
・セカンダリが存在する場合、そのセカンダリはプライマリに障害が発生した場合、次のリーダーとして考慮される
・プラットフォームは、セカンダリがプライマリになり、例外が検出された場合、または事前に定義されたスケジュールで、下位のジェネレータが昇格する
選挙のトリガー
フォーク型プルーフオブヒストリージェネレータ
・POHジェネレータは、生成されたシーケンスに著名するIDを持つように設計されている
・フォークが発生するのは、POHジェネレーターのIDが盗まれた場合のみである
・フォークが検出されるのは、2つの異なる履歴レコーーどが存在するためである
実行時例外事項
・ハードウェアの故障やバグ、POHジェネレータの意図的なエラーによって無効な状態を生成し、その状態の著名を発行してしまうことがあるが、ローカルバリデーションの結果と一致しない
・バリデータは正しい著名がゴシップで伝えられ、このイベントが新たな選挙ラウンドの引き金となる
・無効な状態を受け入れたバリdーエタは、その債権を切り売りされることになる
ネットワークタイムアウト
・ネットワークのタイムアウトは選挙の引き金となる
スラッシング
スラッシングは、バリデータが2つの別々のシーケンスに投票したときに亜hっ成する
・悪意のある投票は、結合されたコインを流通から排除し、それらを追加してマイニングプールに入れる
・結合するシーケンスに過去に投票したことがある場合は、投票できない
・悪意のある投票であることを証明するものがある
・債券を切り捨てるのではなく、この投票は、現在争奪シーケンスに投じられている票を削除する
・生成された無効なハッシュに対して投票が行われた場合にも、スラッシングが発生する
・生成きは、ランダムに無効な状態になり、セカンダリにフォールバックすることになる
セカンダリ選挙
・セカンダリ及び下位ランクのPOHジェネレータを提案することができる
・プロポーザルは、プライマリジェネレータのシーケンスに対して投じられる
・その提案にはタイムアウトがあり、超多数決で承認された場合、その提案は却下される
・タイムアウトがあり、超多数決で承認された場合、その提案は却下される
・タイムアウト前に投票が行われた場合、セカンダリは当選したものとみなされ予定通り業務を引き継ぐ
・プライマリはセカンダリにソフトハンドオーバーすることができる
・生成されたシーケンスに、ハンドオーバーすることを示すメッセージを挿入することによりまたは無効な状態を挿入し、ネットワークを強制的にフォールバックさせ、セカンダリに変更する
・セカンダリが選択され、プライマリに障害が発生した場合、セカンダリは選挙中の最初のフォールバックとして考慮される
可用性
・パーティションを扱うCAPシステムは、一貫性か可溶性のどちらかを洗濯しなければならない
・アプローチは最終的に可用性を選ぶが、時間という客観的な尺度があるため人間が合理的に判断して整合性を選択する
・POSの検証者は、ある量のコインをステークにロックし、特定の取引に投票することができる
・コインをトックすることは他のトランザクションと同様に、POHストリームに入力されるトランザクションである
・投票するためには、POSの検証者は状態の#を著名する必要がある
・POH台帳の特定の位置までの全てのトランザクションを処理した後、この投票もトランザクションとしてPOHストリームに入力される
・この投票がPOH台帳から各王表の前にどれだけの時間が経過したかを推測することができる
・パーティションが発生した場合、各検証者がどれだけの時間利用できなかったかを示す
・パーティションが発生した場合、各県商社がどれくらいの時間利用できなかったかを調べる
・検証者の数が多い場合、ベリファイアの数が多く、あんステイく処理は高速に行うことができる
・利用できなくなるまでに、台帳に生成されなければならないハッシュが少ない
・ベリファイアのステークは完全にアンステイクされ、コンセンサスのためにカウントされなくなる
・検証者の数が2人以下である場合、アンステークタイマーは遅くなり、不足する#をより多く生成する必要がある
・非常に多くのハッシュが生成されるまで、コンセンサスは得られない
・生成され、利用できない検証者のステークが解除される
・この差はネットワークが再び活性化するまでの時間によって、ネットワークの顧客である私たち人間の時間枠で、使い続けたいパーティションを選ぶことができる
リカバリー
・台帳は如何なる障害からも完全に回復することができる
・世界中の誰もが、大腸の任意の場所を選んで新たに生成された8種とトランザクションを追加することで、有効なフォークを作成する
・このフォークから全ての検証者がいなくなった場合、非常に長い時間がかかる
・利用可能なバリデータがゼロの状態での完全復旧の場合、非常に多くの#を台帳に追加する必要がある
・利用できないバリデーターが全てアンステークされた後にのみ、新しい元帳を検証することができる
ファイナリティ
・POHは、ネットワークの検証者が、過去に怒ったことを観察することを可能にする
・その事象の発生時刻をある程度確実に把握することができる
・POH生成器はメッセージのストリームを生成するため、全ての検証者はその著名は500ms以内であり、この数は更に減らすことができる
・ネットワークの状況に応じて各検証はストリームを使用すれば、ネットワーク上の誰でも全ての検証者が実際に投票を観察することなく、必要なタイムアウト時間内に投票することができる
攻撃
コモンズの悲劇
・POS検証者は、POH生成者が生成した状態ハッシュを確認するのみ
・経済的なインセンティブがあるため、彼らは何もせず、単に生成された全ての状態ハッシュを承認する
・この状態を避けるために、POH生成器はランダムは間隔で無効なハッシュを注入する必要がある
・このハッシュに対する投票者ハッシュは切り刻まれなければならない
・このハッシュが生成されたとき、ネットワークは直ちに次に投票されたPOHジェネレーターを昇格させる
・各検証者は、わずかなタイムアウト(例えば500ms)以内に応答することが要求される
・このタイムアウトは、悪意のある検証者が他のベリファイアの投票を観察して、自分の投票を取得する確率は低い
POH生成器との共謀
・POH生成器と共謀している検証者は、事前に以下のことを知ることになる
∟無効なハッシュが生成されようとするとき、それに投票しない
∟このシナリオは、POHアイデンティティがより大きな検証者を持つことと何ら変わりはない
∟POHジェネレーターは依然として、状態を生成するための全ての作業を行わなければならない
検閲
・債券保有者のうちは、新しいボンドを使用したシーケンスの検証を拒否する
・このプロトコルはこのような攻撃に対しては、ボンドがどの程度速くなるかを動的に調整することで使用する
・サービス拒否が発生した場合、より大きなパーティションが設計され、ピザンチン債の保有者を検閲する
・ビザンチン債が時間と共に古くなるにつれて、大規模なネットワークは回復する
・小さい方のビザンチンのパーティションは、より長い期間、前進することができなくなる
・このアルゴリズムは次のように動作する
∟ネットワークの過半数が新しいリーダーを選出する
∟そのリーダーはビザンチン債を検閲するが参加できないようにする
・POHの生成者は時間の経過を証明するために、十分な数のビザンチン列を生成するが古くなり、より大きなネットワークが超多数を占めるようになる
・債券が古くなるタイミングは、どの程度の割合で古くなるかに基づいて動的に決定される
・ネットワークの少数派のビザンチンフォークはスーパーマジョリティを回復するために、マジョリティーフォークよりもずっと長く持つ必要がある
・スーパーマジョリティーが確立されると、スラッシングが永久的に使用される可能性があるため、ビザンチン債の保有者を罰する
長距離攻撃
・POHは遠距離攻撃に対する自然な防御を提供する
・このため過去のどの時点の大腸であっても、攻撃者はその大腸を追い越さなければならない
・POH生成器の速度を上回ることで、時間内に有効な元帳を作成することができる
・同じ高さの2つの台帳を比較した場合、より小さい台帳の方がより有効である
・最大パーティションは、客観的に的に有効であるとみなす事ができる
ASIC攻撃
このプロトコルには、ASIC攻撃の機会が2つ存在し、「パーティション分割中」と「最終的に不正なタイムアウト」である
・パーティション中のASIC攻撃では、ボンドがアンステークされる率は非線形であり、パーティションが大きいネットワークではその割合はASIC攻撃で得られると予想される利益よりも何倍も遅い
・最終時のASIC攻撃については脆弱性により、ビザンチンに結合されたステークを持つバリデータは、他のノードからの確認を待つ
・その票を強力的なPOHジェネレータに注入すると、より高速なASICを使用して、500ms相当のハッシュをより短時間で生成する事ができる
・つまり、POHジェネレーターとネットワーク通信を可能にする
・しかしPOHジェネレータもビザンチンであればビザンチン生成が正確に挿入すると予想されるときに、このシナリオはPOHジェネレーターと全てのコラボレーターが同じIDを共有し、1組のハードウェアを使用するだけである
レプリケーションのストリーミング証明
証明
・ファイアルコインは、Proof of Replicationを提案した
・このバージョンの目標はProof of Replicationの検証を高速でストリーミングできるようにすること
・これは、履歴の証明で生成された時間を追跡する事で可能になる
・レプリケーションはコンセンサスアルゴリズムとしては使用されないが、便利な機能としてブロックチェーンの履歴や状態を保存するためのコストを考慮するためのツールである
アルゴリズム
・CBC暗号はデータの各ブロックを順番に暗号化し、前に暗号化されたブロックを使って入力データのXORを行うものである
・各レプリケーションIDは、以前からあるハッシュに著名することで鍵を生成する
・POHシーケンスにより、鍵は複製者の身元と、特定の歴史証明シーケンスに結びつけられる
・データセットはブロックごとに完全に暗号化されており、その後証明書を生成する
・鍵は擬似乱数発生器のシードに使用され、擬似乱数発生器は1つの鍵を選択する
・線が腐れたPOHハッシュを先頭にメルクハッシュが計算される
・ルート、鍵は選択されたハッシュとともに公開される
・レプリケーションノードは別の証明書のPOHジェネレータによって生成されるN個のハッシュで構成される
・履歴生成ツールは、特定のハッシュを複数証明のために一定期間ごとに公開する
・事前に定義された期間複数を行うのーどは、次に公開されるハッシュを生成する
・ここでもハッシュは著名され、ランダムはスライスが作成されるため、ブロックから選択肢、メルクルートを作成する
・N回の証明期間の後、データは新しいCBCキーで再暗号化される
検証
・N個のコアがある場合、各コアはIDごとにストリーミング暗号化する事ができる
・総容量前の暗号化されたブロックが必要のため、必要なのは2ブロック
・各コアは次のコアを生成するために、全ての証明は、現在の暗号化されたブロックから派生したものである
・証明の検証にかかるそう時間は、暗号化されたブロックの検証にかかる時間と同じになると予想される
・証明自体はブロックから少数のランダムバイトを消費する
・ハッシュ化するデータ量は、暗号化されたブロックより大幅に少なくなる
・同時に検証可能な複製IDの数は、利用可能なコアの数に等しくなる
・最近のGPUは3500以上のコアを使用する事ができる
鍵のローテーション
・鍵のローテーションを行わない場合、同じ暗号化された複製を作成することで安価な証明は、複数の歴史証明シーケンスに対応する
・鍵は定期的にローテーションされる
・ローテーションは、複製を検証するのに十分な速度である必要がある
・CPUよりもコアあたりの速度が遅いGPUハードウェアで実行される
ハッシュの選択
・POHの生成者は、ネットワーク全体で使用されるハッシュを公開する
・複製証明の暗号化、及び擬似乱数は、高速証明のバイト選択用番号発生器である
・ハッシュはほぼ1に等しい周期的なカウンターで公開される
・各レプリケーションIDは、同じハッシュを使用する
・各レプリケータが証明を提供しなければならない期間は、以下の値より小さくななければならない
・そうでなければ、複製者は暗号化をストリーミングし、証明ごとに削除する
・悪意ある生成者は、この前のシーケンスにデータを注入する事ができる
・ハッシュを生成し、特定のハッシュを生成する事ができる
証明の有用性
POHノードは、提出された証明書を検証することは期待されていない
・レプリケーション証明は、保留中の証明の数と複製者のIDから提出された検証済みの証明書である
・証明は複製者が超多数派によって著名できた時のみに検証される
・ネットワーク上のバリデーターの検証結果は、複製者がP”Pゴシップネットワークを通じて収集し、1つのバケットとして提出する
・このバケットは、POHシーケンスによって生成された特定のハッシュより前の全ての照明を検証し、複数の複製者のIDを一度に取得する事ができる
攻撃
スパム
悪意のあるユーザーは、多数の複製者IDを作成し、不正な証明でネットワークにスパムをかける事ができる
・検証を高速化するためには、ノードには暗号化されたデータと全丸くツリーを残りのメンバーに提供すること
・検証を依頼する際に、ネットワークで設計されたProof of Replicationでは、安価な費用での検証は追加スペースが不要であるため、どのような証明の追加も可能
・しかし各アイデンティティは、1コアの暗号化時間を消費することになる
・レプリケーション先は、安易に利用可能なコアの最大サイズに設定する必要がある
・最近のGPUは3500以上のコアを搭載している
部分消去
・レプリケーターのーどは、データの一部を部分的に消去することで、レプリケーターのーどが持つ状態全体を保存する
・証明の数とこれらのランダム性から、この攻撃は困難であるはずである
POHジェネレーターとの共謀
・著名されたハッシュはサンプルのシードに使用される事が期待される
・事前に特定のハッシュを選択する事ができれば、その複製者は全てのバイトはサンプリングされる予定がない
・POHジェネレーターと共謀している複製者のIDは下記の通り
∟ランダムバイト選択のための事前定義されたハッシュが生成される前に、シーケンスの最後に特定のトランザクションを注入する事ができる
・十分なコアがあれば攻撃者は複製者の身元に有利なハッシュを生成する事ができる
・この攻撃は、単一の複製者IDにのみ利益をもたらす可能性がある
・全てのIDは、暗号著名された全く同じハッシュを使用する必要がある
・ECDSAにより、結果として得られる著名は各レプリケータIDに対して一意であり、衝突に強い
・単一複製者IDの場合にはわずかな利益しか得る事ができない
サービス妨害
レプリケータHealingを追加するためのコストは、以下の通りであると予想される
∟余分な計算能力を追加するコストをストレージのコストとする
∟全てのレプリケーターIDを検証するためのコストは、CPUまたはGPUコアを使用する
∟有効な複製者Healingを大量に作成することで、その複製者IDを使用する事ができる
∟この攻撃を制限するために、ネットワークに選択されたコンセンサスプロトコルは、以下の事が可能
∟レプリケーションターゲットを選択し、ネットワーク上の可用性、帯域幅、地理的位置など、望ましい特性を満たすレプリケーション照明を授与する
コモンズの悲劇
・POS検証者は、何もせずにPoRepを確認するだけで良い
・経済的インセンティブをPOS検証者が仕事をするように並べなければならない
・マイニングの報酬をPOS検証者とPoRepの間で分配する
・このシナリオをさらに回避するために、PoRep検証者は偽の証明書はごく一部の時間を提供することで、その証明が誤りであることを照明する事ができる
・偽の証明は切り捨てられることになる
システム・アーキテクチャ
構成要素
リーダーはPOH生成器
・リーダーは、選出されたPOHジェネレータである
・これは任意のユーザートランザクションを出力し、システム内の一意なグローバル秩序を保障する全トランザクションの履歴証明シーケンスを出力する
・各ばっちの後リーダーはトランザクションの結果である状態の署名を出力する
・その順番でトランザクションを実行することでこの著名にはリーダーであることを示す
検証器の状態複製
・検証器のノードはブロックチェーンの状態を複製し、高可用性を提供する
・ブロックチェーン状態のレプリケーションの対象は、コンセンサスを選択し、コンセンサスアルゴリズムのバリデーターが投票する
・ネットワークは、最小のプルーフオブステークボンドで構成する事ができる
・サイズ及びボンドごとに単一の複製者IDが必要である
バリデータ
・ノードは、検証器から帯域幅を消費している仮想ノードである
・検証者またはリーダーと同じマシン上で動作させることもできるし、あるいはコンセンサスアルゴリズム用に設定された別のマシンを使用する
ネットワークの制限
・リーダーは、受信したユーザーバケットを受け取り、それを順序付けし可能な限り元も効率的な方法で、履歴の証明となるように配列する
・効率はトランザクションのメモリ・アクセス・パターンに基づいている
・POHシーケンスパケットには、現在のハッシュとカウンタが含まれる
・全てのメッセージを処理した後の状態著名の、このバケットは1回だけ送信されるN個のメッセージが放送されるごとに履歴バケットを証明する
計算の限界
・各トランザクションはダイジェスト検証を必要とする
・この操作ではトランザクションメッセージ自体の外には如何なるメモリもなく、並列化する事ができる
・このため、スループットは、使用可能なCPUの数によって制限される事が予想される
メモリの制限
・各アカウントに32バイトのエントリを持つ50%フルハッシュテーブルとして状態を素朴に実装すると、理論的には100億アカウントを640GBに収める事ができる
高性能なスマートコントラクト
・スマートコントラクトは、トランザクションを一般化したものである
・これらは、プログラムを各ノード上で実行され、状態を変更するものである。
この設計では、拡張された高速で解析しやすいバークレーパケットフィルターバイトコードと、JITバイトコードをスマートコントラクト言語として採用した
・その大きなメリットの1つが、コストゼロの外部関数インターフェースである
・イントリンシック、つまりプラっフォーム上に直接実装されている関数はプログラムから呼び出す事ができる
・この内部プロつガムを呼び出すと、そのプログラムは一時停止し、高性能サーバー上でその組み込み機器をスケジュールする
・イントリンシックではバッチ処理されまとめてGPU上で並列実行する
・上の列では2つの異なるユーザープログラムが同じ組み込み関数を呼び出している
・各プログラムは、組み込み機器の一括実行が完了するまで中断される
・組み込み機器の例として、ECDSA検証がある
・これらの呼び出しをバッチ処理することでGPUで実行処理し、スループットを数千倍に向上させる事ができる
・このトランポリンでは、オペレーティングシステムのネイティブなスレッドコンテキストスイッチは必要ない
・BPFのバイトコードは、全てのメモリに対して明確に定義されたコンテキストを持っている
・BPFバックエンドは2015年からLLVVMに含まれているため、どのLLVMのフロントエンド言語を使って、スマートコントラクトを書く事ができる
まとめ
非常に詳細な専門用語がズラーっと並んでおりますが、仮想通貨開発者やプログラマーは本当に知識がすごいですね。
所々理解できない部分もありますが、大まかの内容を理解しておくだけでも投資の勉強となります。
最近のコメント