Module orca_whirlpool.internal.anchor.accounts.whirlpools_config

Expand source code
import typing
from dataclasses import dataclass
from solders.pubkey import Pubkey
from solana.rpc.async_api import AsyncClient
from solana.rpc.commitment import Commitment
import borsh_construct as borsh
from anchorpy.coder.accounts import ACCOUNT_DISCRIMINATOR_SIZE
from anchorpy.error import AccountInvalidDiscriminator
from anchorpy.utils.rpc import get_multiple_accounts
from anchorpy.borsh_extension import BorshPubkey
from ..program_id import PROGRAM_ID


class WhirlpoolsConfigJSON(typing.TypedDict):
    fee_authority: str
    collect_protocol_fees_authority: str
    reward_emissions_super_authority: str
    default_protocol_fee_rate: int


@dataclass
class WhirlpoolsConfig:
    discriminator: typing.ClassVar = b"\x9d\x141\xe0\xd9W\xc1\xfe"
    layout: typing.ClassVar = borsh.CStruct(
        "fee_authority" / BorshPubkey,
        "collect_protocol_fees_authority" / BorshPubkey,
        "reward_emissions_super_authority" / BorshPubkey,
        "default_protocol_fee_rate" / borsh.U16,
    )
    fee_authority: Pubkey
    collect_protocol_fees_authority: Pubkey
    reward_emissions_super_authority: Pubkey
    default_protocol_fee_rate: int

    @classmethod
    async def fetch(
        cls,
        conn: AsyncClient,
        address: Pubkey,
        commitment: typing.Optional[Commitment] = None,
        program_id: Pubkey = PROGRAM_ID,
    ) -> typing.Optional["WhirlpoolsConfig"]:
        resp = await conn.get_account_info(address, commitment=commitment)
        info = resp.value
        if info is None:
            return None
        if info.owner != program_id:
            raise ValueError("Account does not belong to this program")
        bytes_data = info.data
        return cls.decode(bytes_data)

    @classmethod
    async def fetch_multiple(
        cls,
        conn: AsyncClient,
        addresses: list[Pubkey],
        commitment: typing.Optional[Commitment] = None,
        program_id: Pubkey = PROGRAM_ID,
    ) -> typing.List[typing.Optional["WhirlpoolsConfig"]]:
        infos = await get_multiple_accounts(conn, addresses, commitment=commitment)
        res: typing.List[typing.Optional["WhirlpoolsConfig"]] = []
        for info in infos:
            if info is None:
                res.append(None)
                continue
            if info.account.owner != program_id:
                raise ValueError("Account does not belong to this program")
            res.append(cls.decode(info.account.data))
        return res

    @classmethod
    def decode(cls, data: bytes) -> "WhirlpoolsConfig":
        if data[:ACCOUNT_DISCRIMINATOR_SIZE] != cls.discriminator:
            raise AccountInvalidDiscriminator(
                "The discriminator for this account is invalid"
            )
        dec = WhirlpoolsConfig.layout.parse(data[ACCOUNT_DISCRIMINATOR_SIZE:])
        return cls(
            fee_authority=dec.fee_authority,
            collect_protocol_fees_authority=dec.collect_protocol_fees_authority,
            reward_emissions_super_authority=dec.reward_emissions_super_authority,
            default_protocol_fee_rate=dec.default_protocol_fee_rate,
        )

    def to_json(self) -> WhirlpoolsConfigJSON:
        return {
            "fee_authority": str(self.fee_authority),
            "collect_protocol_fees_authority": str(
                self.collect_protocol_fees_authority
            ),
            "reward_emissions_super_authority": str(
                self.reward_emissions_super_authority
            ),
            "default_protocol_fee_rate": self.default_protocol_fee_rate,
        }

    @classmethod
    def from_json(cls, obj: WhirlpoolsConfigJSON) -> "WhirlpoolsConfig":
        return cls(
            fee_authority=Pubkey.from_string(obj["fee_authority"]),
            collect_protocol_fees_authority=Pubkey.from_string(
                obj["collect_protocol_fees_authority"]
            ),
            reward_emissions_super_authority=Pubkey.from_string(
                obj["reward_emissions_super_authority"]
            ),
            default_protocol_fee_rate=obj["default_protocol_fee_rate"],
        )

Classes

class WhirlpoolsConfig (fee_authority: solders.pubkey.Pubkey, collect_protocol_fees_authority: solders.pubkey.Pubkey, reward_emissions_super_authority: solders.pubkey.Pubkey, default_protocol_fee_rate: int)

WhirlpoolsConfig(fee_authority: solders.pubkey.Pubkey, collect_protocol_fees_authority: solders.pubkey.Pubkey, reward_emissions_super_authority: solders.pubkey.Pubkey, default_protocol_fee_rate: int)

Expand source code
@dataclass
class WhirlpoolsConfig:
    discriminator: typing.ClassVar = b"\x9d\x141\xe0\xd9W\xc1\xfe"
    layout: typing.ClassVar = borsh.CStruct(
        "fee_authority" / BorshPubkey,
        "collect_protocol_fees_authority" / BorshPubkey,
        "reward_emissions_super_authority" / BorshPubkey,
        "default_protocol_fee_rate" / borsh.U16,
    )
    fee_authority: Pubkey
    collect_protocol_fees_authority: Pubkey
    reward_emissions_super_authority: Pubkey
    default_protocol_fee_rate: int

    @classmethod
    async def fetch(
        cls,
        conn: AsyncClient,
        address: Pubkey,
        commitment: typing.Optional[Commitment] = None,
        program_id: Pubkey = PROGRAM_ID,
    ) -> typing.Optional["WhirlpoolsConfig"]:
        resp = await conn.get_account_info(address, commitment=commitment)
        info = resp.value
        if info is None:
            return None
        if info.owner != program_id:
            raise ValueError("Account does not belong to this program")
        bytes_data = info.data
        return cls.decode(bytes_data)

    @classmethod
    async def fetch_multiple(
        cls,
        conn: AsyncClient,
        addresses: list[Pubkey],
        commitment: typing.Optional[Commitment] = None,
        program_id: Pubkey = PROGRAM_ID,
    ) -> typing.List[typing.Optional["WhirlpoolsConfig"]]:
        infos = await get_multiple_accounts(conn, addresses, commitment=commitment)
        res: typing.List[typing.Optional["WhirlpoolsConfig"]] = []
        for info in infos:
            if info is None:
                res.append(None)
                continue
            if info.account.owner != program_id:
                raise ValueError("Account does not belong to this program")
            res.append(cls.decode(info.account.data))
        return res

    @classmethod
    def decode(cls, data: bytes) -> "WhirlpoolsConfig":
        if data[:ACCOUNT_DISCRIMINATOR_SIZE] != cls.discriminator:
            raise AccountInvalidDiscriminator(
                "The discriminator for this account is invalid"
            )
        dec = WhirlpoolsConfig.layout.parse(data[ACCOUNT_DISCRIMINATOR_SIZE:])
        return cls(
            fee_authority=dec.fee_authority,
            collect_protocol_fees_authority=dec.collect_protocol_fees_authority,
            reward_emissions_super_authority=dec.reward_emissions_super_authority,
            default_protocol_fee_rate=dec.default_protocol_fee_rate,
        )

    def to_json(self) -> WhirlpoolsConfigJSON:
        return {
            "fee_authority": str(self.fee_authority),
            "collect_protocol_fees_authority": str(
                self.collect_protocol_fees_authority
            ),
            "reward_emissions_super_authority": str(
                self.reward_emissions_super_authority
            ),
            "default_protocol_fee_rate": self.default_protocol_fee_rate,
        }

    @classmethod
    def from_json(cls, obj: WhirlpoolsConfigJSON) -> "WhirlpoolsConfig":
        return cls(
            fee_authority=Pubkey.from_string(obj["fee_authority"]),
            collect_protocol_fees_authority=Pubkey.from_string(
                obj["collect_protocol_fees_authority"]
            ),
            reward_emissions_super_authority=Pubkey.from_string(
                obj["reward_emissions_super_authority"]
            ),
            default_protocol_fee_rate=obj["default_protocol_fee_rate"],
        )

Class variables

var collect_protocol_fees_authority : solders.pubkey.Pubkey
var default_protocol_fee_rate : int
var discriminator : ClassVar
var fee_authority : solders.pubkey.Pubkey
var layout : ClassVar
var reward_emissions_super_authority : solders.pubkey.Pubkey

Static methods

def decode(data: bytes) ‑> WhirlpoolsConfig
Expand source code
@classmethod
def decode(cls, data: bytes) -> "WhirlpoolsConfig":
    if data[:ACCOUNT_DISCRIMINATOR_SIZE] != cls.discriminator:
        raise AccountInvalidDiscriminator(
            "The discriminator for this account is invalid"
        )
    dec = WhirlpoolsConfig.layout.parse(data[ACCOUNT_DISCRIMINATOR_SIZE:])
    return cls(
        fee_authority=dec.fee_authority,
        collect_protocol_fees_authority=dec.collect_protocol_fees_authority,
        reward_emissions_super_authority=dec.reward_emissions_super_authority,
        default_protocol_fee_rate=dec.default_protocol_fee_rate,
    )
async def fetch(conn: solana.rpc.async_api.AsyncClient, address: solders.pubkey.Pubkey, commitment: Optional[solana.rpc.commitment.Commitment] = None, program_id: solders.pubkey.Pubkey = Pubkey( whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc, )) ‑> Optional[WhirlpoolsConfig]
Expand source code
@classmethod
async def fetch(
    cls,
    conn: AsyncClient,
    address: Pubkey,
    commitment: typing.Optional[Commitment] = None,
    program_id: Pubkey = PROGRAM_ID,
) -> typing.Optional["WhirlpoolsConfig"]:
    resp = await conn.get_account_info(address, commitment=commitment)
    info = resp.value
    if info is None:
        return None
    if info.owner != program_id:
        raise ValueError("Account does not belong to this program")
    bytes_data = info.data
    return cls.decode(bytes_data)
async def fetch_multiple(conn: solana.rpc.async_api.AsyncClient, addresses: list[solders.pubkey.Pubkey], commitment: Optional[solana.rpc.commitment.Commitment] = None, program_id: solders.pubkey.Pubkey = Pubkey( whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc, )) ‑> List[Optional[WhirlpoolsConfig]]
Expand source code
@classmethod
async def fetch_multiple(
    cls,
    conn: AsyncClient,
    addresses: list[Pubkey],
    commitment: typing.Optional[Commitment] = None,
    program_id: Pubkey = PROGRAM_ID,
) -> typing.List[typing.Optional["WhirlpoolsConfig"]]:
    infos = await get_multiple_accounts(conn, addresses, commitment=commitment)
    res: typing.List[typing.Optional["WhirlpoolsConfig"]] = []
    for info in infos:
        if info is None:
            res.append(None)
            continue
        if info.account.owner != program_id:
            raise ValueError("Account does not belong to this program")
        res.append(cls.decode(info.account.data))
    return res
def from_json(obj: WhirlpoolsConfigJSON) ‑> WhirlpoolsConfig
Expand source code
@classmethod
def from_json(cls, obj: WhirlpoolsConfigJSON) -> "WhirlpoolsConfig":
    return cls(
        fee_authority=Pubkey.from_string(obj["fee_authority"]),
        collect_protocol_fees_authority=Pubkey.from_string(
            obj["collect_protocol_fees_authority"]
        ),
        reward_emissions_super_authority=Pubkey.from_string(
            obj["reward_emissions_super_authority"]
        ),
        default_protocol_fee_rate=obj["default_protocol_fee_rate"],
    )

Methods

def to_json(self) ‑> WhirlpoolsConfigJSON
Expand source code
def to_json(self) -> WhirlpoolsConfigJSON:
    return {
        "fee_authority": str(self.fee_authority),
        "collect_protocol_fees_authority": str(
            self.collect_protocol_fees_authority
        ),
        "reward_emissions_super_authority": str(
            self.reward_emissions_super_authority
        ),
        "default_protocol_fee_rate": self.default_protocol_fee_rate,
    }
class WhirlpoolsConfigJSON (*args, **kwargs)

dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2)

Expand source code
class WhirlpoolsConfigJSON(typing.TypedDict):
    fee_authority: str
    collect_protocol_fees_authority: str
    reward_emissions_super_authority: str
    default_protocol_fee_rate: int

Ancestors

  • builtins.dict

Class variables

var collect_protocol_fees_authority : str
var default_protocol_fee_rate : int
var fee_authority : str
var reward_emissions_super_authority : str