var inputsKey = new COutPoint(item.TransactionHash, item.nOut);
- item.IsSpent = true;
+// item.IsSpent = true;
// Add output data to dictionary
inputs.Add(inputsKey, (TxOutItem)item);
for (var i = 0u; i < tx.vout.Length; i++)
{
- var mNode = new CMerkleNode(cursor.ItemID, nTxPos, tx);
- queuedMerkleNodes.Add(hashTx, mNode);
+ if (!queuedMerkleNodes.ContainsKey(hashTx))
+ {
+ var mNode = new CMerkleNode(cursor.ItemID, nTxPos, tx);
+ queuedMerkleNodes.Add(hashTx, mNode);
+ }
var outKey = new COutPoint(hashTx, i);
var outData = new TxOutItem();
outData.scriptPubKey = tx.vout[i].scriptPubKey;
outData.nOut = i;
-
outData.IsSpent = false;
queued.Add(outKey, outData);
}
else
{
+ // TODO: Bug here, we shouldn't mix new and already existent outpoints in the same dictionary.
+
+
merkleNode = queuedMerkleNodes[txID];
if (!SaveMerkleNode(ref merkleNode))
{
var results = blockMap.Where(x => x.Value.ItemID == merkleNode.nParentBlockID).Select(x => x.Value).ToArray();
blockCursor = results[0];
+
+ return merkleNode;
}
// Nothing found.