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 }