storeBlockHeadersBulk method
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,
},
);
}
}