§
    æ˜ºhv  ã                   ób   — d dl Z d dlZd dlmZmZ d dlZd dlmZ d dlm	Z	  G d„ de	¦  «        Z
dS )é    N)ÚIteratorÚList)ÚDocument)Ú
BaseLoaderc                   ó
  — e Zd ZdZ	 	 	 	 	 	 	 dd	ed
ededededededefd„Zdee         fd„Z	de
e         fd„Zde
e         fd„Zde
e         fd„Zde
e         fd„Zde
e         fd„Zde
e         fd„Zde
e         fd„ZdS )ÚEtherscanLoaderz½Load transactions from `Ethereum` mainnet.

    The Loader use Etherscan API to interact with Ethereum mainnet.

    ETHERSCAN_API_KEY environment variable must be set use this loader.
    ú	docs-demoÚnormal_transactioné   é
   r   éÿàõÚdescÚaccount_addressÚapi_keyÚfilterÚpageÚoffsetÚstart_blockÚ	end_blockÚsortc	                 ón  — || _         t          j                             d¦  «        p|| _        || _        || _        || _        || _        || _	        || _
        | j        st          d¦  «        ‚t          j        d| j         ¦  «        st          d| j         › �¦  «        ‚|dvrt          d|› �¦  «        ‚d S )NÚETHERSCAN_API_KEYzEtherscan API key not providedz^0x[a-fA-F0-9]{40}$zInvalid contract address )r
   Úinternal_transactionÚerc20_transactionÚeth_balanceÚerc721_transactionÚerc1155_transactionúInvalid filter )r   ÚosÚenvironÚgetr   r   r   r   r   r   r   Ú
ValueErrorÚreÚmatch)	Úselfr   r   r   r   r   r   r   r   s	            úv/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/document_loaders/etherscan.pyÚ__init__zEtherscanLoader.__init__   sÓ   € ð  /ˆÔÝ”z—~’~Ð&9Ñ:Ô:ÐE¸gˆŒØˆŒØˆŒ	ØˆŒØ&ˆÔØ"ˆŒØˆŒ	àŒ|ð 	?ÝÐ=Ñ>Ô>Ð>åŒxÐ.°Ô0DÑEÔEð 	QÝÐO¸Ô9MÐOÐOÑPÔPÐPØð 
ð 
ð 
õ Ð7¨vÐ7Ð7Ñ8Ô8Ð8ð
ð 
ó    Úreturnc              #   óÎ  K  — g }| j         dk    r|                      ¦   «         }n·| j         dk    r|                      ¦   «         }n—| j         dk    r|                      ¦   «         }nw| j         dk    r|                      ¦   «         }nW| j         dk    r|                      ¦   «         }n7| j         dk    r|                      ¦   «         }nt          dt           › �¦  «        ‚|D ]}|V — ŒdS )	zLazy load Documents from table.r
   r   r   r   r   r   r   N)r   Ú	getNormTxÚgetInternalTxÚ
getERC20TxÚgetEthBalanceÚgetERC721TxÚgetERC1155Txr"   )r%   ÚresultÚdocs      r&   Ú	lazy_loadzEtherscanLoader.lazy_load6   s  è è € àˆØŒ;Ð.Ò.Ð.Ø—^’^Ñ%Ô%ˆFˆFØŒ[Ð2Ò2Ð2Ø×'Ò'Ñ)Ô)ˆFˆFØŒ[Ð/Ò/Ð/Ø—_’_Ñ&Ô&ˆFˆFØŒ[˜MÒ)Ð)Ø×'Ò'Ñ)Ô)ˆFˆFØŒ[Ð0Ò0Ð0Ø×%Ò%Ñ'Ô'ˆFˆFØŒ[Ð1Ò1Ð1Ø×&Ò&Ñ(Ô(ˆFˆFåÐ7­vÐ7Ð7Ñ8Ô8Ð8Øð 	ð 	ˆCØˆIˆIˆIˆIð	ð 	r(   c                 óD   — t          |                      ¦   «         ¦  «        S )z3Load transactions from spcifc account by Etherscan.)Úlistr3   )r%   s    r&   ÚloadzEtherscanLoader.loadJ   s   € å�D—N’NÑ$Ô$Ñ%Ô%Ð%r(   c                 óˆ  — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › �}	 t          j        |¦  «        }| 	                    ¦   «          n1# t          j
        j        $ r}t          d|¦  «         Y d }~nd }~ww xY w|                     ¦   «         d	         }g }t          |¦  «        d
k    rt          d¬¦  «        gS |D ]M}t!          |¦  «        }|d         |d         |d         dœ}|                     t          ||¬¦  «        ¦  «         ŒNt          t          |¦  «        ¦  «         |S )NzBhttps://api.etherscan.io/api?module=account&action=txlist&address=ú&startblock=ú
&endblock=ú&page=ú&offset=ú&sort=ú&apikey=ú(Error occurred while making the request:r1   r   Ú ©Úpage_contentÚfromÚhashÚto©rB   Útx_hashrD   ©rA   Úmetadata©r   r   r   r   r   r   r   Úrequestsr!   Úraise_for_statusÚ
exceptionsÚRequestExceptionÚprintÚjsonÚlenr   ÚstrÚappend©	r%   ÚurlÚresponseÚeÚitemsr1   ÚitemÚcontentrH   s	            r&   r+   zEtherscanLoader.getNormTxN   s¦  € ðLÐQUÔQeð Lð LØÔ+ðLð LØ7;´~ðLð LØMQÌYðLð Là”{ðLð Là*.¬)ðLð Là=A¼\ðLð Lð 	ð
	AÝ”| CÑ(Ô(ˆHØ×%Ò%Ñ'Ô'Ð'Ð'øÝÔ"Ô3ð 	Að 	Að 	AÝÐ<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøà—’‘” Ô)ˆØˆÝˆu‰:Œ:˜Š?ˆ?Ý¨"Ð-Ñ-Ô-Ð.Ð.Øð 	Mð 	MˆDÝ˜$‘i”iˆGØ $ V¤¸¸f¼ÈTÐRVÌZÐXÐXˆHØ�MŠM�(°À(ÐKÑKÔKÑLÔLÐLÐLÝ�c�&‰kŒkÑÔÐØˆó   ¼(A% Á%BÁ9BÂBc                 ó.  — d| j         › d| j        › �}	 t          j        |¦  «        }|                     ¦   «          n1# t          j        j        $ r}t          d|¦  «         Y d }~nd }~ww xY wt          | 	                    ¦   «         d         ¬¦  «        gS )NzChttps://api.etherscan.io/api?module=account&action=balance&address=z&tag=latest&apikey=r>   r1   r@   )
r   r   rJ   r!   rK   rL   rM   rN   r   rO   )r%   rT   rU   rV   s       r&   r.   zEtherscanLoader.getEthBalanced   sÄ   € ðPØÔ,ðPð PØAEÄðPð Pð 	ð
	AÝ”| CÑ(Ô(ˆHØ×%Ò%Ñ'Ô'Ð'Ð'øÝÔ"Ô3ð 	Að 	Að 	AÝÐ<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøå h§m¢m¡o¤o°hÔ&?Ð@Ñ@Ô@ÐAÐAs   ”(= ½A+ÁA&Á&A+c                 óP  — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › �}	 t          j        |¦  «        }| 	                    ¦   «          n1# t          j
        j        $ r}t          d|¦  «         Y d }~nd }~ww xY w|                     ¦   «         d	         }g }t          |¦  «        d
k    rt          d¬¦  «        gS |D ]M}t!          |¦  «        }|d         |d         |d         dœ}|                     t          ||¬¦  «        ¦  «         ŒN|S )NzJhttps://api.etherscan.io/api?module=account&action=txlistinternal&address=r8   r9   r:   r;   r<   r=   r>   r1   r   r?   r@   rB   rC   rD   rE   rG   rI   rS   s	            r&   r,   zEtherscanLoader.getInternalTxq   ó‡  € ð7ØÔ,ð7ð 7Ø:>Ô:Jð7ð 7àœð7ð 7à/3¬yð7ð 7àBFÄ+ð7ð 7ð ”Yð7ð 7ð )-¬ð7ð 7ð 	ð	AÝ”| CÑ(Ô(ˆHØ×%Ò%Ñ'Ô'Ð'Ð'øÝÔ"Ô3ð 	Að 	Að 	AÝÐ<¸aÑ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøà—’‘” Ô)ˆØˆÝˆu‰:Œ:˜Š?ˆ?Ý¨"Ð-Ñ-Ô-Ð.Ð.Øð 	Mð 	MˆDÝ˜$‘i”iˆGØ $ V¤¸¸f¼ÈTÐRVÌZÐXÐXˆHØ�MŠM�(°À(ÐKÑKÔKÑLÔLÐLÐLØˆrZ   c                 óP  — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › �}	 t          j        |¦  «        }| 	                    ¦   «          n1# t          j
        j        $ r}t          d|¦  «         Y d }~nd }~ww xY w|                     ¦   «         d	         }g }t          |¦  «        d
k    rt          d¬¦  «        gS |D ]M}t!          |¦  «        }|d         |d         |d         dœ}|                     t          ||¬¦  «        ¦  «         ŒN|S )NzChttps://api.etherscan.io/api?module=account&action=tokentx&address=r8   r9   r:   r;   r<   r=   r>   r1   r   r?   r@   rB   rC   rD   rE   rG   rI   rS   s	            r&   r-   zEtherscanLoader.getERC20Txˆ   r]   rZ   c                 óP  — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › �}	 t          j        |¦  «        }| 	                    ¦   «          n1# t          j
        j        $ r}t          d|¦  «         Y d }~nd }~ww xY w|                     ¦   «         d	         }g }t          |¦  «        d
k    rt          d¬¦  «        gS |D ]M}t!          |¦  «        }|d         |d         |d         dœ}|                     t          ||¬¦  «        ¦  «         ŒN|S )NzFhttps://api.etherscan.io/api?module=account&action=tokennfttx&address=r8   r9   r:   r;   r<   r=   r>   r1   r   r?   r@   rB   rC   rD   rE   rG   rI   rS   s	            r&   r/   zEtherscanLoader.getERC721TxŸ   r]   rZ   c                 óP  — d| j         › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › �}	 t          j        |¦  «        }| 	                    ¦   «          n1# t          j
        j        $ r}t          d|¦  «         Y d }~nd }~ww xY w|                     ¦   «         d	         }g }t          |¦  «        d
k    rt          d¬¦  «        gS |D ]M}t!          |¦  «        }|d         |d         |d         dœ}|                     t          ||¬¦  «        ¦  «         ŒN|S )NzGhttps://api.etherscan.io/api?module=account&action=token1155tx&address=r8   r9   r:   r;   r<   r=   r>   r1   r   r?   r@   rB   rC   rD   rE   rG   rI   rS   s	            r&   r0   zEtherscanLoader.getERC1155Tx¶   r]   rZ   N)r	   r
   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rQ   Úintr'   r   r   r3   r   r6   r+   r.   r,   r-   r/   r0   © r(   r&   r   r      s›  € € € € € ðð ð #Ø*ØØØØ!Øð!9ð !9àð!9ð ð!9ð ð	!9ð
 ð!9ð ð!9ð ð!9ð ð!9ð ð!9ð !9ð !9ð !9ðF˜8 HÔ-ð ð ð ð ð(&�d˜8”nð &ð &ð &ð &ð˜4 œ>ð ð ð ð ð,B˜t Hœ~ð Bð Bð Bð Bð˜t Hœ~ð ð ð ð ð.˜D œNð ð ð ð ð.˜T (œ^ð ð ð ð ð.˜d 8œnð ð ð ð ð ð r(   r   )r   r#   Útypingr   r   rJ   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   r   rf   r(   r&   ú<module>rj      sš   ðØ 	€	€	€	Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !à €€€Ø -Ð -Ð -Ð -Ð -Ð -à @Ð @Ð @Ð @Ð @Ð @ð@ð @ð @ð @ð @�jñ @ô @ð @ð @ð @r(   