public override JObject BuildRequest(CmdParseResult parsedCmd) { var reqParams = new JObject(); var req = JsonRpcHelpers.CreateRequest(reqParams, "get_block_height", 1); return(req); }
public override JObject BuildRequest(CmdParseResult parsedCmd) { var reqParams = new JObject(); var req = JsonRpcHelpers.CreateRequest(reqParams, "connect_chain", 1); return(req); }
public override JObject BuildRequest(CmdParseResult parsedCmd) { /*var reqParams = new JObject { ["address"] = parsedCmd.Args.ElementAt(0) }; * var req = JsonRpcHelpers.CreateRequest(reqParams, "get_increment", 1);*/ return(null); }
private static CmdParseResult SerialParseProc(IList <byte> buffer, out Int32 parsedHeaderIndex, out Int32 parsingIndex) { parsedHeaderIndex = 0; parsingIndex = 0; CmdParseResult result = CmdParseResult.IncompleteCmd; var index = BytesHelper.IndexOf(buffer, Header); if (buffer.Count > 0) { Logger.Debug("inderx:" + index); for (int i = 0; i < buffer.Count; i++) { Logger.Debug("buffer:" + buffer[i].ToString()); } } if (index >= 0) { parsedHeaderIndex = index; Boolean completeCmd = (buffer.Count - index) >= (Header.Length + 4); //协议数据是完整的 if (completeCmd) { parsingIndex = index + Header.Length + 4; var checkIndex = parsingIndex - 2; var checkValid = buffer[checkIndex] == 0x81 && buffer[checkIndex + 1] == 0x82; Logger.Debug(buffer[checkIndex].ToString() + "@@@" + buffer[checkIndex + 1]); if (checkValid) { result = CmdParseResult.Ok; var msg = "检测到有效的串口数据:{Environment.NewLine}{BitConverter.ToString(buffer.ToArray())}"; Logger.Debug(msg); var state = GetDeviceState(buffer, checkIndex - 2); OnDeviceStateChanged(state); } else { result = CmdParseResult.Fail; var msg = "检测到无效的串口数据:{Environment.NewLine}{BitConverter.ToString(buffer.ToArray())}"; Logger.Debug(msg); } } else { Logger.Debug("协议是不完整的"); } } return(result); }
public void StartRepl() { _screenManager.PrintHeader(); _screenManager.PrintUsage(); _screenManager.PrintLine(); ReadLine.AutoCompletionHandler = new AutoCompleteWithRegisteredCommand(_commands.Select(c => c.Name).ToList()); while (true) { //string command = _screenManager.GetCommand(); string command = ReadLine.Read("aelf> "); if (string.IsNullOrWhiteSpace(command)) { continue; } ReadLine.AddHistory(command); // stop the repl if "quit", "Quit", "QuiT", ... is encountered if (command.Equals(ExitReplCommand, StringComparison.OrdinalIgnoreCase)) { Stop(); break; } if (command.StartsWith("sub events")) { string[] splitOnSpaces = command.Split(' '); if (splitOnSpaces.Length == 3) { EventMonitor mon = new EventMonitor(_port, splitOnSpaces[2]); mon.Start().GetResult(); Console.ReadKey(); } else { Console.WriteLine("Sub events - incorrect arguments"); } } CmdParseResult parsedCmd = _cmdParser.Parse(command); CliCommandDefinition def = GetCommandDefinition(parsedCmd.Command); if (def == null) { _screenManager.PrintCommandNotFound(command); } else { ProcessCommand(parsedCmd, def); } } }
public override JObject BuildRequest(CmdParseResult parsedCmd) { JObject reqParams = new JObject { }; var req = JsonRpcHelpers.CreateRequest(reqParams, "get_commands", 0); return(req); }
public override string Validate(CmdParseResult parsedCmd) { if (parsedCmd.Args == null || parsedCmd.Args.Count != 2) { return("Invalid number of arguments."); } return(null); }
public override JObject BuildRequest(CmdParseResult parsedCmd) { var reqParams = new JObject { ["address"] = parsedCmd.Args.ElementAt(0) }; var req = JsonRpcHelpers.CreateRequest(reqParams, "call", 1); return(req); }
public override string Validate(CmdParseResult parsedCmd) { if (parsedCmd.Args == null || parsedCmd.Args.Count != 3) { return("Wrong arguments"); } return(null); }
public override string Validate(CmdParseResult parsedCommand) { if (parsedCommand == null) { return("no command"); } return(null); }
private static string GetBlkHash(string rpcAddress, string height) { var reqhttp = new HttpRequestor(rpcAddress); var cmdargs = new CmdParseResult { Args = new List <string>() { height } }; var resp = reqhttp.DoRequest(new GetBlockInfoCmd().BuildRequest(cmdargs).ToString()); var jObj = JObject.Parse(resp); return(jObj["result"]["result"]["Blockhash"].ToString()); }
public override string Validate(CmdParseResult parsedCmd) { if (parsedCmd == null) { return("no command\n" + GetUsage()); } if (parsedCmd.Args == null || parsedCmd.Args.Count <= 0) { return("not enough arguments\n" + GetUsage()); } return(null); }
public override JObject BuildRequest(CmdParseResult parsedCmd) { var reqParams = new JObject { ["block_height"] = parsedCmd.Args.ElementAt(0) }; if (parsedCmd.Args.Count > 1) { var arg1 = parsedCmd.Args.ElementAt(1); reqParams["include_txs"] = arg1 == "true" || arg1 == "1"; } var req = JsonRpcHelpers.CreateRequest(reqParams, "get_block_info", 1); return(req); }
public void ProcessCommand(CmdParseResult parsedCmd) { string validationError = Validate(parsedCmd); if (validationError != null) { _screenManager.PrintError(validationError); return; } string subCommand = parsedCmd.Args.ElementAt(0); if (subCommand.Equals(NewCmdName, StringComparison.OrdinalIgnoreCase)) { if (parsedCmd.Args.Count == 2) { string password = parsedCmd.Args.ElementAt(1); CreateNewAccount(password); } else { CreateNewAccount(); } } else if (subCommand.Equals(ListAccountsCmdName, StringComparison.OrdinalIgnoreCase)) { ListAccounts(); } else if (subCommand.Equals(UnlockAccountCmdName, StringComparison.OrdinalIgnoreCase)) { if (parsedCmd.Args.Count == 2) { UnlockAccount(parsedCmd.Args.ElementAt(1)); } else if (parsedCmd.Args.Count == 3) { UnlockAccount(parsedCmd.Args.ElementAt(1), parsedCmd.Args.ElementAt(2)); } else if (parsedCmd.Args.Count == 4) { UnlockAccount(parsedCmd.Args.ElementAt(1), parsedCmd.Args.ElementAt(2), false); } else { _screenManager.PrintError("wrong arguments."); } } }
private string Validate(CmdParseResult parsedCmd) { if (parsedCmd.Args.Count == 0) { return(CliCommandDefinition.InvalidParamsError); } if (parsedCmd.Args.ElementAt(0).Equals(GenCmd, StringComparison.OrdinalIgnoreCase)) { if (parsedCmd.Args.Count < 3) { return(CliCommandDefinition.InvalidParamsError); } } return(null); }
public void ProcCmd(CmdParseResult parsedCmd) { string validationError = Validate(parsedCmd); if (validationError != null) { _screenManager.PrintError(validationError); return; } string subCommand = parsedCmd.Args.ElementAt(0); if (subCommand.Equals(GenCmd, StringComparison.OrdinalIgnoreCase)) { GenerateCertificate(parsedCmd.Args.ElementAt(1), parsedCmd.Args.ElementAt(2)); } }
public override JObject BuildRequest(CmdParseResult parsedCmd) { JObject reqParams; if (parsedCmd.Args == null || parsedCmd.Args.Count <= 0) { reqParams = new JObject { ["numPeers"] = null } } ; else { reqParams = new JObject { ["numPeers"] = parsedCmd.Args.ElementAt(0) } }; var req = JsonRpcHelpers.CreateRequest(reqParams, "get_peers", 1); return(req); }
private string Validate(CmdParseResult parsedCmd) { if (parsedCmd.Args.Count == 0) { return(CliCommandDefinition.InvalidParamsError); } if (parsedCmd.Args.ElementAt(0).Equals(UnlockAccountCmdName, StringComparison.OrdinalIgnoreCase)) { if (parsedCmd.Args.Count < 2) { return(CliCommandDefinition.InvalidParamsError); } } if (!_subCommands.Contains(parsedCmd.Args.ElementAt(0))) { return(CliCommandDefinition.InvalidParamsError); } return(null); }
private static CmdParseResult SerialParseProc(IList <byte> buffer, out Int32 parsedHeaderIndex, out Int32 parsingIndex) { parsedHeaderIndex = 0; parsingIndex = 0; var temp = buffer.ToList(); //解析数据 //至少要包含头(1字节)+长度(1字节)+校验(1字节 while (temp.Count >= 10) { int index = temp.IndexOf(Header[0]); if (index > 0 && temp[index] == Header[0] && temp[index + 9] == Header[1]) { if (temp[1] == 0x01) { One = true; } else { One = false; } if (temp[2] == 0x01) { Two = true; } else { Two = false; } if (temp[3] == 0x01) { Three = true; } else { Three = false; } if (temp[4] == 0x01) { Four = true; } else { Four = false; } if (temp[5] == 0x01) { Five = true; } else { Five = false; } if (temp[6] == 0x01) { Six = true; } else { Six = false; } if (temp[7] == 0x01) { Seven = true; } else { Seven = false; } if (temp[8] == 0x01) { Eight = true; } else { Eight = false; } break; } else { temp.RemoveRange(0, temp.IndexOf(Header[0]) + 10); //丢弃一部分数据,重新判断 } } CmdParseResult result = CmdParseResult.IncompleteCmd; return(result); }
public abstract string Validate(CmdParseResult parsedCmd);
public override string Validate(CmdParseResult parsedCmd) { return(null); }
public virtual JObject BuildRequest(CmdParseResult parsedCmd) { return(null); }
private void ProcessCommand(CmdParseResult parsedCmd, CliCommandDefinition def) { string error = def.Validate(parsedCmd); if (!string.IsNullOrEmpty(error)) { _screenManager.PrintError(error); } else { if (def is GetDeserializedResultCmd g) { try { var str = g.Validate(parsedCmd); if (str != null) { _screenManager.PrintError(str); return; } // RPC var t = parsedCmd.Args.ElementAt(0); var data = parsedCmd.Args.ElementAt(1); byte[] sd; try { sd = ByteArrayHelpers.FromHexString(data); } catch (Exception e) { _screenManager.PrintError("Wrong data formant."); return; } object dd; try { dd = Deserializer.Deserialize(t, sd); } catch (Exception e) { _screenManager.PrintError("Invalid data format"); return; } if (dd == null) { _screenManager.PrintError("Not supported type."); return; } _screenManager.PrintLine(dd.ToString()); return; } catch (Exception e) { Console.WriteLine(e); return; } } if (def is LoadContractAbiCmd l) { error = l.Validate(parsedCmd); if (!string.IsNullOrEmpty(error)) { _screenManager.PrintError(error); } try { // RPC HttpRequestor reqhttp = new HttpRequestor(_rpcAddress); if (!parsedCmd.Args.Any()) { if (_genesisAddress == null) { _screenManager.PrintError(ConnectionNeeded); return; } parsedCmd.Args.Add(_genesisAddress); //parsedCmd.Args.Add(Globals.GenesisBasicContract); } var addr = parsedCmd.Args.ElementAt(0); Module m = null; if (!_loadedModules.TryGetValue(addr, out m)) { string resp = reqhttp.DoRequest(def.BuildRequest(parsedCmd).ToString()); if (resp == null) { _screenManager.PrintError(ServerConnError); return; } if (resp.IsEmpty()) { _screenManager.PrintError(NoReplyContentError); return; } JObject jObj = JObject.Parse(resp); var res = JObject.FromObject(jObj["result"]); JToken ss = res["abi"]; byte[] aa = ByteArrayHelpers.FromHexString(ss.ToString()); MemoryStream ms = new MemoryStream(aa); m = Serializer.Deserialize <Module>(ms); _loadedModules.Add(addr, m); } var obj = JObject.FromObject(m); _screenManager.PrintLine(obj.ToString()); } catch (Exception e) { if (e is JsonReaderException) { _screenManager.PrintError(WrongInputFormat); return; } return; } return; } if (def is DeployContractCommand dcc) { if (_genesisAddress == null) { _screenManager.PrintError(NotConnected); return; } try { string err = dcc.Validate(parsedCmd); if (!string.IsNullOrEmpty(err)) { _screenManager.PrintLine(err); return; } //string cat = parsedCmd.Args.ElementAt(0); string filename = parsedCmd.Args.ElementAt(0); // Read sc bytes SmartContractReader screader = new SmartContractReader(); byte[] sc = screader.Read(filename); string hex = sc.ToHex(); var name = GlobalConfig.GenesisBasicContract; Module m = _loadedModules.Values.FirstOrDefault(ld => ld.Name.Equals(name)); if (m == null) { _screenManager.PrintError(AbiNotLoaded); return; } Method meth = m.Methods.FirstOrDefault(mt => mt.Name.Equals(DeploySmartContract)); if (meth == null) { _screenManager.PrintError(MethodNotFound); return; } byte[] serializedParams = meth.SerializeParams(new List <string> { "1", hex }); Transaction t = new Transaction(); t = CreateTransaction(parsedCmd.Args.ElementAt(2), _genesisAddress, DeploySmartContract, serializedParams, TransactionType.ContractTransaction); t = t.AddBlockReference(_rpcAddress); MemoryStream ms = new MemoryStream(); Serializer.Serialize(ms, t); byte[] b = ms.ToArray(); byte[] toSig = SHA256.Create().ComputeHash(b); ECSigner signer = new ECSigner(); ECSignature signature; ECKeyPair kp = _accountManager.GetKeyPair(parsedCmd.Args.ElementAt(2)); if (kp == null) { throw new AccountLockedException(parsedCmd.Args.ElementAt(2)); } signature = signer.Sign(kp, toSig); // Update the signature t.Sig = new Signature { R = signature.R, S = signature.S, P = kp.PublicKey.Q.GetEncoded() }; var resp = SignAndSendTransaction(t); if (resp == null) { _screenManager.PrintError(ServerConnError); return; } if (resp.IsEmpty()) { _screenManager.PrintError(NoReplyContentError); return; } JObject jObj = JObject.Parse(resp); string toPrint = def.GetPrintString(JObject.FromObject(jObj["result"])); _screenManager.PrintLine(toPrint); return; } catch (Exception e) { if (e is ContractLoadedException || e is AccountLockedException) { _screenManager.PrintError(e.Message); return; } if (e is InvalidTransactionException) { _screenManager.PrintError(InvalidTransaction); return; } if (e is JsonReaderException) { _screenManager.PrintError(WrongInputFormat); return; } return; } } // Execute // 2 cases : RPC command, Local command (like account management) if (def.IsLocal) { if (def is SendTransactionCmd c) { try { JObject j = JObject.Parse(parsedCmd.Args.ElementAt(0)); Transaction tr; tr = ConvertFromJson(j); string hex = tr.To.Value.ToHex(); Module m = null; if (!_loadedModules.TryGetValue(hex.Replace("0x", ""), out m)) { if (!_loadedModules.TryGetValue("0x" + hex.Replace("0x", ""), out m)) { _screenManager.PrintError(AbiNotLoaded); return; } } Method method = m.Methods?.FirstOrDefault(mt => mt.Name.Equals(tr.MethodName)); if (method == null) { _screenManager.PrintError(MethodNotFound); return; } JArray p = j["params"] == null ? null : JArray.Parse(j["params"].ToString()); tr.Params = j["params"] == null ? null : method.SerializeParams(p.ToObject <string[]>()); tr.type = TransactionType.ContractTransaction; tr = tr.AddBlockReference(_rpcAddress); _accountManager.SignTransaction(tr); var resp = SignAndSendTransaction(tr); if (resp == null) { _screenManager.PrintError(ServerConnError); return; } if (resp.IsEmpty()) { _screenManager.PrintError(NoReplyContentError); return; } JObject jObj = JObject.Parse(resp); string toPrint = def.GetPrintString(JObject.FromObject(jObj["result"])); _screenManager.PrintLine(toPrint); } catch (Exception e) { if (e is AccountLockedException || e is InvalidTransactionException || e is InvalidInputException) { _screenManager.PrintError(e.Message); } if (e is JsonReaderException || e is FormatException) { _screenManager.PrintError(WrongInputFormat); return; } } } else if (def is CallReadOnlyCmd) { JObject j = JObject.Parse(parsedCmd.Args.ElementAt(0)); Transaction tr; tr = ConvertFromJson(j); string hex = tr.To.Value.ToHex(); Module m = null; if (!_loadedModules.TryGetValue(hex.Replace("0x", ""), out m)) { if (!_loadedModules.TryGetValue("0x" + hex.Replace("0x", ""), out m)) { _screenManager.PrintError(AbiNotLoaded); return; } } Method method = m.Methods?.FirstOrDefault(mt => mt.Name.Equals(tr.MethodName)); if (method == null) { _screenManager.PrintError(MethodNotFound); return; } JArray p = j["params"] == null ? null : JArray.Parse(j["params"].ToString()); tr.Params = j["params"] == null ? null : method.SerializeParams(p.ToObject <string[]>()); var resp = CallTransaction(tr); if (resp == null) { _screenManager.PrintError(ServerConnError); return; } if (resp.IsEmpty()) { _screenManager.PrintError(NoReplyContentError); return; } JObject jObj = JObject.Parse(resp); string toPrint = def.GetPrintString(JObject.FromObject(jObj["result"])); _screenManager.PrintLine(toPrint); } else if (def is AccountCmd) { _accountManager.ProcessCommand(parsedCmd); } else if (def is CertificateCmd) { _certificatManager.ProcCmd(parsedCmd); } } else { try { // RPC HttpRequestor reqhttp = new HttpRequestor(_rpcAddress); string resp = reqhttp.DoRequest(def.BuildRequest(parsedCmd).ToString(), def.GetUrl()); if (resp == null) { _screenManager.PrintError(ServerConnError); return; } if (resp.IsEmpty()) { _screenManager.PrintError(NoReplyContentError); return; } JObject jObj = JObject.Parse(resp); var j = jObj["result"]; if (j["error"] != null) { _screenManager.PrintLine(j["error"].ToString()); return; } if (j["result"]?["BasicContractZero"] != null) { _genesisAddress = j["result"]["BasicContractZero"].ToString(); } string toPrint = def.GetPrintString(JObject.FromObject(j)); _screenManager.PrintLine(toPrint); } catch (Exception e) { if (e is UriFormatException) { _screenManager.PrintError(UriFormatEroor); return; } if (e is JsonReaderException) { _screenManager.PrintError(WrongInputFormat); return; } } } } }
public override JObject BuildRequest(CmdParseResult parsedCommand) { throw new NotImplementedException(); }