
    (i                        d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ dZd	Zd
ZdZdZ	 d(dededee   deeeeef   fdZdedefdZ dedeee   ef   fdZ!dedefdZ"dedefdZ#d(dedee   defdZ$	 d(dededee   deeeef   fd Z%d!edefd"Z&d#edefd$Z'd%ed&edeeeeef   fd'Z(y))    )OptionalTuplecast)
PrivateKey)to_bytesto_int)pipe)ChainAwareUnsignedTransactionTransactionUnsignedTransactionencode_transaction+serializable_unsigned_transaction_from_dictstrip_signature)TypedTransaction)BlobsBytes32TransactionDictType#         E       Neth_keytransaction_dictblobsreturnc                    t        ||      }|j                         }t        |t              rd }t	        | ||      \  }}}nut        |t
              r|j                  }t	        | ||      \  }}}nGt        |t              r | j                  |      j                  \  }}}nt        dt        |             t        ||||f      }	||||	fS )N)r   zunknown Transaction object: )vrs)r   hash
isinstancer   sign_transaction_hashr   vr   sign_msg_hashr   	TypeErrortyper   )
r   r   r   unsigned_transactiontransaction_hashchain_idr"   rsencoded_transactions
             K/var/www/br/venv/lib/python3.12/site-packages/eth_account/_utils/signing.pysign_transaction_dictr-   ,   s     G ,002 &(;<)'3CXN	Aq	(+	6')))'3CXN	Aq	(*:	;
 ))*:;??	Aq 6t<P7Q6RSTT --A1ayQq!())    txn_objc                     t        | j                        \  }}t        |       }|t        | }|j                         S ||ddgz   }t	        | }|j                         S )a  
    Regenerate the hash of the signed transaction object.

    1. Infer the chain ID from the signature
    2. Strip out signature from transaction
    3. Annotate the transaction with that ID, if available
    4. Take the hash of the serialized, unsigned, chain-aware transaction

    Chain ID inference and annotation is according to EIP-155
    See details at https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md

    :return: the hash of the provided transaction, to be signed
    r   )extract_chain_idr"   r   r   r
   r   )r/   r(   _vunsigned_partssignable_transactionextended_transactions         r,   hash_of_signed_transactionr6   O   sq     &gii0NXr$W-N2NC  $$&&  .1a0@@<>RS$$&&r.   raw_vc                     | t         z
  }|dk  r/| dv rd| t        z   fS | dv rd| fS t        dt        |        d      t	        |d      \  }}||t        z   fS )zM
    Extracts chain ID, according to EIP-155.

    @return (chain_id, v)
    r      r      N>   r      zv z. is invalid, must be one of: 0, 1, 27, 28, 35+   )CHAIN_ID_OFFSETV_OFFSET
ValueErrorreprdivmod)r7   above_id_offsetr(   v_bits       r,   r1   r1   g   s     o-OF?%(*++h%= T%[M!OP  #?A65%(*++r.   ethereum_signature_bytesc                 Z    | d d }t        | d         }t        |      }|t        |      z   S )N)r   to_standard_vr   )rD   rsr"   
standard_vs       r,   to_standard_signature_bytesrJ   |   s8    	!#2	&B'+,Aq!J$$$r.   
enhanced_vc                 @    t        |       \  }}|t        z
  }|dv sJ |S )Nr9   )r1   r>   )rK   _chainchain_naive_v
v_standards       r,   rG   rG      s/    .z:V])Jr.   v_rawr(   c                 >    || t         z   }|S | t        z   d|z  z   }|S )Nr<   )r>   r=   )rP   r(   r"   s      r,   to_eth_vrR      s3    H H O#a(l2Hr.   accountr'   c                 f    | j                  |      }|j                  \  }}}t        ||      }|||fS N)r#   r   rR   )rS   r'   r(   	signaturerP   r)   r*   r"   s           r,   r!   r!      s<     %%&67IMMMUAq!Aq!9r.   	bytes_valc                 &    | j                  dd      S )N    r   )rjust)rW   s    r,   _pad_to_eth_wordr[      s    ??2u%%r.   valc                 H    t        t        t        | t        t                    S rU   )r   bytesr	   r   r[   )r\   s    r,   
to_bytes32r_      s#    	
 r.   keymsg_hashc                     | j                  |      }|j                  \  }}}t        |      }t        |      t        |      z   t	        |      z   }||||fS rU   )r#   r   rR   r_   r   )r`   ra   rV   rP   r)   r*   r"   eth_signature_bytess           r,   sign_message_hashrd      sX     !!(+IMMMUAqA$Q-*Q-7(1+Eq!())r.   rU   ))typingr   r   r   eth_keys.datatypesr   	eth_utilsr   r   eth_utils.toolzr	   &eth_account._utils.legacy_transactionsr
   r   r   r   r   r   eth_account.typed_transactionsr   eth_account.typesr   r   r   r=   r>   PERSONAL_SIGN_VERSIONINTENDED_VALIDATOR_SIGN_VERSIONSTRUCTURED_DATA_SIGN_VERSIONintr^   r-   r6   r1   rJ   rG   rR   r!   r[   r_   rd    r.   r,   <module>rq      s        ") &  " * *) * E? * 3S% 	 *F' ' '0,C ,E(3-*<$= ,*%% %E %c c C 8C= C  OS+2>Fsm
3S=& &' &C G *	*&*
3S% *r.   