github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/setup/basic_dependence.go (about)

     1  /*
     2  Service registration order
     3  1. config
     4  2. bootNode
     5  3. nodeAccount
     6  
     7  */
     8  package setup
     9  
    10  import (
    11  	"fmt"
    12  	"os"
    13  	"path"
    14  	"strings"
    15  
    16  	"github.com/ontio/ontology-eventbus/actor"
    17  	"github.com/urfave/cli"
    18  	"github.com/sixexorg/magnetic-ring/account"
    19  	"github.com/sixexorg/magnetic-ring/bactor"
    20  	"github.com/sixexorg/magnetic-ring/common"
    21  	"github.com/sixexorg/magnetic-ring/common/password"
    22  	"github.com/sixexorg/magnetic-ring/config"
    23  	"github.com/sixexorg/magnetic-ring/log"
    24  	"github.com/sixexorg/magnetic-ring/meacount"
    25  	"github.com/sixexorg/magnetic-ring/p2pserver"
    26  	p2pactor "github.com/sixexorg/magnetic-ring/p2pserver/actor/server"
    27  	"github.com/sixexorg/magnetic-ring/store/mainchain/genesis"
    28  	mainstore "github.com/sixexorg/magnetic-ring/store/mainchain/storages"
    29  	mainval "github.com/sixexorg/magnetic-ring/store/mainchain/validation"
    30  )
    31  
    32  //step1
    33  func initConfig() {
    34  	p, err := os.Getwd()
    35  	if err != nil {
    36  		return
    37  	}
    38  	if strings.Contains(p, "rennbon") {
    39  		//err = config.InitConfig(path.Join(p, "crystal-node/go-crystal/config.yml"))
    40  		err = config.InitConfig(path.Join(p, "./config.yml"))
    41  	} else if strings.Contains(p, "rudy") {
    42  		//err = config.InitConfig(path.Join(p, "crystal-node/go-crystal/config.yml"))
    43  		err = config.InitConfig(path.Join(p, "./config.yml"))
    44  	} else if strings.Contains(p, "dachu") {
    45  		err = config.InitConfig(path.Join(p, "./config.yml"))
    46  	} else {
    47  		err = config.InitConfig(path.Join(p, "./config.yml"))
    48  	}
    49  
    50  	if err != nil {
    51  		fmt.Printf("init config error-->%v\n", err)
    52  		os.Exit(0)
    53  		return
    54  	}
    55  }
    56  
    57  //step3
    58  func initNodeAccount(ctx *cli.Context) account.Account {
    59  	accountPath := ctx.String("wallet")
    60  	mgr, err := account.NewManager()
    61  	if err != nil {
    62  		panic(err)
    63  	}
    64  	pasd := ctx.String("password")
    65  	if pasd == "" {
    66  		pasw, err := password.GetPassword()
    67  		if err != nil {
    68  			os.Exit(10)
    69  		}
    70  		pasd = string(pasw)
    71  	}
    72  	address, err := mgr.ImportNormalAccount(accountPath, pasd)
    73  	if err != nil {
    74  		log.Error("import normal account error", "error", err)
    75  		os.Exit(9)
    76  	}
    77  	acct, err := mgr.GetNormalAccount(address, pasd)
    78  	if err != nil {
    79  		log.Error("get normal account error", "error", err)
    80  		os.Exit(8)
    81  	}
    82  	nodeimpl := acct.(account.Account)
    83  	meacount.SetOwner(nodeimpl)
    84  	return acct
    85  }
    86  
    87  //step4
    88  func initLog(logpath string) {
    89  	//logger = log.New("module", "main")
    90  	//logger.SetHandler(log.MultiHandler(
    91  	//	log.StderrHandler,
    92  	//	log.LvlFilterHandler(
    93  	//		log.LvlInfo,
    94  	//		log.Must.FileHandler("errors.json", log.LogfmtFormat()))))
    95  	//log.Info("log init completely")
    96  	log.InitMagneticLog(logpath)
    97  	log.PrintOrigins(true)
    98  }
    99  
   100  //step5
   101  func initLedger(dbDir string) *mainstore.LedgerStoreImp {
   102  	ledger, err := mainstore.NewLedgerStore(dbDir)
   103  	if err != nil {
   104  		panic(fmt.Errorf("func initLedger err %s", err))
   105  	}
   106  	mainval.NewAccountNonceCache(func(height uint64, account common.Address) uint64 {
   107  		ass, err := ledger.GetAccountByHeight(height, account)
   108  		if err != nil {
   109  			return 0
   110  		}
   111  		return ass.Data.Nonce
   112  	})
   113  	return ledger
   114  }
   115  
   116  //step6
   117  func mainchainGenesis(conf *config.GenesisConfig, ledger *mainstore.LedgerStoreImp) {
   118  	genesis, err := genesis.InitGenesis(conf)
   119  	if err != nil {
   120  		panic(err)
   121  	}
   122  	if ledger.GetCurrentBlockHeight() == 0 {
   123  		err := genesis.GenesisBlock(ledger)
   124  		if err != nil {
   125  			panic(err)
   126  		}
   127  	}
   128  }
   129  
   130  //step7
   131  func initP2P() *actor.PID {
   132  	p2p := p2pserver.NewServer()
   133  	p2pActor := p2pactor.NewP2PActor(p2p)
   134  	p2pPID, err := p2pActor.Start()
   135  	if err != nil {
   136  		panic(fmt.Errorf("p2pActor init error %s", err))
   137  	}
   138  	p2p.SetPID(p2pPID)
   139  	bactor.RegistActorPid(bactor.P2PACTOR, p2pPID)
   140  	err = p2p.Start()
   141  	if err != nil {
   142  		panic(fmt.Errorf("initP2P err %s", err))
   143  	}
   144  	p2p.WaitForPeersStart()
   145  	return p2pPID
   146  }