Skip to main content
Glama
polygon.cpython-311.pyc13.7 kB
� R\�h�$��|�ddlZddlZddlZddlmZddlmZddlmZej e ��Z Gd�d��Z dS)�N)�Web3)�Account)�TransactionNotFoundc�l�eZdZdZd�Zd�Zd�Zdd�Zdd �Zd �Z d �Z d �Z d�Z d�Z dd�Zd�Zd�Zd�ZdS)� PolygonClientzPolygon blockchain clientc�.�tjdd��|_ttj|j����|_|j���st�d��dSt� d��dS)N�POLYGON_RPC_URLzhttps://polygon-rpc.comz$Failed to connect to Polygon networkzConnected to Polygon network) �os�getenv�rpc_urlr� HTTPProvider�w3� is_connected�logger�error�info)�selfs �,/home/runner/workspace/blockchain/polygon.py�__init__zPolygonClient.__init__ s}���y�!2�4M�N�N�� ��t�(���6�6�7�7����w�#�#�%�%� 8� �L�L�?� @� @� @� @� @� �K�K�6� 7� 7� 7� 7� 7�c � � |jj�|��}|j�|d��}t |��S#t $r8}t �d|�dt |������Yd}~dSd}~wwxYw)zGet MATIC balance for address�etherzFailed to get balance for z: N�0)r�eth� get_balance�from_wei�str� Exceptionrr)r�address� balance_wei� balance_matic�es rrzPolygonClient.get_balances��� ��'�+�1�1�'�:�:�K� �G�,�,�[�'�B�B�M��}�%�%� %��� � � � �L�L�I�g�I�I��Q���I�I� J� J� J��3�3�3�3�3����� ���s�AA � B �-B�B c��� dddd�gdddd�gdd �dgd d d d�gdd �g}|jj�||� ��}|j�|�����}|j������}|d|zz }t|��S#t$r5}t� dt|������Yd}~dSd}~wwxYw)z"Get ERC20 token balance on PolygonT�_ownerr��name�type� balanceOf�balance�uint256�function)�constant�inputsr&�outputsr'�decimals��uint8�r�abi� zFailed to get token balance: Nr) rr�contract� functionsr(�callr/rrrr) r�wallet_address� token_address� erc20_abir5r)r/�formatted_balancer"s r�get_token_balancezPolygonClient.get_token_balance#s0�� �!�$,�i�@�@�A�#�%.� �B�B�C�"� ��!��"�%'��9�9�:�"� �� �I��w�{�+�+�M�y�+�Q�Q�H��(�2�2�>�B�B�G�G�I�I�G��)�2�2�4�4�9�9�;�;�H� '�2��>� :� ��(�)�)� )��� � � � �L�L�A��Q���A�A� B� B� B��3�3�3�3�3����� ���s�B*B-�- C,�7*C'�'C,�0xrNc �,� tjd|�������}|st�d|����dS|jj�|��}t|jjj d��}|�� |jj� |||t|t��rt|��n|d���}nD#t$r7} t�dt| ���d���d}Yd} ~ nd} ~ wwxYw||t|t��rt|��n||||d d �} |jjj�| |��} |jj�| j��} t�d | �������| ���S#t$r5} t�d t| ������Yd} ~ dSd} ~ wwxYw) zSend transaction on Polygon� PRIVATE_KEY_zPrivate key not found for N�,Gx)�from�to�data�value�Gas estimation failed: z, using default�@ �)�noncerBrD�gas�gasPricerC�chainIdzPolygon transaction sent: zPolygon transaction failed: )r r �upperrrrr�get_transaction_count�max� gas_price� estimate_gas� isinstancer�intr�warning�account�sign_transaction�send_raw_transaction�rawTransactionr�hex) rr8� to_addressrCrDrI� private_keyrHrOr"� transaction� signed_txn�tx_hashs r�send_transactionzPolygonClient.send_transaction@s"��0 ��)�$K�>�3G�3G�3I�3I�$K�$K�L�L�K�� �� � �J�.�J�J�K�K�K��t��G�K�5�5�n�E�E�E��D�G�K�1�;�?�?�I��{� !��'�+�2�2� .�(� $�/9�%��/E�/E�!P��U����5� 4�4���C�C�� !�!�!�!��N�N�#T�S��V�V�#T�#T�#T�U�U�U� �C�C�C�C�C�C�����!���� � �'1�%��'=�'=�H��U����5��%�����K����,�=�=�k�;�W�W�J��g�k�6�6�z�7P�Q�Q�G� �K�K�D�W�[�[�]�]�D�D� E� E� E��;�;�=�=� ��� � � � �L�L�@��A���@�@� A� A� A��4�4�4�4�4����� ���sK�AG� AG� AC�G� D� -D� G�D�B<G� H�*H�H�,c�$� |jj�||���}|j|j|j|j���d�S#t$r5}t� dt|������Yd}~dSd}~wwxYw)z,Wait for transaction confirmation on Polygon)�timeout)�status� block_number�gas_used�transaction_hashz#Failed to get transaction receipt: N) rr�wait_for_transaction_receiptrb� blockNumber�gasUsed�transactionHashrXrrrr)rr]ra�receiptr"s rrfz*PolygonClient.wait_for_transaction_receiptts��� ��g�k�>�>�w�PW�>�X�X�G�!�.� '� 3�#�O�$+�$;�$?�$?�$A�$A� �� ��� � � � �L�L�G�s�1�v�v�G�G� H� H� H��4�4�4�4�4����� ���s�A A� B�*B � Bc�r� |jj�|��}|jdkrdnd|j|j|jjj|jz d�S#t$rddd�cYSt$rF}t� dt|������d t|��d �cYd }~Sd }~wwxYw) z!Get transaction status on Polygon�� confirmed�failed)rbrcrd� confirmations�pendingr)rbroz"Failed to get transaction status: �unknown)rbrN) rr�get_transaction_receiptrbrgrhrcrrrrr)rr]rjr"s r�get_transaction_statusz$PolygonClient.get_transaction_status�s��� :��g�k�9�9�'�B�B�G�)0��1�)<�)<�+�+�(� '� 3�#�O�!%���!9�G�<O�!O� �� ��#� =� =� =�'�!�<�<� <� <� <�� :� :� :� �L�L�F�c�!�f�f�F�F� G� G� G�'�#�a�&�&�9�9� 9� 9� 9� 9� 9� 9����� :���s$�AA�B6�' B6�0;B1�+B6�1B6c�2� |jj�|g���}t|j|d��}||����}|S#t $r5}t�dt|������Yd}~dSd}~wwxYw)zEncode function call data)r3r&z Failed to encode function call: Nr=) rrr5�getattrr6�_encode_transaction_datarrrr)rr3�argsr5r+� encoded_datar"s r�encode_function_callz"PolygonClient.encode_function_call�s��� ��w�{�+�+���+�6�6�H��x�1�3�v�;�?�?�H�#�8�T�?�C�C�E�E�L�� ��� � � � �L�L�D�C��F�F�D�D� E� E� E��4�4�4�4�4����� ���s�AA� B�!*B�Bc�� |jj�d��}|jS#t$rT}t �dt|������ttj ����cYd}~Sd}~wwxYw)z Get current blockchain timestamp�latestz!Failed to get current timestamp: N) rr� get_block� timestamprrrrrR�time)r� latest_blockr"s r�get_current_timestampz#PolygonClient.get_current_timestamp�s��� $��7�;�0�0��:�:�L��)� )��� $� $� $� �L�L�E�S��V�V�E�E� F� F� F��t�y�{�{�#�#� #� #� #� #� #� #����� $���s�%(� B�A B�;B�Bc��� |jjj}t|d��S#t$r5}t �dt|������Yd}~dSd}~wwxYw)z Get current gas price on Polygonr@zFailed to get gas price: N)rrrOrNrrrr)rrOr"s r� get_gas_pricezPolygonClient.get_gas_price�sp�� ��� �-�I��y�+�.�.� .��� � � � �L�L�=�S��V�V�=�=� >� >� >��;�;�;�;�;����� ���s� #� A"�*A�A"c��� |jj�|��S#t$r5}t�dt |������Yd}~dSd}~wwxYw)zEstimate gas for transactionrENrF)rrrPrrrr)rr[r"s rrPzPolygonClient.estimate_gas�sl�� ��7�;�+�+�K�8�8� 8��� � � � �L�L�;�3�q�6�6�;�;� <� <� <��6�6�6�6�6����� �����!� A �*A�A c�d� |jj�||���}t|j|��}|r||����}n|�����}|S#t $r5}t�dt|������Yd}~dSd}~wwxYw)z"Call a read-only contract functionr2zContract call failed: N) rrr5rur6r7rrrr) r�contract_addressr3� function_namerwr5r+�resultr"s r�call_contract_functionz$PolygonClient.call_contract_function�s��� ��w�{�+�+�4D�#�+�N�N�H��x�1�=�A�A�H�� +�!��4��-�-�/�/���!������*�*���M��� � � � �L�L�:�#�a�&�&�:�:� ;� ;� ;��4�4�4�4�4����� ���s�A-A0�0 B/�:*B*�*B/c�� |jjjS#t$r5}t�dt |������Yd}~dSd}~wwxYw)zGet current block numberzFailed to get block number: Nr)rrrcrrrr)rr"s r�get_block_numberzPolygonClient.get_block_number�sa�� ��7�;�+� +��� � � � �L�L�@��A���@�@� A� A� A��1�1�1�1�1����� ���s�� A�*A � Ac��� |jj�|��S#t$r5}t�dt |������Yd}~dSd}~wwxYw)zGet transaction detailszFailed to get transaction: N)rr�get_transactionrrrr)rr]r"s rr�zPolygonClient.get_transaction�sl�� ��7�;�.�.�w�7�7� 7��� � � � �L�L�?�s�1�v�v�?�?� @� @� @��4�4�4�4�4����� ���r�c�4� ddd�ddd�gddd�g}|�|d |t|��g� ��}|�|||d � ��}|S#t$r5}t�d t |������Yd}~dSd}~wwxYw)zApprove token spending�spenderrr%�amountr*�approver+)r-r&r'r)r3rwr)r8rYrCrDzToken approval failed: N)ryrRr^rrrr) rr8r9�spender_addressr�� approve_abi� function_datar]r"s r� approve_tokenzPolygonClient.approve_token�s��� �'� �:�:�%�y�9�9��"�"� ���K�!�5�5���N�%�s�6�{�{�3�6���M� �+�+�-�(�"�� ,���G��N��� � � � �L�L�;�3�q�6�6�;�;� <� <� <��4�4�4�4�4����� ���s�AA� B�"*B�B)r=rN)r_)N)�__name__� __module__� __qualname__�__doc__rrr<r^rfrsryr�r�rPr�r�r�r��rrrr s�������#�#� 8� 8� 8� � � ����:2�2�2�2�h � � � �:�:�:�" � � �$�$�$�����������"����������rr) r �loggingr~�web3r� eth_accountr�web3.exceptionsr� getLoggerr�rrr�rr�<module>r�s��� � � � ����� � � � �������������/�/�/�/�/�/� �� �8� $� $��v�v�v�v�v�v�v�v�v�vr

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