// This function returns a properly configured ErisDb server process with a running // tendermint node attached to it. To start listening for incoming requests, call // 'Start()' on the process. Make sure to register any start event listeners before // that. func ServeErisDB(workDir string) (*server.ServeProcess, error) { log.Info("ErisDB Serve initializing.") errEns := EnsureDir(workDir) if errEns != nil { return nil, errEns } var sConf *server.ServerConfig sConfPath := path.Join(workDir, "server_conf.toml") if !FileExists(sConfPath) { log.Info("No server configuration, using default.") log.Info("Writing to: " + sConfPath) sConf = server.DefaultServerConfig() errW := server.WriteServerConfig(sConfPath, sConf) if errW != nil { panic(errW) } } else { var errRSC error sConf, errRSC = server.ReadServerConfig(sConfPath) if errRSC != nil { log.Error("Server config file error.", "error", errRSC.Error()) } } // Get tendermint configuration tmConfig = tmcfg.GetConfig(workDir) tmConfig.Set("version", TENDERMINT_VERSION) cfg.ApplyConfig(tmConfig) // Notify modules of new config // Set the node up. nodeRd := make(chan struct{}) nd := node.NewNode() // Load the supporting objects. pipe := ep.NewPipe(nd) codec := &TCodec{} evtSubs := NewEventSubscriptions(pipe.Events()) // The services. tmwss := NewErisDbWsService(codec, pipe) tmjs := NewErisDbJsonService(codec, pipe, evtSubs) // The servers. jsonServer := NewJsonRpcServer(tmjs) restServer := NewRestServer(codec, pipe, evtSubs) wsServer := server.NewWebSocketServer(sConf.WebSocket.MaxWebSocketSessions, tmwss) // Create a server process. proc := server.NewServeProcess(sConf, jsonServer, restServer, wsServer) stopChan := proc.StopEventChannel() go startNode(nd, nodeRd, stopChan) <-nodeRd return proc, nil }
func CreateTempWorkDir(privValidator *types.PrivValidator, genesis *stypes.GenesisDoc, folderName string) (string, error) { workDir := path.Join(os.TempDir(), folderName) os.RemoveAll(workDir) errED := EnsureDir(workDir) if errED != nil { return "", errED } cfgName := path.Join(workDir, "config.toml") scName := path.Join(workDir, "server_conf.toml") pvName := path.Join(workDir, "priv_validator.json") genesisName := path.Join(workDir, "genesis.json") // Write config. errCFG := files.WriteFileRW(cfgName, []byte(TendermintConfigDefault)) if errCFG != nil { return "", errCFG } fmt.Printf("File written: %s\n.", cfgName) // Write validator. errPV := writeJSON(pvName, privValidator) if errPV != nil { return "", errPV } fmt.Printf("File written: %s\n.", pvName) // Write genesis errG := writeJSON(genesisName, genesis) if errG != nil { return "", errG } fmt.Printf("File written: %s\n.", genesisName) // Write server config. errWC := server.WriteServerConfig(scName, server.DefaultServerConfig()) if errWC != nil { return "", errWC } fmt.Printf("File written: %s\n.", scName) return workDir, nil }
// Creates a temp folder for the tendermint/erisdb node to run in. // Folder name is port based, so port=1337 meens folder="testnode1337" // Old folders are cleared out. before creating them, and the server will // clean out all of this servers workdir (defaults to ~/.edbservers) when // starting and when stopping. func (this *ServerManager) createWorkDir(data *RequestData, config *server.ServerConfig, folderName string) (string, error) { workDir := path.Join(this.baseDir, folderName) os.RemoveAll(workDir) errED := EnsureDir(workDir) if errED != nil { return "", errED } cfgName := path.Join(workDir, "config.toml") scName := path.Join(workDir, "server_conf.toml") pvName := path.Join(workDir, "priv_validator.json") genesisName := path.Join(workDir, "genesis.json") // Write config. errCFG := files.WriteFileRW(cfgName, []byte(TendermintConfigDefault)) if errCFG != nil { return "", errCFG } log.Info("File written.", "name", cfgName) // Write validator. errPV := writeJSON(pvName, data.PrivValidator) if errPV != nil { return "", errPV } log.Info("File written.", "name", pvName) // Write genesis errG := writeJSON(genesisName, data.Genesis) if errG != nil { return "", errG } log.Info("File written.", "name", genesisName) // Write server config. errWC := server.WriteServerConfig(scName, config) if errWC != nil { return "", errWC } log.Info("File written.", "name", scName) return workDir, nil }
// This function returns a properly configured ErisDb server process with a running // tendermint node attached to it. To start listening for incoming requests, call // 'Start()' on the process. Make sure to register any start event listeners before // that. func ServeErisDB(workDir string) (*server.ServeProcess, error) { log.Info("ErisDB Serve initializing.") errEns := EnsureDir(workDir) if errEns != nil { return nil, errEns } var sConf *server.ServerConfig sConfPath := path.Join(workDir, "server_conf.toml") if !FileExists(sConfPath) { log.Info("No server configuration, using default.") log.Info("Writing to: " + sConfPath) sConf = server.DefaultServerConfig() errW := server.WriteServerConfig(sConfPath, sConf) if errW != nil { panic(errW) } } else { var errRSC error sConf, errRSC = server.ReadServerConfig(sConfPath) if errRSC != nil { log.Error("Server config file error.", "error", errRSC.Error()) } } // Get tendermint configuration tmConfig = tmcfg.GetConfig(workDir) tmConfig.Set("version", node.Version) cfg.ApplyConfig(tmConfig) // Notify modules of new config // load the priv validator privVal := types.LoadPrivValidator(tmConfig.GetString("priv_validator_file")) // possibly set the signer to use eris-keys signerCfg := tmConfig.GetString("signer") if !(signerCfg == "default" || signerCfg == "") { spl := strings.Split(signerCfg, ":") if len(spl) != 2 { panic(`"signer" field in config.toml should be "default" or "ERIS_KEYS_HOST:ERIS_KEYS_PORT"`) } // TODO: if a privKey is found in the privVal, warn the user that we want to import it to eris-keys and delete it host := signerCfg addr := hex.EncodeToString(privVal.Address) signer := NewErisSigner(host, addr) privVal.SetSigner(signer) } // Set the node up. nodeRd := make(chan struct{}) nd := node.NewNode(privVal) // Load the supporting objects. pipe := ep.NewPipe(nd) codec := &TCodec{} evtSubs := NewEventSubscriptions(pipe.Events()) // The services. tmwss := NewErisDbWsService(codec, pipe) tmjs := NewErisDbJsonService(codec, pipe, evtSubs) // The servers. jsonServer := NewJsonRpcServer(tmjs) restServer := NewRestServer(codec, pipe, evtSubs) wsServer := server.NewWebSocketServer(sConf.WebSocket.MaxWebSocketSessions, tmwss) // Create a server process. proc := server.NewServeProcess(sConf, jsonServer, restServer, wsServer) stopChan := proc.StopEventChannel() go startNode(nd, nodeRd, stopChan) <-nodeRd return proc, nil }