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);
            }
        }
예제 #2
0
 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();
     }
 }
예제 #3
0
 static bool NeedNonWitnessUtxo(PSBTInput input)
 {
     return(!((input.GetSignableCoin() ?? input.GetCoin())?.GetHashVersion() is HashVersion.Witness));
 }