Exemplo n.º 1
0
        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()));
        }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }