storeBlockHeadersBulk method

  1. @override
Future<void> storeBlockHeadersBulk(
  1. List<(BlockHeader, int)> headers
)
override

Bulk store block headers for fast initial sync (CDN import).

Parameters:

  • headers: List of (BlockHeader, height) pairs to store

Implementations should use batch/transaction writes for performance. Default implementation falls back to sequential storeBlockHeader calls.

Implementation

@override
Future<void> storeBlockHeadersBulk(List<(BlockHeader, int)> headers) async {
  _ensureInitialized();
  if (headers.isEmpty) return;

  final now = DateTime.now();

  // Use parameterized inserts to prevent SQL injection
  for (final (header, height) in headers) {
    await _pool!.execute(
      Sql.named('''
        INSERT INTO block_headers (
          height, hash, prev_block_hash, merkle_root, timestamp,
          version, bits, nonce, is_orphaned, stored_at
        ) VALUES (
          @height, @hash, @prevHash, @merkle, @ts,
          @version, @bits, @nonce, false, @storedAt
        ) ON CONFLICT (hash) DO NOTHING
      '''),
      parameters: {
        'height': height,
        'hash': header.blockHash().toString(),
        'prevHash': header.prevBlock.toString(),
        'merkle': header.merkleRoot.toString(),
        'ts': header.timestamp.millisecondsSinceEpoch ~/ 1000,
        'version': header.version,
        'bits': header.bits,
        'nonce': header.nonce,
        'storedAt': now,
      },
    );
  }
}