private async Task <TransactionInputSummary[]> TxInputsToJSON(Transaction tx, bool noAsm, bool noScriptSig) { var inputs = tx.Inputs; var jsonInputs = new List <TransactionInputSummary>(); for (uint i = 0; i < inputs.Count; i++) { var input = inputs[i]; dynamic jsonInput = new TransactionInputSummary(); if (tx.IsCoinbase) { byte[] scriptData = input.Script.ToData(false); Array.Reverse(scriptData, 0, scriptData.Length); jsonInput.coinbase = Binary.ByteArrayToHexString(scriptData); } else { await SetInputNonCoinbaseFields(jsonInput, input, noAsm, noScriptSig); } jsonInput.sequence = input.Sequence; jsonInput.n = i; jsonInputs.Add(jsonInput); } return(jsonInputs.ToArray()); }
private async Task SetInputNonCoinbaseFields(TransactionInputSummary jsonInput, Input input, bool noAsm, bool noScriptSig) { var previousOutput = input.PreviousOutput; jsonInput.txid = Binary.ByteArrayToHexString(previousOutput.Hash); jsonInput.vout = previousOutput.Index; if (!noScriptSig) { jsonInput.scriptSig = InputScriptToJSON(input.Script, noAsm); } using (var getTxResult = await chain_.FetchTransactionAsync(previousOutput.Hash, false)) { Utils.CheckBitprimApiErrorCode(getTxResult.ErrorCode, "FetchTransactionAsync(" + Binary.ByteArrayToHexString(previousOutput.Hash) + ") failed, check errog log"); var output = getTxResult.Result.Tx.Outputs[previousOutput.Index]; var outputAddress = output.PaymentAddress(nodeExecutor_.UseTestnetRules); if (outputAddress.IsValid) { jsonInput.addr = outputAddress.Encoded; } jsonInput.valueSat = output.Value; jsonInput.value = Utils.SatoshisToCoinUnits(output.Value); jsonInput.doubleSpentTxID = null; //We don't handle double spent transactions } }