private NexusAPI SetupNexusApi() { var apiCache = Settings.Node.ApiCache; var apiLog = Settings.Node.ApiLog; var apiProxyURL = Settings.Node.ApiProxyUrl; var readOnlyMode = Settings.Node.Readonly; var hasRPC = Settings.Node.HasRpc; var hasREST = Settings.Node.HasRest; NexusAPI nexusApi = new NexusAPI(_nexus, apiCache, apiLog ? Logger : null); if (apiProxyURL != null) { nexusApi.ProxyURL = apiProxyURL; // TEMP Normal node needs a proxy url set to relay transactions to the BPs nexusApi.Node = _node; Logger.Message($"API will be acting as proxy for {apiProxyURL}"); } else { nexusApi.Node = _node; } if (readOnlyMode) { Logger.Warning($"Node will be running in read-only mode."); } else { nexusApi.Mempool = _mempool; } // RPC setup if (hasRPC) { var rpcPort = Settings.Node.RpcPort; Logger.Message($"RPC server listening on port {rpcPort}..."); var rpcServer = new RPCServer(nexusApi, "/rpc", rpcPort, (level, text) => WebLogMapper("rpc", level, text)); rpcServer.StartInThread(ThreadPriority.AboveNormal); } // REST setup if (hasREST) { var restPort = Settings.Node.RestPort; Logger.Message($"REST server listening on port {restPort}..."); var restServer = new RESTServer(nexusApi, "/api", restPort, (level, text) => WebLogMapper("rest", level, text)); restServer.StartInThread(ThreadPriority.AboveNormal); } return(nexusApi); }