
    (iB                     n   d dl mZmZ d dlmZ d dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z'm(Z(m)Z) d d
l*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2Z2d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZC d dlDmEZEmFZFmGZGmHZH d dlImJZJ erd dl2mKZKmLZL d dlMmNZNmOZO deeeePf   deQfdZR	 d<dededeeee   ee   e
ePef   f      dee   fdZS	 d<dededeeee   e
ePef   f      deeee         fdZTdedeUfdZVe%deeeef      dee   fd        ZWe0deded!eHdeFfd"       ZXe%d#ee   dee   fd$       ZYe0	 d<d#ee   d%ee   dee   fd&       ZZ e. eZd'      eY      Z[d(edeUfd)Z\ e-e\      Z] G d* d+      Z^ G d, d-e^      Z_ G d. d/e^      Z`dedeeQee   f   fd0Zae#dededeeePd1f      fd2       Zb e+e ec      Zde%d3e	e   dee   fd4       Ze G d5 d1e      Zf G d6 d7ef      Zg G d8 d9ef      Zh G d: d;e      Ziy)=    )ABCabstractmethod)EnumN)TYPE_CHECKINGAny
CollectionDictIterableListOptionalSequenceTupleUnioncast)grammar)ABICodec)ABIComponentABIComponentIndexedABIEventChecksumAddressHexStr
PrimitivesTypeStr)
encode_hexis_list_likekeccakto_bytesto_dictto_hexto_tuple)collapse_if_tupleevent_abi_to_log_topicget_abi_input_names)apply_formatter_if)
complementcomposeconscurry	valfilter)exclude_indexed_event_inputsget_indexed_event_inputsmap_abi_data
named_treenormalize_event_input_types)encode_single_packedhexstr_if_str)BASE_RETURN_NORMALIZERS)AttributeDict)InvalidEventABILogTopicErrorWeb3ValueError)BlockIdentifier	EventDataFilterParams
LogReceipt)get_event_log_topics)	AsyncWeb3Web3)AsyncLogFilter	LogFilterlog_entry_datareturnc                 "    t        t        |       S N)r0   r   )r?   s    C/var/www/br/venv/lib/python3.12/site-packages/web3/_utils/events.py_log_entry_data_to_bytesrD   k   s     >22    	event_abi	abi_codec	argumentsc                    |i }nat        |t        t        f      rKt        |      t        | d         k7  rt	        d      t        | d   |      D ci c]  \  }}|d   |g }}}|j                         D ci c]  \  }}|t        |      r|n|g }}}t        t        |             }t        |       }	|	D cg c]  }||j                  |d   d g      f }
}|
D cg c]7  \  }}|D cg c]&  }|d nt        |j                  |d   g|g            ( c}9 }}}}t        t        |g|z               }|S c c}}w c c}}w c c}w c c}w c c}}}w )NinputsXWhen passing an argument list, the number of arguments must match the event constructor.nametype)
isinstancelisttuplelenr5   zipitemsr   r   r"   r+   getencodenormalize_topic_list)rF   rG   rH   arg	arg_valuekeyvaluenormalized_argsevent_topicindexed_argszipped_abi_and_argsarg_optionsoptionencoded_argstopicss                  rC   construct_event_topic_setrc   q   s   
 		Ie}	-y>S8!455 /  #&i&99"E
Y K)$
	 
 $//+C 	l5)Uw6O 
 3I>?K+I6LCO<?o!!#f+v67  !4
 
 C &	
  > 	 0 0#f+ IJK	

L 
 &}|'CDEFM7
	

s*   D<:E;E"E.+EEEc                    |i }t        |t        t        f      rKt        |      t        | d         k7  rt	        d      t        | d   |      D ci c]  \  }}|d   |g }}}|j                         D ci c]  \  }}|t        |      r|n|g }}}t        |       }|D cg c]  }||j                  |d   d g      f }	}|	D 
cg c]7  \  }}
|
D cg c]&  }|d nt        |j                  |d   g|g            ( c}9 }}
}}t        j                  | D cg c]!  }t        d |D              rt        |      ng # }}|S c c}}w c c}}w c c}w c c}w c c}}
}w c c}w )NrJ   rK   rL   rM   c              3   $   K   | ]  }|d u 
 y wrB    ).0rZ   s     rC   	<genexpr>z+construct_event_data_set.<locals>.<genexpr>   s      Lud!2 Ls   )rN   rO   rP   rQ   r5   rR   rS   r   r*   rT   r   rU   	itertoolsproductany)rF   rG   rH   rW   rX   rY   rZ   r[   non_indexed_argsr^   r_   r`   ra   permutationdatas                  rC   construct_event_data_setro      s   
 	)dE]+y>S8!455 /  #&i&99"E
Y K)$
	 
 $//+ C 	l5)Uw6O  4I>CS<?o!!#f+v67  !4
 
 C &	
  > 	 0 0#f+ IJK	

L 
 %,,l; ! L LL[RTTD  K?

	

s0   E9E&EE!+EE!!&E(E!type_strc                 D    t        j                  |       }|j                  S rB   )r   parse
is_dynamic)rp   abi_types     rC   is_dynamic_sized_typeru      s    }}X&HrE   event_inputsc              #   |   K   | D ]3  }|j                  d      rt        |d         rd 't        |       5 yw)z
    Event logs use the `keccak(value)` for indexed inputs of type `bytes` or
    `string`.  Because of this we need to modify the types so that we can
    decode the log entries using the correct types.
    indexedrM   bytes32N)rT   ru   r!   )rv   	input_abis     rC    get_event_abi_types_for_decodingr{      s@      " /	==#(=i>O(PO#I..	/s   :<	log_entryc                 f   t        ||d         }|D cg c]  }t        |       }}t        |      }t        |      }t	        |      }t        t        |d   d|d            }	t        |      t        |      k7  r#t        dt        |       dt        |             t        |d         }
t        |      }t        |      }t	        |      }t        t        |d   d|d            }t        |	      j                  |      }|rt        dd	j                  |       d
      | j                  ||
      }t        t         ||      }t#        ||      }t%        ||      D cg c]  \  }}| j                  |g|      d    }}}t        t         ||      }t'        t)        j*                  t%        |	|      |j-                                     }t/        ||d   |d   |d   |d   |d   |d   |d         }t1        |t2              r#t5        t.        t3        j6                  |            S |S c c}w c c}}w )z^
    Given an event ABI and a log entry for that event, return the decoded
    event data
    rb   rL   event)rL   rM   rJ   z	Expected z log topics.  Got rn   zCThe following argument names are duplicated between event inputs: 'z, 'r   logIndextransactionIndextransactionHashaddress	blockHashblockNumber)argsr~   r   r   r   r   r   r   )r:   rD   r+   r.   r{   r#   r   rQ   r4   r*   setintersectionr3   joindecoder,   r1   r-   rR   dictri   chainrS   r7   rN   r2   r   	recursive)rG   rF   r|   
log_topicstopiclog_topics_byteslog_topics_abilog_topic_normalized_inputslog_topic_typeslog_topic_nameslog_datalog_data_abilog_data_normalized_inputslog_data_typeslog_data_namesduplicate_namesdecoded_log_datanormalized_log_datanamed_log_data
topic_type
topic_datadecoded_topic_datanormalized_topic_data
event_args
event_datas                            rC   get_event_datar      s}    &i81DEJEOPE07PP-i8N"=n"M67RSO))F+WWXO O 44O,--?DT@U?VW
 	
 (	&(9:H/	:L!<\!J56PQN()F+WUVN /*77GO&&*ii&@%AD
 	

 !''A&1A  "N '*/;K&L"J
 	*z215  )2D !67  "	
J :&"#56!"34)$K(m,	J )]+I}66zBCCI QNs   H(  H-seqc              #   2   K   d | D        E d {    y 7 w)Nc              3   \   K   | ]$  }t        |      rt        |      d k(  r|d   n| & yw)   r   N)r   rQ   )rg   is     rC   rh   zpop_singlets.<locals>.<genexpr>4  s)     L1QCFaK!Q>Ls   *,rf   )r   s    rC   pop_singletsr   2  s     LLLLs   remove_valuec                 n    t        |       }|dkD  r!| |dz
     |k(  r|dz  }|dkD  r| |dz
     |k(  r| d | S )Nr   r   )rQ   )r   r   indexs      rC   remove_trailing_from_seqr   7  sP     HE
!)EAI,6
 !)EAI,6v;rE   )r   rW   c                 &    t        | t              ryy)NTF)rN   TopicArgumentFilter)rW   s    rC   
is_indexedr   G  s    #*+rE   c            	          e Zd ZdZdZdZdZdZ	 ddede	de
e   ddfdZedefd       Zej                   d	eddfd
       Zedefd       Zej                   d	eddfd       Zedefd       Zej                   d	eddfd       Zedeedf   fd       Zeedeedf   fd              Zeedeedf   fd              Zedee   fd       Zedeedf   fd       Zedefd       Zy)BaseEventFilterBuilderNFrF   rG   	formatterr@   c                     || _         || _        || _        t        | j                         | _        t        t        ||            | _        t        d |d   D              | _	        y )Nc              3   &   K   | ]	  }|d      yw)rL   Nrf   rg   rW   s     rC   rh   z2BaseEventFilterBuilder.__init__.<locals>.<genexpr>d  s     'SF'Ss   rJ   )
rF   rG   r   initialize_event_topicsr\   r2   &_build_argument_filters_from_event_abir   rP   _ordered_arg_names)selfrF   rG   r   s       rC   __init__zBaseEventFilterBuilder.__init__W  sZ     #""24>>B!29iH
	 #('Sy?R'S"SrE   c                     | j                   S rB   )_from_blockr   s    rC   
from_blockz!BaseEventFilterBuilder.from_blockf  s    rE   rZ   c                 t    | j                   | j                  s|| _         y t        d| j                   d      )Nzfrom_block is already set to .. Resetting filter parameters is not permitted)r   
_immutabler5   r   rZ   s     rC   r   z!BaseEventFilterBuilder.from_blockj  sB    #DOO$D /0@0@/C D? ? rE   c                     | j                   S rB   )	_to_blockr   s    rC   to_blockzBaseEventFilterBuilder.to_blockt  s    ~~rE   c                 t    | j                   | j                  s|| _         y t        d| j                   d      )NztoBlock is already set to r   )r   r   r5   r   s     rC   r   zBaseEventFilterBuilder.to_blockx  s<    >>!$//"DN ,T^^,> ?? ? rE   c                     | j                   S rB   )_addressr   s    rC   r   zBaseEventFilterBuilder.address  s    }}rE   c                 t    | j                   | j                  s|| _         y t        d| j                  d      )Nzaddress is already set to r   )r   r   r5   r   r   s     rC   r   zBaseEventFilterBuilder.address  s<    == !DM ,T\\,< =? ? rE   .c                 h    t        t        | j                  j                  | j                              S rB   )rP   mapr   __getitem__r   r   s    rC   ordered_argsz#BaseEventFilterBuilder.ordered_args  s$    S..0G0GHIIrE   c                 H    t        t        t        | j                              S rB   )rP   filterr   r   r   s    rC   r]   z#BaseEventFilterBuilder.indexed_args  s     VJ(9(9:;;rE   c                 H    t        t        t        | j                              S rB   )rP   r   is_not_indexedr   r   s    rC   	data_argsz BaseEventFilterBuilder.data_args  s     VND,=,=>??rE   c                     t        d | j                  D              }t        t        t	        | j
                        |            S )Nc              3   4   K   | ]  }|j                     y wrB   match_valuesr   s     rC   rh   z0BaseEventFilterBuilder.topics.<locals>.<genexpr>  s     I3++I   )rP   r]   rV   r'   r   r\   )r   
arg_topicss     rC   rb   zBaseEventFilterBuilder.topics  s5    It7H7HII
#D0@0@)A:$NOOrE   c                 T    | j                   t        d | j                   D              S y)Nc              3   4   K   | ]  }|j                     y wrB   r   r   s     rC   rh   z>BaseEventFilterBuilder.data_argument_values.<locals>.<genexpr>  s     Dc))Dr   rB   )r   rP   r   s    rC   data_argument_valuesz+BaseEventFilterBuilder.data_argument_values  s$    >>%DT^^DDDrE   c                 z    | j                   | j                  | j                  | j                  d}t	        d |      S )N)rb   	fromBlocktoBlockr   c                 
    | d uS rB   rf   )xs    rC   <lambda>z6BaseEventFilterBuilder.filter_params.<locals>.<lambda>  s
    1D= rE   )rb   r   r   r   r)   )r   paramss     rC   filter_paramsz$BaseEventFilterBuilder.filter_params  s7     kk}}||	
 0&99rE   rB   ) __name__
__module____qualname__r   r   r   r   r   r   r   r   r7   r   propertyr6   r   setterr   r   r   r   r   r   r    r]   r   r   r   rb   r   r8   r   rf   rE   rC   r   r   P  s   IKIHJ *.	TT T I&	T
 
T  O      D   /   __o $      ^^_    JeCHo J J <eCHo <  < @5c? @  @ PV P P eCHo   :| : :rE   r   c                       e Zd ZddZy)EventFilterBuilderc                    t        |t        j                        st        d|      | j                  j                         D ]	  }d|_         d| _        t        d|j                  j                  | j                              }| j                  |_
        |j                  | j                         | |_        | j                  | j                  |_        |S )NInvalid web3 argument: got: Tr>   )rN   web3r<   r5   r   valuesr   r   ethr   r   set_data_filtersr   builderr   log_entry_formatter)r   w3rW   
log_filters       rC   deployzEventFilterBuilder.deploy  s    "dii( #?v!FGG99##% 	"C!CN	"+rvv}}T5G5G'HI
#'#5#5
 ##D$=$=>!
>>%-1^^J*rE   N)r   r<   r@   r>   r   r   r   r   rf   rE   rC   r   r     s    rE   r   c                       e Zd ZddZy)AsyncEventFilterBuilderc                   K   t        |t        j                        st        d|      | j                  j                         D ]	  }d|_         d| _        |j                  j                  | j                         d {   }t        d|      }| j                  |_	        |j                  | j                         | |_        | j                  | j                  |_        |S 7 bw)Nr   Tr=   )rN   r   r;   r5   r   r   r   r   r   r   r   r   r   r   r   r   )r   async_w3rW   r   s       rC   r   zAsyncEventFilterBuilder.deploy  s     (DNN3 #?|!LMM99##% 	"C!CN	"#<<..t/A/ABB
*J7
#'#5#5
 ##D$=$=>!
>>%-1^^J* Cs   A>C% C#A#C%N)r   zAsyncWeb3[Any]r@   r=   r   rf   rE   rC   r   r     s    rE   r   c                 :    | d   du rt        |       S t               S )N	anonymousF)r"   rO   )rF   s    rC   r   r     s!    &%i00vrE   BaseArgumentFilterc              #      K   | d   D ]L  }|d   }|j                  d      du rt        |t        |            }nt        t        |            }||f N y w)NrJ   rL   rx   TrG   arg_typer  )rT   r   r!   DataArgumentFilter)rF   rG   itemrY   rZ   s        rC   r   r     sg      (# 	6l88I$&'#.?.EE '0A$0GHE5j	s   AAr   c              #   4   K   | D ]  }t        |        y wrB   )array_to_tuple)r   rZ   s     rC   _normalize_match_valuesr    s       $U##$r   c                   |    e Zd ZU dZeedf   ed<   dZdeddfdZ	deddfd	Z
d
ee   ddfdZeedd              Zy)r   N._match_valuesFr  r@   c                     || _         y rB   r  )r   r  s     rC   r   zBaseArgumentFilter.__init__  s	     rE   rZ   c                     | j                   rt        d      | j                  t        |f      | _        y t        d      Nz5Setting values is forbidden after filter is deployed.z/An argument match value/s has already been set.r   r5   r
  r  r   s     rC   match_singlezBaseArgumentFilter.match_single  sB    ?? G  %!8%!BD !RSSrE   r   c                     | j                   rt        d      | j                  t        |      | _        y t        d      r  r  )r   r   s     rC   	match_anyzBaseArgumentFilter.match_any  s@    ?? G  %!8!@D !RSSrE   c                      y rB   rf   r   s    rC   r   zBaseArgumentFilter.match_values  s     	rE   )r@   N)r   r   r   r
  r   r   __annotations__r   r   r   r  r   r  r   r   r   rf   rE   rC   r   r     sx    %)M5c?)J! !T !T# T$ TTC TT T   rE   c                   6    e Zd Zedeeeedf   f   fd       Zy)r  r@   .c                 2    | j                   | j                  fS rB   )r  r
  r   s    rC   r   zDataArgumentFilter.match_values  s    }}d0000rE   N)r   r   r   r   r   r   r   r   rf   rE   rC   r  r    s-    1eGU38_$<= 1 1rE   r  c                   r    e Zd ZdededdfdZedee   fd       Z	e
deeedf      fd       Zd	edefd
Zy)r   r  rG   r@   Nc                      || _         || _        y rB   r  )r   r  rG   s      rC   r   zTopicArgumentFilter.__init__#  s    " rE   c              #   L    K    fd j                   D        E d {    y 7 w)Nc              3   @   K   | ]  }j                  |        y wrB   )_encode)rg   rZ   r   s     rC   rh   z8TopicArgumentFilter._get_match_values.<locals>.<genexpr>)  s     HEDLL'Hs   )r
  r   s   `rC   _get_match_valuesz%TopicArgumentFilter._get_match_values'  s     HT5G5GHHHs   $"$.c                 <    | j                   | j                         S y rB   )r
  r  r   s    rC   r   z TopicArgumentFilter.match_values,  s     )))++rE   rZ   c                     t        | j                        r(t        t        t	        | j                  |                  S t        | j
                  j                  | j                  g|g            S rB   )ru   r  r   r   r/   rG   rU   r   s     rC   r  zTopicArgumentFilter._encode3  sN     /&!5dmmU!KLMM$..//%IJJrE   )r   r   r   r   r   r   r    r
   r   r  r   r   r   r   r   r  rf   rE   rC   r   r   "  s~    ! !X !$ ! I8F#3 I I huVS['9:  KS KV KrE   r   c                   8    e Zd ZdZdZdZdZedee	   fd       Z
y)EventLogErrorFlagsdiscardignorestrictwarnr@   c                 x    | j                   j                         D cg c]  }|j                          c}S c c}w rB   )__members__keysupper)r   rY   s     rC   flag_optionszEventLogErrorFlags.flag_options@  s+    '+'7'7'<'<'>?		???s   7N)r   r   r   DiscardIgnoreStrictWarnclassmethodr   strr(  rf   rE   rC   r  r  :  s6    GFFD@d3i @ @rE   r  rB   )jabcr   r   enumr   ri   typingr   r   r   r	   r
   r   r   r   r   r   r   eth_abir   eth_abi.codecr   
eth_typingr   r   r   r   r   r   r   	eth_utilsr   r   r   r   r   r   r    eth_utils.abir!   r"   r#   eth_utils.curriedr$   eth_utils.toolzr%   r&   r'   r(   r)   r   web3._utils.abir*   r+   r,   r-   r.   web3._utils.encodingr/   r0   web3._utils.normalizersr1   web3.datastructuresr2   web3.exceptionsr3   r4   r5   
web3.typesr6   r7   r8   r9   web3.utils.abir:   r;   r<   web3._utils.filtersr=   r>   r.  bytesrD   rc   ro   boolru   r{   r   r   r   rV   r   r   r   r   r   r   r   rP   r  r  r   r  r   r  rf   rE   rC   <module>rC     s           
    
  3*fc123
3 IM((( d3isT#s(^CDE( 
&\	(\ AE,,, hsmT#s(^;<=, 
$x
 !	,^G  
 
/5/B!BCD/g/ 
/ NNN N 	N Nb 
Mhsm M M 
M 6:	#&.smc]  $/ C D  J'b: b:J/ $4 &x E%c:J4K  	$,eC--./ 	 $L%8 
$*S/ $hsm $ 
$
 B1+ 1K, K0@ @rE   