Beispiel #1
0
        public async Task <IEnumerable <ITxOutput> > GetOutputsAsync(
            string address,
            string afterTxId = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                var data = await _explorer
                           .GetHash160AddressAsync(address)
                           .ConfigureAwait(false);

                var outputs = new List <ITxOutput>();

                foreach (var tx in data.Transactions)
                {
                    foreach (var output in tx.Outputs)
                    {
                        if (output.Address == null ||
                            !output.Address.ToLowerInvariant().Equals(address.ToLowerInvariant()))
                        {
                            continue;
                        }

                        var spentTxPoint = output.Spent
                            ? new TxPoint(output.SpendingOutpoints[0].N,
                                          (await _explorer.GetTransactionByIndexAsync(output.SpendingOutpoints[0].TxIndex)
                                           .ConfigureAwait(false)).Hash)
                            : null;

                        var amount = new Money(output.Value.Satoshis, MoneyUnit.Satoshi);

                        var script = new Script(Hex.FromString(output.Script));

                        outputs.Add(new BitcoinBasedTxOutput(
                                        coin: new Coin(
                                            fromTxHash: new uint256(tx.Hash),
                                            fromOutputIndex: (uint)output.N,
                                            amount: amount,
                                            scriptPubKey: script),
                                        spentTxPoint: spentTxPoint));
                    }
                }

                return(outputs);
            }
            catch (Exception e)
            {
                throw new Exception(ResolveExceptionMessage(e));
            }
        }
        public async Task <decimal> GetBalanceAsync(string address160)
        {
            var address = await _blockExplorer.GetHash160AddressAsync(address160);

            return(address.FinalBalance.GetBtc());
        }