diff --git a/dagger/merkledag.nim b/dagger/merkledag.nim index 50441411..d79878d2 100644 --- a/dagger/merkledag.nim +++ b/dagger/merkledag.nim @@ -1,10 +1,10 @@ -import pkg/libp2p/multihash - -export multihash +import pkg/libp2p type MerkleDag* = object data*: seq[byte] -proc rootHash*(dag: MerkleDag): MultiHash = - MultiHash.digest("sha2-256", dag.data).get() +proc rootId*(dag: MerkleDag): Cid = + let codec = multiCodec("dag-pb") + let hash = MultiHash.digest("sha2-256", dag.data).get() + Cid.init(CIDv0, codec, hash).get() diff --git a/dagger/repo.nim b/dagger/repo.nim index dad911af..7f0c9d95 100644 --- a/dagger/repo.nim +++ b/dagger/repo.nim @@ -1,21 +1,22 @@ import std/tables import std/hashes +import pkg/libp2p import ./merkledag export merkledag type Repo* = ref object - storage: Table[MultiHash, MerkleDag] + storage: Table[Cid, MerkleDag] -proc hash(multihash: MultiHash): Hash = - hash($multihash) +proc hash(id: Cid): Hash = + hash($id) proc store*(repo: Repo, dag: MerkleDag) = - repo.storage[dag.rootHash] = dag + repo.storage[dag.rootId] = dag -proc contains*(repo: Repo, hash: MultiHash): bool = - repo.storage.hasKey(hash) +proc contains*(repo: Repo, id: Cid): bool = + repo.storage.hasKey(id) -proc retrieve*(repo: Repo, hash: MultiHash): MerkleDag = - repo.storage[hash] +proc retrieve*(repo: Repo, id: Cid): MerkleDag = + repo.storage[id] diff --git a/tests/dagger/testMerkleDag.nim b/tests/dagger/testMerkleDag.nim index c18768b7..922a0229 100644 --- a/tests/dagger/testMerkleDag.nim +++ b/tests/dagger/testMerkleDag.nim @@ -1,11 +1,12 @@ import std/unittest +import pkg/libp2p import pkg/dagger/merkledag suite "Merkle DAG": - test "has a root hash": + test "has a content id": let dag1 = MerkleDag(data: @[1'u8, 2'u8, 3'u8]) let dag2 = MerkleDag(data: @[4'u8, 5'u8, 6'u8]) let dag3 = MerkleDag(data: @[4'u8, 5'u8, 6'u8]) - check dag1.rootHash != dag2.rootHash - check dag2.rootHash == dag3.rootHash + check dag1.rootId != dag2.rootId + check dag2.rootId == dag3.rootId diff --git a/tests/dagger/testRepo.nim b/tests/dagger/testRepo.nim index e1131847..1d18e088 100644 --- a/tests/dagger/testRepo.nim +++ b/tests/dagger/testRepo.nim @@ -12,11 +12,11 @@ suite "repo": test "stores Merkle DAGs": repo.store(dag) - test "retrieves Merkle DAGs by their root hash": + test "retrieves Merkle DAGs by their root id": repo.store(dag) - check repo.retrieve(dag.rootHash) == dag + check repo.retrieve(dag.rootId) == dag - test "knows which hashes are stored": - check repo.contains(dag.rootHash) == false + test "knows which ids are stored": + check repo.contains(dag.rootId) == false repo.store(dag) - check repo.contains(dag.rootHash) == true + check repo.contains(dag.rootId) == true