announceTransaction method

  1. @override
Future<List<PeerI>> announceTransaction(
  1. Hash txHash,
  2. List<PeerI> targetPeers
)
override

Announce a transaction hash to specified peers Returns list of peers that successfully received the announcement

Implementation

@override
Future<List<PeerI>> announceTransaction(Hash txHash, List<PeerI> targetPeers) async {
  if (_isShutdown) {
    return [];
  }

  // Check cooldown to prevent spam
  if (_isInCooldown(txHash)) {
    logger.fine('Transaction announcement in cooldown: $txHash');
    return [];
  }

  final successful = <PeerI>[];
  List<Peer> peersToUse;

  if (targetPeers.isNotEmpty) {
    // Use specified peers (filtered for our peers)
    peersToUse = targetPeers
        .whereType<Peer>()
        .where((p) => _peers.containsValue(p) && p.isHealthy)
        .toList();
  } else {
    // Use best available peers
    peersToUse = _selectBestPeers(config.maxAnnouncementBatch);
  }

  logger.fine('Announcing transaction $txHash to ${peersToUse.length} peers');

  for (final peer in peersToUse) {
    try {
      await peer.announceTransaction(txHash);
      successful.add(peer);
    } catch (e) {
      logger.warning('Failed to announce transaction to ${peer}: $e');
    }
  }

  if (successful.isNotEmpty) {
    _recordAnnouncement(txHash);
  }

  return successful;
}