Skip to content

Commit

Permalink
fix get_spec_version method
Browse files Browse the repository at this point in the history
  • Loading branch information
droserasprout committed Jan 23, 2025
1 parent 2918f32 commit 9442495
Showing 1 changed file with 31 additions and 23 deletions.
54 changes: 31 additions & 23 deletions src/dipdup/runtimes.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,11 @@ def __init__(
self._spec_versions: dict[str, SubstrateSpecVersion] = {}

@property
def abi_path(self) -> Path:
return self._package.abi.joinpath(self._config.name)
def abi_paths(self) -> tuple[Path, Path]:
return (
self._package.abi.joinpath(self._config.name),
self._package.abi_local.joinpath(self._config.name),
)

@cached_property
def runtime_config(self) -> 'RuntimeConfigurationObject':
Expand All @@ -159,28 +162,33 @@ def runtime_config(self) -> 'RuntimeConfigurationObject':
return runtime_config

def get_spec_version(self, name: str) -> SubstrateSpecVersion:
if name not in self._spec_versions:
_logger.info('loading spec version `%s`', name)

metadata_path = self.abi_path.joinpath(f'v{name}.json')

if not metadata_path.is_file():
metadata_path = self._package.abi_local.joinpath(self._config.name, f'v{name}.json')

if not metadata_path.is_file():
# FIXME: Using last known version to help with missing abis
available = sorted_glob(self.abi_path, 'v*.json')
last_known = next(i for i in available if int(i.stem[1:]) >= int(name[1:]))
_logger.debug('using last known version `%s`', last_known.name)
self._spec_versions[name] = self.get_spec_version(last_known.stem[1:])
else:
metadata = orjson.loads(metadata_path.read_bytes())
self._spec_versions[name] = SubstrateSpecVersion(
name=f'v{name}',
metadata=metadata,
)
if name in self._spec_versions:
self._spec_versions[name]

_logger.info('loading spec version `%s`', name)

return self._spec_versions[name]
metadata_paths = (
self.abi_paths[0].joinpath(f'v{name}.json'),
self.abi_paths[1].joinpath(f'v{name}.json'),
)

if metadata_paths[0].is_file():
metadata_path = metadata_paths[0]
elif metadata_paths[1].is_file():
metadata_path = metadata_paths[1]
else:
# NOTE: Using the last known version from the package; ABIs we use are expected to be the same
available = sorted_glob(self.abi_paths[0], 'v*.json')
metadata_path = next(i for i in available[::-1] if int(i.stem[1:]) <= int(name))
_logger.debug('using last known version `%s`', metadata_path.name)

metadata = orjson.loads(metadata_path.read_bytes())
spec_version = SubstrateSpecVersion(
name=f'v{name}',
metadata=metadata,
)
self._spec_versions[name] = spec_version
return spec_version

def decode_event_args(
self,
Expand Down

0 comments on commit 9442495

Please sign in to comment.