a
    bgI                     @   sT   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 de	Z
dS )    N)IteratorList)Document)
BaseLoaderc                
   @   s   e Zd ZdZdeeeeeeeed	d
dZee dddZ	e
e dddZe
e dddZe
e dddZe
e dddZe
e dddZe
e dd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	           	      C   s   || _ tjdp|| _|| _|| _|| _|| _|| _	|| _
| jsJtdtd| j shtd| j  |dvr~td| d S )NZ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    r"   |/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/etherscan.py__init__   s    zEtherscanLoader.__init__)returnc                 c   s   g }| j dkr|  }nr| j dkr,|  }n^| j dkr@|  }nJ| j dkrT|  }n6| j dkrh|  }n"| j dkr||  }ntdt  |D ]
}|V  qdS )	zLazy load Documents from table.r   r   r   r   r   r   r   N)r   	getNormTxgetInternalTx
getERC20TxgetEthBalancegetERC721TxgetERC1155Txr   )r!   resultdocr"   r"   r#   	lazy_load6   s     











zEtherscanLoader.lazy_loadc           	      C   s   d| j  d| j d| j d| j d| j d| j d| j }zt|}|	  W n2 tj
jy } ztd| W Y d }~n
d }~0 0 | d	 }g }t|d
krtddgS |D ]6}t|}|d |d |d d}|t||d qtt| |S )NzBhttps://api.etherscan.io/api?module=account&action=txlist&address=&startblock=
&endblock=&page=&offset=&sort=&apikey=(Error occurred while making the request:r,   r    page_contentfromhashtor9   Ztx_hashr;   r8   metadatar   r   r   r   r   r   r   requestsr   raise_for_status
exceptionsRequestExceptionprintjsonlenr   strappend	r!   urlresponseeitemsr,   itemcontentr>   r"   r"   r#   r&   J   s:    

 zEtherscanLoader.getNormTxc              
   C   sr   d| j  d| j }zt|}|  W n2 tjjy\ } ztd| W Y d }~n
d }~0 0 t|	 d dgS )NzChttps://api.etherscan.io/api?module=account&action=balance&address=z&tag=latest&apikey=r5   r,   r7   )
r   r   r@   r   rA   rB   rC   rD   r   rE   )r!   rJ   rK   rL   r"   r"   r#   r)   `   s    
 zEtherscanLoader.getEthBalancec           	      C   s   d| j  d| j d| j d| j d| j d| j d| j }zt|}|	  W n2 tj
jy } ztd| W Y d }~n
d }~0 0 | d	 }g }t|d
krtddgS |D ]6}t|}|d |d |d d}|t||d q|S )NzJhttps://api.etherscan.io/api?module=account&action=txlistinternal&address=r/   r0   r1   r2   r3   r4   r5   r,   r   r6   r7   r9   r:   r;   r<   r=   r?   rI   r"   r"   r#   r'   m   s<    
 zEtherscanLoader.getInternalTxc           	      C   s   d| j  d| j d| j d| j d| j d| j d| j }zt|}|	  W n2 tj
jy } ztd| W Y d }~n
d }~0 0 | d	 }g }t|d
krtddgS |D ]6}t|}|d |d |d d}|t||d q|S )NzChttps://api.etherscan.io/api?module=account&action=tokentx&address=r/   r0   r1   r2   r3   r4   r5   r,   r   r6   r7   r9   r:   r;   r<   r=   r?   rI   r"   r"   r#   r(      s<    
 zEtherscanLoader.getERC20Txc           	      C   s   d| j  d| j d| j d| j d| j d| j d| j }zt|}|	  W n2 tj
jy } ztd| W Y d }~n
d }~0 0 | d	 }g }t|d
krtddgS |D ]6}t|}|d |d |d d}|t||d q|S )NzFhttps://api.etherscan.io/api?module=account&action=tokennfttx&address=r/   r0   r1   r2   r3   r4   r5   r,   r   r6   r7   r9   r:   r;   r<   r=   r?   rI   r"   r"   r#   r*      s<    
 zEtherscanLoader.getERC721Txc           	      C   s   d| j  d| j d| j d| j d| j d| j d| j }zt|}|	  W n2 tj
jy } ztd| W Y d }~n
d }~0 0 | d	 }g }t|d
krtddgS |D ]6}t|}|d |d |d d}|t||d q|S )NzGhttps://api.etherscan.io/api?module=account&action=token1155tx&address=r/   r0   r1   r2   r3   r4   r5   r,   r   r6   r7   r9   r:   r;   r<   r=   r?   rI   r"   r"   r#   r+      s<    
 zEtherscanLoader.getERC1155TxN)r   r   r	   r
   r   r   r   )__name__
__module____qualname____doc__rG   intr$   r   r   r.   r   r&   r)   r'   r(   r*   r+   r"   r"   r"   r#   r      s2   
       #r   )r   r   typingr   r   r@   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r   r"   r"   r"   r#   <module>   s   