Esempio n. 1
0
 private void updateR5(JToken[] rr, long blockindex, long rblockindex, long rblocktime)
 {// collectDomain
     foreach (JToken jt in rr)
     {
         string    auctionId  = jt["auctionId"].ToString();
         string    domain     = jt["domain"].ToString();
         string    parenthash = jt["parenthash"].ToString();
         string    who        = jt["who"].ToString();
         string    txid       = jt["txid"].ToString();
         AuctionTx at         = queryAuctionTx(auctionId);
         if (at == null)
         {
             // 没有竞拍信息,报错停止处理
             error(auctionId); return;
         }
         if (at.addwholist == null || at.addwholist.Count == 0)
         {
             at.addwholist = new List <AuctionAddWho>();
         }
         AuctionAddWho   addwho    = null;
         AuctionAddWho[] addwhoArr = at.addwholist.Where(p => p.address == who).ToArray();
         if (addwhoArr != null && addwhoArr.Count() > 0)
         {
             addwho = addwhoArr[0];
             at.addwholist.Remove(addwho);
         }
         else
         {
             addwho         = new AuctionAddWho();
             addwho.address = who;
         }
         // 领取域名时间
         addwho.getdomainTime = new AuctionTime
         {
             blockindex = rblockindex,
             blocktime  = rblocktime,
             txid       = txid
         };
         at.addwholist.Add(addwho);
         replaceAuctionTx(at, auctionId);
     }
 }
Esempio n. 2
0
        private void updateR3_BidSettlement(JToken[] rr, long blockindex, long rblockindex, long rblocktime)
        {
            foreach (var jt in rr)
            {
                string    who       = jt["who"].ToString();
                decimal   value     = decimal.Parse(jt["value"].ToString());
                string    auctionId = jt["auctionId"].ToString();
                string    txid      = jt["txid"].ToString();
                AuctionTx at        = queryAuctionTx(auctionId);
                if (at == null)
                {
                    // 没有竞拍信息,报错停止处理
                    error(auctionId); return;
                }
                if (at.addwholist == null)
                {
                    at.addwholist = new List <AuctionAddWho>();
                }
                AuctionAddWho   addwho    = null;
                AuctionAddWho[] addwhoArr = at.addwholist.Where(p => p.address == who).ToArray();
                if (addwhoArr != null && addwhoArr.Count() > 0)
                {
                    addwho = addwhoArr[0];
                    at.addwholist.Remove(addwho);
                }
                else
                {
                    addwho               = new AuctionAddWho();
                    addwho.address       = who;
                    addwho.totalValue    = format(0);
                    addwho.curTotalValue = format(0);
                }

                //
                bool hasExist = addwho.addpricelist != null && addwho.addpricelist.Any(p => p != null && p.time.txid == txid && p.value == value);
                if (hasExist)
                {
                    continue;
                }

                // 结算时间(领取域名/取回CGas)
                addwho.accountTime = new AuctionTime
                {
                    blockindex = rblockindex,
                    blocktime  = rblocktime,
                    txid       = txid
                };
                // 最后操作时间(包括最后出价时间和领取域名/取回Gas时间)
                at.lastTime = new AuctionTime
                {
                    blockindex = rblockindex,
                    blocktime  = rblocktime,
                    txid       = txid
                };

                // 加价列表
                if (addwho.addpricelist == null)
                {
                    addwho.addpricelist = new List <AuctionAddPrice>();
                }
                addwho.addpricelist.Add(new AuctionAddPrice
                {
                    time = new AuctionTime
                    {
                        blockindex = rblockindex,
                        blocktime  = rblocktime,
                        txid       = txid
                    },
                    value = format(value * -1),
                    isEnd = "1" // 表示结算
                });
                at.addwholist.Add(addwho);
                replaceAuctionTx(at, auctionId);
            }
        }
Esempio n. 3
0
        private void updateR3(JToken[] rr, long blockindex, Dictionary <string, long> blockindexDict)
        {// assetManagement
            foreach (JToken jt in rr)
            {
                //string auctionId = jt["auctionId"].ToString();
                string from = jt["from"].ToString();
                string to   = jt["to"].ToString();

                decimal value = decimal.Parse(jt["value"].ToString());
                string  txid  = jt["txid"].ToString();
                if (txid == "0xc97606fd0db030369a9848ef7c19543f66aad752bb70984b94f165c69b6301ca")
                {
                    //throw new Exception("TTT");
                }

                bool   auctionidIsTo = true;
                string auctionId     = null;
                string address       = null;
                if (from.Length > to.Length)
                {
                    auctionidIsTo = false;
                    auctionId     = "0x" + from.hexstringReverse();
                    address       = to;
                }
                else
                {
                    auctionidIsTo = true;
                    auctionId     = "0x" + to.hexstringReverse();
                    address       = from;
                }
                // 如果to为分红地址
                if (!auctionidIsTo && to == bonusAddress)
                {
                    //string data = new JObject() { { "from", from }, { "to", to }, { "value", value } }.ToString();
                    //mh.PutData(localDbConnInfo.connStr, localDbConnInfo.connDB, bonusAddressColl, data);
                    //return;
                }
                AuctionTx at = queryAuctionTx(auctionId);
                if (at == null)
                {
                    // 没有竞拍信息,报错停止处理
                    error(auctionId); return;
                }
                if (at.addwholist == null)
                {
                    at.addwholist = new List <AuctionAddWho>();
                }
                AuctionAddWho   addwho    = null;
                AuctionAddWho[] addwhoArr = at.addwholist.Where(p => p.address == address).ToArray();
                if (addwhoArr != null && addwhoArr.Count() > 0)
                {
                    addwho = addwhoArr[0];
                    at.addwholist.Remove(addwho);
                    //addwho.totalValue = auctionidIsTo ? addwho.totalValue + value : addwho.totalValue - value;
                    if (addwho.addpricelist != null && addwho.addpricelist.Any(p => p != null && p.time.txid == txid && format(p.value) == value))
                    {
                        continue;
                    }
                }
                else
                {
                    addwho               = new AuctionAddWho();
                    addwho.address       = address;
                    addwho.totalValue    = format(0);
                    addwho.curTotalValue = format(0);
                    //addwho.totalValue = value;
                }
                bool isPositiveFlag = auctionidIsTo || (!auctionidIsTo && address == bonusAddress);
                if (isPositiveFlag)
                {
                    addwho.totalValue    = format(format(addwho.totalValue) + value);
                    addwho.curTotalValue = format(format(addwho.curTotalValue) + value);
                }
                if (auctionidIsTo)
                {
                    addwho.lastTime = new AuctionTime
                    {
                        blockindex = blockindex,
                        blocktime  = blockindexDict.GetValueOrDefault(blockindex + ""),
                        txid       = txid
                    };
                    // 最后操作时间(包括最后出价时间和领取域名/取回Gas时间)
                    at.lastTime = new AuctionTime
                    {
                        blockindex = blockindex,
                        blocktime  = blockindex == 0 ? 0 : blockindexDict.GetValueOrDefault(blockindex + ""),
                        txid       = blockindex == 0 ? "" : txid
                    };
                }
                else
                {
                    if (bonusAddress != address /*&& value > 0*/)
                    {
                        addwho.accountTime = new AuctionTime
                        {
                            blockindex = blockindex,
                            blocktime  = blockindexDict.GetValueOrDefault(blockindex + ""),
                            txid       = txid
                        };
                    }
                }

                // 正在处理高度累计加价:待讨论
                // totalValue = curTotalValue
                // 开始:totalValue -= curTotalValue, curTotalValue = 0
                // 加价:totalValue += value        , curTotalValue += value
                // 完成:curTotalValue = 0, 更新已处理高度

                // 加价列表
                if (addwho.addpricelist == null)
                {
                    addwho.addpricelist = new List <AuctionAddPrice>();
                }
                bool hasExist = addwho.addpricelist.Any(p => p != null && p.time.txid == txid && p.value == value);
                if (!hasExist)
                {
                    addwho.addpricelist.Add(new AuctionAddPrice
                    {
                        time = new AuctionTime
                        {
                            blockindex = blockindex,
                            blocktime  = blockindexDict.GetValueOrDefault(blockindex + ""),
                            txid       = txid
                        },
                        value = isPositiveFlag ? format(value) : format(value * -1),
                        isEnd = isPositiveFlag ? "0" : "1"
                    });
                }
                at.addwholist.Add(addwho);
                replaceAuctionTx(at, auctionId);
            }
        }