private IDisposable StartTxValidator(ChainedHeader chainedHeader) { return(this.txValidator.Start(loadedTxes.GetConsumingEnumerable(), loadedTx => { if (!this.rules.IgnoreScripts) { var transaction = loadedTx.Transaction; var txIndex = loadedTx.TxIndex; var prevTxOutputs = loadedTx.PrevTxOutputs; if (txIndex > 0) { for (var inputIndex = 0; inputIndex < transaction.Inputs.Length; inputIndex++) { var txInput = transaction.Inputs[inputIndex]; var prevTxOutput = prevTxOutputs[inputIndex]; var txInputWithPrevOutput = new TxInputWithPrevOutput(chainedHeader, transaction, txIndex, txInput, inputIndex, prevTxOutput); loadedTxInputs.Add(txInputWithPrevOutput); } } } ValidateTransaction(loadedTx); }, () => loadedTxInputs.CompleteAdding())); }
private void ValidateTxInput(TxInputWithPrevOutput loadedTxInput) { try { this.rules.ValidationTransactionScript(loadedTxInput.ChainedHeader, loadedTxInput.Transaction, loadedTxInput.TxIndex, loadedTxInput.TxInput, loadedTxInput.InputIndex, loadedTxInput.PrevTxOutput); } catch (Exception e) { this.scriptValidatorExceptions.Add(e); } }