Пример #1
0
        /// <summary>
        /// Sign a specific coin with the given secret
        /// </summary>
        /// <param name="key">Private keys</param>
        /// <param name="coins">Coins to sign</param>
        public void Sign(Key[] keys, params ICoin[] coins)
        {
            TransactionBuilder builder = new TransactionBuilder();

            builder.AddKeys(keys);
            builder.AddCoins(coins);
            builder.SignTransactionInPlace(this);
        }
Пример #2
0
        /// <summary>
        /// Sign the transaction with a private key
        /// <para>ScriptSigs should be filled with either previous scriptPubKeys or redeem script (for P2SH)</para>
        /// <para>For more complex scenario, use TransactionBuilder</para>
        /// </summary>
        /// <param name="secret"></param>
        public void Sign(Key key, bool assumeP2SH)
        {
            TransactionBuilder builder = new TransactionBuilder();

            builder.AddKeys(key);
            for (int i = 0; i < Inputs.Count; i++)
            {
                var txin = Inputs[i];
                if (Script.IsNullOrEmpty(txin.ScriptSig))
                {
                    throw new InvalidOperationException("ScriptSigs should be filled with either previous scriptPubKeys or redeem script (for P2SH)");
                }
                if (assumeP2SH)
                {
                    var p2shSig = PayToScriptHashTemplate.Instance.ExtractScriptSigParameters(txin.ScriptSig);
                    if (p2shSig == null)
                    {
                        builder.AddCoins(new ScriptCoin(txin.PrevOut, new TxOut()
                        {
                            ScriptPubKey = txin.ScriptSig.PaymentScript,
                        }, txin.ScriptSig));
                    }
                    else
                    {
                        builder.AddCoins(new ScriptCoin(txin.PrevOut, new TxOut()
                        {
                            ScriptPubKey = p2shSig.RedeemScript.PaymentScript
                        }, p2shSig.RedeemScript));
                    }
                }
                else
                {
                    builder.AddCoins(new Coin(txin.PrevOut, new TxOut()
                    {
                        ScriptPubKey = txin.ScriptSig
                    }));
                }
            }
            builder.SignTransactionInPlace(this);
        }