/// <summary> /// The create. /// </summary> /// <param name="leftNode"> /// The left node. /// </param> /// <param name="rightNode"> /// The right node. /// </param> /// <returns> /// The <see cref="MerkleNode"/>. /// </returns> public MerkleNode Create(MerkleNode leftNode, MerkleNode rightNode = null) { var hashTrits = new int[Constants.TritHashLength]; var leftNodeTrits = leftNode.Hash.ToTrits(); Hash hash; if (rightNode != null) { this.Curl.Reset(); this.Curl.Absorb(leftNodeTrits); this.Curl.Absorb(rightNode.Hash.ToTrits()); this.Curl.Squeeze(hashTrits); hash = new Hash(Converter.TritsToTrytes(hashTrits)); } else { hash = leftNode.Hash; } return(new MerkleNode(leftNode, rightNode) { Hash = hash }); }