public bool InitDataTable(string name) { DataTableName = name; if (ChainHash != null) { DataTableName += "_" + ChainHash.ToArray().Reverse().ToHexString(); } if (!IsTableExisted(DataTableName)) { return(CreateTable(DataTableName)); } return(true); }
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 }); }
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); } } } }
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))); } } } }
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())); //} }
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; } }
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; } }
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); } } } } } }
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 }
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()); }
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()); }
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()); }