diff --git a/solathon/client.py b/solathon/client.py index d3f3b47..458ea37 100644 --- a/solathon/client.py +++ b/solathon/client.py @@ -12,6 +12,8 @@ Commitment, LargestAccounts, LargestAccountsType, + LargestTokenAccounts, + LargestTokenAccountsType, PubKeyIdentity, PubKeyIdentityType, RPCResponse, @@ -415,6 +417,21 @@ def get_largest_accounts( if self.clean_response: return [LargestAccounts(account) for account in response["value"]] return response + + def get_largest_token_accounts( + self, mint: Text + ) -> RPCResponse[List[LargestTokenAccountsType]] | List[LargestTokenAccounts]: + """ + Returns the token largest accounts. + + Returns: + RPCResponse: The response from the RPC endpoint. + """ + + response = self.build_and_send_request("getTokenLargestAccounts", [mint]) + if self.clean_response: + return [LargestTokenAccounts(account) for account in response["value"]] + return response def get_leader_schedule( self, diff --git a/solathon/core/types/__init__.py b/solathon/core/types/__init__.py index 85b96cc..8f59a10 100644 --- a/solathon/core/types/__init__.py +++ b/solathon/core/types/__init__.py @@ -69,6 +69,27 @@ class LargestAccounts: def __init__(self, response: LargestAccountsType) -> None: self.lamports = response['lamports'] self.address = response['address'] + +class LargestTokenAccountsType(TypedDict): + ''' + JSON Response type of Largest Token Accounts received by RPC + ''' + address: set + amount: int + decimals: int + uiAmount: float + uiAmountString: str + +class LargestTokenAccounts: + ''' + Convert Largest Token Accounts JSON to Class + ''' + def __init__(self, response: LargestTokenAccountsType) -> None: + self.address = response['address'] + self.amount = response['amount'] + self.decimals = response['decimals'] + self.uiAmount = response['uiAmount'] + self.uiAmountString = response['uiAmountString'] class RecentPerformanceSamplesType(TypedDict): '''