static bool NeedUTXO(PSBTInput input) { if (input.IsFinalized()) { return(false); } var needNonWitnessUTXO = !input.PSBT.Network.Consensus.NeverNeedPreviousTxForSigning && !((input.GetSignableCoin() ?? input.GetCoin())?.GetHashVersion() is HashVersion.Witness); if (needNonWitnessUTXO) { return(input.NonWitnessUtxo == null); } else { return(input.WitnessUtxo == null && input.NonWitnessUtxo == null); } }
public FundingInput(PSBTInput input) : this(input.GetCoin() ?? throw new InvalidOperationException("The PSBT is missing witness_utxo")) { if (input.Unknown.TryGetValue(FundingInformation.MaxWitnessLengthKey, out var v)) { MaxWitnessLength = (int)Utils.ToUInt32(v, true); } if (input.RedeemScript is Script) { RedeemScript = input.RedeemScript; } if (input.NonWitnessUtxo is Transaction) { InputTransaction = input.NonWitnessUtxo; } Index = input.Index; Sequence = input.PSBT.GetOriginalTransaction().Inputs[input.Index].Sequence; if (MaxWitnessLength is null) { this.SetRecommendedMaxWitnessLength(); } }
static bool NeedNonWitnessUtxo(PSBTInput input) { return(!((input.GetSignableCoin() ?? input.GetCoin())?.GetHashVersion() is HashVersion.Witness)); }