
    Lf*                     v   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(jR                          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        yy)    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y)Clientz
tls-uniqueNc                    t        j                  | |       d| _        d| _        |j                  j                  dd       }|r|j                  rt        |j                        t        k(  rt        |j                        dk(  sJ |j                  | _
        t        j                  j                  | j                        | _        | j                  j!                  d| j                  j"                         nct%        j&                  d      | _
        t        j                  j                  | j                        | _        | j                  j!                  d       |r@|j(                  r4| j+                  |       | j                  j!                  d       d
| _        y d | _        d | _        d | _        d | _        | j                  j!                  d	       d
| _        y )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      L/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/autobahn/xbr/_cli.pyrA   zClient.__init__`   sW   ##D&1 #,,""9d3w}}&%/C4F"4LLL%mmDO"00;;DOOLDIHHMMTaeajajauauMv jjnDO"00;;DOOLDIHHMMEFw~~((1HHMM<=   $DDLDL#DHHMM34    c                    t        |j                        t        k(  s)J dj                  t        |j                                     t	        |j                        dk(  s)J dj                  t	        |j                                     |j                  | _        t        j                  j                  | j
                        | _	        t        j                  j                  | j                  j                  j                               | _        t!        j"                  | j                  dd       | _        | j&                  j)                  d| j                         y)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    NN$% 	"&j&q&q '"	" % 7>>"b( 	!*k*r*r+! 	!(">>}}//0@0@Ayy224<<3J3J3_3_3ab#++DLL,<==dllSr\   c                    | j                   j                  dk(  r| j                  j                         d d | j                  d}| j
                  j                  dt        | j                   j                               | j                  | j                   j                  dg|       y | j
                  j                  dt        | j                   j                               | j                  | j                   j                         y )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!!#'#7#7	I HHMMp $T[[%6%6 7  9IIdkk''l^yIYHHMM` $T[[%6%6 7  9IIdkk''(r\   c                 ,   |j                   dk(  rb| j                  j                  || j                  j                  j
                  j                  | j                  d       | j                        }|S t        dj                  |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    |+#yy77	CG>>CcCcCnCnCrCrsw  tH  tH  JN  DOHLH\H\  8  ^ $#KRRS\ScScdeer\   c           	        K   | j                   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 rT	 |j                  dk(  r| j                  |       d {    n| j                  |       d {    | j                          y y 7 07 # t        $ r=}| j                   j                          || j                  j                  d<   Y d }~Wd }~ww xY w# | j                          w xY ww)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}}%)''**+ 	 	 dkk'''MM$++++G4tWoF)))	==L033G<<<//888
 

 * =8 /  "-.!!'*/ 

s`   CF#D( 3D$4D( D&D( F$D( &D( (	E.13E)$E1 )E..E1 1FFc                 B   | j                   j                  dt        |j                               d| _        |j                  dk(  rY| j
                  rL| j
                  j                  r5| j
                  j                  j                          | j                          y y y y )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   ss    =eGNNF[\>>00{{t{{11""'')!  2{ 1r\   c                     | j                   j                  d       	 t        j                          y # t        $ r Y y w xY w)NzClient disconnected)rN   rO   r   r   r   )rY   s    r[   onDisconnectzClient.onDisconnect   s3    +,	LLN  		s   2 	>>c                   K   | j                   j                  d   }|j                  dk(  r| j                  j	                  d       |dv sJ |dk(  r$| j                  | j                         d {    y |dk(  rM| j                   j                  d   }| j                   j                  d   }| j                  ||       d {    y |d	k(  rM| j                   j                  d
   }| j                   j                  d   }| j                  ||       d {    y J d       t        j                  |j                  dd        }|dv sJ |dk(  r$| j                  | j                         d {    y |dk(  r4| j                   j                  d   }| j                  ||       d {    y |dk(  rd| j                   j                  v r3| j                   j                  d   r| j                   j                  d   }nd }d| j                   j                  v r3| j                   j                  d   r| j                   j                  d   }	n| j                  }	| j                  ||	       d {    y |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   }| j                  |||
||||||	       d {    y |dk(  rN| j                   j                  d
   }| j                   j                  d   }| j                  |||       d {    y |dk(  rN| j                   j                  d   }| j                   j                  d   }| j!                  |||       d {    y |dk(  rN| j                   j                  d
   }| j                   j                  d   }| j#                  |||       d {    y J d       7 7 7 Q7 7 7 7 7 7 v7 %w) Nr   	anonymousz#not yet a member in the XBR network)r-   r.   r/   r-   r.   usernameemailr/   vactionvcode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   s8    ++##I.{*HHMM?@YYYY,&))$*:*:;;;--;;,,Z8))'2--h>>>44"kk//	:#{{00944[,OOO666u 7>>!"#56J  Q Q Q Q,&))$*:*:;;;L(![[..x8
))*jAAAK't{{000T[[5F5Fx5P!%!2!28!<J!%Jdkk///DKK4E4Eg4N KK--g6E ,,E((U;;;O+![[..x8
"kk//>#{{00@#{{00@"&++"3"34E"F$(KK$5$56P$Q!$(KK$5$56P$Q!![[..|<
,,Z[Xd3?/?Pdu8B - D D D 22"kk//	:#{{00933J\ZZZM)![[..x8
![[..|<
**:z:NNN00"kk//	:#{{00911*k<XXX666uy < ? P < B <D [ O Ys   A-Q9/Q0AQ9Q!AQ9Q$AQ9+Q',8Q9$Q*%CQ9(Q-)C/Q9Q0AQ9+Q3,AQ9>Q5?AQ9Q7Q9!Q9$Q9'Q9*Q9-Q90Q93Q95Q97Q9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| j                  ||       d {    y |t        j                  k(  r| j                  ||       d {    y J d
       |dk(  r| j                   j                  d   }| j                   j                  d   xs t        j                         }| j                   j                  d	   }| j                   j                  d   }| j                   j                  d   }	| j!                  |||||	       d {    y J d
       7 7 7 w)Nr>   infura)rG   networkkeysecretr   )r7   r6   r6   r   delegatechannel_typer   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m#**84J{{((4H;;,,^<L{22299*hOOO!3!3388XNNN666u&**84J ++++I6F$**,K  ;;,,^<L {{((4H [[&&x0F ''
KxY_```22251 PN( as7   DHG?-H5H6B<H2H3HHHc           	      p  K   | j                  d|       d {   }|rH| j                  d|       d {   }t        j                  j                  |d         |d<   t	        j
                  |d         |d<   t        j                  j                  t        |d   d         d      |d   d<   t        j                  j                  t        |d   d	         d      |d   d	<   t        j                  |d
   d      |d
<   |d   }dddddd}|j                  |d       |d<   | j                  j                  dt        |d         t        |d         t        |d                |S | j                  j                  dt        t!        j"                  |      j%                                      y 7 7 ~w)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	 $		*Lj YYK%)YY%@%@YAW%XK	"!%U1C!DK,0II,=,=n[YbMcdiMj>kmt,uK	"5),0II,=,=n[YbMcdiMj>kmt,uK	"5)%']];y3I4%PK	"&w/L # $7#:#:<#NK HHMMv',[-A'B%)+e*<%=%*;y+A%B  D HHMMU%*8+;+;J+G+N+N+P%Q  S? IYs    F6F0F6F3E;F63F6c           
        K   | j                  d|       d {   }|r| j                  d|       d {   }t        j                  |d         }t        j                  j                  |d         }|d   }t        j                  j                  t        |d   d         d	      }t        j                  j                  t        |d   d
         d	      }| j                  j                  dt        |      t        |      t        |      t        |             |r|j                  g}	n$| j                  d|j                         d {   }	|	r|	D ]  }| j                  d||d          d {   }
|
D ]x  }t        j                  j                  |d         |d<   t        j                  |d   d      |d<   |d   rt        |d         nd |d<   t        j                  |d         |d<   |d   r,t        j                  j                  t        |d         d	      nd |d<   |d   r)dt        j                   |d         j#                         z   nd |d<   |d   r)dt        j                   |d         j#                         z   nd |d<   |d   }dddd}|j%                  |d       |d<   | j                  j                  dt        t        j                  |            t'        |             {  y | j                  j                  d       y | j                  j)                  d t        j                   |      j#                         !       y 7 <7 "7 7 w)"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  s3    ))$;YGG	))$F	RRE		e5I		33E)4DEI.K $		 1 1.yAQRWAX2Y[b c $		 1 1.yAQRWAX2Y[b cHHMM U	?";/#():#;#():#;  = )//0$(II.PR[RaRa$bb"- jJ#'99-NPZ\abk\l#mmF!' j)-)D)DU7^)Tg-/]]5;Mt-Tk*MRS[_.x*Ibfh*.))%/*Jhmr&n(DII,=,=nUS]M^>_ah,i-1 j)ej'f)TH4D4DU;EW4X4_4_4a-a.2 k*Y^_dYeth.>.>uU|.L.S.S.U'Ukoe%*<%8
  *)2-) /@.C.CJPT.Ul+&\15diij6Q1RZabgZh & j-jj8 FGHHMMU%-%5%5i%@%G%G%I  Kg HR  c
 nsE   M MM MDM M&M 2M3G"M M M M c              #     K   t        j                  | j                  j                               }d}| j                  }| j
                  }|j                  j                         }| j                  d      }	| j                  d      }
|	d   }t        j                  |	d   dd        }|
d   d   }|	d	   d
   }||||d}t        j                  |      }t        j                         }|j                  |       t        j                  t        j                  |j!                         d            }t#        |||||||      }	 | j                  d||||||||||||      }t1        |      t2        k(  sJ d|v rt1        |d         t4        k(  r|d   dkD  sJ d|v r|d   dk(  sJ d|v r&t1        |d         t6        k(  rt9        |d         dk(  sJ t;        j<                  |d         }| j&                  j?                  d|       |S # t$        $ rB}| j&                  j)                  d|       | j+                  dt-        |             Y d }~y d }~wt.        $ r}|d }~ww xY ww)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
yy!9::yy!9:: 45$,,V4L-Mab-QRG_X.
f~f%  /(*&	
 {{;/NN	 )))*:*:188:z*RS/
NL]0:JgW	
	99%A%4lMS^`j%3ZARTXZaco%.0 0F F|t###f$f[.A)Bc)IfU`NadeNeee6!fX&6:J&JJJ&4}0E+F%+OTWX^_lXmTnrtTtttiif]&;<Q_jk   	HHNN6aN@JJ|SV, 	G	s=   EI(H #B)I(	I%8II(I%I  I%%I(c              #     K   | j                   j                  d||       	 | j                  d|j                  |      }t        |      t        k(  sJ d|v r&t        |d         t        k(  rt        |d         dk(  sJ d|v rt        |d         t        k(  r|d   d	kD  sJ |d   }| j                   j                  d
t        t        j                  |            t        dt        j                  |d         j!                         z                |S # t        $ r$}| j                   j                  d|       |d }~ww xY ww)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  sI     	h"-L 	 	J	99%H+J[J[]ijjF
 F|t###v%$vl/C*D*MRUV\]iVjRkoqRqqqF"tF9,='>#'E&QZJ[^_J___L)
m!%diij&A!B"'x/?/?}@U/V/]/]/_(_"` 	 	b    	HHNN6aN@G	s)   ED CE	ED>>EEc
                   K   | j                  d|j                         d {   }
|
d   }| j                  d       d {   }|d   }t        j                  |d   dd        }t        j                  |d   d   dd        }| j                  d	       d {   }|d
   d   }| j                  d       d {   }t	        |      }| j
                  j                  d|       | j                  d|j                         d {   }t	        |      }| j
                  j                  d|       dj                  t        j                  dd            j                  d      }t        j                         }|j                  |       t        t        j                   t        j                  |j#                         d                  }|||||j                  |j                  d}t%        j&                  |      }t        j                         }|j                  |       t        j                   t        j                  |j#                         d            }t)        | j*                  |||||j                  |||||||	      }t-        |      }t-        |      }t-        |	      }	|||d}| j                  d|j                  |j                  |||||||||||	||       d {   }| j
                  j                  dt/        |             t1        |      t2        k(  sJ d|v rt1        |d         t4        k(  r|d   dkD  sJ d|v r|d   dk(  sJ d|v r&t1        |d         t        k(  rt	        |d         d k(  sJ t7        j8                  |d   !      }| j
                  j                  d"|#       y 7 7 w7 #7 7 7 w)$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@PQQ +
yy!9:: 45$,,V4L-Mab-QR##F;$7
$CAB$GHyy!9::gx0 II899HAUfgII@*BRBRSS%(X"F1K 	 	M >DDV^^TUW[E\]ddekl
NN	001A1A!((*j1YZ[

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

 04yy9TV`VfVf9C9I9I>[g9JHV`bkmv9DFWYjlv9BJ	0P *P& 	f5<=[5\ 	 	^ 23t;;;<<*;7B9<?B@DbcnDorsDs	t t99>\?(?) 	) ) >>4*=9D;>CDDHK*=9I;>@IA	A A ii&D]&STP^ijq R ; ; : Tf*Psm    ON4O N7AON: O8N=9AOO GO!O"CO7O:O=O OOc                   K   | j                   j                  d||       | j                  d|j                  |       d {   }| j                   j                  dt	        |             t        |      t        k(  sJ d|v r&t        |d         t        k(  rt        |d         dk(  sJ d|v rt        |d         t        k(  r|d   d	kD  sJ |d   }| j                   j                  d
t        j                  |      t	        |             | j                  d       d {   }| j                   j                  dt        |             t        |      }| j                   j                  d|       ||v s4J dj                  t        j                  |      t        |                   | j                  d|j                         d {   }| j                   j                  dt        |             t        |      }| j                   j                  d|       ||v s4J dj                  t        j                  |      t        |                   |D ]a  }| j                   j                  d|       | j                  d|d       d {   }	| j                   j                  dt	        |	             c y 7 ~7 7 7 5w)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 04yy9[]h]n]n9E0G *G& 	\5<=[5\ 	 	^ 23t;;;==$*<8C:=BCCGJ*<8H:=?H@	@ @ ::t*95@7:=@>B`ajBknoBo	p p 4LA
c!%!<WMkEl 	 	n !II&@AAKY\]hYij {+?Rbc[( 	;*r*y*yIIJ'[)9+; 	;( !II&H*JZJZ[[Sadepaqr %($4!E1J 	 	L[( 	;*r*y*yIIJ'[)9+; 	;( & 	cJHHMMN[eMf99%=z^b9ccFHHMMIRYZ`RaMb	cI*G" B \ dsJ   ?K	J?C!K	#K$B)K	KCK	K.K	K	K	K	c           	        K   | j                  d|j                         d {   }|d   }| j                  d|j                         d {   }|rB|d   |k(  r| j                  j                  d       nF| j                  j                  dt	        t
        j                  j                  |d                      t        j                  |d   	      |d<   t
        j                  j                  |d         |d<   t
        j                  j                  |d
         |d
<   t
        j                  j                  |d         |d<   t        j                  |d   d      |d<   | j                  j                  dt	        |      t        |             y | j                  j                  dt	        |             y 7 7 tw)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~  sg     II&>
@P@PQQ +
yy!9:;K;KLLg*,@A:$tyyGbGbcijqcrGsBtu#yyvh/?@F8"ii99&/JF7O"ii99&/JF7O!YY88HF6N"$--{0CT"JF;HHMMJ%)*%5gfo  O HHMM9d:FVMW% RLs"    GF<(GF?E1G?Gc                   K   |t         j                  t         j                  t         j                  fv sJ | j	                  d|j
                         d {   }|d   }| j	                  d       d {   }|d   }t        j                  |d   dd        }| j	                  d       d {   }	|	d   d	   }
i }t        j                  |      }t        j                         }|j                  |       t        j                  t        j                  |j!                         d
            }t#        | j$                  ||||
|j
                  ||      }| j	                  d|j
                  |j
                  ||
|||||
       d {   }t'        j(                  |d         }| j*                  j-                  d|       y 7 j7 O7 7 Dw)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0)2D2DiFaFabbbb II&>
@P@PQQ +
yy!9:: 45$,,V4L-Mab-QRyy!9::gx0
KK)	NN	++I,<,<QXXZ,TU	+D,<,<nN_ak,8*:J:JJXac	 #')),EzGWGWYcYiYi,:LJ[,6	9i#Y Y ii&7&FG]kvw3 R ; ;YsI   AG
F?G
3G48G
,G-CG
G<G
G
G
G
c                    K   | j                  d|j                  |       d {   }|d   }|d   }| j                  j                  d|||       y 7 .w)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^M^`l!mm%l3
%l3
s!jZ 	 	Q ns   !AA/Ac           	      2  K   | j                  d|       d {   }| j                  j                  dt        |             |r| j                  j	                  dt        t        |d         dz               | j                  d|d	          d {   }| j                  j                  d
t        |             | j                  j	                  dt        t        |d         dz        |d          y | j                  j	                  d       y 7 7 w)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  s     		"NP\]]{GG,<=HHMMQ!$^GH4E%F%Q!R  T II&SU\]jUkllGHHNN;0@NAHHMMa$'w{7K(Lx(W$Xcjkpcq  s HHMMDE ^
 m#   DDA9DDBDDc           	      2  K   | j                  d|       d {   }| j                  j                  dt        |             |r| j                  j	                  dt        t        |d         dz               | j                  d|d	          d {   }| j                  j                  d
t        |             | j                  j	                  dt        t        |d         dz        |d          y | j                  j	                  d       y 7 7 w)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  s     		"M|\\{GG,<=HHMMQ!$^GH4E%F%Q!R  T II&RT[\iTjkkGHHNN;0@NAHHMMa$'w{7K(Lx(W$Xcjkpcq  s HHMMDE ]
 lrq  c                 x  K   | j                   }| j                  j                  j                         }| j	                  d       d {   }t        j                  |d   dd        }	t        j                  |d   dd        }
|d   }t        j                  |d   dd        }| j	                  d       d {   }|d   d	   }|d
kD  r|t        j                  k(  r|}t        j                  j                  }n7|t        j                  k(  r|	}t        j                  j                  }nJ d       	 t        | j                  |||       d {   }| j                  j!                  d|       t'        ||||||j(                  |j(                  |||	|
|      }d }| j	                  d||j(                  |j(                  ||||||	|
t+        |      ||       d {   }| j                  j!                  dt-        |             y 7 7 P7 # t"        $ r!}| j                  j%                          |d }~ww xY w7 `w)Nzxbr.marketmaker.get_configr   r^   r[  r  r  zxbr.marketmaker.get_statusr  r  r   r   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_adrrt  r   r   rQ  ru  s                         r[   r   zClient._do_open_channel  s7    %%
\\,,AAC
yy!=>>&&vm'<QR'@A$$VG_QR%89	#$89!)!1!1&9Q2RSTSU2V!Wyy!=>>%gx8A:{222%//!3!33&//666u!.t/C/CXvW]!^^JU]^ -Z9KMceq-A:CSCSU`UfUf-7;PY[ac	 
 $		*H*V`VfVf*5*;*;=OQe*@,PXZegp*6v*>	:!W W
 	N&-o&> 	 	@U ? ?( _   "Wsi   AH:HA.H:6H7A8H:0H H	!H -A*H:H8,H:H:	H 	H5H00H55H:c           	      |   | j                   }| j                  j                  dd      }| j                  }| j                  j                  j                  |d      }| j                  j                  dt        | j                        |       t        j                  j                  j                  ||      j                  |||| j                  |d      }| j                  j                  dt        | j                        |	       | j                  j                  j                   j#                  || j$                  
      }| j                  j                  dt        | j                        t'        t)        j*                  |j,                        j/                                      | j                  j                  j1                  |j,                        }	t3        |	      }	| j                  j                  dt        | j                        t'        t)        j*                  |	      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  rt  )rB   r   toWeirV   r   getTransactionCountrN   rO   r)   rw  r   r<  	functionsapprovebuildTransactionrC   accountsign_transactionrT   r+   rh   r   rawTransactionr   sendRawTransactionrH   )
rY   r{  r|  r   r  r  r  r  r  rt  s
             r[   rw  zClient._send_Allowance  s   88>>$/<< 00I0VQ!$"6"67! 	 	#
 ,,0088HYY ~~[
  	a,,-+ 	 	- XX\\))::?X\XhXh:i
V,,-X--j.G.GHOOQR 	 	T 88<<22:3L3LM?S,,-8++H5<<>? 	 	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   rw   r\   r[   r;   r;   [   s     #O>T") f."C7J,3\!SF5Kn > >@  * mqUVZkx+cZX*x>QFF/@b+r\   r;   c                     t        d       t        dj                  t        dt        z                      t        d       t        d       t        dj                  t	        t
              t                     t        dj                  t	        t              t                     t        dj                  t	        t              t                     t        dj                  t	        t              t                     t        d	j                  t	        t              t                     t        d
j                  t	        t              t                      t        d       y )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  s    	"I	/
 
 s['8!9
:;	"I	
$%	
.
5
5d;O6PRj
kl	
.
5
5d;Q6RTn
op	
.
5
5d;P6QSl
mn	
.
5
5d;Q6RTn
op	
.
5
5d;P6QSl
mn	
.
5
5d;Q6RTn
op	"Ir\   c                     t        j                         } | j                  dt        t        ddd       | j                  dddd	
       | j                  ddt        d       | j                  dddt        d       | j                  dddt        d       ddg}| j                  dddt        dj                  |             | j                  ddt        d d!"       | j                  d#d$t        d%d&"       | j                  d'd(t        d)       | j                  d*d+t        d,       | j                  d-d.t        d d/"       | j                  d0d1t        d d2"       | j                  d3d4t        d d5"       | j                  d6d7t        d d8"       | j                  d9d:t        d d;"       | j                  d<d=t        d d>"       | j                  d?d@t        d dA"       | j                  dBdCt        d dA"       | j                  dDdEt        d dA"       | j                  dFdGt        d dH"       | j                  dIdJt        t        t        j                  t        j                  t        j                  g      d dKL       | j                  dMdNt        d dO"       | j                  dPdQt        d dR"       | j                  dSdTt        d dU"       | j                  dVdWt        t        t        j                  t        j                  g      d dXL       | j                  dYdZt        d d["       | j                  d\d]t        d d^"       | j                         }|j                   d_k(  rt#                y |j                   d`k(  rt%        |j&                  a      }|j)                  |j*                         t-        |j.                        t-        |j0                        z   t-        |j2                        z   }t5        dbj                  t7        |      t7        t-        |j.                              t7        t-        |j0                              t7        t-        |j2                                           t5                |j9                          y |j                   dck(  rt%        |j&                  a      }|j)                  |j*                         t5        |j;                  dde             t=        j>                  dfdg      }tA        |dhdij      }tC        |ddddk      }tD        jF                  jI                  |jJ                        stE        jL                  |jJ                         |jO                  ||jJ                  d       y |j                   |j                   dk(  rBt5        dlj                  dmjQ                  t                           tS        jT                  dn       tW        |jX                  |jZ                  |j\                  |j^                  o      }|j`                  rtc        jd                  dpq       ntc        jd                  drq       tc        jf                         }	|	ji                  dstk        dttl        z         u       |	ji                  dvt7        |jn                        t7        |jF                        w       i dx|d|j                   d.|j\                  d1|j^                  d(|jp                  d+|jr                  d4|jt                  rtw        jx                  |jt                        nd d7|jz                  d:|j|                  d=|j~                  dy|j                  xs dndz|j                  xs dndE|j                  xs dndG|j                  r"t        j                  |j                  d{d        nd dJ|j                  dN|j                  dQ|j                  rtw        jx                  |j                        nd |j                  rtw        jx                  |j                        nd |j                  |j                  r"t        j                  |j                  d{d        nd |j                  xs dnd|}
t        |j                  |j                  |
t               g}      }	 |	ji                  d~t7        |j                        |j                  rdt7        |j                        z   dz   ndA       |j                  t        di       tS        jT                  dn       y # t        $ r*}t5        |       tS        jT                  d       Y d }~y 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
 " 1  3
 "% M	  O &) 9	  ; F#J
$' AHHT	  V "  =W	  Y 	$  ,I	  K 
% T  V
 	$ j  l
 '  $H	  J 	$  $M	  O 
%  $I	  K (+  $J	  L (+  $J	  L +.  $M	  O -0  $	  ! -0  $	  ! )  $	  ! *  $R	  T )  &	(:(:I<N<NPYPkPk'l m $c  e 	$  $S	  U &  $q	  s &  $J	  L (+  &(:(:K<O<O'P Q $U  W '  $N	  P 
%  $ Z	  [ D||y  
*	*8		$++$))ns4::6T]]9KK_ff+#dii.!#djj/"#dmm$%	' 	(
 	 
)	) 8		$++ 	dlll%& "33JP	 ")g5QTN ww}}T[[)HHT[[! 	Ch/ <<4<<6#95<<TYYy=QRSHHQK )TXXTZZ:>--W[WaWac ::g.f-!$d33D.EF7w||AT[`ahamam[no
w

 t||
 
 TZZ
 gnn
 W]]
 dii,
 D--
 D--
 t33
  '(>(>(C!!
" '(>(>(C!#
$ $//.Q%
& TEUEU8++D,<,<QR,@A[_'
( $//)
* TZZ+
, $,,tyy.D-
. 37,,tyy.D --?C}}((qr):;RVkk&Q5
8 #w':':'BWBW_d0>0@/AC		HH7w223QXQfQfL51F1F+GG#Mln  q JJveJ4
 HHQK	  	!HHHQKK	s    A%d 	e$ 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   
{{	
@A	
78CHHQKJ JV V '                 $ 2 2 4 G 3 $ 4 X X h h / 7 - -2	U UpM` z	G r\   