Libtorrent 通过 Merkle 哈希获取文件

问题描述

如何通过 libtorrent 请求知道其 Merkle 哈希的文件?我会很高兴看到一段代码,或者只是对逻辑的描述。我是否需要下载基于 Merkle 哈希的 .torrent 文件

解决方法

首先,有两个 BEP 定义了基于默克尔树的种子。 BEP30BEP52。两者都不能仅基于其 Merkle 哈希共享文件,因为它们需要一些额外的数据来构建最小可行的 Torrent,例如片段大小或文件大小。为了支持多个文件、文件名和其他东西,需要一些额外的元数据,这些元数据最终被封装在 infohash 中。因此,torrent 客户端通常处理信息哈希,而不是文件哈希。

您可以通过选择固定文件名和固定片段大小来绕过其中一些要求,然后为您的文件生成规范的元数据表示。在 libtorrent 中,可以通过 create_torrent() API 创建仅限 v2 的 torrent(BEP52 不向后兼容)。