IPFSシリーズ-メルク有向非巡回グラフ(Merkle DAG)

Merkle DAGのフルネームは、Merkle Directed Acyclic Graph(Merkle Directed Acyclic Graph)です。これは、1979年にアメリカのコンピューター科学者Merkleが特許を取得したMerkleTreeに基づいて構築されています。

MerkleDAY跟MerkleTree

MerkleDAGはMerkleTreeと非常に似ていますが、まったく同じではありません。MerkleDAGはツリーバランシング操作を実行する必要がなく、非リーフノードにデータなどを含めることができます。ipfs addコマンドは、指定されたファイルのデータからMerkleDAGを作成します。unixfsデータ形式(protobuf)に従うということは、ファイルがブロックに分割され、「リンクノード」を使用してツリー構造に配置され、相互に接続されることを意味します。特定のファイルの「ハッシュ」は、実際にはのルートノードのハッシュです。 DAG。

ファイルの内容が256kを超える場合、または追加がディレクトリの場合、ファイルはブロックストレージに分割され、リンクノードを使用してツリーのような構造に再配置されます。unixfsデータ形式を理解する方法、たとえば、自分でブロックを作成するには、次のコマンドを使用します。

echo "block test" | ipfs block put

ipfs catによって表示されるデータはunixfsデータ形式に基づいているため、ipfscatコマンドを使用して自分で作成したブロックを表示することはできません。

マークルDAGの機能

MerkleDAGは機能がMerkleTreeとは大きく異なります。MerkleTreeは主に、デジタル署名やビットコインMerkle Proofの検証などの検証を目的としています。MerkleDAGの主な目的は、次のとおりです。

  • コンテンツのアドレス指定:複数のハッシュを使用して、データブロックのコンテンツを一意に識別します。
  • 改ざん防止:ハッシュ値をチェックして、データが改ざんされていないかどうかを確認します。
  • 重複排除:同じコンテンツのデータブロックは同じハッシュ値を持ち、重複データを削除してストレージスペースを節約できます。

その中で、第3条はIPFSシステムの最も重要な機能です。IPFSシステムでは、各Blobのサイズは256KBに制限されています(暫定的に256KB、この値は実際のパフォーマンス要件に応じて変更できます)。 Merkle DAGによって除外され、ストレージスペースを占有せずにファイル参照を追加するだけです。

同時に、各ノードは特定のリソースをipfsで固定し、ローカルに保存して、ネットワーク全体の冗長性を向上させることができます。

デフォルトでは、ipfsaddによって追加されたリソースはローカルウェアハウススペースに自動的に修正されます

データオブジェクト形式

Merkle DAGのオブジェクト形式を定義します。IPFSObjectはIPFSdeのストレージ構造であり、各データのサイズを256K未満に制限します。IPFSObjectオブジェクトには2つの部分があり、1つは他の参照を格納するために使用されるリンクです。ブロックデータ、もう1つはデータですこのオブジェクトのコンテンツ。リンクは主に、リンク名、ハッシュ、サイズの3つの部分で構成されます。リンクは、IPFSObjectへの単なる参照です。この設計の利点は、Gitと組み合わせると、MerkleDAGがストレージスペースの消費を大幅に削減することです。ソースファイルの一部を変更する場合、変更できるIPFSObjectはごくわずかであり、コンテンツ全体を変更する必要はありません。以下は、IPFSObjectとLinkのデータ構造です。

type IPFSObject struct{
    
    
    links []IPFSLink
    data []byte
}
type IPFSLink struct{
    
    
    Name string
    Hash Multihash
    Size int    
}

おすすめ

転載: blog.csdn.net/wcc19840827/article/details/110953637