长安链源码分析启动(4)
作者:李
- 2022 年 8 月 29 日 湖南
本文字数:751 字
阅读完需:约 2 分钟
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star
初始化网络后,就开始初始化区块链
func (server *ChainMakerServer) initBlockchains() error {
server.blockchains = sync.Map{}
ok := false
//读取所有链配置,遍历,初始化每一个一链
for _, chain := range localconf.ChainMakerConfig.GetBlockChains() {
chainId := chain.ChainId
if err := server.initBlockchain(chainId, chain.Genesis); err != nil {
log.Error(err.Error())
continue
}
ok = true
}
if !ok {
return fmt.Errorf("init all blockchains fail")
}
//创建链任务监听器
go server.newBlockchainTaskListener()
return nil
}
//初始化每一个链
func (server *ChainMakerServer) initBlockchain(chainId, genesis string) error {
//读取genesis 文件
if !filepath.IsAbs(genesis) {
var err error
genesis, err = filepath.Abs(genesis)
if err != nil {
return err
}
}
log.Infof("load genesis file path of chain[%s]: %s", chainId, genesis)
//创建一个区块链
blockchain := NewBlockchain(genesis, chainId, msgbus.NewMessageBus(), server.net)
//区块链初始化
if err := blockchain.Init(); err != nil {
errMsg := fmt.Sprintf("init blockchain[%s] failed, %s", chainId, err.Error())
return errors.New(errMsg)
}
//把创建的区块链放到map中
server.blockchains.Store(chainId, blockchain)
log.Infof("init blockchain[%s] success!", chainId)
return nil
}
复制代码
上面读取区块链配置如下,配置在
可以看到每个链对应一个 genesis 配置文件
这里面最核心的是 blockchain.Init() 方法。接下来我们继续研究
划线
评论
复制
发布于: 刚刚阅读数: 4
李
关注
还未添加个人签名 2018.05.04 加入
还未添加个人简介
评论