
    NgI                     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S )EtherscanLoaderzLoad 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	            j/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/etherscan.py__init__zEtherscanLoader.__init__   s      /z~~&9::Eg	&"	| 	?=>>>x.0DEE 	QO9MOOPPP 
 
 
 7v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     ;...^^%%FF[222''))FF[///__&&FF[M))''))FF[000%%''FF[111&&((FF7v77888 	 	CIIII	 	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r?   tx_hashrA   r>   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contentrE   s	            r&   r+   zEtherscanLoader.getNormTxJ   s   LQUQe L L+L L7;~L LMQYL L{L L*.)L L=A\L L 	
	A|C((H%%''''"3 	A 	A 	A<a@@@@@@@@	A)u::??"---.. 	M 	MD$iiG $VfTRVZXXHMM((KKKLLLLc&kk   (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   rG   r!   rH   rI   rJ   rK   r   rL   )r%   rQ   rR   rS   s       r&   r.   zEtherscanLoader.getEthBalance`   s    P,P PAEP P 	
	A|C((H%%''''"3 	A 	A 	A<a@@@@@@@@	Ahmmooh&?@@@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=r5   r6   r7   r8   r9   r:   r;   r1   r   r<   r=   r?   r@   rA   rB   rD   rF   rP   s	            r&   r,   zEtherscanLoader.getInternalTxm      7,7 7:>:J7 77 7/3y7 7BF+7 7 Y7 7 )-7 7 		A|C((H%%''''"3 	A 	A 	A<a@@@@@@@@	A)u::??"---.. 	M 	MD$iiG $VfTRVZXXHMM((KKKLLLLrW   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=r5   r6   r7   r8   r9   r:   r;   r1   r   r<   r=   r?   r@   rA   rB   rD   rF   rP   s	            r&   r-   zEtherscanLoader.getERC20Tx   rZ   rW   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=r5   r6   r7   r8   r9   r:   r;   r1   r   r<   r=   r?   r@   rA   rB   rD   rF   rP   s	            r&   r/   zEtherscanLoader.getERC721Tx   rZ   rW   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=r5   r6   r7   r8   r9   r:   r;   r1   r   r<   r=   r?   r@   rA   rB   rD   rF   rP   s	            r&   r0   zEtherscanLoader.getERC1155Tx   rZ   rW   N)r	   r
   r   r   r   r   r   )__name__
__module____qualname____doc__rN   intr'   r   r   r3   r   r+   r.   r,   r-   r/   r0    r(   r&   r   r      s|         #*!!9 !9!9 !9 	!9
 !9 !9 !9 !9 !9 !9 !9 !9F8H-    (4>    ,BtH~ B B B BtH~    .DN    .T(^    .d8n      r(   r   )r   r#   typingr   r   rG   langchain_core.documentsr   )langchain_community.document_loaders.baser   r   rc   r(   r&   <module>rg      s    				 				 ! ! ! ! ! ! ! !  - - - - - - @ @ @ @ @ @| | | | |j | | | | |r(   