上篇说到,在 init 函数初始化系统后,会调用 IPFS 对象的 preStart 和 start 方法,进行系统初始化,这次我们来看第一个方法。首先来看 preStart 方法,这个方法位于 core/components/pre-start.js 文件中,它的主要作用是加载仓库中的内容到内存中,它的主体是一个 waterfall,老规矩我们直接来分析它的几个函数。
执行第一个函数,调用仓库的配置对象的 get 方法,获取配置系统配置。具体代码如下:
(cb) => self._repo.config.get(cb)
我们知道,仓库的配置对象是在仓库的构造函数中生成,在初始化方法 init 中设置的。现在我们来详细看下配置对象,这个对象以仓库对象的 root 为参数创建的,它的所有操作最终都是调用这个对象来完成的,也即最终都是保存保存在文件系统的配置文件中,那么配置文件内容是在哪里被写入的呢,答案就是仓库的 init 方法,在这个方法中会调用配置对象的同名方法来完成保存所有配置。这里还有一个问题就是具体的配置是在哪里定义的,这个问题也比较简单,在前面系统初始化时,即 IPFS 的 init 方法中曾经调用 mergeOptions 方法来合并默认配置和用户通过 config 指定的配置,从这个方法可以发现所有默认配置定义在 core/runtime/config-node.js 文件中,从这个文件可以发现默认配置如下:
{
Addresses: {
Swarm: [
'/ip4/0.0.0.0/tcp/4002',
'/ip4/127.0.0.1/tcp/4003/ws'
],
API: '/ip4/127.0.0.1/tcp/5002',
Gateway: '/ip4/127.0.0.1/tcp/9090'
},
Discovery: {
MDNS: {
Enabled: true,
Interval: 10
},
webRTCStar: {
Enabled: true
}
},
Bootstrap: [
'/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z',
'/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsq