예제 #1
0
                public UncontrolledOutput(Amount amount, byte[] pkScript) : base(amount)
                {
                    if (pkScript == null)
                    {
                        throw new ArgumentNullException(nameof(pkScript));
                    }

                    PkScript = OutputScript.ParseScript(pkScript);
                }
예제 #2
0
        public static UnspentOutput MarshalUnspentOutput(FundTransactionResponse.Types.PreviousOutput o)
        {
            var txHash         = new Sha256Hash(o.TransactionHash.ToByteArray());
            var outputIndex    = o.OutputIndex;
            var amount         = (Amount)o.Amount;
            var pkScript       = OutputScript.ParseScript(o.PkScript.ToByteArray());
            var seenTime       = DateTimeOffsetExtras.FromUnixTimeSeconds(o.ReceiveTime);
            var isFromCoinbase = o.FromCoinbase;

            return(new UnspentOutput(txHash, outputIndex, amount, pkScript, seenTime, isFromCoinbase));
        }
예제 #3
0
        /// <summary>
        /// Extracts the public key hash from a raw p2pkh script
        /// </summary>
        /// <param name="rawPkScript"></param>
        /// <returns></returns>
        /// <exception cref="SigningException"></exception>
        private static byte[] GetPublicKeyHash(byte[] rawPkScript)
        {
            // Only support Secp256k1 signatures
            var outScript = OutputScript.ParseScript(rawPkScript);

            if (!(outScript is OutputScript.Secp256k1PubKeyHash parsedScript))
            {
                throw new SigningException("Unsupported signature script type");
            }

            return(parsedScript.Hash160);
        }
예제 #4
0
        public async Task <Tuple <List <UnspentOutput>, Amount, OutputScript> > FundTransactionAsync(
            Account account, Amount targetAmount, int requiredConfirmations)
        {
            var client  = WalletService.NewClient(_channel);
            var request = new FundTransactionRequest
            {
                Account                  = account.AccountNumber,
                TargetAmount             = targetAmount,
                RequiredConfirmations    = requiredConfirmations,
                IncludeImmatureCoinbases = false,
                IncludeChangeScript      = true,
            };
            var response = await client.FundTransactionAsync(request, cancellationToken : _tokenSource.Token);

            var outputs      = response.SelectedOutputs.Select(MarshalUnspentOutput).ToList();
            var total        = (Amount)response.TotalAmount;
            var changeScript = (OutputScript)null;

            if (response.ChangePkScript?.Length != 0)
            {
                changeScript = OutputScript.ParseScript(response.ChangePkScript.ToByteArray());
            }
            return(Tuple.Create(outputs, total, changeScript));
        }