Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }
Ejemplo n.º 6
0
        public override JObject BuildRequest(CmdParseResult parsedCmd)
        {
            JObject reqParams = new JObject {
            };

            var req = JsonRpcHelpers.CreateRequest(reqParams, "get_commands", 0);

            return(req);
        }
Ejemplo n.º 7
0
        public override string Validate(CmdParseResult parsedCmd)
        {
            if (parsedCmd.Args == null || parsedCmd.Args.Count != 2)
            {
                return("Invalid number of arguments.");
            }

            return(null);
        }
Ejemplo n.º 8
0
        public override JObject BuildRequest(CmdParseResult parsedCmd)
        {
            var reqParams = new JObject {
                ["address"] = parsedCmd.Args.ElementAt(0)
            };
            var req = JsonRpcHelpers.CreateRequest(reqParams, "call", 1);

            return(req);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 11
0
        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());
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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.");
                }
            }
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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));
            }
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
 public abstract string Validate(CmdParseResult parsedCmd);
Ejemplo n.º 21
0
 public override string Validate(CmdParseResult parsedCmd)
 {
     return(null);
 }
Ejemplo n.º 22
0
 public virtual JObject BuildRequest(CmdParseResult parsedCmd)
 {
     return(null);
 }
Ejemplo n.º 23
0
        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();
 }