
    af*                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ ej	        s& e
d            e
d            ej        d           d dl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 d d
lmZ d dlZd dlZd dlZd dlZd dlm Z  d dl!Z!d dl"Z"d dl#Z#d dl$Z$d dl%Z%d dl&Z'd dl(Z( e(j)                     d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dlm;Z;m<Z<m=Z=m>Z> d dlm?Z?m@Z@mAZA d dlmBZBmCZC d dlDmEZE d dlFmGZGmHZHmIZI g dZJ G d de3          ZKd ZLd ZMeNdk    r eM             dS dS )    N)EnvironmentFileSystemLoader)xbr)__version__z3
You must install the [xbr] extra to use xbrnetworkz)For example, "pip install autobahn[xbr]".   )XBR_DEBUG_TOKEN_ADDRXBR_DEBUG_NETWORK_ADDRXBR_DEBUG_DOMAIN_ADDRXBR_DEBUG_CATALOG_ADDRXBR_DEBUG_MARKET_ADDRXBR_DEBUG_CHANNEL_ADDR)XBR_DEBUG_TOKEN_ADDR_SRCXBR_DEBUG_NETWORK_ADDR_SRCXBR_DEBUG_DOMAIN_ADDR_SRCXBR_DEBUG_CATALOG_ADDR_SRCXBR_DEBUG_MARKET_ADDR_SRCXBR_DEBUG_CHANNEL_ADDR_SRC)FbsRepository)pformat)reactor)inlineCallbacks)deferToThread)ReactorNotRunning)ApplicationSessionApplicationRunner)CBORSerializer)
cryptosign)ApplicationError)pack_uint256unpack_uint256sign_eip712_channel_openmake_w3)sign_eip712_member_registersign_eip712_market_createsign_eip712_market_join)	ActorTypeChannelType)load_or_create_profile)hltypehlidhlval)version
get-memberregister-memberregister-member-verify
get-marketcreate-marketcreate-market-verify	get-actorjoin-marketjoin-market-verifyget-channelopen-channelzclose-channeldescribe-schemacodegen-schemac                       e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zedd            Zed             Z	 	 ddZd Zd Zd Zd Zd Zd Zd Zd ZdS )Clientz
tls-uniqueNc                 ^   t          j        | |           d| _        d| _        |j                            dd           }|r|j        rt          |j                  t          k    rt          |j                  dk    sJ |j        | _
        t          j                            | j
                  | _        | j                            d| j        j                   n\t%          j        d          | _
        t          j                            | j
                  | _        | j                            d           |r7|j        r0|                     |           | j                            d           n6d | _        d | _        d | _        d | _        | j                            d	           d
| _        d S )Ni    profile    z8WAMP-Cryptosign keys with public key {public_key} loaded)
public_keyz)WAMP-Cryptosign keys initialized randomlyz XBR ETH keys loaded from profilezXBR ETH keys left unsetT)r   __init___default_gas	_chain_idextragetcskeytypebyteslen
_cskey_rawr   CryptosignKey
from_bytes_keyloginfor@   osurandomethkeyset_ethkey_from_profile_ethkey_raw_ethkey_ethadr_ethadr_raw_running)selfconfigr>   s      C/var/www/html/env/lib/python3.11/site-packages/autobahn/xbr/_cli.pyrA   zClient.__init__`   s~   #D&111 #,""9d33 	Gw} 	G&&%//C4F4F"4L4L4LL%mDO"0;;DOLLDIHMMTaeajauMvvvv jnnDO"0;;DOLLDIHMMEFFF 	5w~ 	5((111HMM<====#DDLDL#DHMM3444    c                    t          |j                  t          k    s/J d                    t          |j                                        t	          |j                  dk    s/J d                    t	          |j                                        |j        | _        t          j                            | j                  | _	        t          j                            | j	        j                                                  | _        t!          j        | j        dd                   | _        | j                            d| j                   dS )z3

        :param profile:
        :return:
        zBset_ethkey_from_profile::profile invalid type "{}" - must be bytesr?   z?set_ethkey_from_profile::profile invalid length {} - must be 32   Nz%ETH keys with address {ethadr} loaded)ethadr)rG   rR   rH   formatrI   rT   eth_keyskeys
PrivateKeyrU   web3Web3toChecksumAddressr@   to_canonical_addressrV   binasciia2b_hexrW   rN   rO   )rY   r>   s     r[   rS   zClient.set_ethkey_from_profile   s%    N $% % %&j&q&q  '" '"% % % 7>""b(((*k*r*r+! +!(((">}//0@AAy224<3J3_3_3a3abb#+DL,<===dlSSSSSr\   c                    | j         j        dk    r{| j                                        d d | j        d}| j                            dt          | j         j                             |                     | j         j        dg|           d S | j                            dt          | j         j                             |                     | j         j                   d S )N
xbrnetwork)pubkey	trustroot	challengechannel_bindingzTClient connected, now joining realm "{realm}" with WAMP-cryptosign authentication ..)realmr   )authmethods	authextrazDClient connected, now joining realm "{realm}" (no authentication) ..)	rZ   rp   rM   r@   CHANNEL_BINDINGrN   rO   r*   join)rY   rr   s     r[   	onConnectzClient.onConnect   s    ;,,)..00!!#'#7	 I HMMp $T[%6 7 7  9 9 9IIdk'l^yIYYYYYHMM` $T[%6 7 7  9 9 9IIdk'(((((r\   c                     |j         dk    rL| j                            || j        j        j                            | j        d           | j                  }|S t          d	                    |j                             )Nr   )
channel_idchannel_id_typez*unable to process authentication method {})
methodrM   sign_challenge	transporttransport_detailsrw   rE   rs   RuntimeErrorr`   )rY   rn   signed_challenges      r[   onChallengezClient.onChallenge   s    |++#y77	CG>CcCnCrCrsw  tH  JN  DO  DOHLH\  8  ^  ^ $#KRRS\Scddeeer\   c           	        K   | j                             dt          |j                  t          |j                  t          |j                  t          |j                  |           d| j        j        v r't          j
        | j        j        d         | |f           d| j        j        v r	 |j        dk    r|                     |           d {V  n|                     |           d {V  n?# t          $ r2}| j                                          || j        j        d<   Y d }~nd }~ww xY w|                                  d S # |                                  w xY wd S )NzbOk, client joined on realm "{realm}" [session={session}, authid="{authid}", authrole="{authrole}"])rp   sessionauthidauthroledetailsreadycommandrk   error)rN   rO   r*   rp   r   r   r   rZ   rD   txaioresolve_do_xbrnetwork_realm_do_market_realm	Exceptionfailureleave)rY   r   es      r[   onJoinzClient.onJoin   s     pw}%%))'''*++ 	 	 	 	 dk'''M$++G4tWoFFF)))	=L0033G<<<<<<<<<<//888888888 / / /  """-.!'******/ 



 *)s1   /AC2 1E 2
D.<(D)$E )D..E Ec                    | j                             dt          |j                             d| _        |j        dk    rG| j        rB| j        j        r8| j        j                                         |                                  d S d S d S d S )Nz%Client left realm (reason="{reason}"))reasonFzwamp.close.normal)	rN   rO   r+   r   rX   rZ   runnerstop
disconnect)rY   r   s     r[   onLeavezClient.onLeave   s    =eGNF[F[\\\>000{ "t{1 ""'')))!!!!!	 10" " " "r\   c                     | j                             d           	 t          j                     d S # t          $ r Y d S w xY w)NzClient disconnected)rN   rO   r   r   r   )rY   s    r[   onDisconnectzClient.onDisconnect   sM    +,,,	LNNNNN  	 	 	DD	s   1 
??c                 v  K   | j         j        d         }|j        dk    r| j                            d           |dv sJ |dk    r"|                     | j                   d {V  d S |dk    rB| j         j        d         }| j         j        d         }|                     ||           d {V  d S |d	k    rB| j         j        d
         }| j         j        d         }|                     ||           d {V  d S J d            t          j
        |j        dd                    }|dv sJ |dk    r"|                     | j                   d {V  d S |dk    r0| j         j        d         }|                     ||           d {V  d S |dk    rd| j         j        v r%| j         j        d         r| j         j        d         }nd }d| j         j        v r%| j         j        d         r| j         j        d         }	n| j        }	|                     ||	           d {V  d S |dk    r| j         j        d         }| j         j        d         }
| j         j        d         }| j         j        d         }| j         j        d         }| j         j        d         }| j         j        d         }| j         j        d         }|                     |||
||||||	  	         d {V  d S |dk    rC| j         j        d
         }| j         j        d         }|                     |||           d {V  d S |dk    rC| j         j        d         }| j         j        d         }|                     |||           d {V  d S |d k    rC| j         j        d
         }| j         j        d         }|                     |||           d {V  d S J d            )!Nr   	anonymousz#not yet a member in the XBR network)r-   r.   r/   r-   r.   usernameemailr/   vactionvcodeFshould not arrive here   )r-   r0   r1   r2   r3   r4   r5   r0   marketr3   actorr1   marketmakermarket_titlemarket_labelmarket_homepagemarket_provider_securitymarket_consumer_security
market_fee)titlelabelhomepageprovider_securityconsumer_securityr   r2   r4   
actor_typer5   )rZ   rD   r   rN   rO   _do_get_memberrW   _do_onboard_member_do_onboard_member_verifyuuidUUIDr   _do_get_market_do_get_actor_do_create_market_do_create_market_verify_do_join_market_do_join_market_verify)rY   r   r   r   r   vaction_oidvaction_code
member_oid
market_oidr   r   r   r   r   r   r   r   r   s                     r[   r   zClient._do_xbrnetwork_realm   s     +#I.{**HMM?@@@YYYYY,&&))$*:;;;;;;;;;;;---;,Z8)'2--h>>>>>>>>>>>444"k/	:#{0944[,OOOOOOOOOOO6666u 7>!""#566J  Q Q Q Q Q,&&))$*:;;;;;;;;;;;L((![.x8
))*jAAAAAAAAAAAK''t{000T[5Fx5P0!%!28!<JJ!%Jdk///DK4Eg4N/ K-g6EE ,E((U;;;;;;;;;;;O++![.x8
"k/>#{0@#{0@"&+"34E"F$(K$56P$Q!$(K$56P$Q!![.|<
,,Z[Xd3?/?Pdu8B - D D D D D D D D D D D 222"k/	:#{0933J\ZZZZZZZZZZZM))![.x8
![.|<
**:z:NNNNNNNNNNN000"k/	:#{0911*k<XXXXXXXXXXX6666ur\   c                 `  K   | j         j        d         }d|j        |j        |j        d}t          |          | _        t          j        | j                   | j         j        d         }|dv sJ |dk    r| j         j        d         }| j         j        d         }| j         j        d	         }|t          j
        k    r|                     ||           d {V  d S |t          j        k    r|                     ||           d {V  d S J d            |dk    r| j         j        d         }| j         j        d         pt          j                    }| j         j        d	         }| j         j        d         }| j         j        d         }	|                     |||||	           d {V  d S J d            )Nr>   infura)rG   networkkeysecretr   )r7   r6   r6   r   delegatechannel_typeFr   r7   channelamount)rZ   rD   infura_network
infura_keyinfura_secretr"   _w3r   setProviderr'   PAYMENT_do_get_active_payment_channelPAYING_do_get_active_paying_channelr   uuid4_do_open_channel)
rY   r   r>   blockchain_gatewayr   r   r   r   channel_oidr   s
             r[   r   zClient._do_market_realm  s     +#I. -%+	
 
 -..!!!+#I.99999m##*84J{(4H;,^<L{22299*hOOOOOOOOOOO!33388XNNNNNNNNNNN6666u&&*84J ++I6F$*,,K  ;,^<L {(4H [&x0F ''
KxY_```````````22225r\   c           	        K   |                      d|           d {V }|r|                      d|           d {V }t          j                            |d                   |d<   t	          j        |d                   |d<   t          j                            t          |d         d                   d          |d         d<   t          j                            t          |d         d	                   d          |d         d	<   t          j	        |d
         d          |d
<   |d         }dddddd}|
                    |d           |d<   | j                            dt          |d                   t          |d                   t          |d                              |S | j                            dt          t!          j        |                                                               d S )Nxbr.network.is_member xbr.network.get_member_by_walletaddressoidrH   balanceethetherr   creatednslevelACTIVEVERIFIEDRETIREDPENALTYBLOCKED)r   r^      r=      zZMember {member_oid} found for address 0x{member_adr} - current member level {member_level})member_levelr   
member_adr9Address 0x{member_adr} is not a member in the XBR networkr   )callrd   re   rf   r   r   fromWeir    np
datetime64rE   rN   rO   r+   r*   warnrh   b2a_hexdecode)rY   r   	is_membermember_datar   MEMBER_LEVEL_TO_STRs         r[   r   zClient._do_get_memberD  s     ))$;ZHHHHHHHH	 	S $		*Lj Y YYYYYYYK%)Y%@%@YAW%X%XK	"!%U1C!D!D!DK,0I,=,=n[YbMcdiMj>k>kmt,u,uK	"5),0I,=,=n[YbMcdiMj>k>kmt,u,uK	"5)%'];y3I4%P%PK	"&w/L # # $7#:#:<#N#NK HMMv',[-A'B'B%)+e*<%=%=%*;y+A%B%B  D D D HMMU%*8+;J+G+G+N+N+P+P%Q%Q  S S S S Sr\   c           
      t  K   |                      d|           d {V }|rV|                      d|           d {V }t          j        |d                   }t          j                            |d                   }|d         }t          j                            t          |d         d                   d	          }t          j                            t          |d         d
                   d	          }| j        	                    dt          |          t          |          t          |          t          |                     |r	|j        g}	n!|                      d|j                   d {V }	|	r|	D ]}|                      d||d                    d {V }
|
D ]}t          j                            |d                   |d<   t          j        |d         d          |d<   |d         rt          |d                   nd |d<   t          j        |d                   |d<   |d         r3t          j                            t          |d                   d	          nd |d<   |d         r/dt          j        |d                                                   z   nd |d<   |d         r/dt          j        |d                                                   z   nd |d<   |d         }dddd}|                    |d           |d<   | j        	                    dt          t          j        |                    t'          |                     d S | j        	                    d           d S | j                            d t          j        |                                          !           d S )"Nr   r   r   r   r   r   r   r   r   r   zFound member with address {member_adr} (member level {member_level}, balances: {member_balance_eth} ETH, {member_balance_xbr} XBR))r   r   member_balance_ethmember_balance_xbrz xbr.network.get_markets_by_actorzxbr.network.get_actor_in_marketr   	timestampr   joinedr   security	signature0xtidr   PROVIDERCONSUMERPROVIDER_CONSUMER)r   r^   r   z1Actor is joined to market {market_oid}:

{actor}
)r   r   z&Member is not yet actor in any market!r   r   )r   r   r   rd   re   rf   r   r    rN   rO   r*   r+   rH   r   r   rh   r   r   rE   r   r   )rY   r   	actor_adrr   r   	actor_oidactor_levelactor_balance_ethactor_balance_xbrmarket_oidsresultr   ACTOR_TYPE_TO_STRs                r[   r   zClient._do_get_actorg  s     ))$;YGGGGGGGG	 3	K))$F	RRRRRRRRE	e555I	33E)4DEEI.K $	 1 1.yAQRWAX2Y2Y[b c c $	 1 1.yAQRWAX2Y2Y[b c cHMM U	??";//#():#;#;#():#;#;  = = =  c)/0$(II.PR[Ra$b$bbbbbbb H"- j jJ#'99-NPZ\abk\l#m#mmmmmmmF!' j j)-)D)DU7^)T)Tg-/]5;Mt-T-Tk*MRS[_*f.x*I*I*Ibfh*.)%/*J*J*Jhmr&n( -2DI,=,=nUS]M^>_>_ah,i,i,i-1 j)ej'f) .3TH4DU;EW4X4X4_4_4a4a-a-a.2 k*Y^_dYe'oth.>uU|.L.L.S.S.U.U'U'Ukoe%*<%8
  *)2- -) /@.C.CJPT.U.Ul+&\15dij6Q6Q6Q1R1RZabgZhZh & j j j j-jj j8 FGGGGGHMMU%-%5i%@%@%G%G%I%I  K K K K Kr\   c              #   r  K   t          j        | j                                                  }d}| j        }| j        }|j                                        }|                     d          V }	|                     d          V }
|	d         }t          j        |	d         dd                    }|
d         d         }|	d	         d
         }||||d}t          j	        |          }t          j                    }|                    |           t          j        t          j        |                                d                    }t#          |||||||          }	 |                     d||||||||||||          V }nf# t$          $ rJ}| j                            d|           |                     dt-          |                     Y d }~d S d }~wt.          $ r}|d }~ww xY wt1          |          t2          k    sJ d|v r*t1          |d                   t4          k    r|d         dk    sJ d|v r|d         dk    sJ d|v r7t1          |d                   t6          k    rt9          |d                   dk    sJ t;          j        |d                   }| j                            d|           |S )Nmetamaskxbr.network.get_configxbr.network.get_statusverifying_chain_idverifying_contract_adrr^   blocknumbereulahash)member_usernamemember_emailclient_pubkeywallet_typesha2-256zxbr.network.onboard_memberApplicationError: {error}r   z
wamp.errorr   r   actiononboard_memberr      r   z9On-boarding member - verification "{vaction_oid}" createdr   ) rh   ri   rM   r@   rU   rT   rg   r   cbor2dumpshashlibsha256update	multihashto_b58_stringencodedigestr#   r   rN   r   r   strr   rG   dictintrH   rI   r   r   rO   )rY   r  r  member_passwordr  r  
wallet_key
wallet_raw
wallet_adrrZ   statusverifyingChainverifyingContract
registeredr  profile_objprofile_datahr>   r   r  r   r   s                          r[   r   zClient._do_onboard_member  s      ()=)=)?)?@@ ! \
%
  *??AA
yy!9::::yy!9:::: 45$,V4L-Mabb-QRRG_X.
f~f%  /(*&	
 
 {;//N	 ))*:188::z*R*RSS/
NL]0:JgW W	
	99%A%4lMS^`j%3ZARTXZaco%.0 0 0 0FF   	 	 	HNN6aN@@@JJ|SVV,,,FFFFF 	 	 	G	 F||t####f$$f[.A)B)Bc)I)IfU`NadeNeNeNee6!!fX&6:J&J&J&JJ&&4}0E+F+F%+O+OTWX^_lXmTnTnrtTtTtTttif]&;<<<Q_jkkks$   #F 
G$?GG$GG$c              #     K   | j                             d||           	 |                     d|j        |          V }n0# t          $ r#}| j                             d|           |d }~ww xY wt          |          t          k    sJ d|v r7t          |d                   t          k    rt          |d                   dk    sJ d|v r*t          |d                   t          k    r|d         d	k    sJ |d         }| j                             d
t          t          j        |                    t          dt          j        |d                                                   z                        |S )NzPVerifying member using vaction_oid={vaction_oid}, vaction_code={vaction_code} ..r   r   z!xbr.network.verify_onboard_memberr  r  r   r  r   r   zUSUCCESS! New XBR Member onboarded: member_oid={member_oid}, transaction={transaction}r   r   transaction)r   r8  )rN   rO   r   rH   r   r   rG   r)  rI   r*  r*   r   r   r+   rh   r   r   )rY   r   r   r  r   r   s         r[   r   z Client._do_onboard_member_verify  s      	h"-L 	 	J 	J 	J	99%H+J[]ijjjjFF 	 	 	HNN6aN@@@G	 F||t####v%%$vl/C*D*D*M*MRUV\]iVjRkRkoqRqRqRqqF""tF9,='>'>#'E'E&QZJ[^_J_J_J__L)
m!%dij&A&A&A!B!B"'x/?}@U/V/V/]/]/_/_(_"`"` 	 	b 	b 	b s   A   
A-
A((A-r   c
                   K   |                      d|j                   d {V }
|
d         }|                      d           d {V }|d         }t          j        |d         dd                    }t          j        |d         d         dd                    }|                      d	           d {V }|d
         d         }|                      d           d {V }t	          |          }| j                            d|           |                      d|j                   d {V }t	          |          }| j                            d|           d                    t          j	        dd                    
                    d          }t          j                    }|                    |           t          t          j        t          j
        |                                d                              }|||||j        |j        d}t%          j        |          }t          j                    }|                    |           t          j        t          j
        |                                d                    }t)          | j        |||||j        |||||||	          }t-          |          }t-          |          }t-          |	          }	|||d}|                      d|j        |j        |||||||||||	||           d {V }| j                            dt/          |                     t1          |          t2          k    sJ d|v r*t1          |d                   t4          k    r|d         dk    sJ d|v r|d         dk    sJ d|v r7t1          |d                   t          k    rt	          |d                   d k    sJ t7          j        |d         !          }| j                            d"|#           d S )$Nxbr.network.get_memberr   r  r  r  r^   	contractsxbrtokenr  r  r  xbr.network.find_marketsz)Total markets before: {cnt_market_before})cnt_market_before xbr.network.get_markets_by_ownerz.Market for owner: {cnt_market_by_owner_before}cnt_market_by_owner_beforez&these are my market terms (randint={})r   i  utf8r  )chain_idblock_numbercontract_adrr   r   r   )r   r   r   zxbr.network.create_marketzLSUCCESS: Create market request submitted: 
{createmarket_request_submitted}
)createmarket_request_submittedr   r  create_marketr   r  r   z8SUCCESS: New Market verification "{vaction_oid}" createdr  )r   rH   rh   ri   rI   rN   rO   r`   randomrandintr&  r!  r"  r#  r(  r$  r%  r'  r  r   r$   rT   r   r   rG   r)  r*  r   r   )rY   r   r   r   r   r   r   r   r   r   r   r   rZ   r0  r1  coin_adrr/  rD  resr>  rA  
terms_datar5  
terms_hashmeta_obj	meta_data	meta_hashr   
attributesrF  r   s                                  r[   r   zClient._do_create_market  s      II&>
@PQQQQQQQQ +
yy!9:::::::: 45$,V4L-Mabb-QRR#F;$7
$CABB$GHHyy!9::::::::gx0 II899999999HHAUfgggII@*BRSSSSSSSS%(XX"F1K 	 	M 	M 	M >DDV^TUW[E\E\]]ddekll
N	01A!((**j1Y1YZZ[[

 '(-$$*$*
 
 K))	N	+I,<QXXZZ,T,TUU	 .d.>Pacm.:J<LhXbdm.9;LN_akm m	
 )):;;():;;!*--
  
 

 04yy9TV`Vf9C9I>[g9JHV`bkmv9DFWYjlv9BJ	0P 0P *P *P *P *P *P *P& 	f5<=[5\5\ 	 	^ 	^ 	^ 233t;;;;<<<*;7B9 B9<?B@ B@DbcnDorsDsDsDst999>\?(?) ?) ?) ) >>>4*=9D; D;>CDD DDHK*=9I; I;>@IA IA IAA i&D]&STTTP^ijjjjjr\   c                   K   | j                             d||           |                     d|j        |           d {V }| j                             dt	          |                     t          |          t          k    sJ d|v r7t          |d                   t          k    rt          |d                   dk    sJ d|v r*t          |d                   t          k    r|d         d	k    sJ |d         }| j                             d
t          j
        |          t	          |                     |                     d           d {V }| j                             dt          |                     t          |          }| j                             d|           ||v s>J d                    t          j
        |          t          |                                |                     d|j                   d {V }| j                             dt          |                     t          |          }| j                             d|           ||v s>J d                    t          j
        |          t          |                                |D ]e}| j                             d|           |                     d|d           d {V }	| j                             dt	          |	                     fd S )NzWVerifying create market using vaction_oid={vaction_oid}, vaction_code={vaction_code} ..r7  z xbr.network.verify_create_marketzBCreate market request verified: 
{create_market_request_verified}
)create_market_request_verifiedr   r  r   r   zJSUCCESS! New XBR market created: market_oid={market_oid}, result=
{result}r   )r   r  r=  z3SUCCESS - find_markets: found {cnt_markets} markets)cnt_marketsz'Total markets after: {cnt_market_after})cnt_market_afterzFexpected to find market ID {}, but not found in {} returned market IDsr?  z;SUCCESS - get_markets_by_owner: found {cnt_markets} marketsz-Market for owner: {cnt_market_by_owner_after}r@  z2xbr.network.get_market(market_oid={market_oid}) ..r   xbr.network.get_marketT)include_attributesz*SUCCESS: got market information

{market}
)r   )rN   rO   r   rH   r   rG   r)  rI   r*  r   r   r`   )
rY   r   r   r   rS  r   r  rU  cnt_market_by_owner_afterr   s
             r[   r   zClient._do_create_market_verifyQ  s     o"-L 	 	J 	J 	J 04yy9[]h]n9E0G 0G *G *G *G *G *G *G& 	\5<=[5\5\ 	 	^ 	^ 	^ 233t;;;;===$*<8C: C:=BCC CCGJ*<8H: H:=?H@ H@ H@@ :::t*95@7 @7:=@> @>B`ajBknoBoBoBop 4LA
c!%!<!<!<WMkElEl 	 	n 	n 	n !II&@AAAAAAAAKY\]hYiYijjj {++?Rbccc[(((*r*y*yIJ'''[)9)9+; +;((( !II&H*JZ[[[[[[[[Sadepaqaqrrr %($4$4!E1J 	 	L 	L 	L[(((*r*y*yIJ'''[)9)9+; +;((( & 	c 	cJHMMN[eMfff99%=z^b9ccccccccFHMMIRYZ`RaRaMbbbb	c 	cr\   c           	        K   |                      d|j                   d {V }|d         }|                      d|j                   d {V }|r`|d         |k    r| j                            d           nL| j                            dt	          t
          j                            |d                                        t          j	        |d         	          |d<   t
          j                            |d                   |d<   t
          j                            |d
                   |d
<   t
          j                            |d                   |d<   t          j        |d         d          |d<   | j                            dt	          |          t          |                     d S | j                            dt	          |                     d S )Nr:  r   rW  ownerz You are market owner (operator)!zMarked is owned by {owner})r[  r   r   makercoinr   r   z+Market {market_oid} information:

{market}
)r   r   zNo market {market_oid} found!rV  )r   rH   rN   rO   r*   rd   re   rf   r   r   r   r   r   r   )rY   r   r   r   r   r   s         r[   r   zClient._do_get_market~  s      II&>
@PQQQQQQQQ +
yy!9:;KLLLLLLLL 	Xg*,,@AAAA:$tyGbGbcijqcrGsGsBtBtuuu#yvh/?@@@F8"i99&/JJF7O"i99&/JJF7O!Y88HHF6N"$-{0CT"J"JF;HMMJ%)*%5%5gfoo  O O O O O HMM9d:FVFVMWWWWWr\   c                 ~  K   |t           j        t           j        t           j        fv sJ |                     d|j                   d {V }|d         }|                     d           d {V }|d         }t          j        |d         dd                    }|                     d           d {V }	|	d         d	         }
i }t          j	        |          }t          j                    }|                    |           t          j        t          j        |                                d
                    }t#          | j        ||||
|j        ||          }|                     d|j        |j        ||
|||||
  
         d {V }t'          j        |d                   }| j                            d|           d S )Nr:  r   r  r  r  r^   r  r  r  r  zxbr.network.join_marketr   r   zESUCCESS! XBR market join request submitted: vaction_oid={vaction_oid}r  )r&   r   r   r  r   rH   rh   ri   r  r   r!  r"  r#  r$  r%  r&  r'  r%   rT   r   r   rN   rO   )rY   r   r   r   r   r   rZ   r0  r1  r/  rD  rN  rO  r5  rP  r   request_submittedr   s                     r[   r   zClient._do_join_market  s     i0)2DiFabbbbb II&>
@PQQQQQQQQ +
yy!9:::::::: 45$,V4L-Mabb-QRRyy!9::::::::gx0
K))	N	+I,<QXXZZ,T,TUU	+D,<nN_ak,8*:JJXac c	 #')),EzGWYcYi,:LJ[,6	9i#Y #Y Y Y Y Y Y Y i&7&FGGG]kvwwwwwr\   c                    K   |                      d|j        |           d {V }|d         }|d         }| j                            d|||           d S )Nzxbr.network.verify_join_marketr   r   zeSUCCESS! XBR market joined: member_oid={member_oid}, market_oid={market_oid}, actor_type={actor_type})r   r   r   )r   rH   rN   rO   )rY   r   r   r   request_verifiedr   r   s          r[   r   zClient._do_join_market_verify  s}      !%+K[M^`l!m!mmmmmmm%l3
%l3
s!jZ 	 	Q 	Q 	Q 	Q 	Qr\   c           	      p  K   |                      d|           d {V }| j                            dt          |                     |r| j                            dt          t          |d                   dz                       |                      d|d	                    d {V }| j                            d
t          |                     | j                            dt          t          |d                   dz            |d                    d S | j                            d           d S )Nz*xbr.marketmaker.get_active_payment_channel	{channel}r   z5Active buyer (payment) channel found: {amount} amountr        NZor   z+xbr.marketmaker.get_payment_channel_balancer   	{balance}ECurrent off-chain amount remaining: {remaining} [sequence {sequence}]	remainingseqri  sequencez(No active buyer (payment) channel found!r   rN   debugr   rO   r*  r    rY   r   delegate_adrr   r   s        r[   r   z%Client._do_get_active_payment_channel  sU     		"NP\]]]]]]]]{GG,<,<=== 	FHMMQ!$^GH4E%F%F%Q!R!R  T T T II&SU\]jUkllllllllGHNN;0@0@NAAAHMMa$'w{7K(L(Lx(W$X$Xcjkpcq  s s s s s HMMDEEEEEr\   c           	      p  K   |                      d|           d {V }| j                            dt          |                     |r| j                            dt          t          |d                   dz                       |                      d|d	                    d {V }| j                            d
t          |                     | j                            dt          t          |d                   dz            |d                    d S | j                            d           d S )Nz)xbr.marketmaker.get_active_paying_channelrc  rd  z5Active seller (paying) channel found: {amount} amountr   re  rf  z*xbr.marketmaker.get_paying_channel_balancer   rg  rh  ri  rj  rk  z(No active seller (paying) channel found!rm  ro  s        r[   r   z$Client._do_get_active_paying_channel  sT     		"M|\\\\\\\\{GG,<,<=== 	FHMMQ!$^GH4E%F%F%Q!R!R  T T T II&RT[\iTjkkkkkkkkGHNN;0@0@NAAAHMMa$'w{7K(L(Lx(W$X$Xcjkpcq  s s s s s HMMDEEEEEr\   c                 T  K   | j         }| j        j                                        }|                     d           d {V }t          j        |d         dd                    }	t          j        |d         dd                    }
|d         }t          j        |d         dd                    }|                     d           d {V }|d         d	         }|d
k    r|t          j        k    r|}t          j
        j        }n.|t          j        k    r|	}t          j
        j        }n
J d            	 t          | j        |||           d {V }| j                            d|           n-# t"          $ r }| j                                         |d }~ww xY wt'          ||||||j        |j        |||	|
|          }d }|                     d||j        |j        ||||||	|
t+          |          ||           d {V }| j                            dt-          |                     d S )Nzxbr.marketmaker.get_configr   r^   r[  r  r  zxbr.marketmaker.get_statusr  r  r   Fr   z*transaction submitted, txn_hash={txn_hash})txn_hashzxbr.marketmaker.open_channelz3Channel open request submitted:

{channel_request}
)channel_request)rT   rU   r@   rg   r   rh   ri   r'   r   r   
xbrchannelr   r   r   _send_AllowancerN   rO   r   r   r!   rH   r   r   )rY   r   r   r   r   r   
member_keyr   rZ   r   	recipientr  r  r/  current_block_numberfrom_adrto_adrrs  r   r   rQ  rt  s                         r[   r   zClient._do_open_channel  s     %
\,AACC
yy!=>>>>>>>>&vm'<QRR'@AA$VG_QRR%899	#$89!)!1&9Q2RSTSUSU2V!W!Wyy!=>>>>>>>>%gx8A::{222%/!333&/6666u!.t/CXvW]!^!^^^^^^^JU]^^^^     """
 -Z9KMceq-A:CSU`Uf-7;PY[ac c	 
 $		*H*V`Vf*5*;=OQe*@,PXZegp*6v*>*>	:!W !W W W W W W W
 	N&-o&>&> 	 	@ 	@ 	@ 	@ 	@s   39E- -
F7FFc           	      "   | j         }| j                            dd          }| j        }| j        j                            |d          }| j                            dt          | j	                  |           t          j        j                            ||                              |||| j        |d          }| j                            dt          | j	                  |	           | j        j        j                            || j        
          }| j                            dt          | j	                  t'          t)          j        |j                                                                       | j        j                            |j                  }	t3          |	          }	| j                            dt          | j	                  t'          t)          j        |	                                                               |	S )N10gweipending)block_identifierz9{func}::[1/4] - Ethereum transaction nonce: nonce={nonce})funcnonce)fromgasgasPricechainIdr  zQ{func}::[2/4] - Ethereum transaction created: raw_transaction=
{raw_transaction}
)r  raw_transaction)private_keyzF{func}::[3/4] - Ethereum transaction signed: signed_txn=
{signed_txn}
)r  
signed_txnzE{func}::[4/4] - Ethereum transaction submitted: txn_hash=0x{txn_hash})r  rs  )rB   r   toWeirV   r   getTransactionCountrN   rO   r)   rv  r   r<  	functionsapprovebuildTransactionrC   accountsign_transactionrT   r+   rh   r   rawTransactionr   sendRawTransactionrH   )
rY   rz  r{  r   r  r  r  r  r  rs  s
             r[   rv  zClient._send_Allowance  s   8>>$//< 00I0VVQ!$"677! 	 	# 	# 	#
 ,088HHYY ~[
 [
   	a,--+ 	 	- 	- 	- X\)::?X\Xh:ii
V,--X-j.GHHOOQQRR 	 	T 	T 	T 8<22:3LMM??S,--8+H55<<>>?? 	 	A 	A 	A
 r\   )N)NNNr   r   r   )__name__
__module____qualname__rs   rA   rS   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv   r\   r[   r;   r;   [   s        #O   >T T T") ) ) f f f  ." " "  C7 C7 C7J,3 ,3 ,3\!S !S !SF5K 5K 5Kn > > > _>@   _* mqUVZk Zk Zk Zkx+c +c +cZX X X*x x x>Q Q QF F FF F F/@ /@ /@b+ + + + +r\   r;   c                     t          d           t          d                    t          dt          z                                  t          d           t          d           t          d                    t	          t
                    t                               t          d                    t	          t                    t                               t          d                    t	          t                    t                               t          d                    t	          t                    t                               t          d	                    t	          t                    t                               t          d
                    t	          t                    t                                t          d           d S )N z XBR CLI {}
vz   Contract addresses:
z"      XBRToken   : {} [source: {}]z"      XBRNetwork : {} [source: {}]z"      XBRDomain  : {} [source: {}]z"      XBRCatalog : {} [source: {}]z"      XBRMarket  : {} [source: {}]z"      XBRChannel : {} [source: {}])printr`   r+   r   r*   r   r   r	   r   r
   r   r   r   r   r   r   r   r  r\   r[   print_versionr  3  sU   	"III	/
 
 s['8!9!9
:
:;;;	"III	
$%%%	
.
5
5d;O6P6PRj
k
klll	
.
5
5d;Q6R6RTn
o
oppp	
.
5
5d;P6Q6QSl
m
mnnn	
.
5
5d;Q6R6RTn
o
oppp	
.
5
5d;P6Q6QSl
m
mnnn	
.
5
5d;Q6R6RTn
o
oppp	"IIIIIr\   c                     t          j                    } |                     dt          t          ddd           |                     dddd	
           |                     ddt          d           |                     dddt          d           |                     dddt          d           ddg}|                     dddt          d                    |                     |                     ddt          d d!"           |                     d#d$t          d%d&"           |                     d'd(t          d)           |                     d*d+t          d,           |                     d-d.t          d d/"           |                     d0d1t          d d2"           |                     d3d4t          d d5"           |                     d6d7t          d d8"           |                     d9d:t          d d;"           |                     d<d=t          d d>"           |                     d?d@t          d dA"           |                     dBdCt          d dA"           |                     dDdEt          d dA"           |                     dFdGt          d dH"           |                     dIdJt          t          t          j	        t          j
        t          j        g          d dKL           |                     dMdNt          d dO"           |                     dPdQt          d dR"           |                     dSdTt          d dU"           |                     dVdWt          t          t          j        t          j        g          d dXL           |                     dYdZt          d d["           |                     d\d]t          d d^"           |                                 }|j        d_k    rt#                       d S |j        d`k    r t%          |j        a          }|                    |j                   t-          |j                  t-          |j                  z   t-          |j                  z   }t5          db                    t7          |          t7          t-          |j                            t7          t-          |j                            t7          t-          |j                                                 t5                       |                                 d S |j        dck    rt%          |j        a          }|                    |j                   t5          |                    dde                     t=          j        dfdg          }tA          |dhdij          }tC          |ddddk          }tD          j#        $                    |j%                  stE          j&        |j%                   |'                    ||j%        d           d S |j        |j        dk    rNt5          dl                    dm(                    t                                         tS          j*        dn           tW          |j,        |j-        |j.        |j/        o          }|j0        rtc          j2        dpq           ntc          j2        drq           tc          j3                    }	|	4                    dstk          dttl          z             u           |	4                    dvt7          |j7                  t7          |j#                  w           i dx|d|j        d.|j.        d1|j/        d(|j8        d+|j9        d4|j:        rtw          j<        |j:                  nd d7|j=        d:|j>        d=|j?        dy|j@        pdndz|jA        pdndE|jB        pdndG|jC        r!t          jE        |jC        d{d                    nd dJ|jF        dN|jG        dQ|jH        rtw          j<        |jH                  nd |jI        rtw          j<        |jI                  nd |jJ        |jK        r!t          jE        |jK        d{d                    nd |jL        pdnd|}
t          |jN        |jO        |
t                      g}          }	 |	4                    d~t7          |jN                  |jO        rdt7          |jO                  z   dz   ndA           |Q                    t          di           tS          j*        dn           d S # t          $ r.}t5          |           tS          j*        d           Y d }~d S d }~ww xY w)Nr   noop?zCommand to run)rG   choicesconstnargshelpz-dz--debug
store_truezEnable debug output.)r  r  z-oz--outputzCode output folder)rG   r  z-sz--schemaschemaz.FlatBuffers binary schema file to read (.bfbs))destrG   r  z-bz--basemodule
basemodulezRender to this base modulepythonjsonz-lz
--languagelanguagez"Generated code language, one of {}z--urlurlzwss://planet.xbr.network/wsz8The router URL (default: "wss://planet.xbr.network/ws").)r  rG   defaultr  z--realmrp   rk   z*The realm to join (default: "xbrnetwork").z--ethkeyrR   z5Private Ethereum key (32 bytes as HEX encoded string)z--cskeyrF   zKPrivate WAMP-cryptosign authentication key (32 bytes as HEX encoded string)z
--usernamer   z)For on-boarding, the new member username.z--emailr   z.For on-boarding, the new member email address.z--marketr   z*For creating new markets, the market UUID.z--market_titler   z+For creating new markets, the market title.z--market_labelr   z+For creating new markets, the market label.z--market_homepager   z.For creating new markets, the market homepage.z--provider_securityr   r  z--consumer_securityr   z--market_feer   z--marketmakerr   z3For creating new markets, the market maker address.z--actor_typer   zDActor type: PROVIDER = 1, CONSUMER = 2, PROVIDER_CONSUMER (both) = 3)r  rG   r  r  r  z--vcoder   z4For verifications of actions, the verification UUID.z	--vactionr   zRFor verifications of actions (on-board, create-market, ..), the verification code.z	--channelr   z+For creating new channel, the channel UUID.z--channel_typer   z6Channel type: Seller (PAYING) = 1, Buyer (PAYMENT) = 2z
--delegater   z/For creating new channel, the delegate address.z--amountr   zzAmount to open the channel with. In tokens of the market coin type, used as means of payment in the market of the channel.r,   r8   )r  zOok, loaded {} types ({} structs and tables, {} enums and {} service interfaces)r9   T)rb   autobahnzxbr/templateszutf-8F)encodingfollowlinks)loadertrim_blockslstrip_blocksz!no command given. select from: {}z, r   )default_urldefault_realmdefault_usernamedefault_emailrn  )r   rO   zXBR CLI {version}r  )r,   z$Profile {profile} loaded from {path})r>   pathr>   r   r   r^   )r   r   r   r   )r  rp   rD   serializersz Connecting to "{url}" {realm} ..z
at realm "")r  rp   )auto_reconnectr   )TargparseArgumentParseradd_argumentr(  	_COMMANDSr`   r*  sortedr&   r   r   r  r'   r   r   
parse_argsr   r  r   r  loadr  rI   objsenumsservicesr  r+   print_summarysummarypkg_resourcesresource_filenamer   r   rP   r  isdiroutputmkdirrenderrt   sysexitr(   r  rp   r   r   rn  r   start_loggingmake_loggerrO   r*   r   namerR   rF   r   r   r   r   r   r   r   r   r   r   rh   ri   r   r   r   r   r   r   r   r   network_urlnetwork_realmr   runr;   r   )parser
_LANGUAGESargsrepototal_count	templatesr  envr>   rN   rD   r   r   s                r[   _mainr  A  s   $&&F
	  )$!-  / / / !+3  5 5 5
 " 1  3 3 3
 "% M	  O O O &) 9	  ; ; ; F#J
$' AHHTT	  V V V "  =W	  Y Y Y 	$  ,I	  K K K 
% T  V V V
 	$ j  l l l
 '  $H	  J J J 	$  $M	  O O O 
%  $I	  K K K (+  $J	  L L L (+  $J	  L L L +.  $M	  O O O -0  $	  ! ! ! -0  $	  ! ! ! )  $	  ! ! ! *  $R	  T T T )  &	(:I<NPYPk'l m m $c  e e e 	$  $S	  U U U &  $q	  s s s &  $J	  L L L (+  &(:K<O'P Q Q $U  W W W '  $N	  P P P 
%  $ Z	  [ [ [ D|y   
*	*	*888		$+$)nns4:6T]9K9KK_ff+#di..!!#dj//""#dm$$%%	' ' 	( 	( 	(
 	 
)	)	) 888		$+ 	dlll%%&&& "3JPP	 ")g5QQQTNNN w}}T[)) 	"HT[!!! 	Ch///// <4<6#9#95<<TYYy=Q=QRRSSSHQKKK )TXTZ:>-W[Wac c c : 	.g.....f----!!$d33D.E.EFFF7w|ATAT[`aham[n[nooo
w

 t|
 
 TZ
 gn
 W]
 Edi,,,
 D-
 D-
 t3
  '(>(C!!
" '(>(C!#
$ $/.Q%
& TEU_8+D,<QRR,@AAA[_'
( $/)
* TZ+
, $,Hty...D-
. 37,Hty...D -?C}V(qrr):;;;RVk&Q5
 
 
8 #w':'BW_d0>0@0@/AC C C		HH7w233QXQfnL51F+G+GG#MMln  q q q JJveJ444
 HQKKKKK	  	 	 	!HHHHQKKKKKKKKK	s   *A'd' '
e1#ee__main__)OrP   r  r  jinja2r   r   r  r   r   HAS_XBRr  r  autobahn.xbr._abir   r	   r
   r   r   r   r   r   r   r   r   r   autobahn.xbrr   r   rh   r  rH  pprintr   ra   rd   r!  r$  r  numpyr   r   use_twistedtwisted.internetr   twisted.internet.deferr   twisted.internet.threadsr   twisted.internet.errorr   autobahn.twisted.wampr   r   autobahn.wamp.serializerr   autobahn.wampr   autobahn.wamp.exceptionr   r   r    r!   r"   r#   r$   r%   r&   r'   autobahn.xbr._configr(   autobahn.utilr)   r*   r+   r  r;   r  r  r  r  r\   r[   <module>r     s  6 
			 



     0 0 0 0 0 0 0 0                  
{ 	E
@AAA	E
7888CHQKKKJ J J J J J J J J J J J J J J JV V V V V V V V V V V V V V V V ' & & & & &                             $ $ $ $ $ $ 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 G G G G G G G G 3 3 3 3 3 3 $ $ $ $ $ $ 4 4 4 4 4 4 X X X X X X X X X X X X h h h h h h h h h h / / / / / / / / 7 7 7 7 7 7 - - - - - - - - - -2 2 2	U U U U U U U Up  M M M` z	EGGGGG r\   