Example #1
0
        /// <summary>
        /// Make rpc call
        /// </summary>
        private async Task RpcCallCommand <T>(IPEndPoint endPoint, string method, string parameters = null, bool deserializeResult = false)
        {
            if (string.IsNullOrEmpty(parameters))
            {
                parameters = "[]";
            }

            using (HttpClient wb = new HttpClient())
            {
                var content = new StringContent
                              (
                    "{\"jsonrpc\": \"2.0\", \"method\": \"" + method + "\", \"params\": " + parameters + ", \"id\":1}", Encoding.UTF8,
                    "application/json"
                              );

                var rest = await wb.PostAsync("http://" + endPoint.Address.ToString() + ":" + endPoint.Port.ToString(), content);

                if (!rest.IsSuccessStatusCode)
                {
                    _consoleHandler.WriteLine(rest.StatusCode + " - " + rest.ReasonPhrase, ConsoleOutputStyle.Error);
                    return;
                }

                var json = JObject.Parse(await rest.Content.ReadAsStringAsync());

                if (deserializeResult)
                {
                    var obj = BinarySerializer.Default.Deserialize <T>(json["result"].Value <string>().HexToBytes());

                    if (obj is BlockHeader bh)
                    {
                        _blockSigner.Sign(bh);

                        if (bh is Block bb && bb.Transactions != null)
                        {
                            foreach (var tx in bb.Transactions)
                            {
                                _txSigner.Sign(tx);
                            }
                        }
                    }
                    else
                    {
                        if (obj is Transaction tx)
                        {
                            _txSigner.Sign(tx);
                        }
                    }

                    _consoleHandler.WriteObject(obj, PromptOutputStyle.json);
                }
                else
                {
                    _consoleHandler.WriteObject(json, PromptOutputStyle.json);
                }
            }
        }
        public void WalletListAccountCommand(PromptOutputStyle output = PromptOutputStyle.json)
        {
            _walletManager.CheckWalletIsOpen();
            var currentWallet = _walletManager.Wallet;

            _consoleHandler.WriteObject(currentWallet, output);
        }
Example #3
0
        public void NodesCommand(PromptOutputStyle output = PromptOutputStyle.json)
        {
            var peers = _serverContext.ConnectedPeers;

            switch (output)
            {
            case PromptOutputStyle.json:
            {
                _consoleHandler.WriteObject(
                    new
                    {
                        Count = peers.Count,
                        Nodes = peers
                                .OrderBy(u => u.Value.ConnectionDate)
                                .Select(u => new { Address = u.Key, ConnectedTime = (DateTime.UtcNow - u.Value.ConnectionDate) })
                                .ToArray()
                    }, PromptOutputStyle.json);
                break;
            }

            default:
            {
                _consoleHandler.WriteLine("Connected: " + peers.Count);

                foreach (var peer in peers.OrderBy(u => u.Value.ConnectionDate))
                {
                    _consoleHandler.WriteLine(peer.Key.ToString() + " - " +
                                              // Connected time
                                              (DateTime.UtcNow - peer.Value.ConnectionDate).ToString());
                }
                break;
            }
            }
        }
Example #4
0
        public void TestInvoke(UInt160 contractHash, ETriggerType trigger, string operation = null, [PromptCommandParameterBody] object[] parameters = null)
        {
            if (_scriptTable.GetScript(contractHash.ToArray(), false) == null)
            {
                throw new ArgumentNullException("Contract not found");
            }

            var args = new ExecutionEngineArgs
            {
                ScriptTable = _scriptTable,
                Logger      = new ExecutionEngineLogger(ELogVerbosity.StepInto),
                Trigger     = trigger
            };

            var log = new StringBuilder();

            args.Logger.OnStepInto += context =>
            {
                log.AppendLine(context.NextInstruction.ToString());
            };

            using (var script = new ScriptBuilder())
                using (var vm = _vmFactory.Create(args))
                {
                    script.EmitMainPush(operation, parameters);
                    script.EmitAppCall(contractHash.ToArray());

                    vm.LoadScript(script);

                    var ret    = vm.Execute();
                    var result = new
                    {
                        vm.State,
                        Result = vm.ResultStack,
                        vm.ConsumedGas
                    };

                    _consoleHandler.WriteObject(result, PromptOutputStyle.json);
                }

            //_logger.LogDebug("Execution opcodes:" + Environment.NewLine + log.ToString());
        }
 public async Task HeaderCommand(uint blockIndex, PromptOutputStyle output = PromptOutputStyle.json)
 {
     _consoleHandler.WriteObject(await _blockRepository.GetBlockHeader(blockIndex), output);
 }