Esempio n. 1
0
        public bool InitDataTable(string name)
        {
            DataTableName = name;

            if (ChainHash != null)
            {
                DataTableName += "_" + ChainHash.ToArray().Reverse().ToHexString();
            }

            if (!IsTableExisted(DataTableName))
            {
                return(CreateTable(DataTableName));
            }
            return(true);
        }
Esempio n. 2
0
        public void ChangeSeedList(string[] seedList)
        {
            // 只能变更应用链的种子节点
            if (ChainHash.Equals(UInt160.Zero))
            {
                throw new InvalidOperationException();
            }

            if (seedList.Length < 1)
            {
                throw new ArgumentException();
            }

            SeedList = seedList;

            // 通知根链更新应用链的种子节点
            ZoroSystem.Root.Blockchain.Tell(new Blockchain.ChangeAppChainSeedList {
                ChainHash = ChainHash, SeedList = seedList
            });
        }
Esempio n. 3
0
        public void SaveRecentPeers()
        {
            List <IPEndPoint> seedlist = new List <IPEndPoint>();

            foreach (string hostAndPort in SeedList)
            {
                try
                {
                    string[]   p    = hostAndPort.Split(':');
                    IPEndPoint seed = Zoro.Helper.GetIPEndpointFromHostPort(p[0], int.Parse(p[1]));
                    seedlist.Add(seed);
                }
                catch (Exception)
                {
                    continue;
                }
            }

            IPEndPoint[] peers = ConnectedPeers.Values.Where(p => !seedlist.Contains(p)).ToArray();
            if (peers.Length == 0)
            {
                return;
            }

            string path = string.Format(RecentPeersFile, ChainHash.ToString());

            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                using (BinaryWriter writer = new BinaryWriter(fs, Encoding.ASCII, true))
                {
                    writer.Write(peers.Length);
                    foreach (IPEndPoint endpoint in peers)
                    {
                        writer.Write(endpoint.Address.MapToIPv4().GetAddressBytes());
                        writer.Write((ushort)endpoint.Port);
                    }
                }
            }
        }
Esempio n. 4
0
        private void LoadRecentPeers()
        {
            string path = string.Format(RecentPeersFile, ChainHash.ToString());

            if (!File.Exists(path))
            {
                return;
            }

            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                UnconnectedPeers.Clear();
                using (BinaryReader reader = new BinaryReader(fs, Encoding.ASCII, true))
                {
                    int count = reader.ReadInt32();
                    for (int i = 0; i < count; i++)
                    {
                        IPAddress address = new IPAddress(reader.ReadBytes(4));
                        int       port    = reader.ReadUInt16();
                        ImmutableInterlocked.Update(ref UnconnectedPeers, p => p.Add(new IPEndPoint(address.MapToIPv6(), port)));
                    }
                }
            }
        }
Esempio n. 5
0
        public void Save(MySqlConnection conn, JObject jObject, uint blockHeight, uint blockTime)
        {
            List <string> slist = new List <string>();

            slist.Add(SpiderHelper.getString(jObject["txid"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["size"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["type"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["version"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["attributes"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["sys_fee"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["blockindex"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["gas_limit"] == null?"": jObject["gas_limit"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["gas_price"] == null ? "" : jObject["gas_price"].ToString()));
            slist.Add(UInt160.Parse(StringRemoveZoro(SpiderHelper.getString(jObject["account"].ToString())).HexToBytes().Reverse().ToHexString()).ToAddress());

            if (jObject["script"] != null)
            {
                txScriptMethod.Save(conn, SpiderHelper.getString(jObject["script"].ToString()), blockHeight, SpiderHelper.getString(jObject["txid"].ToString()));
            }

            if (ChainSpider.checkHeight == int.Parse(blockHeight.ToString()))
            {
                Dictionary <string, string> where = new Dictionary <string, string>();
                where.Add("txid", SpiderHelper.getString(jObject["txid"].ToString()));
                where.Add("blockindex", blockHeight.ToString());
                MysqlConn.Delete(conn, DataTableName, where);
            }
            {
                MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);
            }

            LogConfig.Log($"SaveTransaction {ChainHash} {blockHeight}", LogConfig.LogLevel.Info, ChainHash.ToString());

            utxo.Save(conn, jObject, blockHeight);

            //if (SpiderHelper.getString(jObject["type"].ToString()) == "InvocationTransaction")
            //{
            //    notify.Save(conn, jObject, blockHeight, blockTime, SpiderHelper.getString(jObject["script"].ToString()));
            //}
        }
Esempio n. 6
0
        public void getNativeNEP5Asset(MySqlConnection conn, UInt160 Contract)
        {
            try
            {
                ScriptBuilder sb = new ScriptBuilder();

                sb.EmitSysCall("Zoro.NativeNEP5.Call", "TotalSupply", Contract);
                sb.EmitSysCall("Zoro.NativeNEP5.Call", "Name", Contract);
                sb.EmitSysCall("Zoro.NativeNEP5.Call", "Symbol", Contract);
                sb.EmitSysCall("Zoro.NativeNEP5.Call", "Decimals", Contract);

                IO.Json.JObject jObject;

                Blockchain        blockchain = ZoroChainSystem.Singleton.GetBlockchain(ChainHash);;
                ApplicationEngine engine     = ApplicationEngine.Run(sb.ToArray(), blockchain, testMode: true);
                if (engine.State.HasFlag(VMState.FAULT))
                {
                    return;
                }

                JArray jStack = new JArray(engine.ResultStack.Select(p => p.ToParameter().ToJson()));

                string totalSupply = jStack[0]["type"].AsString() == "ByteArray" ? new BigInteger(SpiderHelper.HexString2Bytes(jStack[0]["value"].AsString())).ToString() : jStack[0]["value"].AsString();
                string name        = jStack[1]["type"].AsString() == "ByteArray" ? Encoding.UTF8.GetString(SpiderHelper.HexString2Bytes(jStack[1]["value"].AsString())) : jStack[1]["value"].AsString();
                string symbol      = jStack[2]["type"].AsString() == "ByteArray" ? Encoding.UTF8.GetString(SpiderHelper.HexString2Bytes(jStack[2]["value"].AsString())) : jStack[2]["value"].AsString();
                string decimals    = jStack[3]["type"].AsString() == "ByteArray" ? BigInteger.Parse(jStack[3]["value"].AsString()).ToString() : jStack[3]["value"].AsString();

                //BCT没有限制,可以随意增发
                if (symbol == "BCT")
                {
                    totalSupply = "0";
                }

                List <string> slist = new List <string>();
                slist.Add(Contract.ToString());
                slist.Add(totalSupply);
                slist.Add(name);
                slist.Add(symbol);
                slist.Add(decimals);


                //这里有个bug,我们的bcp会因为转账而增长
                {
                    MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);
                }

                LogConfig.Log($"SaveNEP5Asset {ChainHash} {Contract}", LogConfig.LogLevel.Info, ChainHash.ToString());
            }
            catch (Exception e)
            {
                LogConfig.Log($"error occured when call invokescript, chainhash:{ChainHash}, nep5contract:{Contract.ToString()}, reason:{e.Message}", LogConfig.LogLevel.Error);
                throw e;
            }
        }
Esempio n. 7
0
        public void getNEP5Asset(MySqlConnection conn, UInt160 Contract)
        {
            try
            {
                ScriptBuilder sb = new ScriptBuilder();

                sb.EmitAppCall(Contract, "totalSupply");
                sb.EmitAppCall(Contract, "name");
                sb.EmitAppCall(Contract, "symbol");
                sb.EmitAppCall(Contract, "decimals");

                Blockchain        blockchain = ZoroChainSystem.Singleton.GetBlockchain(ChainHash);;
                ApplicationEngine engine     = ApplicationEngine.Run(sb.ToArray(), blockchain, testMode: true);
                if (engine.State.HasFlag(VMState.FAULT))
                {
                    return;
                }

                JArray jStack = new JArray(engine.ResultStack.Select(p => p.ToParameter().ToJson()));

                string totalSupply = new BigInteger(SpiderHelper.HexString2Bytes(jStack[0]["value"].ToString())).ToString();
                string name        = Encoding.UTF8.GetString(SpiderHelper.HexString2Bytes(jStack[1]["value"].ToString()));
                string symbol      = Encoding.UTF8.GetString(SpiderHelper.HexString2Bytes(jStack[2]["value"].ToString()));
                string decimals    = BigInteger.Parse(jStack[3]["value"].ToString()).ToString();

                List <string> slist = new List <string>();
                slist.Add(Contract.ToString());
                slist.Add(totalSupply);
                slist.Add(name);
                slist.Add(symbol);
                slist.Add(decimals);

                //Dictionary<string, string> dictionary = new Dictionary<string, string>();
                //dictionary.Add("assetid", Contract.ToString());
                //bool exist = MysqlConn.CheckExist(DataTableName, dictionary);
                //if (!exist)
                //这里有个bug,我们的bcp会因为转账而增长
                {
                    MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);
                }

                LogConfig.Log($"SaveNEP5Asset {ChainHash} {Contract}", LogConfig.LogLevel.Info, ChainHash.ToString());
            }
            catch (Exception e)
            {
                LogConfig.Log($"error occured when call invokescript, chainhash:{ChainHash}, nep5contract:{Contract.ToString()}, reason:{e.Message}", LogConfig.LogLevel.Error);
                throw e;
            }
        }
Esempio n. 8
0
        public void Save(MySqlConnection conn, JObject jToken)
        {
            JObject executions = null;

            try
            {
                if (jToken != null)
                {
                    executions = jToken["executions"];
                }
            }
            catch (Exception e)
            {
            }
            //try
            //{
            //    if (!TryGetDB(ChainHash, out DB db)) return;
            //    if (db.IsDisposed) return;
            //    UInt256 hash = UInt256.Parse(SpiderHelper.getString(jToken["txid"].ToString()));
            //    if (!db.TryGet(ReadOptions.Default, hash.ToArray(), out Slice value))
            //        throw new RpcException(-100, "Unknown transaction");
            //    result = JObject.Parse(value.ToString());
            //    if (result != null)
            //    executions = result["executions"];
            //}
            //catch (Exception e)
            //{
            //    LogConfig.Log($"error occured when call getapplicationlog, chain:{ChainHash} height:{blockHeight}, reason:{e.Message}", LogConfig.LogLevel.Error);
            //    //throw e;
            //}

            if (jToken != null && executions != null)
            {
                foreach (var execution in executions as JArray)
                {
                    List <string> slist = new List <string>();
                    slist.Add(SpiderHelper.getString(jToken["txid"].ToString()));
                    slist.Add(SpiderHelper.getString(execution["vmstate"].ToString()));
                    slist.Add(SpiderHelper.getString(execution["gas_consumed"].ToString()));
                    slist.Add(SpiderHelper.getString(execution["stack"].ToString()));
                    slist.Add(SpiderHelper.getString(execution["notifications"].ToString().Replace(@"[/n/r]", "")));

                    Dictionary <string, string> where = new Dictionary <string, string>();
                    where.Add("txid", SpiderHelper.getString(jToken["txid"].ToString()));
                    MysqlConn.Delete(conn, DataTableName, where);

                    MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);

                    LogConfig.Log($"SaveNotify {ChainHash} {jToken["txid"]}", LogConfig.LogLevel.Info, ChainHash.ToString());

                    if (execution["vmstate"].ToString().Contains("FAULT"))
                    {
                        return;
                    }

                    JObject notifications = execution["notifications"];

                    foreach (JObject notify in notifications as JArray)
                    {
                        JArray values = notify["state"]["value"] as JArray;

                        if (values[0]["type"].ToString() == "ByteArray")
                        {
                            string transfer = Encoding.UTF8.GetString(SpiderHelper.HexString2Bytes(SpiderHelper.getString(values[0]["value"].ToString())));
                            string contract = SpiderHelper.getString(notify["contract"].ToString());

                            if (transfer == "transfer")
                            {
                                JObject nep5 = new JObject();
                                nep5["assetid"] = contract;
                                nep5Asset.Save(conn, nep5);

                                //存储Nep5Transfer内容
                                JObject tx = new JObject();
                                tx["txid"]  = SpiderHelper.getString(jToken["txid"].ToString());
                                tx["n"]     = 0;
                                tx["asset"] = contract;
                                if (SpiderHelper.getString(values[1]["value"].ToString()) == "")
                                {
                                    tx["from"] = "";
                                }
                                else
                                {
                                    tx["from"] = UInt160.Parse(SpiderHelper.getString(values[1]["value"].ToString())).ToAddress();
                                }

                                tx["to"] = UInt160.Parse(SpiderHelper.getString(values[2]["value"].ToString())).ToAddress();
                                if (SpiderHelper.getString(values[3]["type"].ToString()) == "ByteArray")
                                {
                                    tx["value"] = new BigInteger(SpiderHelper.HexString2Bytes(SpiderHelper.getString(values[3]["value"].ToString()))).ToString();
                                }
                                else
                                {
                                    tx["value"] = BigInteger.Parse(SpiderHelper.getString(values[3]["value"].ToString()), NumberStyles.AllowHexSpecifier).ToString();
                                }
                                JObject j = new JObject();
                                j["address"] = SpiderHelper.getString(tx["to"].ToString());
                                j["txid"]    = SpiderHelper.getString(tx["txid"].ToString());
                                address.Save(conn, j);
                                addressAsset.Save(conn, SpiderHelper.getString(tx["to"].ToString()), contract, "");
                                address_tx.Save(conn, j);
                                nep5Transfer.Save(conn, tx);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 9
0
        public static void Run2Lab()
        {
            Random    rnd = new Random();
            Stopwatch sw  = new Stopwatch();

            #region Task_1
#if bin
            #region BinarySearch
            Console.WriteLine("Введите размерность массива для бинарного поиска или 0 для перехода к следующему заданию.");
            var size = int.Parse(Console.ReadLine());
            while (0 != size)
            {
                Console.WriteLine("\nВведите искомый элемент.");
                var key_bin = int.Parse(Console.ReadLine());
                var mas     = new int[size];
                for (int i = 0; i < size; i++)
                {
                    mas[i] = rnd.Next(-1000, 1001);
                }
                Array.Sort(mas);
                sw.Start();
                var start  = DateTime.Now;
                var binary = BinarySearch(mas, key_bin);
                var end    = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЭлемент {key_bin} присутствует в массиве - {binary}.");
                Console.WriteLine($"Затраченное время на выполнение: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                sw.Start();
                start = DateTime.Now;
                Array.BinarySearch(mas, key_bin);
                end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЗатраченное время на выполнение встроенным алгоритмом класса Array: {start - end}.");
                sw.Reset();
                Console.WriteLine("Введите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size = int.Parse(Console.ReadLine());
            }
            #endregion
#endif
#if tree
            #region BinaryTree
            Console.WriteLine("Введите размерность дерева или 0 для перехода к следующему заданию.");
            var size_tree = int.Parse(Console.ReadLine());
            while (size_tree != 0)
            {
                Console.WriteLine("Введите искомый элемент.");
                var key_tree = int.Parse(Console.ReadLine());
                var set      = new HashSet <int>();
                for (int i = 0; i < size_tree; i++)
                {
                    set.Add(rnd.Next(-1000, 1001));
                }
                sw.Start();
                var start        = DateTime.Now;
                var contains_set = set.Contains(key_tree);
                var end          = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЭлемент {key_tree} присутствует в множестве - {contains_set}.");
                Console.WriteLine($"Затраченное время на выполнение встроенным методом класса HashSet: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                int[] arr = new int[set.Count];
                //int[] arr = { 5,8,11,3,-2,4,10,17};
                set.CopyTo(arr);
                BinaryTree tree = new BinaryTree(arr);
                sw.Start();
                start = DateTime.Now;
                var contains_tree = tree.HasValue(key_tree);
                end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЭлемент {key_tree} присутствует в дереве - {contains_tree}.");
                Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите элемент для добавления.");
                var adding = int.Parse(Console.ReadLine());
                tree.Add(adding);
                start         = DateTime.Now;
                contains_tree = tree.HasValue(adding);
                end           = DateTime.Now;
                Console.WriteLine($"\nЭлемент {adding} присутствует в дереве после добавления - {contains_tree}.");
                Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}.");
                Console.WriteLine("\nВведите элемент для удаления.");
                int deleting = int.Parse(Console.ReadLine());
                tree.Delete(deleting);
                start         = DateTime.Now;
                contains_tree = tree.HasValue(deleting);
                end           = DateTime.Now;
                Console.WriteLine($"\nЭлемент {deleting} присутствует в дереве после удаления - {contains_tree}");
                Console.WriteLine($"Затраченное время на выполнение методом класса BinaryTree: {/*sw.Elapsed*/start - end}");

                /*Console.WriteLine(set.Count);
                 * Console.WriteLine(tree.Count);*/
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_tree = int.Parse(Console.ReadLine());
            }
            #endregion
#endif
#if fib
            #region Fibonacchi
            Console.WriteLine("Введите размерность массива для поиска Фибоначчи или 0 для перехода к следующему заданию.");
            var size_fib = int.Parse(Console.ReadLine());
            while (size_fib != 0)
            {
                Console.WriteLine("Введите искомый элемент.");
                var key_fib = int.Parse(Console.ReadLine());
                var set     = new HashSet <int>(size_fib);
                for (int i = 0; i < size_fib; i++)
                {
                    set.Add(rnd.Next(-1000, 1001));
                }
                var arr = new int[set.Count];
                //int[] arr = { 1, 2, 6, 14, 18, 40, 55, 91, 114, 225, 335, 556, 667, 889, 668, 44458, 88889595, 989849841, 989849843 };
                set.CopyTo(arr);
                Array.Sort(arr);
                sw.Start();
                var start        = DateTime.Now;
                var contains_fib = Fib(arr, key_fib);
                var end          = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЭлемент {key_fib} присутствует в массиве - {contains_fib}.");
                Console.WriteLine($"Затраченное время на выполнение поиском Фиббоначи: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_fib = int.Parse(Console.ReadLine());
            }
            #endregion
#endif
#if int
            #region Interpolation
            Console.WriteLine("Введите размерность массива для интерполяционного поиска или 0 для перехода к следующему заданию.");
            var size_interpol = int.Parse(Console.ReadLine());
            while (size_interpol != 0)
            {
                Console.WriteLine("Введите искомый элемент.");
                var key_interpol = int.Parse(Console.ReadLine());
                var set          = new HashSet <int>(size_interpol);
                for (int i = 0; i < size_interpol; i++)
                {
                    set.Add(rnd.Next(-1000, 1001));
                }
                //var arr = new int[set.Count];
                //set.CopyTo(arr);
                int[] arr = { 1, 2, 6, 14, 18, 40, 55, 91, 114, 225, 335, 556, 667, 889, 668, 44458, 88889595, 9898491, 9898443 };
                Array.Sort(arr);
                sw.Start();
                var start        = DateTime.Now;
                var contains_int = Interpolation(arr, key_interpol);
                var end          = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"\nЭлемент {key_interpol} присутствует в массиве - {contains_int}.");
                Console.WriteLine($"Затраченное время на выполнение интерполяционным поиском: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_interpol = int.Parse(Console.ReadLine());
            }
            #endregion
#endif
            #endregion
            #region Task 2
#if hash
            #region Simple
            Console.WriteLine("Введите размерность массива для генерации массива для простого хеширования или 0 для перехода к следующему заданию.");
            var size_simp_hash = long.Parse(Console.ReadLine());
            while (size_simp_hash != 0)
            {
                var set = new HashSet <int>((int)size_simp_hash);
                while (set.Count != size_simp_hash)
                {
                    set.Add(rnd.Next(-(int)size_simp_hash, (int)size_simp_hash));
                }
                var arr = new int[set.Count];
                set.CopyTo(arr);
                Console.WriteLine($"Введите искомый элемент");
                int item = int.Parse(Console.ReadLine());
                sw.Start();
                var        start = DateTime.Now;
                SimpleHash hash  = new SimpleHash(arr);
                var        end   = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                sw.Start();
                start = DateTime.Now;
                int index = hash.IndexOf(item);
                end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Индекс искомого элемента в хеш-таблице: {index}");
                Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_simp_hash = long.Parse(Console.ReadLine());
            }
            #endregion
            #region Pseudo
            Console.WriteLine("Введите размерность массива для генерации массива для хеширования на основе псеводослучайных чисел или 0 для перехода к следующему заданию.");
            var size_pseudo_hash = long.Parse(Console.ReadLine());
            while (size_pseudo_hash != 0)
            {
                var set = new HashSet <int>((int)size_pseudo_hash);
                while (set.Count != size_pseudo_hash)
                {
                    set.Add(rnd.Next(-(int)size_pseudo_hash, (int)size_pseudo_hash));
                }
                var arr = new int[set.Count];
                set.CopyTo(arr);
                Console.WriteLine($"Введите искомый элемент");
                int item = int.Parse(Console.ReadLine());
                sw.Start();
                var        start = DateTime.Now;
                PseudoHash hash  = new PseudoHash(arr);
                var        end   = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                sw.Start();
                start = DateTime.Now;
                int index = hash.IndexOf(item);
                end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Индекс искомого элемента в хеш-таблице: {index}");
                Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_simp_hash = long.Parse(Console.ReadLine());
            }
            #endregion
            #region Chains
            Console.WriteLine("Введите размерность массива для генерации массива для хеширования цепочками или 0 для перехода к следующему заданию.");
            var size_chains_hash = long.Parse(Console.ReadLine());
            while (size_chains_hash != 0)
            {
                var set = new HashSet <int>((int)size_chains_hash);
                while (set.Count != size_chains_hash)
                {
                    set.Add(rnd.Next(-(int)size_chains_hash, (int)size_chains_hash));
                }
                var arr = new int[set.Count];
                set.CopyTo(arr);
                Console.WriteLine($"Введите искомый элемент");
                int item = int.Parse(Console.ReadLine());
                sw.Start();
                var       start = DateTime.Now;
                ChainHash hash  = new ChainHash(arr);
                var       end   = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Затраченное время на хеширование: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                sw.Start();
                start = DateTime.Now;
                bool index = hash.HasValue(item);
                end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Искомый элемент присутствует в хеш-таблице: {index}");
                Console.WriteLine($"Затраченное время на поиск: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите размерность массива для повторной генерации или 0 для перехода к следующему заданию.");
                size_simp_hash = long.Parse(Console.ReadLine());
            }
            #endregion
#endif
            #endregion
            #region Task 3
#if chess
            #region Chess
            Console.WriteLine("Введите значение от 1 до 24 для вывода результата поиска или 0 для выхода.");
            var key = int.Parse(Console.ReadLine());
            while (key != 0)
            {
                sw.Start();
                Console.WriteLine($"\nВарианты расстановки ферзей:\n");
                var start = DateTime.Now;
                Chess(key);
                var end = DateTime.Now;
                sw.Stop();
                Console.WriteLine($"Затраченное время на выполнение: {/*sw.Elapsed*/start - end}.");
                sw.Reset();
                Console.WriteLine("\nВведите любое значение кроме 0 для вывода результата поиска или 0 для выхода.");
                key = int.Parse(Console.ReadLine());
            }
            #endregion
#endif
            #endregion
        }
Esempio n. 10
0
        public void Save(MySqlConnection conn, JObject jObject, string path)
        {
            JObject result = new JObject();

            result["version"]    = jObject["version"];
            result["id"]         = jObject["txid"];
            result["type"]       = jObject["asset"]["type"];
            result["name"]       = jObject["asset"]["name"];
            result["amount"]     = jObject["asset"]["amount"];
            result["available"]  = 1;
            result["precision"]  = jObject["asset"]["precision"];
            result["owner"]      = jObject["asset"]["owner"];
            result["admin"]      = jObject["asset"]["admin"];
            result["issuer"]     = 1;
            result["expiration"] = 0;
            result["frozen"]     = 0;

            List <string> slist = new List <string>();

            slist.Add(SpiderHelper.getString(result["version"].ToString()));
            slist.Add(SpiderHelper.getString(result["id"].ToString()));
            slist.Add(SpiderHelper.getString(result["type"].ToString()));
            slist.Add(SpiderHelper.getString(result["name"].ToString()));
            slist.Add(SpiderHelper.getString(result["amount"].ToString()));
            slist.Add(SpiderHelper.getString(result["available"].ToString()));
            slist.Add(SpiderHelper.getString(result["precision"].ToString()));
            slist.Add(SpiderHelper.getString(result["owner"].ToString()));
            slist.Add(SpiderHelper.getString(result["admin"].ToString()));
            slist.Add(SpiderHelper.getString(result["issuer"].ToString()));
            slist.Add(SpiderHelper.getString(result["expiration"].ToString()));
            slist.Add(SpiderHelper.getString(result["frozen"].ToString()));

            {
                MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);
            }

            LogConfig.Log($"SaveAsset {ChainHash} {result["name"]}", LogConfig.LogLevel.Info, ChainHash.ToString());
        }
Esempio n. 11
0
        public void Save(MySqlConnection conn, JObject jObject, uint height)
        {
            List <string> slist = new List <string>();

            slist.Add(SpiderHelper.getString(jObject["hash"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["size"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["version"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["time"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["index"].ToString()));
            slist.Add(SpiderHelper.getString(jObject["script"].ToString()));
            slist.Add((jObject["tx"] as JArray).Count.ToString());

            if (ChainSpider.checkHeight == int.Parse(SpiderHelper.getString(jObject["index"].ToString())))
            {
                Dictionary <string, string> where = new Dictionary <string, string>();
                where.Add("indexx", SpiderHelper.getString(jObject["index"].ToString()));
                MysqlConn.Delete(conn, DataTableName, where);
            }
            MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);

            uint blockTime = uint.Parse(SpiderHelper.getString(jObject["time"].ToString()));

            int numTx = 0;

            foreach (var tx in (jObject["tx"] as JArray))
            {
                trans.Save(conn, tx, height, blockTime);
                numTx++;
            }

            LogConfig.Log($"BlockSaved {ChainHash} height:{height} tx:{numTx}", LogConfig.LogLevel.Warning, ChainHash.ToString());
        }
Esempio n. 12
0
        public void Save(MySqlConnection conn, JObject jToken)
        {
            List <string> slist = new List <string>();

            slist.Add(SpiderHelper.getString(jToken["blockindex"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["txid"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["n"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["asset"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["from"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["to"].ToString()));
            slist.Add(SpiderHelper.getString(jToken["value"].ToString()));

            if (ChainSpider.checkHeight == int.Parse(jToken["blockindex"].ToString()))
            {
                Dictionary <string, string> where = new Dictionary <string, string>();
                where.Add("txid", SpiderHelper.getString(jToken["txid"].ToString()));
                where.Add("blockindex", SpiderHelper.getString(jToken["blockindex"].ToString()));
                MysqlConn.Delete(conn, DataTableName, where);
            }
            {
                MysqlConn.ExecuteDataInsert(conn, DataTableName, slist);
            }

            LogConfig.Log($"SaveNEP5Transfer {ChainHash} {jToken["blockindex"]} {jToken["txid"]}", LogConfig.LogLevel.Info, ChainHash.ToString());
        }