
    7|hI                     Z    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
y)    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y)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.
    account_addressapi_keyfilterpageoffsetstart_block	end_blocksortc	                 x   || _         t        j                  j                  d      xs || _        || _        || _        || _        || _        || _	        || _
        | j                  st        d      t        j                  d| j                         st        d| j                          |dvrt        d|       y )NETHERSCAN_API_KEYzEtherscan API key not providedz^0x[a-fA-F0-9]{40}$zInvalid contract address )normal_transaction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	            m/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/etherscan.py__init__zEtherscanLoader.__init__   s      /zz~~&9:Eg	&"	||=>>xx.0D0DE89M9M8NOPP 
 
 vh788
    returnc              #     K   g }| j                   dk(  r| j                         }n| j                   dk(  r| j                         }n| j                   dk(  r| j                         }nr| j                   dk(  r| j	                         }nR| j                   dk(  r| j                         }n2| j                   dk(  r| j                         }nt        dt                |D ]  }|  yw)	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[[22'')F[[//__&F[[M)'')F[[00%%'F[[11&&(Fvh788 	CI	s   C!C#c                 z   d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   }	 t        j                  |      }|j                          j                         d	   }g }t        |      d
k(  rt        d      gS |D ]8  }t!        |      }|d   |d   |d   d}|j#                  t        ||             : t        t        |             |S # t        j                  j                  $ r}t        d|       Y d }~d }~ww xY w)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r:   tx_hashr<   r9   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@   s	            r!   r&   zEtherscanLoader.getNormTxJ   s5   PQUQeQePf4++,Jt~~6FfTYYKt{{m6$))HT\\NL 	
	A||C(H%%' )u:?"-.. 	MD$iG $VfTRVZXHMM((KL	M 	c&k ""33 	A<a@@	As   %D D:$D55D:c                 .   d| j                    d| j                   }	 t        j                  |      }|j	                          t        j                         d         gS # t        j
                  j                  $ r}t        d|       Y d }~Ld }~ww xY w)NzChttps://api.etherscan.io/api?module=account&action=balance&address=z&tag=latest&apikey=r6   r,   r8   )
r	   r
   rB   r   rC   rD   rE   rF   r   rG   )r    rL   rM   rN   s       r!   r)   zEtherscanLoader.getEthBalance`   s    ,,--@P 	
	A||C(H%%' hmmoh&?@AA ""33 	A<a@@	As   %A! !B>BBc                 R   d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   }	 t        j                  |      }|j                          j                         d	   }g }t        |      d
k(  rt        d      gS |D ]8  }t!        |      }|d   |d   |d   d}|j#                  t        ||             : |S # t        j                  j                  $ r}t        d|       Y d }~d }~ww xY w)NzJhttps://api.etherscan.io/api?module=account&action=txlistinternal&address=r0   r1   r2   r3   r4   r5   r6   r,   r   r7   r8   r:   r;   r<   r=   r?   rA   rK   s	            r!   r'   zEtherscanLoader.getInternalTxm   *   ,,-\$:J:J9K(tyyk$++TYYKx~7 		A||C(H%%' )u:?"-.. 	MD$iG $VfTRVZXHMM((KL	M  ""33 	A<a@@	A   %C3 3D&D!!D&c                 R   d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   }	 t        j                  |      }|j                          j                         d	   }g }t        |      d
k(  rt        d      gS |D ]8  }t!        |      }|d   |d   |d   d}|j#                  t        ||             : |S # t        j                  j                  $ r}t        d|       Y d }~d }~ww xY w)NzChttps://api.etherscan.io/api?module=account&action=tokentx&address=r0   r1   r2   r3   r4   r5   r6   r,   r   r7   r8   r:   r;   r<   r=   r?   rA   rK   s	            r!   r(   zEtherscanLoader.getERC20Tx   rT   rU   c                 R   d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   }	 t        j                  |      }|j                          j                         d	   }g }t        |      d
k(  rt        d      gS |D ]8  }t!        |      }|d   |d   |d   d}|j#                  t        ||             : |S # t        j                  j                  $ r}t        d|       Y d }~d }~ww xY w)NzFhttps://api.etherscan.io/api?module=account&action=tokennfttx&address=r0   r1   r2   r3   r4   r5   r6   r,   r   r7   r8   r:   r;   r<   r=   r?   rA   rK   s	            r!   r*   zEtherscanLoader.getERC721Tx   rT   rU   c                 R   d| j                    d| j                   d| j                   d| j                   d| j                   d| j
                   d| j                   }	 t        j                  |      }|j                          j                         d	   }g }t        |      d
k(  rt        d      gS |D ]8  }t!        |      }|d   |d   |d   d}|j#                  t        ||             : |S # t        j                  j                  $ r}t        d|       Y d }~d }~ww xY w)NzGhttps://api.etherscan.io/api?module=account&action=token1155tx&address=r0   r1   r2   r3   r4   r5   r6   r,   r   r7   r8   r:   r;   r<   r=   r?   rA   rK   s	            r!   r+   zEtherscanLoader.getERC1155Tx   rT   rU   N)z	docs-demor      
   r   idesc)__name__
__module____qualname____doc__rI   intr"   r   r   r.   r   r&   r)   r'   r(   r*   r+    r#   r!   r   r      s     #*!!9!9 !9 	!9
 !9 !9 !9 !9 !9F8H- (4> ,BtH~ BtH~ .DN .T(^ .d8n r#   r   )r   r   typingr   r   rB   langchain_core.documentsr   )langchain_community.document_loaders.baser   r   ra   r#   r!   <module>re      s%    	 	 !  - @|j |r#   