コード例 #1
0
        public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            var offer = SolverScriptBuilder.ExtractOfferScriptParameters(scriptPubKey);
            var key   = keyRepo.FindKey(offer.FulfillKey.ScriptPubKey) ?? keyRepo.FindKey(offer.RedeemKey.ScriptPubKey);

            if (key == null)
            {
                return(null);
            }
            var sig = signer.Sign(key);

            return(new Script(Op.GetPushOp(sig.ToBytes())));
        }
コード例 #2
0
        public override Script GenerateScriptSig(Network network, Script scriptPubKey, IKeyRepository keyRepo,
                                                 ISigner signer)
        {
            var multiSigParams = PayToMultiSigTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);
            var signatures     = new TransactionSignature[multiSigParams.PubKeys.Length];
            var keys           =
                multiSigParams
                .PubKeys
                .Select(p => keyRepo.FindKey(p.ScriptPubKey))
                .ToArray();

            var sigCount = 0;

            for (var i = 0; i < keys.Length; i++)
            {
                if (sigCount == multiSigParams.SignatureCount)
                {
                    break;
                }
                if (keys[i] != null)
                {
                    var sig = signer.Sign(keys[i]);
                    signatures[i] = sig;
                    sigCount++;
                }
            }

            IEnumerable <TransactionSignature> sigs = signatures;

            if (sigCount == multiSigParams.SignatureCount)
            {
                sigs = sigs.Where(s => s != TransactionSignature.Empty && s != null);
            }
            return(PayToMultiSigTemplate.Instance.GenerateScriptSig(sigs));
        }
コード例 #3
0
		public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
		{
			var multiSigParams = PayToMultiSigTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);
			TransactionSignature[] signatures = new TransactionSignature[multiSigParams.PubKeys.Length];
			var keys =
				multiSigParams
				.PubKeys
				.Select(p => keyRepo.FindKey(p.ScriptPubKey))
				.ToArray();

			int sigCount = 0;
			for(int i = 0 ; i < keys.Length ; i++)
			{
				if(sigCount == multiSigParams.SignatureCount)
					break;
				if(keys[i] != null)
				{
					var sig = signer.Sign(keys[i]);
					signatures[i] = sig;
					sigCount++;
				}
			}

			IEnumerable<TransactionSignature> sigs = signatures;
			if(sigCount == multiSigParams.SignatureCount)
			{
				sigs = sigs.Where(s => s != TransactionSignature.Empty && s != null);
			}
			return PayToMultiSigTemplate.Instance.GenerateScriptSig(sigs);
		}
コード例 #4
0
		public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
		{
			var key = keyRepo.FindKey(scriptPubKey);
			if(key == null)
				return null;
			var sig = signer.Sign(key);
			return PayToPubkeyTemplate.Instance.GenerateScriptSig(sig);
		}
コード例 #5
0
        public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            var multiSigParams = EscrowScriptBuilder.ExtractEscrowScriptPubKeyParameters(scriptPubKey);

            TransactionSignature[] signatures = new TransactionSignature[2];
            var keys =
                multiSigParams
                .EscrowKeys
                .Select(p => keyRepo.FindKey(p.ScriptPubKey))
                .ToArray();

            if (keys.All(k => k == null))
            {
                var redeem = keyRepo.FindKey(multiSigParams.RedeemKey.ScriptPubKey);
                if (redeem == null)
                {
                    return(null);
                }
                return(new Script(Op.GetPushOp(signer.Sign(redeem).ToBytes())));
            }

            int sigCount = 0;

            for (int i = 0; i < keys.Length; i++)
            {
                if (sigCount == 2)
                {
                    break;
                }
                if (keys[i] != null)
                {
                    var sig = signer.Sign(keys[i]);
                    signatures[i] = sig;
                    sigCount++;
                }
            }

            IEnumerable <TransactionSignature> sigs = signatures;

            if (sigCount == 2)
            {
                sigs = sigs.Where(s => s != TransactionSignature.Empty && s != null);
            }
            return(EscrowScriptBuilder.GenerateScriptSig(sigs.ToArray()));
        }
コード例 #6
0
		public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
		{
			var parameters = PayToPubkeyHashTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);
			var key = keyRepo.FindKey(parameters.ScriptPubKey);
			if(key == null)
				return null;
			var sig = signer.Sign(key);
			return PayToPubkeyHashTemplate.Instance.GenerateScriptSig(sig, key.PubKey);
		}
コード例 #7
0
        public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            var key = keyRepo.FindKey(scriptPubKey);

            if (key == null)
            {
                return(null);
            }
            var sig = signer.Sign(key);

            return(PayToPubkeyTemplate.Instance.GenerateScriptSig(sig));
        }
コード例 #8
0
        public override Script GenerateScriptSig(Network network, Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            Key key = keyRepo.FindKey(scriptPubKey);

            if (key == null)
            {
                return(null);
            }
            TransactionSignature sig = signer.Sign(key);

            return(PayToPubkeyTemplate.Instance.GenerateScriptSig(sig));
        }
コード例 #9
0
        public override Script GenerateScriptSig(Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            var parameters = PayToPubkeyHashTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);
            var key        = keyRepo.FindKey(parameters.ScriptPubKey);

            if (key == null)
            {
                return(null);
            }
            var sig = signer.Sign(key);

            return(PayToPubkeyHashTemplate.Instance.GenerateScriptSig(sig, key));
        }
コード例 #10
0
        public override Script GenerateScriptSig(Network network, Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            KeyId parameters = PayToPubkeyHashTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey);
            Key   key        = keyRepo.FindKey(parameters.ScriptPubKey);

            if (key == null)
            {
                return(null);
            }
            TransactionSignature sig = signer.Sign(key);

            return(PayToPubkeyHashTemplate.Instance.GenerateScriptSig(sig, key.PubKey));
        }
コード例 #11
0
        /// <inheritdoc />
        public override Script GenerateScriptSig(Network network, Script scriptPubKey, IKeyRepository keyRepo, ISigner signer)
        {
            ColdStakingScriptTemplate.Instance.ExtractScriptPubKeyParameters(scriptPubKey, out KeyId hotKey, out KeyId coldKey);

            // The scriptPubKey will be different depending on whether we are spending or cold staking.
            Key key = keyRepo.FindKey((this.usesColdPubKey ? coldKey : hotKey).ScriptPubKey);

            if (key == null)
            {
                return(null);
            }

            TransactionSignature sig = signer.Sign(key);

            return(ColdStakingScriptTemplate.Instance.GenerateScriptSig(sig, this.usesColdPubKey, key.PubKey));
        }
コード例 #12
0
        public override void Sign(InputSigningContext inputSigningContext, IKeyRepository keyRepository, ISigner signer)
        {
            var scriptCode = inputSigningContext.Coin.GetScriptCode();
            var key        = keyRepository.FindKey(scriptCode) as PubKey;

            if (key == null)
            {
                return;
            }
            var sig = signer.Sign(key) as TransactionSignature;

            if (sig is null)
            {
                return;
            }
            inputSigningContext.Input.PartialSigs.TryAdd(key, sig);
        }
コード例 #13
0
        public override void Sign(InputSigningContext inputSigningContext, IKeyRepository keyRepository, ISigner signer)
        {
            var executedScript = inputSigningContext.Coin.GetScriptCode();
            var parameters     = PayToPubkeyHashTemplate.Instance.ExtractScriptPubKeyParameters(executedScript);
            var key            = keyRepository.FindKey(parameters.ScriptPubKey) as PubKey;

            if (key == null)
            {
                return;
            }
            var sig = signer.Sign(key) as TransactionSignature;

            if (sig is null)
            {
                return;
            }
            inputSigningContext.Input.PartialSigs.TryAdd(key, sig);
        }
コード例 #14
0
        public override void Sign(InputSigningContext inputSigningContext, IKeyRepository keyRepository, ISigner signer)
        {
            var pk = keyRepository.FindKey(inputSigningContext.Coin.TxOut.ScriptPubKey) as TaprootFullPubKey;

            if (pk is null)
            {
                return;
            }
            var signature = signer.Sign(pk) as TaprootSignature;

            if (signature is null)
            {
                return;
            }
            inputSigningContext.Input.TaprootInternalKey  = pk.InternalKey;
            inputSigningContext.Input.TaprootKeySignature = signature;
            inputSigningContext.Input.TaprootMerkleRoot   = pk.MerkleRoot;
        }