The IPFS MerkleDag is the datastructure at the heart of IPFS. It is an acyclic directed graph whose edges are hashes.
Initially an MerkleNode is just constructed with its MultiHash. Its other properties are lazily loaded.
 /// <inheritdoc />
 public bool Equals(MerkleNode that)
 {
     return this.Hash == that.Hash;
 }
        public void Value_Equality()
        {
            var a0 = new MerkleNode("QmStfpa7ppKPSsdnazBy3Q5QH4zNzGLcpWV88otjVSV7SY");
            var a1 = new MerkleNode("QmStfpa7ppKPSsdnazBy3Q5QH4zNzGLcpWV88otjVSV7SY");
            var b = new MerkleNode("QmagNHT6twJRBZcGeviiGzHVTMbNnJZameLyL6T14GUHCS");

            #pragma warning disable 1718
            Assert.IsTrue(a0 == a0);
            Assert.IsTrue(a0 == a1);
            Assert.IsFalse(a0 == b);

            #pragma warning disable 1718
            Assert.IsFalse(a0 != a0);
            Assert.IsFalse(a0 != a1);
            Assert.IsTrue(a0 != b);

            Assert.IsTrue(a0.Equals(a0));
            Assert.IsTrue(a0.Equals(a1));
            Assert.IsFalse(a0.Equals(b));

            Assert.AreEqual(a0, a0);
            Assert.AreEqual(a0, a1);
            Assert.AreNotEqual(a0, b);

            Assert.AreEqual<MerkleNode>(a0, a0);
            Assert.AreEqual<MerkleNode>(a0, a1);
            Assert.AreNotEqual<MerkleNode>(a0, b);

            Assert.AreEqual(a0.GetHashCode(), a0.GetHashCode());
            Assert.AreEqual(a0.GetHashCode(), a1.GetHashCode());
            Assert.AreNotEqual(a0.GetHashCode(), b.GetHashCode());
        }
 public void Stats()
 {
     var node = new MerkleNode(IpfsInfo);
     Assert.AreEqual(309, node.BlockSize);
     Assert.AreEqual(307, node.LinksSize);
     Assert.AreEqual(6, node.LinksCount);
     Assert.AreEqual(2, node.DataSize);
     Assert.AreEqual(6345, node.CumulativeSize);
 }
        public void RawData()
        {
            var node = new MerkleNode(IpfsInfo);
            byte[] data;
            using (var raw = node.GetRawData())
            using (var s = new MemoryStream())
            {
                raw.CopyTo(s);
                data = s.ToArray();
            }

            // TODO: verify GetRawData() hash equal node's hash.
        }
Beispiel #5
0
        public void Stringify()
        {
            var node = new MerkleNode(IpfsInfo);

            Assert.AreEqual("/ipfs/" + IpfsInfo, node.ToString());
        }
Beispiel #6
0
        public void HashWithNamespace()
        {
            var node = new MerkleNode("/ipfs/" + IpfsInfo);

            Assert.AreEqual(IpfsInfo, (string)node.Id);
        }
Beispiel #7
0
 /// <inheritdoc />
 public bool Equals(MerkleNode that)
 {
     return(that != null && this.Id == that.Id);
 }
Beispiel #8
0
 /// <inheritdoc />
 public bool Equals(MerkleNode that)
 {
     return(that != null && this.Hash == that.Hash);
 }
 public void Links_and_LinksCount()
 {
     var node = new MerkleNode(IpfsInfo);
     Assert.AreEqual(6, node.LinksCount);
     Assert.AreEqual(6, node.Links.Count());
 }