/// <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); }
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; } } }
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); }