Exemple #1
0
        public override int EstimateScriptSigSize(ICoin coin)
        {
            var scriptPubKey = coin.GetScriptCode();
            var p2mk         = PayToMultiSigTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);

            return(PayToMultiSigTemplate.Instance.GenerateScriptSig(Enumerable.Range(0, p2mk.SignatureCount).Select(o => DummySignature).ToArray()).Length);
        }
Exemple #2
0
 private bool SafeContainsCoin(out string address, ICoin coin)
 {
     try
     {
         address = coin.GetScriptCode().GetDestinationAddress(_Network).ToWif();
     }
     catch
     {
         // Not concerned, safe can't contain something like this
         address = null;
         return(false);
     }
     return(Safe.Addresses.Contains(address));
 }
Exemple #3
0
 public override bool CanEstimateScriptSigSize(ICoin coin)
 {
     return(CanSign(coin.GetScriptCode()));
 }
Exemple #4
0
 public override bool Match(ICoin coin, PSBTInput input)
 {
     return(CanSign(coin.GetScriptCode()));
 }
Exemple #5
0
 public uint256 GetSignatureHash(ICoin coin, SigHash sigHash = SigHash.All)
 {
     return(Script.SignatureHash(coin.GetScriptCode(), Transaction, (int)Index, sigHash, coin.TxOut.Value, coin.GetHashVersion()));
 }
Exemple #6
0
 public Script GetScriptCode()
 {
     return(innerCoin.GetScriptCode());
 }
		private Script CreateScriptSig(TransactionSigningContext ctx, ICoin coin, IndexedTxIn txIn)
		{
			var scriptPubKey = coin.GetScriptCode();
			var keyRepo = new TransactionBuilderKeyRepository(this, ctx);
			var signer = new TransactionBuilderSigner(coin, ctx.SigHash, txIn);
			foreach(var extension in Extensions)
			{
				if(extension.CanGenerateScriptSig(scriptPubKey))
				{
					return extension.GenerateScriptSig(scriptPubKey, keyRepo, signer);
				}
			}
			throw new NotSupportedException("Unsupported scriptPubKey");
		}
		private Script CombineScriptSigs(ICoin coin, Script a, Script b)
		{
			var scriptPubkey = coin.GetScriptCode();
			if(Script.IsNullOrEmpty(a))
				return b ?? Script.Empty;
			if(Script.IsNullOrEmpty(b))
				return a ?? Script.Empty;

			foreach(var extension in Extensions)
			{
				if(extension.CanCombineScriptSig(scriptPubkey, a, b))
				{
					return extension.CombineScriptSig(scriptPubkey, a, b);
				}
			}
			return a.Length > b.Length ? a : b; //Heurestic
		}