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 request for a range of hashes.
$p->send_hash_request( $root, 0, 0, 0, 10 );
This method sends a HASH_REQUEST (ID 21) message to retrieve hashes required for v2 piece verification.
Expected parameters:
$pieces_root-
The 32-byte binary SHA-256 Merkle root of the file.
$proof_layer-
The layer index for proof nodes.
$base_layer-
The layer index for the requested hashes.
$index-
The starting node index in the base layer.
$length-
The number of hashes requested.
send_hashes( $pieces_root, $proof_layer, $base_layer, $index, $length, $hashes )
Sends a response with hashes.
$p->send_hashes( $root, 0, 0, 0, 1, $hash_data );
This method sends a HASHES (ID 22) message containing the requested binary hashes.
Expected parameters:
$pieces_root-
The 32-byte Merkle root.
$proof_layer-
The proof layer index.
$base_layer-
The base layer index.
$index-
The starting index.
$length-
The number of hashes included.
$hashes-
The concatenated binary hashes.
send_hash_reject( $pieces_root, $proof_layer, $base_layer, $index, $length )
Rejects a hash request.
$p->send_hash_reject( $root, 0, 0, 0, 10 );
This method sends a HASH_REJECT (ID 23) message.
Expected parameters:
$pieces_root-
The 32-byte Merkle root.
$proof_layer-
The proof layer index.
$base_layer-
The base layer index.
$index-
The starting index.
$length-
The number of hashes rejected.
hash_request event
Emitted when a hash request is received.
$p->on( hash_request => sub ( $self, $root, $proof, $base, $idx, $len ) { ... } );
Expected parameters:
$root-
The 32-byte Merkle root.
$proof-
The proof layer.
$base-
The base layer.
$idx-
The starting index.
$len-
The length requested.
hashes event
Emitted when hashes are received.
$p->on( hashes => sub ( $self, $root, $proof, $base, $idx, $len, $hashes ) { ... } );
Expected parameters:
$root-
The 32-byte Merkle root.
$proof-
The proof layer.
$base-
The base layer.
$idx-
The starting index.
$len-
The number of hashes.
$hashes-
The binary hash data.
hash_reject event
Emitted when a hash request is rejected.
$p->on( hash_reject => sub ( $self, $root, $proof, $base, $idx, $len ) { ... } );
Expected parameters:
$root-
The 32-byte Merkle root.
$proof-
The proof layer.
$base-
The base layer.
$idx-
The starting index.
$len-
The rejected length.
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.