Source code for robonomicsinterface.pallets._common

"""Helpers shared by the pallet wrappers."""

from __future__ import annotations

from typing import TYPE_CHECKING, Literal, TypedDict

from ..extrinsic import Call, ExtrinsicResult
from ..keys import Keypair
from ..ss58 import ROBONOMICS_SS58_FORMAT, decode_address, encode_address

if TYPE_CHECKING:
    from ..client import RobonomicsClient


[docs] class SubmitOptions(TypedDict, total=False): """Options passed through to :meth:`RobonomicsClient.submit`.""" wait_for: Literal["in_block", "finalized"] tip: int era_period: int | None validate: bool timeout: float
def as_address(value: str | Keypair) -> str: """A Robonomics (format 32) address from a keypair or any valid SS58 address. :raises InvalidAddress: the text is not a valid address. """ if isinstance(value, Keypair): return encode_address(value.public_key, ROBONOMICS_SS58_FORMAT) return encode_address(decode_address(value), ROBONOMICS_SS58_FORMAT) async def submit( client: RobonomicsClient, call: Call, keypair: Keypair, subscription_owner: str | Keypair | None, options: SubmitOptions, ) -> ExtrinsicResult: """Submit ``call``, wrapped in ``RWS.call`` when a subscription pays for it.""" if subscription_owner is not None: call = await client.compose_call( "RWS", "call", {"subscription_id": as_address(subscription_owner), "call": call} ) return await client.submit(call, keypair, **options)