Skip to main content
Glama
ethereum.cpython-311.pyc12.5 kB
� R\�h���|�ddlZddlZddlZddlmZddlmZddlmZej e ��Z Gd�d��Z dS)�N)�Web3)�Account)�TransactionNotFoundc�f�eZdZdZd�Zd�Zd�Zdd�Zdd �Zd �Z d �Z d �Z d�Z d�Z dd�Zd�Zd�ZdS)�EthereumClientzEthereum blockchain clientc�.�tjdd��|_ttj|j����|_|j���st�d��dSt� d��dS)N�ETHEREUM_RPC_URLzhttps://cloudflare-eth.comz%Failed to connect to Ethereum networkzConnected to Ethereum network) �os�getenv�rpc_urlr� HTTPProvider�w3� is_connected�logger�error�info)�selfs �-/home/runner/workspace/blockchain/ethereum.py�__init__zEthereumClient.__init__ s}���y�!3�5Q�R�R�� ��t�(���6�6�7�7����w�#�#�%�%� 9� �L�L�@� A� A� A� A� A� �K�K�7� 8� 8� 8� 8� 8�c � � |jj�|��}|j�|d��}t |��S#t $r8}t �d|�dt |������Yd}~dSd}~wwxYw)zGet ETH balance for address�etherzFailed to get balance for z: N�0)r�eth� get_balance�from_wei�str� Exceptionrr)r�address� balance_wei� balance_eth�es rrzEthereumClient.get_balances��� ��'�+�1�1�'�:�:�K��'�*�*�;��@�@�K��{�#�#� #��� � � � �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)zGet ERC20 token balanceT�_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_abir4r(r.�formatted_balancer"s r�get_token_balancez EthereumClient.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�|��}|jjj}|�� |jj� |||t|t��rt|��n|d���}nD#t$r7} t�dt| ���d���d}Yd} ~ nd} ~ wwxYw||t|t��rt|��n||||dd �} |jjj�| |��} |jj�| j��} t�d | �������| ���S#t$r5} t�d t| ������Yd} ~ dSd} ~ wwxYw) zSend transaction� PRIVATE_KEY_zPrivate key not found for N)�from�to�data�value�Gas estimation failed: z, using default�@ �)�noncer@rB�gas�gasPricerA�chainIdzTransaction sent: zTransaction failed: )r r �upperrrrr�get_transaction_count� gas_price� estimate_gas� isinstancer�intr�warning�account�sign_transaction�send_raw_transaction�rawTransactionr�hex) rr7� to_addressrArBrG� private_keyrFrLr"� transaction� signed_txn�tx_hashs r�send_transactionzEthereumClient.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��� �-�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�<�W�[�[�]�]�<�<� =� =� =��;�;�=�=� ��� � � � �L�L�8��A���8�8� 9� 9� 9��4�4�4�4�4����� ���sJ�AG� 2G�?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)�timeout)�status� block_number�gas_used�transaction_hashz#Failed to get transaction receipt: N) rr�wait_for_transaction_receiptr_� blockNumber�gasUsed�transactionHashrUrrrr)rrZr^�receiptr"s rrcz+EthereumClient.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) zGet transaction statusrE� confirmed�failed)r_r`ra� confirmations�pendingr)r_rkz"Failed to get transaction status: �unknown)r_rN) rr�get_transaction_receiptr_rdrer`rrrrr)rrZrgr"s r�get_transaction_statusz%EthereumClient.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)r2r%z Failed to encode function call: Nr<) rrr4�getattrr5�_encode_transaction_datarrrr)rr2�argsr4r*� encoded_datar"s r�encode_function_callz#EthereumClient.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� timestamprrrrrO�time)r� latest_blockr"s r�get_current_timestampz$EthereumClient.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�� |jjjS#t$r5}t�dt |������Yd}~dSd}~wwxYw)zGet current gas pricezFailed to get gas price: NlH/P)rrrLrrrr�rr"s r� get_gas_pricezEthereumClient.get_gas_price�sa�� ��7�;�(� (��� � � � �L�L�=�S��V�V�=�=� >� >� >��;�;�;�;�;����� ������ A�*A � Ac��� |jj�|��S#t$r5}t�dt |������Yd}~dSd}~wwxYw)zEstimate gas for transactionrCNrD)rrrMrrrr)rrXr"s rrMzEthereumClient.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 functionr1zContract call failed: N) rrr4rqr5r6rrrr) r�contract_addressr2� function_namersr4r*�resultr"s r�call_contract_functionz%EthereumClient.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)rrr`rrrrr~s r�get_block_numberzEthereumClient.get_block_number�sa�� ��7�;�+� +��� � � � �L�L�@��A���@�@� A� A� A��1�1�1�1�1����� ���r�c��� |jj�|��S#t$r5}t�dt |������Yd}~dSd}~wwxYw)zGet transaction detailszFailed to get transaction: N)rr�get_transactionrrrr)rrZr"s rr�zEthereumClient.get_transaction�sl�� ��7�;�.�.�w�7�7� 7��� � � � �L�L�?�s�1�v�v�?�?� @� @� @��4�4�4�4�4����� ���r�)r<rN)r\)N)�__name__� __module__� __qualname__�__doc__rrr;r[rcrorur|rrMr�r�r��rrrr s�������$�$� 9� 9� 9� � � ����:2�2�2�2�h � � � �:�:�:�" � � �$�$�$�����������"�������rr) r �loggingrz�web3r� eth_accountr�web3.exceptionsr� getLoggerr�rrr�rr�<module>r�s��� � � � ����� � � � �������������/�/�/�/�/�/� �� �8� $� $��T�T�T�T�T�T�T�T�T�Tr

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