Ejemplo n.º 1
0
 public LogReader()
 {
     db = DB.Open(GetFullPath(Settings.Default.Path), new Options {
         CreateIfMissing = true
     });
     RpcServer.RegisterMethods(this);
 }
Ejemplo n.º 2
0
        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);
Ejemplo n.º 3
0
 public override void Dispose()
 {
     base.Dispose();
     if (server != null)
     {
         server.Dispose();
         server = null;
     }
 }
Ejemplo n.º 4
0
        protected override void OnPluginsLoaded()
        {
            this.server = new RpcServer(System, settings);

            foreach (var handler in handlers)
            {
                this.server.RegisterMethods(handler);
            }
            handlers.Clear();

            server.StartRpcServer();
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 public RpcNep5Tracker()
 {
     RpcServer.RegisterMethods(this);
 }
Ejemplo n.º 7
0
        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);
        }