public LogReader() { db = DB.Open(GetFullPath(Settings.Default.Path), new Options { CreateIfMissing = true }); RpcServer.RegisterMethods(this); }
public async Task RunAsync(IStorageProvider store, ExpressConsensusNode node, bool enableTrace, TextWriter writer, CancellationToken token) { if (IsNodeRunning(node)) { throw new Exception("Node already running"); } var tcs = new TaskCompletionSource <bool>(); _ = Task.Run(() => { try { var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(token); var defaultAccount = node.Wallet.Accounts.Single(a => a.IsDefault); using var mutex = new Mutex(true, GLOBAL_PREFIX + defaultAccount.ScriptHash); var wallet = DevWallet.FromExpressWallet(ProtocolSettings, node.Wallet); var multiSigAccount = wallet.GetMultiSigAccounts().Single(); var logPlugin = new Node.LogPlugin(writer); var storageProviderPlugin = new Node.StorageProviderPlugin(store); var appEngineProvider = enableTrace ? new Node.ApplicationEngineProvider() : null; var dbftPlugin = new Neo.Consensus.DBFTPlugin(GetConsensusSettings(chain)); var persistencePlugin = new Node.PersistencePlugin(store); using var neoSystem = new Neo.NeoSystem(ProtocolSettings, storageProviderPlugin.Name); _ = neoSystem.ActorSystem.ActorOf(EventWrapper <Blockchain.ApplicationExecuted> .Props(OnApplicationExecuted)); var rpcSettings = GetRpcServerSettings(chain, node); var rpcServer = new Neo.Plugins.RpcServer(neoSystem, rpcSettings); var expressRpcMethods = new ExpressRpcMethods(neoSystem, store, multiSigAccount.ScriptHash, linkedToken); rpcServer.RegisterMethods(expressRpcMethods); rpcServer.RegisterMethods(persistencePlugin); rpcServer.StartRpcServer(); neoSystem.StartNode(new Neo.Network.P2P.ChannelsConfig { Tcp = new IPEndPoint(IPAddress.Loopback, node.TcpPort), WebSocket = new IPEndPoint(IPAddress.Loopback, node.WebSocketPort), }); dbftPlugin.Start(wallet); // DevTracker looks for a string that starts with "Neo express is running" to confirm that the instance has started // Do not remove or re-word this console output: writer.WriteLine($"Neo express is running ({store.GetType().Name})"); linkedToken.Token.WaitHandle.WaitOne(); } catch (Exception ex) { tcs.SetException(ex); } finally { tcs.TrySetResult(true); } }); await tcs.Task.ConfigureAwait(false);
public override void Dispose() { base.Dispose(); if (server != null) { server.Dispose(); server = null; } }
protected override void OnPluginsLoaded() { this.server = new RpcServer(System, settings); foreach (var handler in handlers) { this.server.RegisterMethods(handler); } handlers.Clear(); server.StartRpcServer(); }
protected override void OnSystemLoaded(NeoSystem system) { RpcServerSettings s = settings.Servers.FirstOrDefault(p => p.Network == system.Settings.Magic); if (s is null) { return; } RpcServer server = new RpcServer(system, s); if (handlers.Remove(s.Network, out var list)) { foreach (var handler in list) { server.RegisterMethods(handler); } } server.StartRpcServer(); servers.TryAdd(s.Network, server); }
public RpcNep5Tracker() { RpcServer.RegisterMethods(this); }
public JObject OnProcess(HttpContext context, string method, JArray _params) { if (_deniedMethods.Contains(method)) { throw new RpcException(-400, "Access denied"); } if (method == "faucet") { system = Plugin.System; RpcServer rpcserver = system.RpcServer; Wallet Wallet = rpcserver.Wallet; UInt160 script_hash = UInt160.Parse(_params[0].AsString()); UInt160 asset_id = UInt160.Parse(Settings.Default.TokenHash); UInt160 from_addr = UInt160.Parse(Settings.Default.FromAddr); BigDecimal value = BigDecimal.Parse(Settings.Default.AmountPerDay, (byte)0); DateTime now = DateTime.Now; string today = now.ToString("yyyyMMdd"); List <TransactionAttribute> attrs = new List <TransactionAttribute> { new TransactionAttribute { Usage = TransactionAttributeUsage.Remark, Data = Encoding.UTF8.GetBytes(today) } }; Transaction tx = Wallet.MakeTransaction(attrs, new[] { new TransferOutput { AssetId = asset_id, Value = value, ScriptHash = script_hash } }, from_addr, null, Fixed8.Zero); if (tx == null) { throw new RpcException(-300, "MakeTransaction failed"); } ContractParametersContext ctx = new ContractParametersContext(tx); Wallet.Sign(ctx); if (ctx.Completed) { tx.Witnesses = ctx.GetWitnesses(); Wallet.ApplyTransaction(tx); system.LocalNode.Tell(new LocalNode.Relay { Inventory = tx }, null); return(tx.ToJson()); } else { return(ctx.ToJson()); } } return(null); }