Describes a transaction, plus additional details concerning this wallet.
Ejemplo n.º 1
0
        public static bool RelevantTransaction(WalletTransaction tx, Account account, out Amount debit, out Amount credit)
        {
            if (tx == null)
                throw new ArgumentNullException(nameof(tx));

            debit = 0;
            credit = 0;
            var relevant = false;

            foreach (var input in tx.Inputs)
            {
                if (input.PreviousAccount == account)
                {
                    relevant = true;
                    debit -= input.Amount;
                }
            }
            foreach (var output in tx.Outputs)
            {
                var controlledOutput = output as WalletTransaction.Output.ControlledOutput;
                if (controlledOutput?.Account == account)
                {
                    relevant = true;
                    credit += output.Amount;
                }
            }

            return relevant;
        }
Ejemplo n.º 2
0
        public static bool RelevantTransaction(WalletTransaction tx, Account account, out Amount debit, out Amount credit)
        {
            if (tx == null)
            {
                throw new ArgumentNullException(nameof(tx));
            }

            debit  = 0;
            credit = 0;
            var relevant = false;

            foreach (var input in tx.Inputs)
            {
                if (input.PreviousAccount == account)
                {
                    relevant = true;
                    debit   -= input.Amount;
                }
            }
            foreach (var output in tx.Outputs)
            {
                var controlledOutput = output as WalletTransaction.Output.ControlledOutput;
                if (controlledOutput?.Account == account)
                {
                    relevant = true;
                    credit  += output.Amount;
                }
            }

            return(relevant);
        }
Ejemplo n.º 3
0
        public TransactionViewModel(Wallet wallet, WalletTransaction transaction, BlockIdentity transactionLocation)
        {
            _transaction = transaction;
            _location = transactionLocation;

            var groupedOutputs = _transaction.NonChangeOutputs.Select(o =>
            {
                var destination = wallet.OutputDestination(o);
                return new GroupedOutput(o.Amount, destination);
            }).Aggregate(new List<GroupedOutput>(), (items, next) =>
            {
                var item = items.Find(a => a.Destination == next.Destination);
                if (item == null)
                    items.Add(next);
                else
                    item.Amount += next.Amount;

                return items;
            });

            Confirmations = BlockChain.Confirmations(wallet.ChainTip.Height, transactionLocation);
            Inputs = _transaction.Inputs.Select(input => new Input(-input.Amount, wallet.AccountName(input.PreviousAccount))).ToArray();
            Outputs = _transaction.Outputs.Select(output => new Output(output.Amount, wallet.OutputDestination(output))).ToArray();
            GroupedOutputs = groupedOutputs;
        }
Ejemplo n.º 4
0
        private void AddTransactionToTotals(WalletTransaction tx, Dictionary<Account, AccountState> modifiedAccounts)
        {
            var isCoinbase = BlockChain.IsCoinbase(tx.Transaction);

            foreach (var input in tx.Inputs)
            {
                TotalBalance -= input.Amount;

                var accountState = _accounts[input.PreviousAccount];
                accountState.TotalBalance -= input.Amount;
                if (isCoinbase)
                    accountState.ImmatureCoinbaseReward -= input.Amount;
                modifiedAccounts[input.PreviousAccount] = accountState;
            }

            foreach (var output in tx.Outputs.OfType<WalletTransaction.Output.ControlledOutput>())
            {
                TotalBalance += output.Amount;

                var accountState = _accounts[output.Account];
                accountState.TotalBalance += output.Amount;
                if (isCoinbase)
                    accountState.ImmatureCoinbaseReward += output.Amount;
                modifiedAccounts[output.Account] = accountState;
            }

            _transactionCount++;
        }
Ejemplo n.º 5
0
        private void AddTransactionToTotals(WalletTransaction tx, Dictionary <Account, AccountProperties> modifiedAccounts)
        {
            var isCoinbase = BlockChain.IsCoinbase(tx.Transaction);

            foreach (var input in tx.Inputs)
            {
                TotalBalance -= input.Amount;

                var accountProperties = _accounts[input.PreviousAccount];
                accountProperties.TotalBalance -= input.Amount;
                if (isCoinbase)
                {
                    accountProperties.ImmatureCoinbaseReward -= input.Amount;
                }
                modifiedAccounts[input.PreviousAccount] = accountProperties;
            }

            foreach (var output in tx.Outputs.OfType <WalletTransaction.Output.ControlledOutput>())
            {
                TotalBalance += output.Amount;

                var accountProperties = _accounts[output.Account];
                accountProperties.TotalBalance += output.Amount;
                if (isCoinbase)
                {
                    accountProperties.ImmatureCoinbaseReward += output.Amount;
                }
                modifiedAccounts[output.Account] = accountProperties;
            }

            _transactionCount++;
        }
Ejemplo n.º 6
0
 public AccountTransactionViewModel(WalletTransaction transaction, Amount runningBalanceDelta, Amount runningBalance)
 {
     _transaction = transaction;
     BalanceDelta = runningBalanceDelta;
     _balance = runningBalance;
 }
Ejemplo n.º 7
0
 public string OutputDestination(WalletTransaction.Output output)
 {
     if (output is WalletTransaction.Output.ControlledOutput)
     {
         var controlledOutput = (WalletTransaction.Output.ControlledOutput)output;
         if (controlledOutput.Change)
             return "Change";
         else
             return _accounts[controlledOutput.Account].AccountName;
     }
     else
     {
         var uncontrolledOutput = (WalletTransaction.Output.UncontrolledOutput)output;
         Address address;
         if (Address.TryFromOutputScript(uncontrolledOutput.PkScript, ActiveChain, out address))
             return address.Encode();
         else
             return "Non-address output";
     }
 }
Ejemplo n.º 8
0
 private static IEnumerable<WalletTransaction.Output.ControlledOutput> OutputsToAccount(WalletTransaction.Output[] outputs, Account account)
 {
     return outputs.OfType<WalletTransaction.Output.ControlledOutput>().Where(o => o.Account == account);
 }
Ejemplo n.º 9
0
        private void RemoveTransactionFromTotals(WalletTransaction tx, Dictionary<Account, AccountProperties> modifiedAccounts)
        {
            var isCoinbase = BlockChain.IsCoinbase(tx.Transaction);

            foreach (var input in tx.Inputs)
            {
                TotalBalance += input.Amount;

                var accountProperties = _accounts[input.PreviousAccount];
                accountProperties.TotalBalance += input.Amount;
                if (isCoinbase)
                    accountProperties.ImmatureCoinbaseReward += input.Amount;
                modifiedAccounts[input.PreviousAccount] = accountProperties;
            }

            foreach (var output in tx.Outputs.OfType<WalletTransaction.Output.ControlledOutput>())
            {
                TotalBalance -= output.Amount;

                var accountProperties = _accounts[output.Account];
                accountProperties.TotalBalance -= output.Amount;
                if (isCoinbase)
                    accountProperties.ImmatureCoinbaseReward -= output.Amount;
                modifiedAccounts[output.Account] = accountProperties;
            }

            _transactionCount--;
        }