精通IPFS:IPFS 启动之 init 函数

上一篇文章中,我们了解了 IPFS 启动过程中的 boot 函数,它就象一个大总管,控制到 IPFS 系统的启动整个过程,在那篇文章中,我们简单的提到了 IPFS 启动过程分两个主要步骤,一个是初始化,另一个是启动。初始化过程要用到的是 init 函数,这个函数初始化系统,只有系统完整初始化之后才可以启动系统。init 这个函数位于 core/components/init.js 文件中。下面,进入这个文件来继续我们的探索之旅。

检查选项是否为函数,如果是则重新设置回调函数和选项对象。
if (typeof opts === ‘function’) {

callback = opts

opts = {}

}

在这里 init 函数的选项参数是我们在前面指定的,默认情况下只有一个 bits: 2048 的属性,另一个 pass 属性,依赖于用户的指定。

接下来,生成 done 函数变量。内容如下,具体执行稍后分析。
const done = (err, res) => {

if (err) {

self.emit('error', err)

return callback(err)

}
self.preStart((err) => {

if (err) {

  self.emit('error', err)

  return callback(err)

}

self.state.initialized()

self.emit(‘init’)

callback(null, res)

})

}

调用 IPFS 的状态对象的 init 方法,进行初始化,此处略去不讲。
self.state.init()

如果用户在选项中指定的了具体的仓库对象,则使用用户指定的仓库对象。然后调用 done 函数。
if (opts.repo) {

self._repo = opts.repo

return done(null, true)

}

默认情况下,用户是不会指定的,所以代码继续执行。

设置选项别的一些属性。
opts.emptyRepo = opts.emptyRepo || false

opts.bits = Number(opts.bits) || 2048

opts.log = opts.log || function () {}

调用 mergeOptions 方法,合并默认配置和用户指定的配置。这个方法在前面启动时已经见过,这里略去不提。

接下来又是一个 waterfall 函数调用。这个函数里面的流程比较复杂,也比较重要,我们需要一步一步来看。

首先调用仓库对象的 exists 方法,检查仓库是否存在。这个方法内部只检查仓库的版本文件是否存在。接下来,调用第二个函数。

接下来,处理第二个函数。首先,检查前一个函数返回的仓库是否存在的标识,如果存在,则抛出异常,结束下面的执行。
然后&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值