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); }
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)); }
public override bool CanEstimateScriptSigSize(ICoin coin) { return(CanSign(coin.GetScriptCode())); }
public override bool Match(ICoin coin, PSBTInput input) { return(CanSign(coin.GetScriptCode())); }
public uint256 GetSignatureHash(ICoin coin, SigHash sigHash = SigHash.All) { return(Script.SignatureHash(coin.GetScriptCode(), Transaction, (int)Index, sigHash, coin.TxOut.Value, coin.GetHashVersion())); }
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 }