Example #1
0
        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());
        }
Example #2
0
        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
            }
        }