NAME

Net::BitTorrent::Protocol::BEP52 - BitTorrent v2 Protocol Extensions

SYNOPSIS

# Inherits from Net::BitTorrent::Protocol::BEP03
use Net::BitTorrent::Protocol::BEP52;

my $p = Net::BitTorrent::Protocol::BEP52->new( ... );

# Request hashes for a Merkle tree
$p->send_hash_request( $pieces_root, $proof_layer, $base_layer, $index, $count );

DESCRIPTION

Net::BitTorrent::Protocol::BEP52 extends the standard peer wire protocol with support for BitTorrent v2 (BEP 52). It specifically handles the synchronization of Merkle tree hashes between peers, which is required for block-level data verification.

Unlike v1, where piece hashes are contained in the .torrent file, v2 uses a dynamic hash fetching mechanism. When a peer receives a block, it may need to request the corresponding Merkle proof nodes from the swarm to verify the block data. This module provides the wire-format messages to perform these requests.

It is typically used via Net::BitTorrent::Protocol::PeerHandler.

METHODS

send_hash_request( $pieces_root, $proof_layer, $base_layer, $index, $length )

Sends a HASH_REQUEST (ID 21) message.

Parameters:

  • $pieces_root: The 32-byte binary SHA-256 Merkle root of the file.

  • $proof_layer: The height of the layer containing the proof nodes.

  • $base_layer: The height of the layer being requested.

  • $index: The start index within the base layer.

  • $length: The number of hashes requested.

send_hashes( $pieces_root, $proof_layer, $base_layer, $index, $length, $hashes )

Sends a HASHES (ID 22) message containing the requested binary hash string.

send_hash_reject( $pieces_root, $proof_layer, $base_layer, $index, $length )

Sends a HASH_REJECT (ID 23) message to indicate the hashes cannot be provided.

Callbacks

on_hash_request(...) / on_hashes(...) / on_hash_reject(...)

These methods are designed to be overridden or implemented by the PeerHandler. They are triggered when the corresponding wire-format messages are received.

AUTHOR

Sanko Robinson <sanko@cpan.org>

COPYRIGHT

Copyright (C) 2008-2026 by Sanko Robinson.

This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.