public JObject processClaimStatus(string mongodbConnStr, string mongodbDatabase, string txid, int n, string trTxid) { JObject ret = new JObject(); bool result = false; string findFliter = "{txid:'" + txid + "',n:" + n + ",status:1}"; JArray array = mh.GetData(mongodbConnStr, mongodbDatabase, "ProClaimgas", findFliter); if (array.Count == 0) { ret.Add("result", result); return(ret); } JObject txOb = (JObject)array[0]; int status = (int)txOb["status"]; string claimAddr = (string)txOb["claimAddr"]; decimal gas = (decimal)txOb["gas"]; //2:已处理 if (status == 2) { ret.Add("result", result); return(ret); } //根据trTxid查询交易是否是gas转账 findFliter = "{txid:'" + trTxid + "'}"; JArray txs = mh.GetData(mongodbConnStr, mongodbDatabase, "tx", findFliter); if (txs.Count > 0) { txOb = (JObject)txs[0]; //ContractTransaction string type = (string)txOb["type"]; JArray vouts = (JArray)txOb["vout"]; if (vouts.Count > 0 && type == "ContractTransaction") { JObject voutOb = (JObject)vouts[0]; string address = (string)voutOb["address"]; decimal value = (decimal)voutOb["value"]; if (address == claimAddr && gas.CompareTo(value) == 0) { var client = new MongoClient(mongodbConnStr); var database = client.GetDatabase(mongodbDatabase); var coll = database.GetCollection <ProClaimgas>("ProClaimgas"); BsonDocument queryBson = BsonDocument.Parse("{txid:'" + txid + "',n:" + n + ",status:1}"); List <ProClaimgas> queryBsonList = coll.Find(queryBson).ToList(); if (queryBsonList.Count > 0) { ProClaimgas pro = queryBsonList[0]; pro.status = 2; pro.pro = DateTime.Now; coll.ReplaceOne(queryBson, pro); result = true; } } } } ret.Add("result", result); return(ret); }
public JObject processSigleTx(string mongodbConnStr, string mongodbDatabase, string txid, int n) { decimal issueGas = 0; string findFliter = "{txid:'" + txid + "',n:" + n + ",'asset':'0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b'}"; JArray gasIssueJA = mh.GetData(mongodbConnStr, mongodbDatabase, "utxo", findFliter); JObject utxo = (JObject)gasIssueJA[0]; JObject gas = new JObject(); string used = (string)utxo["used"]; int start = (int)utxo["createHeight"]; int end = -1; if (used.Length > 0) { end = (int)utxo["useHeight"] - 1; //转出的这块的gas属于转入地址 } else { //未花费以目前高度计算 end = (int)mh.Getdatablockheight(mongodbConnStr, mongodbDatabase).First()["blockDataHeight"]; } int value = (int)utxo["value"]; //转入的这个块,属于当前地址,由于差额计算方法,需要开始-1 decimal issueSysfee = mh.GetTotalSysFeeByBlock(mongodbConnStr, mongodbDatabase, end) - mh.GetTotalSysFeeByBlock(mongodbConnStr, mongodbDatabase, start - 1); decimal issueGasInBlock = countGas(start, end); issueGas += (issueSysfee + issueGasInBlock) / 100000000 * value; ushort index = (ushort)utxo["n"]; string usedTxid = (string)utxo["used"]; gas.Add("addr", (string)utxo["addr"]); gas.Add("txid", txid); gas.Add("n", index); gas.Add("gas", issueGas); string formatGas = DecimalToString(issueGas); Console.WriteLine("gas:" + issueGas + "/format gas:" + formatGas); //根据usedTxid查询原始转入地址 //db.tx.find({"vin.0.txid":{$eq:"0x24b6752cd46aefdf036a86b8e05af7e024d15846e728d24e4a10c9e9ebf09927"}}) findFliter = "{'vin.0.txid':{$eq:'" + usedTxid + "'}}"; JArray result = mh.GetData(mongodbConnStr, mongodbDatabase, "tx", findFliter); if (result.Count > 0) { JObject txOb = (JObject)result[0]; JArray vouts = (JArray)txOb["vout"]; if (vouts.Count > 0) { JObject voutOb = (JObject)vouts[0]; string claimAddr = (string)voutOb["address"]; int v = (int)voutOb["value"]; findFliter = "{txid:'" + txid + "',n:" + n + "}"; JArray array = mh.GetData(mongodbConnStr, mongodbDatabase, "ProClaimgas", findFliter); if (array.Count > 0) { return(gas); } else { var client = new MongoClient(mongodbConnStr); var database = client.GetDatabase(mongodbDatabase); ProClaimgas pro = new ProClaimgas(claimAddr, txid, index, usedTxid, v, issueGas, 1, DateTime.Now, DateTime.Now); var collectionPro = database.GetCollection <ProClaimgas>("ProClaimgas"); collectionPro.InsertOne(pro); } } } return(gas); }