Skip to content
Snippets Groups Projects
core.go 2.64 KiB
Newer Older
// Copyright 2015, 2016 Eris Industries (UK) Ltd.
// This file is part of Eris-RT

// Eris-RT is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Eris-RT is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Eris-RT.  If not, see <http://www.gnu.org/licenses/>.

package core

import (
  // TODO: [ben] swap out go-events with eris-db/event (currently unused)
  events "github.com/tendermint/go-events"

Benjamin Bollen's avatar
Benjamin Bollen committed
  log "github.com/eris-ltd/eris-logger"

  config      "github.com/eris-ltd/eris-db/config"
  consensus   "github.com/eris-ltd/eris-db/consensus"
  definitions "github.com/eris-ltd/eris-db/definitions"
  manager     "github.com/eris-ltd/eris-db/manager"
)

// Core is the high-level structure
type Core struct {
  chainId string
  evsw    *events.EventSwitch
  pipe    definitions.Pipe
Benjamin Bollen's avatar
Benjamin Bollen committed
func NewCore(chainId string, consensusConfig *config.ModuleConfig,
  managerConfig *config.ModuleConfig) (*Core, error) {
  // start new event switch, TODO: [ben] replace with eris-db/event
  evsw := events.NewEventSwitch()
  evsw.Start()

  // start a new application pipe that will load an application manager
  pipe, err := manager.NewApplicationPipe(managerConfig, evsw,
Benjamin Bollen's avatar
Benjamin Bollen committed
    consensusConfig.Version)
  if err != nil {
Benjamin Bollen's avatar
Benjamin Bollen committed
    return nil, fmt.Errorf("Failed to load application pipe: %v", err)
Benjamin Bollen's avatar
Benjamin Bollen committed
  log.Debug("Loaded pipe with application manager")
  // pass the consensus engine into the pipe
  consensus.LoadConsensusEngineInPipe(consensusConfig, pipe)

  return &Core{
    chainId: chainId,
    evsw: evsw,
    pipe: pipe,
    }, nil

//------------------------------------------------------------------------------
// Explicit switch that can later be abstracted into an `Engine` definition
// where the Engine defines the explicit interaction of a specific application
// manager with a consensus engine.
// TODO: [ben] before such Engine abstraction,
// think about many-manager-to-one-consensus

//------------------------------------------------------------------------------
// Server functions
// NOTE: [ben] in phase 0 we exactly take over the full server architecture
// from Eris-DB and Tendermint; This is a draft and will be overhauled.

// func (core *Core) StartGateway() {
//   codec := &TCodec{}
//   eventSubscriptions :=
// }