Skip to main content
Glama
solana.cpython-311.pyc13.1 kB
� R\�h*���ddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZddlmZeje��ZGd �d ��ZdS) �N)�Pubkey)�Keypair)� Transaction)� Instruction)�Client)�TxOpts)� Confirmedc�V�eZdZdZd�Zd�Zd�Zdd�Zd�Zd�Z d �Z d �Z d �Z d �Z d �ZdS)� SolanaClientzSolana blockchain clientc��tjdd��|_t|j��|_ |j���}|r#|j�t�d��dSt� d��dS#t$r5}t� dt|������Yd}~dSd}~wwxYw)N�SOLANA_RPC_URLz#https://api.mainnet-beta.solana.comzConnected to Solana networkz!Solana connection may be unstablez%Failed to connect to Solana network: ) �os�getenv�rpc_urlr�client�get_slot�value�logger�info�warning� Exception�error�str)�self� slot_response�es �+/home/runner/workspace/blockchain/solana.py�__init__zSolanaClient.__init__s����y�!1�3X�Y�Y�� ��T�\�*�*�� � K� �K�0�0�2�2�M�� D��!4�!@�� � �9�:�:�:�:�:����B�C�C�C�C�C��� K� K� K� �L�L�I��Q���I�I� J� J� J� J� J� J� J� J� J����� K���s�<B�3B� C�*C � Cc �.� tj|��}|j�|��}|j�|jdz }t |��SdS#t $r8}t�d|�dt |������Yd}~dSd}~wwxYw)zGet SOL balance for addressNge��A�0zFailed to get SOL balance for z: ) r� from_stringr� get_balancerrrrr)r�address�pubkey�balance_response� balance_solrs rr"zSolanaClient.get_balance!s��� ��'��0�0�F�#�{�6�6�v�>�>� ��%�1�.�4�s�:� ��;�'�'�'��s��� � � � �L�L�M�'�M�M�S��V�V�M�M� N� N� N��3�3�3�3�3����� ���s�A A� B�-B�Bc�� tj|��}|j�|dtjd��i��}g}|jr�|jD]�}|j}|j}t|��dkr�tj |dd���� ��}t� |dd�d���} |� |t| ��t|j��d �����|S#t $r6} t"�d t| ������gcYd} ~ Sd} ~ wwxYw) z!Get SPL token accounts for wallet� programId�+TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA�@N� �H�little)� byteorder)�mint�balance�accountzFailed to get token accounts: )rr!r�get_token_accounts_by_ownerrr1�data�len�base64� b64encode�decode�int� from_bytes�appendrr$rrr) r�wallet_addressr$�response�tokensr1� account_infor3r/�amountrs r�get_token_accountszSolanaClient.get_token_accounts2sZ�� ��'��7�7�F��{�>�>���f�0�1^�_�_�`���H� �F��~� �'�~���G�#*�?�L�'�,�D��4�y�y�B��� &�/��S�b�S� �:�:�A�A�C�C��!$����R��U� �x��!P�!P��� � �$(�'*�6�{�{�'*�7�>�':�':�'�'����� �M��� � � � �L�L�B�#�a�&�&�B�B� C� C� C��I�I�I�I�I�I����� ���s�DD� E�+E�:E�ENc��� tjd|�������}|st�d|����dSt j|��}|rAt|t��r)tj |��}tj |��}ns|}np|rR|j ���jj}tj||�����}||_nt�d��dS|�|g��|j �|t-dt.������} | jr6t�d| j����t| j��St�d ��dS#t2$r5} t�d t| ������Yd} ~ dSd} ~ wwxYw) zSend transaction on Solana�SOLANA_PRIVATE_KEY_zPrivate key not found for Nz'No transaction or instructions providedF)�skip_confirmation�preflight_commitment)�optszSolana transaction sent: z!Failed to send Solana transactionzSolana transaction failed: )rr�upperrrr�from_base58_string� isinstancerr5� b64decoderr9r�get_latest_blockhashr� blockhash�new_with_payerr$�recent_blockhash�sign�send_transactionrr rr) rr;� transaction� instructions�private_key_b58�keypair�tx_bytes�txrMr<rs rrOzSolanaClient.send_transactionUs���- � �i�(V�n�>R�>R�>T�>T�(V�(V�W�W�O�"� �� � �J�.�J�J�K�K�K��t��0��A�A�G�� ��k�3�/�/�%�%�/� �<�<�H�$�/��9�9�B�B�$�B�B�� �#'�;�#C�#C�#E�#E�#K�#U� � �/� �g�n�n�>N�>N�O�O��&6��#�#�� � �F�G�G�G��t� �G�G�W�I� � � ��{�3�3���e�)�T�T�T�4���H� �~� �� � �H���H�H�I�I�I��8�>�*�*�*�� � �@�A�A�A��t��� � � � �L�L�?�s�1�v�v�?�?� @� @� @��4�4�4�4�4����� ���s,�AF2� CF2�BF2�F2�2 G1�<*G,�,G1c�L� |j�|��}|jr+|j}|jrd|j|j|jpdd�Sddd�Sddd�S#t $rF}t�dt|������dt|��d �cYd }~Sd }~wwxYw) z Get transaction status on Solana� confirmedr)�status�confirmation_status�slot� confirmations�pending)rXr[� not_foundz"Failed to get transaction status: �unknown)rXrN) r�get_signature_statusrrYrZr[rrrr)r� tx_signaturer<rXrs r�get_transaction_statusz#SolanaClient.get_transaction_status�s��� :��{�7�7� �E�E�H��~� C�!����-�E�"-�/5�/I� &� �)/�)=�)B�� ���'0�!�D�D�D�"-��B�B�B��� :� :� :� �L�L�F�c�!�f�f�F�F� G� G� G�'�#�a�&�&�9�9� 9� 9� 9� 9� 9� 9����� :���s*�AA� A�A� B#�;B�B#�B#c�n� tj|��}|j�|��}|jr<|jjt |jj��|jj|jj d�SdS#t$r5}t� dt |������Yd}~dSd}~wwxYw)zGet account information��lamports�owner� executable� rent_epochNzFailed to get account info: ) rr!r�get_account_inforrdrrerfrgrrr)rr#r$r<rs rrhzSolanaClient.get_account_info�s��� ��'��0�0�F��{�3�3�F�;�;�H��~� � (�� 7� ���!5�6�6�"*�.�";�"*�.�";� ����t��� � � � �L�L�@��A���@�@� A� A� A��4�4�4�4�4����� ���s�A0A5�5 B4�?*B/�/B4c�<� tjd��}d}tj|��ddd�tj|��ddd�g} t|| |���} | S#t$r5} t�dt | ������Yd} ~ dSd} ~ wwxYw) z'Build Raydium add liquidity instruction�,675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8sadd_liquidity_instruction_dataT)r$� is_signer� is_writableF)� program_id�accountsr3z%Failed to build Raydium instruction: N)rr!rrrrr) rr;�pool_id�token_a�token_b�amount_a�amount_b�raydium_program_id�instruction_datarn� instructionrs r�'build_raydium_add_liquidity_instructionz4SolanaClient.build_raydium_add_liquidity_instruction�s��� � "(�!3�4b�!c�!c� � A� � "�-�n�=�=�D�ae�f�f�!�-�g�6�6�U�[_�`�`� �H�&�-�!�%����K� � ��� � � � �L�L�I��Q���I�I� J� J� J��4�4�4�4�4����� ���s�AA� B�&*B�Bc ��� tj|��}|j�|��}g}|jrn|jD]f}|�t |j��|jj t |jj ��|jj |jj d�d����g|S#t$r6}t�dt |������gcYd}~Sd}~wwxYw)zGet accounts owned by a programrc)r$r1z Failed to get program accounts: N)rr!r�get_program_accountsrr:rr$r1rdrerfrgrrr)rrmr$r<rnr1rs rryz!SolanaClient.get_program_accounts�s�� ��'� �3�3�F��{�7�7��?�?�H��H��~� �'�~� � �G��O�O�"%�g�n�"5�"5�(/��(@�%(���)>�%?�%?�*1�/�*D�*1�/�*D� $�$�%�%������O��� � � � �L�L�D�C��F�F�D�D� E� E� E��I�I�I�I�I�I����� ���s�B&B)�) C)�3+C$�C)�$C)c��� |j���}|jr|jndS#t$r5}t�dt |������Yd}~dSd}~wwxYw)zGet current slotrzFailed to get current slot: N)rrrrrrr�rr<rs r�get_current_slotzSolanaClient.get_current_slot�sz�� ��{�+�+�-�-�H�%-�^�:�8�>�>�� :��� � � � �L�L�@��A���@�@� A� A� A��1�1�1�1�1����� ���s�(+� A*�*A%�%A*c��� |j���}|jrt|jj��ndS#t $r5}t �dt|������Yd}~dSd}~wwxYw)zGet recent blockhashNz Failed to get recent blockhash: )rrJrrrKrrrr{s r�get_recent_blockhashz!SolanaClient.get_recent_blockhash�s��� ��{�7�7�9�9�H�4<�N�L�3�x�~�/�0�0�0�� L��� � � � �L�L�D�C��F�F�D�D� E� E� E��4�4�4�4�4����� ���s�:=� A<�*A7�7A<c�X� |j�|��}|jr1|jjdu|jj|jj|jjd�Sddd�S#t$rF}t� dt|������dt|��d�cYd}~Sd}~wwxYw)zSimulate transactionN)�success�logsrn�units_consumedFzSimulation failed)r�rzTransaction simulation failed: ) r�simulate_transactionr�errr�rnr�rrrr)rrPr<rs rr�z!SolanaClient.simulate_transaction�s��� 7��{�7�7� �D�D�H��~� H�'�~�1�T�9�$�N�/� (�� 7�&.�n�&C� ���$)�3F�G�G�G��� 7� 7� 7� �L�L�C�3�q�6�6�C�C� D� D� D�$�s�1�v�v�6�6� 6� 6� 6� 6� 6� 6����� 7���s$�AA�A� B)�#;B$�B)�$B))NN)�__name__� __module__� __qualname__�__doc__rr"r@rOrarhrwryr|r~r���rr r s�������"�"�K�K�K� ���"!�!�!�F/�/�/�/�b:�:�:�.���(���B���2������7�7�7�7�7r�r )r�loggingr5�solders.pubkeyr�solders.keypairr�solders.transactionr�solders.instructionr�solana.rpc.apir�solana.rpc.typesr�solana.rpc.commitmentr � getLoggerr�rr r�r�r�<module>r�s��� � � � ����� � � � �!�!�!�!�!�!�#�#�#�#�#�#�+�+�+�+�+�+�+�+�+�+�+�+�!�!�!�!�!�!�#�#�#�#�#�#�+�+�+�+�+�+� �� �8� $� $��B7�B7�B7�B7�B7�B7�B7�B7�B7�B7r�

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JMadhan1/OneDefi-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server