public PayToMultiSigTemplateParameters?ExtractScriptPubKeyParameters(Script scriptPubKey) { bool needMoreCheck; if (!FastCheckScriptPubKey(scriptPubKey, out needMoreCheck)) { return(null); } var ops = scriptPubKey.ToOps().ToArray(); if (!CheckScriptPubKeyCore(scriptPubKey, ops)) { return(null); } //already checked in CheckScriptPubKeyCore var sigCount = ops[0].GetInt() !.Value; var keyCount = ops[ops.Length - 2].GetInt() !.Value; List <PubKey> keys = new List <PubKey>(); List <byte[]> invalidKeys = new List <byte[]>(); for (int i = 1; i < keyCount + 1; i++) { if (PubKey.TryCreatePubKey(ops[i].PushData, out var pk)) { keys.Add(pk); } else { invalidKeys.Add(ops[i].PushData); } } return(new PayToMultiSigTemplateParameters(sigCount, keys.ToArray(), invalidKeys.ToArray())); }
public PayToWitPubkeyHashScriptSigParameters?ExtractWitScriptParameters(WitScript witScript) { if (!CheckWitScriptCore(witScript)) { return(null); } if (PubKey.TryCreatePubKey(witScript[1], out var pk)) { return(new PayToWitPubkeyHashScriptSigParameters((witScript[0].Length == 0) ? null : new TransactionSignature(witScript[0]), pk)); } return(null); }
public PubKey?ExtractScriptPubKeyParameters(Script scriptPubKey, bool deepCheck) { var result = ExtractScriptPubKeyParameters(scriptPubKey); if (result == null || !deepCheck) { return(result); } if (PubKey.TryCreatePubKey(result.ToBytes(true), out var pk)) { return(pk); } return(null); }
public PayToPubkeyHashScriptSigParameters?ExtractScriptSigParameters(Script scriptSig) { var ops = scriptSig.ToOps().ToArray(); if (!CheckScriptSigCore(scriptSig, ops, null, null)) { return(null); } if (PubKey.TryCreatePubKey(ops[1].PushData, out var pk)) { return(new PayToPubkeyHashScriptSigParameters(ops[0].Code == OpcodeType.OP_0 ? null : new TransactionSignature(ops[0].PushData), pk)); } return(null); }
public PubKey?ExtractScriptPubKeyParameters(Script scriptPubKey) { bool needMoreCheck; if (!FastCheckScriptPubKey(scriptPubKey, out needMoreCheck)) { return(null); } if (PubKey.TryCreatePubKey(scriptPubKey.ToBytes(true).SafeSubarray(1, scriptPubKey.Length - 2), out var pk)) { return(pk); } return(null); }