/// <summary>
        /// 为新交易生成付款地址
        /// </summary>
        /// <param name="db"></param>
        /// <param name="account"></param>
        /// <param name="currency"></param>
        /// <param name="client"></param>
        /// <param name="tran"></param>
        void transactionGetCyptoCoinAddress(MainDB db, string account, string currency, CyptoCoinPlatform.ICyptoCoinClient client, DBModels.Transaction tran)
        {
            var time = DateTime.Now.AddDays(-1);
            //获取一天前生成的交易,但是一直没有支付,可以认为地址已经不被使用,应该是不会有人在用
            var    oldtran      = db.Transaction.FirstOrDefault(m => m.Status == DBModels.Transaction_StatusEnum.WaitForPay && m.Currency == currency && m.CreateTime < time);
            string cyptoAddress = null;

            if (oldtran != null)
            {
                //
                cyptoAddress = oldtran.CyptoCoinAddress;
                //把这笔交易作废
                oldtran.Status = DBModels.Transaction_StatusEnum.Invalided;
                db.Update(oldtran);
            }

            if (cyptoAddress == null)
            {
                var walletKeyInfo = (from m in db.Wallet
                                     join b in db.WalletCyptoCoinInfo on m.id equals b.WalletId
                                     where m.Account == account
                                     select b).FirstOrDefault();

                //获取一个付款地址
                cyptoAddress = client.GetUnusedAddress(walletKeyInfo.Key1, walletKeyInfo.Key2);
            }
            tran.Currency         = currency;
            tran.CyptoCoinAddress = cyptoAddress;
            tran.CreateTime       = DateTime.Now;
            tran.Status           = DBModels.Transaction_StatusEnum.WaitForPay;
        }
        private void AddSubItem(string text)
        {
            SubItem subItem = new SubItem()
            {
                Text = text
            };

            this.StackSubItems.Children.Add(subItemButtonFactory(subItem));
            MyItem.SubItems.Add(subItem);
            MainDB.Update(MyItem);
        }
        private ImageLabelButton subItemButtonFactory(SubItem subItem)
        {
            ImageLabelButton subItemButton = new ImageLabelButton()
            {
                Text = subItem.Text
            };

            subItemButton.Click += (sender, e) =>
            {
                StackSubItems.Children.Remove(subItemButton);
                MyItem.SubItems.Remove(subItem);
                MainDB.Update(MyItem);
            };

            return(subItemButton);
        }
        static void checkTransaction(MainDB db, NBitcoin.Transaction cyptoCoinTransaction, int confirmations, Way.Lib.CLog log)
        {
            var payedTranid = cyptoCoinTransaction.GetHash().ToString();

            log.Log($"transactionid:{payedTranid}");

            foreach (var txOut in cyptoCoinTransaction.Outputs)
            {
                var addr = txOut.ScriptPubKey.GetDestinationAddress(NBitcoin.Network.Main).ToString();
                log.Log($"txOut:{addr} value:{txOut.Value}");

                //如果支付地址和钱包交易里的地址一致,那么,进行处理
                var transaction = db.Transaction.FirstOrDefault(m => m.Status != DBModels.Transaction_StatusEnum.Invalided && m.CyptoCoinAddress == addr);
                if (transaction != null)
                {
                    var cyptoCoinTranItem = db.CyptoCoinTran.FirstOrDefault(m => m.TransactionId == transaction.id && m.CyptoCoinTransId == payedTranid);
                    if (cyptoCoinTranItem == null)
                    {
                        log.Log($"belong to Transaction {transaction.id},increase Transaction's PayedAmount");

                        var amount = Convert.ToDouble(txOut.Value.ToDecimal(NBitcoin.MoneyUnit.BTC));
                        transaction.PayedAmount += amount;
                        if (transaction.PayedAmount >= transaction.Amount)
                        {
                            transaction.Status = DBModels.Transaction_StatusEnum.AllPayed;
                        }
                        else
                        {
                            transaction.Status = DBModels.Transaction_StatusEnum.PartialPayed;
                        }
                        db.Update(transaction);

                        var secret = db.Wallet.Where(m => m.id == transaction.WalletId).Select(m => m.Secret).FirstOrDefault();

                        //发送通知
                        if (!string.IsNullOrEmpty(transaction.NotifyUrl))
                        {
                            Task.Run(() => NotifyTask.SentNotify(transaction, secret));
                        }

                        cyptoCoinTranItem = new DBModels.CyptoCoinTran()
                        {
                            CyptoCoinTransId = payedTranid,
                            TransactionId    = transaction.id,
                            PayedAmount      = amount,
                            PayTime          = DateTime.Now
                        };
                        db.Insert(cyptoCoinTranItem);
                    }
                    else
                    {
                        cyptoCoinTranItem.Confirmations = confirmations;
                        db.Update(cyptoCoinTranItem);


                        //发送通知
                        if (!string.IsNullOrEmpty(transaction.NotifyUrl) && confirmations <= 6)
                        {
                            var secret = db.Wallet.Where(m => m.id == transaction.WalletId).Select(m => m.Secret).FirstOrDefault();
                            Task.Run(() => NotifyTask.SentNotify(transaction, secret));
                        }
                    }
                }
            }
        }