async public static Task <MyJson.JsonNode_Object> handle(int height) { var queryArr = Mongo.Find(Collection, "index", height); if (queryArr.Count == 0) { var blockData = await Rpc.getblock(Config.NeoCliJsonRPCUrl, height); blockData.Remove("confirmations"); blockData.Remove("nextblockhash"); Collection.InsertOne(BsonDocument.Parse(blockData.ToString())); //Mongo.SetSystemCounter(collectionType, height); return(blockData); } else { BsonDocument queryB = queryArr[0].AsBsonDocument; var jsonWriterSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.Strict }; MyJson.JsonNode_Object block = MyJson.Parse(queryB.ToJson(jsonWriterSettings)) as MyJson.JsonNode_Object; return(block); } }
public static void handleTxItem(int blockindex, DateTime blockTime, MyJson.JsonNode_Object txItem) { var vout_tx = txItem["vout"].AsList(); if (vout_tx.Count > 0) { foreach (MyJson.JsonNode_Object voutitem in vout_tx) { var assetID = voutitem["asset"].AsString(); if (!Mongo.isDataExist(Collection, "id", assetID)) { lock (lockObj) { if (!Mongo.isDataExist(Collection, "id", assetID)) { var resasset = Rpc.getassetstate(Config.NeoCliJsonRPCUrl, assetID.Replace("0x", "")).Result; if (resasset != null) { Collection.InsertOne(BsonDocument.Parse(resasset.ToString())); } } } } } } }
async static Task AsyncLoop() { while (true && beActive) { try { int blockHeight = await Rpc.getblockcount(Config.NeoCliJsonRPCUrl) - 1; StateInfo.remoteBlockHeight = blockHeight; if (blockHeight >= 0 && StateInfo.HandlingBlockCount < blockHeight) { SyncBlockToHeight(StateInfo.HandlingBlockCount + 1, blockHeight); } else { Thread.Sleep(100); } } catch (Exception e) { Console.WriteLine("async block:" + e.Message); beActive = false; Thread.Sleep(5000); } } }
public static string getNEP5ContractInfo(string apiUrl, string scripthash, string method) { string result = string.Empty; try { //JObject postData = new JObject(); //postData.Add("jsonrpc", "2.0"); //postData.Add("method", "callcontractfortest"); //postData.Add("params", JArray.Parse("['" + scripthash + "',['(str)" + method + "',[]]]")); //postData.Add("id", 1); //string postDataStr = Newtonsoft.Json.JsonConvert.SerializeObject(postData); ////json格式post //string resNotify = chh.Post(apiUrl, postDataStr, Encoding.UTF8,1); var resNotify = Rpc.invokescript(apiUrl, scripthash, method).Result; string valueHex = resNotify.AsDict()["stack"].AsList()[0].AsDict()["value"].AsString(); //string valueHex = (string)JObject.Parse(resNotify)["result"][0]["stack"][0]["value"]; result = valueHex; } catch (Exception ex) { Console.WriteLine("fail to get nep5 contract info."); Log.WriteLog("fail to get nep5 contract info."); } Thread.Sleep(50);//防止过度调用接口导致cli卡死 return(result); }
public static void handle(MyJson.JsonNode_Object blockData) { int blockindex = blockData["index"].AsInt(); var blockTx = blockData["tx"].AsList(); var blockTimeTS = blockData["time"].AsInt(); DateTime blockTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local).AddSeconds(blockTimeTS); foreach (MyJson.JsonNode_Object txItem in blockTx) { if (txItem["type"].AsString() == "InvocationTransaction") { string txid = txItem["txid"].AsString(); MyJson.JsonNode_Object resNotify; var quaryArr = Mongo.Find(Collection, "txid", txid); if (quaryArr.Count == 0) { resNotify = Rpc.getapplicationlog(Config.NeoCliJsonRPCUrl, txid).Result; if (resNotify != null) { Collection.InsertOne(BsonDocument.Parse(resNotify.ToString())); } } else { resNotify = MyJson.Parse(quaryArr[0].ToJson()) as MyJson.JsonNode_Object; } //todo handleNep5 handleNep5.handle(blockindex, blockTime, txid, resNotify); } } }
public static void handle(string txid) { var res = Rpc.getfullloginfo(Config.NeoCliJsonRPCUrl, txid).Result; if (res != null) { MyJson.JsonNode_Object logItem = new MyJson.JsonNode_Object(); logItem.SetDictValue("txid", txid); logItem.SetDictValue("fulllog7z", res.ToString()); Collection.InsertOne(BsonDocument.Parse(logItem.ToString())); } }
public static void handle(string assetID) { //var findBsonNEP5AssetBson = BsonDocument.Parse("{id:'" + assetID + "'}"); //var queryNEP5AssetBson = Collection.Find(findBsonNEP5AssetBson).ToList(); var queryNEP5AssetBson = Mongo.Find(Collection, "id", assetID); if (queryNEP5AssetBson.Count == 0) { var resasset = Rpc.getassetstate(Config.NeoCliJsonRPCUrl, assetID).Result; if (resasset.AsString() != string.Empty) { Collection.InsertOne(BsonDocument.Parse(resasset.ToString())); } } }
public static void handleTxItem(int blockindex, DateTime blockTime, MyJson.JsonNode_Object txItem) { if (txItem["type"].AsString() == "InvocationTransaction") { string txid = txItem["txid"].AsString(); var quaryArr = Mongo.Find(Collection, "txid", txid); MyJson.JsonNode_Object targetNotify; if (quaryArr.Count == 0) { targetNotify = Rpc.getapplicationlog(Config.NeoCliJsonRPCUrl, txid).Result; if (targetNotify != null) { Collection.InsertOne(BsonDocument.Parse(targetNotify.ToString())); } } else { quaryArr[0].Remove("_id"); targetNotify = MyJson.Parse(quaryArr[0].ToJson()) as MyJson.JsonNode_Object; } //todo handleNep5 if (targetNotify != null) { var executionItem = targetNotify["executions"].AsList()[0].AsDict(); var besucced = executionItem["vmstate"].AsString(); if (besucced != "FAULT, BREAK") { var ntfArr = executionItem["notifications"].AsList(); if (ntfArr.Count > 0) { for (int i = 0; i < ntfArr.Count; i++) { var ntfItem = ntfArr[i] as MyJson.JsonNode_Object; if (NEP5.beTransfer(ntfItem) && assetCheck.checkNotifyAsset(ntfItem)) { handleNEP5Asset.handle(ntfItem); handleNEP5Transfer.handle(blockindex, blockTime, txid, i, ntfItem); } } } } } } }