diff --git a/web3/pm.py b/web3/pm.py index 34316fe637..dfcc595bd3 100644 --- a/web3/pm.py +++ b/web3/pm.py @@ -217,6 +217,9 @@ def deploy_new_instance(cls, w3): pass +BATCH_SIZE = 100 + + class SimpleRegistry(ERC1319Registry): """ This class represents an instance of the `Solidity Reference Registry implementation @@ -245,11 +248,15 @@ def _get_package_name(self, package_id: bytes) -> str: @to_tuple def _get_all_package_ids(self) -> Iterable[Tuple[bytes]]: num_packages = self._num_package_ids() + pointer = 0 + package_ids = [] + while pointer < num_packages: + new_ids, pointer = self.registry.functions.getAllPackageIds( + pointer, + (pointer + BATCH_SIZE) + ).call() + package_ids.append(new_ids) # Logic here b/c Solidity Reference Registry implementation returns ids in reverse order - package_ids = [ - self.registry.functions.getAllPackageIds(index, (index + 4)).call()[0] - for index in range(0, num_packages, 4) - ] for package_id in concat([x[::-1] for x in package_ids]): yield package_id @@ -259,13 +266,16 @@ def _get_release_id(self, package_name: str, version: str) -> bytes: @to_tuple def _get_all_release_ids(self, package_name: str) -> Iterable[Tuple[bytes]]: num_releases = self._num_release_ids(package_name) + pointer = 0 + release_ids = [] + while pointer < num_releases: + new_ids, pointer = self.registry.functions.getAllReleaseIds( + package_name, + pointer, + (pointer + BATCH_SIZE) + ).call() + release_ids.append(new_ids) # Logic here b/c Solidity Reference Registry implementation returns ids in reverse order - release_ids = [ - self.registry.functions.getAllReleaseIds( - package_name, index, (index + 4) - ).call()[0] - for index in range(0, num_releases, 4) - ] for release_id in concat([x[::-1] for x in release_ids]): yield release_id