public void getMintSNEO(string mongodbConnStr, string mongodbDatabase, string sneoAddr) { //db.tx.find({"vout.0.address":{$eq:"ASmnUjHydp5z2eDjUWnkHmQbtpm6TjMUPP"},"type":"InvocationTransaction"}) string findFliter = "{'vout.0.address':{$eq:'" + sneoAddr + "'},'type':'InvocationTransaction'}"; JArray result = mh.GetData(mongodbConnStr, mongodbDatabase, "tx", findFliter); foreach (JObject txOb in result) { int blockindx = (int)txOb["blockindex"]; JArray vins = (JArray)txOb["vin"]; string txid = (string)txOb["txid"]; JArray vouts = (JArray)txOb["vout"]; JObject valOb = (JObject)vouts[0]; int value = (int)valOb["value"]; if (vins.Count > 0) { //查出转入地址的交易 JObject vinOb = (JObject)vins[0]; txid = (string)vinOb["txid"]; int n = (int)vinOb["vout"]; findFliter = "{txid:'" + txid + "'}"; JArray array = mh.GetData(mongodbConnStr, mongodbDatabase, "tx", findFliter); if (array.Count > 0) { JObject txOb2 = (JObject)array[0]; vouts = (JArray)txOb2["vout"]; if (vouts.Count > 0) { //查出转入地址的交易 JObject voutOb = (JObject)vouts[n]; string from = (string)voutOb["address"]; if (!getMintSNEOByTxid(mongodbConnStr, mongodbDatabase, txid)) { var client = new MongoClient(mongodbConnStr); var database = client.GetDatabase(mongodbDatabase); NEP55.MintSNEO mint = new NEP55.MintSNEO(blockindx, txid, from, sneoAddr, value, GetBlockTime(mongodbConnStr, mongodbDatabase, blockindx)); var collectionPro = database.GetCollection <NEP55.MintSNEO>("MintSNEO"); collectionPro.InsertOne(mint); } } } } } }
private int getStartHeight(string mongodbConnStr, string mongodbDatabase, int refundVal, string addr) { //地址下面所有未使用的兑换记录 JArray mints = getMintSNEOByAddr(mongodbConnStr, mongodbDatabase, addr); if (mints.Count == 0) { return(0); } //默认第一个就是开始高度 JObject firstOb = (JObject)mints[0]; int remainTotal = 0; Console.WriteLine("mintsneo size:" + mints.Count); //记录使用被匹配的兑换记录 List <NEP5.MintSNEOTemp> temps = new List <NEP5.MintSNEOTemp>(); foreach (JObject mint in mints) { int remainVal = (int)mint["remainVal"]; string txid = (string)mint["txid"]; int blockindex = (int)mint["blockindex"]; remainTotal = remainTotal + remainVal; int result = remainTotal - refundVal; if (result <= 0) { NEP5.MintSNEOTemp temp = new NEP5.MintSNEOTemp(addr, txid, 0); temps.Add(temp); } else { NEP5.MintSNEOTemp temp = new NEP5.MintSNEOTemp(addr, txid, result); temps.Add(temp); break; } } //更新MintSNEO记录 foreach (NEP5.MintSNEOTemp temp in temps) { string txid = temp.txid; int remainVal = temp.remainVal; Console.WriteLine("txid:" + txid + "/remainVal:" + remainVal); var client = new MongoClient(mongodbConnStr); var database = client.GetDatabase(mongodbDatabase); var coll = database.GetCollection <BsonDocument>("MintSNEO"); BsonDocument queryBson = BsonDocument.Parse("{from:'" + addr + "',txid:'" + txid + "'}"); var collBson = database.GetCollection <NEP55.MintSNEO>("MintSNEO"); List <NEP55.MintSNEO> query = collBson.Find(queryBson).ToList(); NEP55.MintSNEO oper = query[0]; oper.remainVal = remainVal; collBson.ReplaceOne(queryBson, oper); } return((int)firstOb["blockindex"]); }