コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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()));
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
                }
            }
        }
コード例 #6
0
        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()));
            }
        }
コード例 #7
0
        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()));
                }
            }
        }
コード例 #8
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }