-
先执行 go-ipfs/cmd/ipfs/ipfs.go 中的 init()函数,此函数完成子命令的注册
-
接着执行 go-ipfs/cmd/ipfs/main.go 中的 main() 函数,入口
-
接着执行 gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds/cli/run.go 中的 run() 函数
-
接着执行 go-ipfs/core/commands/refs.go 中的 RefsLocalCmd 的 Run() 函数
-
接着执行 gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-block-ipfs-blockstore/blockstore.go 中的 AllKeyChan() 函数,这个函数的功能是通过查询指定的 context.Context 中的所有密钥
-
接着执行 gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/exapmles/fs.go 中的 query() 函数(其函数的定义在上层目录中的 Datastore 接口的定义中),在这个函数中主要的实现函数是:go func(){…}()
-
接着执行gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/query/query.go 中的 ResultsWithChan() 函数,此函数太复杂,没看懂
-
接着执行gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/query/query-impl.go 中的 NaiveQueryApply() 函数,此函数分别调用了 NaiveFilter()、NaiveOrder()、NaiveOffset()、NaiveLimit(),对Results 对象用 Query 对象中的限制进行过滤,得到过滤后的Results 对象并返回至blockstore.go 中的 AllKeysChan() 函数中。
-
接着执行gx/ipfs/QmauEMWPoSqggfpSDHMMXuDn12DTd7TaFBvn39eeurzKT2/go-ipfs-ds-help/key.go 中的 DsKeyToCid() 函数,这个函数执行的功能是将指定的key 转换成其对应的 cid。紧接着会调用此文件中的 BinaryFromDsKey() 函数,此函数的功能是获取指定 key 的字节片。
-
接着执行gx/ipfs/QmfVj3x4D6Jkq9SEoi5n2NmoUomLwoeiwnYz2KQa15wRw6/base32/base32.go 中的 DecodeString() 函数,此函数的功能是将一个字符串 s 转换成 base32 编码格式的 []byte。紧接着会调用此文件中的 decodeInPlace() 函数,此函数的功能是去掉字符数组中的 ‘\r’ 和 ‘\n’,然后调用本文件中的 decode() 函数,此函数的功能是对去掉 ‘\r’ 和 ‘\n’ 的数组进行解码操作。操作完成后返回 DsKeyToCid() 函数中。
-
接着执行gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid/cid.go 中的 Cast() 函数,此函数主要是将获得的数据切片进行解析并返回 Cid(一个由 Version, Codec, Multihash组成的字符串) 对象。
-
若数据切片的长度为 34 且前两个字节分别是 18 和 32 时,调用gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash/multihash.go 中的 Cast() 函数,此函数的功能是将数据缓冲区的数据强制转换成 Multihash 对象。在函数中会首先调用 Decode() 函数将缓冲区的数据切片转换成 DecodeMultihash 对象,再验证得到的 DecodeMultihash 对象中的数据,通过验证后,再将 DecodeMultihash 对象转换为 Multihash 对象并返回得到的 Multihash 对象。然后将得到的Multihash 对象封装成 Cid 对象并返回此对象。
-
否则直接将数据缓冲区的内容转换成一个 uint64, 并分别解析前两个字节,并将解析的结果重新组织成一个 Cid 对象并返回此对象。
-
-
将步骤11得到的 Cid 对象放到申请的一个由 Cid 对象组成的 channel 中,并返回它。
-
打印所有的hash 值。
IPFS 源码解读之—— ipfs refs local(显示所有本地对象的哈希)
最新推荐文章于 2021-08-31 17:07:20 发布