/// <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)); } } } } }