
    [i\              	          d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	 ddl
mZ ej                            dd          Zd	d
dddddddZee         Zed         Zed         Zd)dedefdZ eej                            dd                    ZefdedededefdZdedefdZdefdZdedefdZd edee         fd!Ze G d" d#                      Zd$ed%ed&edefd'Z d edee         fd(Z!dS )*a  
LuckySt Syndicate - On-Chain Report Writer (Base)

Writes encrypted trading session reports to Base as self-transfer
transactions with report data in the calldata. Uses raw JSON-RPC +
eth-account (no web3.py) via Base RPC.

ERC-8021 Builder Code suffix is appended for tx attribution.
    N)	dataclass)Optional)Account)TransactionDictTypeLUCKYST_NETWORKmainneti!  zhttps://mainnet.base.orgzBase Mainnet)chain_idrpc_urlnamei4J zhttps://sepolia.base.orgzBase Sepolia)r   testnetr	   r
   luckystentity_codereturnc                     |                      d          }t          |                              dd          }d}d}||z   |z   }||ddt          |          z
           z   }|S )aE  
    Build an ERC-8021 Builder Code suffix (24 bytes).

    Format: [len:1][entity:N][schema:1][marker:M]
    - len: length of entity code string
    - entity: UTF-8 entity code
    - schema: 0x00
    - marker: ERC-8021 marker bytes, padded to fill 24 bytes total

    Returns 24 bytes to append to transaction calldata.
    zutf-8   big    s   !!!!!!!!N   )encodelento_bytes)r   entity_byteslength_byteschema_bytemarkerprefixsuffixs          &/app/agentic/syndicate/chain_writer.pybuild_erc8021_suffixr   /   sr     %%g..Ll##,,Q66KKF<'+5Ff/rCKK//00FM    LUCKYST_BUILDER_CODEmethodparamsc                    K   d| |dd}t          j        d          4 d{V }|                    ||           d{V }|                                cddd          d{V  S # 1 d{V swxY w Y   dS )z!Make a JSON-RPC call to Base RPC.z2.0r   )jsonrpcr"   r#   id   )timeoutN)json)httpxAsyncClientpostr)   )r"   r#   r
   payloadclientresps         r   	_rpc_callr0   P   s     6V1MMG ,,,       [[w[77777777yy{{                             s   1A))
A36A3addressc                 b   K   t          d| dg           d {V }t          |d         d          S )Neth_getTransactionCountlatestresult   r0   int)r1   r5   s     r   
_get_noncer9   X   sB      6(8KLLLLLLLLFvh$$$r    c                  ^   K   t          dg            d {V } t          | d         d          S )Neth_gasPricer5   r6   r7   )r5   s    r   _get_gas_pricer<   ]   s<      ^R00000000Fvh$$$r    
raw_tx_hexc                 |   K   t          d| g           d {V }d|v rt          d|d                    |d         S )Neth_sendRawTransactionerrorzTX failed: r5   )r0   RuntimeError)r=   r5   s     r   _send_raw_txrB   b   s[      5
|DDDDDDDDF&:::;;;(r    tx_hashc                 ^   K   t          d| g           d {V }|                    d          S )Neth_getTransactionReceiptr5   )r0   get)rC   r5   s     r   _get_tx_receiptrG   i   s<      87)DDDDDDDDF::hr    c                       e Zd ZU dZeed<   dZee         ed<   dZ	ee
         ed<   dZee
         ed<   dZee         ed<   dS )ReportTxResultz#Result of writing a report to Base.successNrC   block_numbergas_usedr@   )__name__
__module____qualname____doc__bool__annotations__rC   r   strrK   r8   rL   r@    r    r   rI   rI   r   sq         --MMM!GXc]!!!"&L(3-&&&"Hhsm"""E8C=r    rI   encrypted_reportprivate_keyfrom_addressc           
        K   	 | t           z   }d|                                z   }t          |           d{V }t                       d{V }t	          d |D                       }t          |          |z
  }d|dz  z   |dz  z   dz   }	dt          ||d	||	|dz  |d
	}
t          j        |
|          }d|j	                                        z   }t          |           d{V }d	dl}t          d          D ]}|                    d           d{V  t          |           d{V }|r{t          |                    dd          d          }|dk    r=t#          d|t          |d         d          t          |d         d                    c S t#          d|d          c S t#          d|d          S # t$          $ r(}t#          dt'          |                    cY d}~S d}~ww xY w)a  
    Write an encrypted report to Base as a self-transfer transaction.

    The transaction is: to=from, value=0, data=encrypted_report + ERC-8021 suffix.
    Uses EIP-1559 (Type 2) transactions via Base RPC.

    Args:
        encrypted_report: The encrypted report bytes (version + nonce + ciphertext)
        private_key: Hex private key for signing
        from_address: The sender's EVM address (tx sends to self)

    Returns:
        ReportTxResult with tx_hash on success
    0xNc              3   &   K   | ]}|d k    dV  dS )r   r   NrT   ).0bs     r   	<genexpr>z(write_report_to_chain.<locals>.<genexpr>   s&      55Qa1ffqffff55r    iR  r6      i     r   )	typechainIdnoncetovaluedatagasmaxFeePerGasmaxPriorityFeePerGas   status0x0r   TblockNumbergasUsed)rJ   rC   rK   rL   FzTransaction reverted)rJ   rC   r@   z7Receipt not confirmed within 30s (tx may still succeed))rJ   r@   )LUCKYST_BUILDER_SUFFIXhexr9   r<   sumr   BASE_CHAIN_IDr   sign_transactionraw_transactionrB   asynciorangesleeprG   r8   rF   rI   	ExceptionrS   )rU   rV   rW   calldatacalldata_hexrb   	gas_pricenon_zerozeroestimated_gastxsignedraw_txrC   rt   _receiptrj   es                      r   write_report_to_chainr   |   s     &?;#&<<hllnn, !........(********	
 55(555558}}x'B/4!8<tC $  %M$-
#
 
#
 )"k::.22444$V,,,,,,,, 	r 	 	A--"""""""""+G44444444G W[[5992>>Q;;) $ '%()?%D%D!$WY%7!<!<	      * % '4     " K
 
 
 	
  ; ; ;e3q66:::::::::;s*   FF9 F9 &F9 9
G+G& G+&G+c                 6  K   t          d| g           d{V }|                    d          }|r|                    d          sdS t                              |d                             dd                    }t          |          dk    r
|dd         S |S )	z
    Fetch the calldata from a Base transaction by hash.

    Used by report readers to retrieve encrypted report data.
    Returns raw bytes (stripped of ERC-8021 suffix).
    eth_getTransactionByHashNr5   inputrY    r   i)r0   rF   bytesfromhexreplacer   )rC   r5   r~   raws       r   fetch_tx_calldatar      s       7'CCCCCCCCF	H		B RVVG__ t
--7++D"55
6
6C 3xx"}}4C4yJr    )r   )"rP   osr)   dataclassesr   typingr   r*   eth_accountr   eth_account.typesr   environrF   NETWORKNETWORK_CONFIG_configrq   BASE_RPC_URLrS   r   r   rn   listdictr0   r8   r9   r<   rB   rG   rI   r   r   rT   r    r   <module>r      s    
			  ! ! ! ! ! !              1 1 1 1 1 1 *..*I
6
6 -  -   
!
#y! c %    0 .-JNN)955   ?K  C   t    %c %c % % % %
%c % % % %
3 3     3  8D>                        R;R;R; R; 	R; R; R; R;jS Xe_      r    