public void SetLeftNode(MerkleNode node) { MerkleTree.Contract(() => node.Hash != null, "Node hash must be initialized."); LeftNode = node; LeftNode.Parent = this; ComputeHash(); }
public void SetRightNode(MerkleNode node) { MerkleTree.Contract(() => node.Hash != null, "Node hash must be initialized."); RightNode = node; RightNode.Parent = this; // Can't compute hash if the left node isn't set yet. if (LeftNode != null) { ComputeHash(); } }
/// <summary> /// Verifies the hash for this node against the computed hash for our child nodes. /// If we don't have any children, the return is always true because we have nothing to verify against. /// </summary> public bool VerifyHash() { if (LeftNode == null && RightNode == null) { return(true); } if (RightNode == null) { return(Hash.Equals(LeftNode.Hash)); } MerkleTree.Contract(() => LeftNode != null, "Left branch must be a node if right branch is a node."); MerkleHash leftRightHash = MerkleHash.Create(LeftNode.Hash, RightNode.Hash); return(Hash.Equals(leftRightHash)); }
public void SetHash(byte[] hash) { MerkleTree.Contract(() => hash.Length == Constants.HASH_LENGTH, "Unexpected hash length."); Value = hash; }
public override bool Equals(object obj) { MerkleTree.Contract(() => obj is MerkleHash, "rvalue is not a MerkleHash"); return(Equals((MerkleHash)obj)); }