Skip to content

Commit

Permalink
Merge pull request #75 from skalenetwork/72-add-config-controller-sup…
Browse files Browse the repository at this point in the history
…port-to-python-library

Added config controller support to python library
  • Loading branch information
OleksanderSalamatov authored Aug 19, 2024
2 parents ab09279 + 1ecced7 commit 8781793
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
5 changes: 3 additions & 2 deletions python/src/skale_contracts/projects/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Supported projects"""
from .config_controller import ConfigControllerProject as ConfigController
from .context import ContextProject as Context
from .paymaster import PaymasterProject as Paymaster
from .ima import \
Expand All @@ -7,5 +8,5 @@
from .skale_manager import SkaleManagerProject as SkaleManager
from .skale_allocator import SkaleAllocatorProject as SkaleAllocator

__all__ = ['Context', 'MainnetIma', 'Paymaster', 'SchainIma',
'SkaleAllocator', 'SkaleManager']
__all__ = ['ConfigController', 'Context', 'MainnetIma', 'Paymaster',
'SchainIma', 'SkaleAllocator', 'SkaleManager']
56 changes: 56 additions & 0 deletions python/src/skale_contracts/projects/config_controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"""Module connects config-controller project to the SKALE contracts library"""

from __future__ import annotations
from typing import TYPE_CHECKING
from eth_utils.address import to_canonical_address

from skale_contracts.constants import PREDEPLOYED_ALIAS
from skale_contracts.instance import Instance
from skale_contracts.project import Project

if TYPE_CHECKING:
from eth_typing import Address, ChecksumAddress


class ConfigControllerInstance(Instance):
"""Represents instance of config-controller"""

PREDEPLOYED: dict[str, Address] = {
name: to_canonical_address(address) for name, address in {
'ConfigController':
'0xD2002000000000000000000000000000000000d2'
}.items()}

def get_contract_address(
self,
name: str,
*args: str | Address | ChecksumAddress
) -> Address:
if name in self.PREDEPLOYED:
return self.PREDEPLOYED[name]
raise RuntimeError(f"Can't get address of {name} contract")


class ConfigControllerProject(Project):
"""Represents config-controller project"""

@staticmethod
def name() -> str:
return 'config-controller'

def get_instance(self, alias_or_address: str) -> Instance:
if alias_or_address == PREDEPLOYED_ALIAS:
return self.create_instance(
ConfigControllerInstance.PREDEPLOYED['ConfigController']
)
return super().get_instance(alias_or_address)

@property
def github_repo(self) -> str:
return 'https://github.com/skalenetwork/config-controller/'

def create_instance(self, address: Address) -> Instance:
return ConfigControllerInstance(self, address)

def get_abi_filename(self, version: str) -> str:
return f'config-controller-{version}-abi.json'

0 comments on commit 8781793

Please sign in to comment.