private async Task SetOutputSpendInfo(TransactionOutputSummary jsonOutput, byte[] txHash, UInt32 index) { using (var outPoint = new OutputPoint(txHash, index)) { var fetchSpendResult = await chain_.FetchSpendAsync(outPoint); if (fetchSpendResult.ErrorCode == ErrorCode.NotFound) { jsonOutput.spentTxId = null; jsonOutput.spentIndex = null; jsonOutput.spentHeight = null; } else { Utils.CheckBitprimApiErrorCode(fetchSpendResult.ErrorCode, "FetchSpendAsync failed, check error log"); var spend = fetchSpendResult.Result; jsonOutput.spentTxId = Binary.ByteArrayToHexString(spend.Hash); jsonOutput.spentIndex = spend.Index; using (var getTxResult = await chain_.FetchTransactionAsync(spend.Hash, false)) { Utils.CheckBitprimApiErrorCode(getTxResult.ErrorCode, "FetchTransactionAsync(" + Binary.ByteArrayToHexString(spend.Hash) + "), check error log"); jsonOutput.spentHeight = getTxResult.Result.TxPosition.BlockHeight; } } } }
private async Task <TransactionOutputSummary[]> TxOutputsToJSON(Transaction tx, bool noAsm, bool noSpend) { var outputs = tx.Outputs; var jsonOutputs = new List <TransactionOutputSummary>(); for (uint i = 0; i < outputs.Count; i++) { var output = outputs[i]; dynamic jsonOutput = new TransactionOutputSummary(); jsonOutput.value = Utils.SatoshisToCoinUnits(output.Value); jsonOutput.n = i; jsonOutput.scriptPubKey = OutputScriptToJSON(output, noAsm); if (!noSpend) { await SetOutputSpendInfo(jsonOutput, tx.Hash, (UInt32)i); } jsonOutputs.Add(jsonOutput); } return(jsonOutputs.ToArray()); }
private async Task <TransactionOutputSummary[]> TxOutputsToJSON(ITransaction tx, bool returnLegacyAddresses, bool noAsm, bool noSpend) { var outputs = tx.Outputs; var jsonOutputs = new List <TransactionOutputSummary>(); for (uint i = 0; i < outputs.Count; i++) { var output = outputs[i]; dynamic jsonOutput = new TransactionOutputSummary(); jsonOutput.value = Utils.SatoshisToCoinUnits(output.Value).ToString("0.00000000"); //Bitpay uses this format jsonOutput.n = i; jsonOutput.scriptPubKey = OutputScriptToJSON(output, returnLegacyAddresses, noAsm); if (!noSpend) { await SetOutputSpendInfo(jsonOutput, tx.Hash, i); } jsonOutputs.Add(jsonOutput); } return(jsonOutputs.ToArray()); }