from __future__ import annotations
from typing import Iterable
from eth_typing import HexAddress
from matic.json_types import (
IPlasmaClientConfig,
ITransactionOption,
ITransactionWriteResult,
)
from matic.utils.base_token import BaseToken
from matic.utils.web3_side_chain_client import Web3SideChainClient
[docs]class DepositManager(BaseToken[IPlasmaClientConfig]):
"""Deposit manager for plasma bridge."""
def __init__(
self, client: Web3SideChainClient[IPlasmaClientConfig], address: HexAddress
) -> None:
super().__init__(
address=address,
is_parent=True,
name='DepositManager',
client=client,
)
[docs]class ErcPredicate(BaseToken[IPlasmaClientConfig]):
"""ERC predicate contract for plasma bridge."""
def __init__(
self,
client: Web3SideChainClient[IPlasmaClientConfig],
address: HexAddress,
contract_name: str,
) -> None:
super().__init__(
is_parent=True,
address=address,
name=contract_name,
client=client,
)
[docs]class RegistryContract(BaseToken[IPlasmaClientConfig]):
"""Registry contract for plasma bridge."""
def __init__(
self, client: Web3SideChainClient[IPlasmaClientConfig], address: HexAddress
) -> None:
super().__init__(
address=address,
is_parent=True,
name='Registry',
client=client,
)
[docs]class WithdrawManager(BaseToken[IPlasmaClientConfig]):
"""Withdraw manager for plasma bridge."""
def __init__(
self, client: Web3SideChainClient[IPlasmaClientConfig], address: HexAddress
) -> None:
super().__init__(
address=address,
is_parent=True,
name='WithdrawManager',
client=client,
)
[docs] def withdraw_exit(
self,
tokens: HexAddress | Iterable[HexAddress],
private_key: str | None = None,
option: ITransactionOption | None = None,
) -> ITransactionWriteResult:
"""Finish withdrawal process for given token(s)."""
if isinstance(tokens, str):
method = self.contract.method('processExits', tokens)
else:
method = self.contract.method('processExitsBatch', list(tokens))
return self.process_write(method, option, private_key)