Source code for polywrap_ethereum_wallet.connection

"""This module contains a connection class for an EVM network."""
from typing import Optional, Tuple

from web3 import Web3
from web3.providers.base import JSONBaseProvider

from .networks import KnownNetwork


[docs]class Connection: """Defines a connection to an EVM network.""" __slots__: Tuple[str, str] = ("_provider", "_signer") _provider: JSONBaseProvider _signer: Optional[str] # Private key def __init__(self, provider: JSONBaseProvider | str, signer: Optional[str]): """Initialize a connection to an EVM network.""" self._provider = ( Web3.HTTPProvider(provider) if isinstance(provider, str) else provider ) self._signer = signer @property def provider(self) -> JSONBaseProvider: """EVM network provider.""" return self._provider @property def signer(self) -> str: """Private key for signing transactions.""" if not self._signer: raise ValueError(f"signer is not set for {self}") return self._signer
[docs] @classmethod def from_node(cls, node: str, signer: Optional[str] = None): """Create a connection from a node URL.""" return cls(provider=node, signer=signer)
[docs] @classmethod def from_network(cls, network: KnownNetwork, signer: Optional[str] = None): """Create a connection from a known network.""" provider = ( f"https://{network.name}.infura.io/v3/1a8e6a8ab1df44ccb77d3e954082c5d4" ) return cls(provider=provider, signer=signer)
def __str__(self) -> str: """String representation of the connection.""" return f"Connection: {self.provider}"
[docs] def has_signer(self) -> bool: """Returns true if the connection has a signer.""" return self._signer is not None