现在我们Appinit2中的第十步代码:Step 10: load peers(导入节点)
导入节点导入节点的核心代码就adb.Read(addrman)这一句。可以看到这里定义了一个CAddrDB的局部对象。然后调用Read函数读取本地的节点文件的数据,并将数据存储在了addrman这个全局对象中。这个addrman定义在net.h中。
全局对象 addrmanadb是一个CaddrDB对象,这个对象读取的是存储在我们本地的peers.dat 。这个文件存储的是本机连接的节点文件。这个文件的的路径就在CAddrDB的构造函数中。
CAddrDB构造函数所以我们可以理解为这个类就是专门处理节点数据的类。CAddrDB这个类定义在net.h中。
CAddrDb类通过类的声明模板可以看到这个类就是处理peers.dat的类,实现了两个功能:写文件(Write)和读文件(Read)。因为我们这里分析的是导入结点,我们就先看下是如何读文件的,也就是分析下Read函数是如何工作的。那在分析Read之前为了方便理解里面的内容,我们先看下Write函数。知道了里面存储的数据,读出来的数据也就很容易理解了。
节点写文件可以看到此函数是将节点的地址数据串行化后,并将其数据进行了hash计算,最后也将其hash值写入了文件中。
现在再看下Read函数
加载节点数据现在我们大概了解了节点数据读和写的过程,并且了解和我们当前节点进行连接的其他节点的数据存储所在,而且是以hash加密方式进行的验证。我们也是通过这个文件里存储的其他节点的地址进行通信和同步数据的。
作者:区块链研习社比特币源码研读班,black
网友评论