import * as State from 'tevm/State';
// Partition storage keys into buckets for parallel processing
function partitionKeys(
keys: BrandedStorageKey[],
partitionCount: number
): BrandedStorageKey[][] {
const partitions: BrandedStorageKey[][] = Array(
{ length: partitionCount },
() => []
);
for (const key of keys) {
const hash = State.StorageKey.hashCode(key);
const partitionIndex = Math.abs(hash) % partitionCount;
partitions[partitionIndex].push(key);
}
return partitions;
}
const keys = [
State.StorageKey(contractAddr, 0n),
State.StorageKey(contractAddr, 1n),
State.StorageKey(contractAddr, 2n),
State.StorageKey(contractAddr, 3n),
State.StorageKey(contractAddr, 4n)
];
// Split into 2 partitions
const partitions = partitionKeys(keys, 2);
console.log(`Partition 0: ${partitions[0].length} keys`);
console.log(`Partition 1: ${partitions[1].length} keys`);
// Process partitions in parallel
await Promise.all(
partitions.map(async (partition, index) => {
console.log(`Processing partition ${index}...`);
for (const key of partition) {
await processStorageKey(key);
}
})
);