async def get_block_info(org_name: str, user_name: str, user_password: str, channel_name: str = constants.channel_name) -> str: """ Fetches the blockchain state of the given channel Args: org_name: Name of the submitting user's organization user_name: Username of the submitter user_password: Password of the submitting user channel_name: Name of the channel on which to connect client Returns: String of blockchain info """ # Setup a HF network client hf_client = Client(net_profile=constants.config_path) # Connect to the given channel hf_client.new_channel(channel_name) # Gather information about the network network_info = hf_client.get_net_info() # For queries, we only need a single peer # Here we will randomly select one from our org peers = network_info['organizations'][org_name]['peers'] random_peer = random.choice(peers) user = enroll_user(hf_client, org_name, user_name, user_password) response = await hf_client.query_info(requestor=user, channel_name=channel_name, peers=[random_peer]) return str(response)
async def get_channels(org_name: str, user_name: str, user_password: str) -> List[str]: """ Fetches the IDs of all the channels on the network Args: org_name: Name of the submitting user's organization user_name: Username of the submitter user_password: Password of the submitting user Returns: List of channel IDs """ # Setup a HF network client hf_client = Client(net_profile=constants.config_path) # Gather information about the network network_info = hf_client.get_net_info() # For queries, we only need a single peer # Here we will randomly select one from our org peers = network_info['organizations'][org_name]['peers'] random_peer = random.choice(peers) user = enroll_user(hf_client, org_name, user_name, user_password) response = await hf_client.query_channels(requestor=user, peers=[random_peer]) return [x.channel_id for x in response.channels]
async def invoke(org_name: str, user_name: str, user_password: str, channel_name: str, function: str, args: List[str]) -> str: """ Submits a blockchain transaction invocation to all the peers in the network. Args: org_name: Name of the submitting user's organization user_name: Username of the submitter user_password: Password of the submitting user channel_name: Name of the channel on which to connect client function: Name of the chaincode function to invoke args: A list of string arguments passed to the chaincode Returns: Response string from the *first* peer that responded with confirmation of the execution. """ # Setup a HF network client hf_client = Client(net_profile=constants.config_path) # Connect to the given channel hf_client.new_channel(channel_name) # Gather information about the network network_info = hf_client.get_net_info() # Invocations require read/write sets from as many peers # as specified in the endorsement policy. Here we will # go ahead and request endorsement from ALL peers. # If your policy requires only a subset, you may wish to # alter this section peers = [] for org in network_info['organizations'].keys(): if 'peers' in network_info['organizations'][org]: for peer in network_info['organizations'][org]['peers']: peers.append(peer) # Enroll the user that will be invoking the query user = enroll_user(hf_client, org_name, user_name, user_password) # Submit the query to the peers and await a response response = await hf_client.chaincode_invoke( requestor=user, channel_name=channel_name, peers=peers, fcn=function, args=args, cc_name=constants.chaincode_name, transient_map=None, # optional, for private data wait_for_event= True, # for being sure chaincode invocation has been commited in the ledger, default is on tx event ) if not response: raise ValueError( f'Failure to invoke chaincode function {function} with response: {response}' ) return response
def get_network_info() -> Dict: ''' Returns the dictionary containing the network information Returns: Dictionary of network configuration information ''' hf_client = Client(net_profile=constants.config_path) return hf_client.get_net_info()
async def query(org_name: str, user_name: str, user_password: str, channel_name: str, function: str, args: List[str]) -> str: """ Submits a ledger query to a single peer within the specified org. Note that queries will NOT submit any changes to the ledger state, even if an invocation query function is invoked. Args: org_name: Name of the submitting user's organization user_name: Username of the submitter user_password: Password of the submitting user channel_name: Name of the channel on which to connect client function: Name of the chaincode function to invoke args: A list of string arguments passed to the chaincode Returns: Response string from the given peer """ # Setup a HF network client hf_client = Client(net_profile=constants.config_path) # Connect to the given channel hf_client.new_channel(channel_name) # Gather information about the network network_info = hf_client.get_net_info() # For queries, we only need a single peer # Here we will randomly select one from our org peers = network_info['organizations'][org_name]['peers'] random_peer = random.choice(peers) # Enroll the user that will be invoking the query user = enroll_user(hf_client, org_name, user_name, user_password) # Submit the query to the selected peer and await a response response = await hf_client.chaincode_query( requestor=user, channel_name=channel_name, fcn=function, peers=[random_peer], args=args, cc_name=constants.chaincode_name) if not response: raise ValueError( f'Failure to query chaincode function {function} with response: {response}' ) return response
async def get_instantiated_chaincodes( org_name: str, user_name: str, user_password: str, channel_name: str = constants.channel_name) -> List[Dict[str, str]]: """ Fetches the blockchain state of the given channel Args: org_name: Name of the submitting user's organization user_name: Username of the submitter user_password: Password of the submitting user channel_name: Name of the channel on which to connect client Returns: List of instantiated chaincodes, each of which contains: 'Name': Chaincode name, 'Version': Chaincode version, 'Path': GOPATH relative chaincode location """ # Setup a HF network client hf_client = Client(net_profile=constants.config_path) # Connect to the given channel hf_client.new_channel(channel_name) # Gather information about the network network_info = hf_client.get_net_info() # For queries, we only need a single peer # Here we will randomly select one from our org peers = network_info['organizations'][org_name]['peers'] random_peer = random.choice(peers) user = enroll_user(hf_client, org_name, user_name, user_password) response = await hf_client.query_instantiated_chaincodes( requestor=user, channel_name=channel_name, peers=[random_peer]) chaincodes = [] for chaincode in response[0].chaincodes: code = { 'Name': chaincode.name, 'Version': chaincode.version, 'Path': chaincode.path } chaincodes.append(code) return chaincodes
async def register_user(org_name: str, request: constants.RegisterUserRequest) -> str: """ Registers a user to the Org's Fabric CA Server Args: org_name: Organization's name request: RegisterUserRequest object containing registration information Returns: Pre-generated user secret """ # Create/Open a wallet on a temp path including the org name # Org name must be included, otherwise usernames must be unique # over all orgs wallet_path = os.path.join(os.getcwd(), 'tmp', 'hfc-kvs', org_name) cred_wallet = wallet.FileSystenWallet(path=wallet_path) # [sic] # Setup a HF network client hf_client = Client(net_profile=constants.config_path) hf_client.new_channel(constants.channel_name) # Extract CA info network_info = hf_client.get_net_info() org_info = network_info['organizations'][org_name] ca_name = org_info['certificateAuthorities'][0] ca_info = network_info['certificateAuthorities'][ca_name] # if user already exists, pull ID from storage if cred_wallet.exists(request.user_name): return None casvc = ca_service(target=ca_info['url']) admin_enrollment = casvc.enroll(request.admin_user_name, request.admin_password) secret = admin_enrollment.register(enrollmentID=request.user_name, enrollmentSecret=request.user_password, role=request.role, affiliation=request.affiliation, attrs=[dict(x) for x in request.attrs]) return secret
class FabricEvents: def __init__(self): self._async_loop = asyncio.get_event_loop() self._configtx_dir = None self._chaincode_dir = None self._config_sdk = None self._cli = None self._topo = None def config(self, topology, configsdk, chaincode, configtx): self._topo = topology self._configtx_dir = configtx self._chaincode_dir = chaincode self._config_sdk = configsdk if all([topology, configsdk, chaincode, configtx]): logger.info("FabricEvents configs OK") logger.info("configsdk %s, chaincode %s, configtx %s", configsdk, chaincode, configtx) self.config_gopath() self.build_cli() return True else: logger.info("FabricEvents configs FAILED") return False def config_gopath(self): gopath = os.path.normpath(os.path.join(self._chaincode_dir)) os.environ['GOPATH'] = os.path.abspath(gopath) def build_cli(self): pathlist = [ os.environ["HOME"] + "/hl/bin", ] # TODO set dynamic config path for configtxgen bin os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist) self._cli = Client(net_profile=self._config_sdk) logger.debug("FABRIC_CONFIG: Fabric Orgs %s", self._cli.organizations.keys()) logger.debug("FABRIC_CONFIG: Fabric Peers %s", self._cli.peers.keys()) logger.debug("FABRIC_CONFIG: Fabric Orderers %s", self._cli.orderers.keys()) logger.debug("FABRIC_CONFIG: Fabric CAs %s", self._cli.CAs.keys()) logger.info("Fabric Client SDK CLI Started") def schedule(self, events): for _id, event in events.items(): event_category = event.get("category") if event_category == "fabric": when = event.get("when") logger.info("Calling at %s event %s", when, event.get("params").get("action")) self.call_at(when, event.get("params")) def sched_time(self, when): if type(when) is float: if when >= time.time(): rel_when = when - time.time() else: rel_when = 0 elif type(when) is str: if when == "now": rel_when = 0 else: rel_when = float(when) else: rel_when = 0 return rel_when def call_at(self, when, event): rel_when = self.sched_time(when) self._async_loop.call_later(max(0, rel_when), self.call, event) def run_task(self, task): try: self._async_loop.create_task(task) except asyncio.CancelledError: pass except Exception: logger.error("Exception in Fabric Event Task", exc_info=True) def call(self, event): task = None action = event.get("action") if action == "info_network": task = self.event_info_network(event) if action == "create_channel": task = self.event_create_channel(event) if action == "join_channel": task = self.event_join_channel(event) if action == "info_channels": task = self.event_info_channels(event) if action == "info_channel": task = self.event_info_channel(event) if action == "info_channel_config": task = self.event_info_channel_config(event) if action == "info_channel_chaincodes": task = self.event_info_channel_chaincodes(event) if action == "chaincode_install": task = self.event_chaincode_install(event) if action == "chaincode_instantiate": task = self.event_chaincode_instantiate(event) if action == "chaincode_invoke": task = self.event_chaincode_invoke(event) if action == "chaincode_query": task = self.event_chaincode_query(event) if task: self.run_task(task) else: logger.info("Unkown task for event %s", event) async def event_create_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") orderer_name = ev.get("orderer") channel = ev.get("channel") profile = ev.get("profile") orderer = self._topo.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") if org_fqdn and orderer_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.channel_create( orderer=orderer_fqdn, channel_name=channel, requestor=org_user, config_yaml=self._configtx_dir, channel_profile=profile) logger.info("FABRIC_EV:create_channel: Create channel response %s", response) return response logger.info("unknown orderer %s and org %s", orderer_name, org_name) return None async def event_join_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") orderer_name = ev.get("orderer") channel = ev.get("channel") peers_names = ev.get("peers") orderer = self._topo.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") if org_fqdn and orderer_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] response = await self._cli.channel_join(requestor=org_user, channel_name=channel, peers=peers_fqdn, orderer=orderer_fqdn) logger.info("FABRIC_EV:join_channel: Join channel response %s", response) return response logger.info("unknown orderer %s and org %s", orderer_name, org_name) return None async def event_info_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") channel = ev.get("channel") peers_names = ev.get("peers") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_info(requestor=org_user, channel_name=channel, peers=peers_fqdn, decode=True) logger.info("FABRIC_EV:info_channel: Info channel response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channels(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_channels(requestor=org_user, peers=peers_fqdn, decode=True) logger.info("FABRIC_EV:info_channels: Info channels response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channel_config(self, ev): org_name = ev.get("org") user_name = ev.get("user") channel = ev.get("channel") peers_names = ev.get("peers") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.get_channel_config(requestor=org_user, channel_name=channel, peers=peers_fqdn, decode=True) logger.info( "FABRIC_EV:info_channel_config: Info channel config response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channel_chaincodes(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_installed_chaincodes( requestor=org_user, peers=peers_fqdn, decode=True) logger.info( "FABRIC_EV:info_channel_chaincodes: Info channel chaincodes response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_network(self, ev): orderer_name = ev.get("orderer") orderer = self._topo.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") if orderer_fqdn: response = self._cli.get_net_info('organizations', orderer_fqdn, 'mspid') logger.info("FABRIC_EV:info_network: Info network response %s", response) return response logger.info("unknown orderer %s", orderer_name) return None async def event_chaincode_install(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") chaincode_name = ev.get("chaincode_name") chaincode_path = ev.get("chaincode_path") chaincode_version = ev.get("chaincode_version") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_install( requestor=org_user, peers=peers_fqdn, cc_path=chaincode_path, cc_name=chaincode_name, cc_version=chaincode_version) logger.info( "FABRIC_EV:chaincode_install: Chaincode install response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_instantiate(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") chaincode_version = ev.get("chaincode_version") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_instantiate( requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name, cc_version=chaincode_version) logger.info( "FABRIC_EV:chaincode_instantiate: Chaincode instantiate response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_invoke(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_invoke(requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name) logger.info( "FABRIC_EV:chaincode_invoke: Chaincode invoke response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_query(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") org = self._topo.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_query(requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name) logger.info( "FABRIC_EV:chaincode_query: Chaincode query response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None
from hfc.fabric import Client import middleware.constants as constants import middleware.operations as operations from middleware.access_utils import enroll_user org_name = 'appdevorg.beatchain.com' admin_user_name = 'admin' admin_password = '******' function = 'ListBankAccounts' admin_fee_frac = 0.5 hf_client = Client(net_profile=constants.config_path) hf_client.new_channel(constants.channel_name) network_info = hf_client.get_net_info() peers = network_info['organizations'][org_name]['peers'] random_peer = random.choice(peers) user = enroll_user(hf_client, org_name, user_name, user_password) user = hf_client.get_user(org_name=org_name, name='Admin') loop = asyncio.get_event_loop() response = loop.run_until_complete( operations.invoke('appdevorg.beatchain.com', admin_user_name, admin_password, constants.channel_name, function='AddAppDevRecord',
class FabricEvents: def __init__(self): self._configtx_dir = None self._chaincode_dir = None self._config_sdk = None self._cli = None self._settings = None def config(self, settings, configsdk, chaincode, configtx): self._settings = settings self._configtx_dir = configtx self._chaincode_dir = chaincode self._config_sdk = configsdk if all([settings, configsdk, chaincode, configtx]): logger.info("FabricEvents configs OK") logger.info( "configsdk %s, chaincode %s, configtx %s", configsdk, chaincode, configtx, ) self.config_gopath() self.build_cli() return True else: logger.info("FabricEvents configs FAILED") return False def config_gopath(self): gopath = os.path.normpath(os.path.join(self._chaincode_dir)) os.environ["GOPATH"] = os.path.abspath(gopath) def build_cli(self): pathlist = [ "$HOME/hl/bin", ] # TODO set dynamic config path for configtxgen bin os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist) self._cli = Client(net_profile=self._config_sdk) logger.debug("Fabric Orgs %s", self._cli.organizations) logger.debug("Fabric Peers %s", self._cli.peers) logger.debug("Fabric Orderers %s", self._cli.orderers) logger.debug("Fabric CAs %s", self._cli.CAs) logger.info("Fabric Client SDK CLI Started") def schedule(self, events): evs_sched = {} for event in events: ev_id = event.get("id") ev_data = event.get("event") action_call = self.create_call(ev_data) if action_call: evs_sched[ev_id] = (action_call, event.get("schedule")) else: logger.info( f"Could not schedule fabric event task call for event {event}" ) return evs_sched def create_call(self, event): task = None action = event.get("action") if action == "info_network": task = self.event_info_network(event) if action == "create_channel": task = self.event_create_channel(event) if action == "join_channel": task = self.event_join_channel(event) if action == "info_channels": task = self.event_info_channels(event) if action == "info_channel": task = self.event_info_channel(event) if action == "info_channel_config": task = self.event_info_channel_config(event) if action == "info_channel_chaincodes": task = self.event_info_channel_chaincodes(event) if action == "chaincode_install": task = self.event_chaincode_install(event) if action == "chaincode_instantiate": task = self.event_chaincode_instantiate(event) if action == "chaincode_invoke": task = self.event_chaincode_invoke(event) if action == "chaincode_query": task = self.event_chaincode_query(event) if task: return task else: logger.info("Unkown task for event %s", event) return None async def event_create_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") orderer_name = ev.get("orderer") channel = ev.get("channel") profile = ev.get("profile") orderer = self._settings.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") if org_fqdn and orderer_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.channel_create( orderer=orderer_fqdn, channel_name=channel, requestor=org_user, config_yaml=self._configtx_dir, channel_profile=profile, ) logger.info("FABRIC_EV:create_channel: Create channel response %s", response) return response logger.info("unknown orderer %s and org %s", orderer_name, org_name) return None async def event_join_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") orderer_name = ev.get("orderer") channel = ev.get("channel") peers_names = ev.get("peers") orderer = self._settings.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") if org_fqdn and orderer_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] response = await self._cli.channel_join( requestor=org_user, channel_name=channel, peers=peers_fqdn, orderer=orderer_fqdn, ) logger.info("FABRIC_EV:join_channel: Join channel response %s", response) return response logger.info("unknown orderer %s and org %s", orderer_name, org_name) return None async def event_info_channel(self, ev): org_name = ev.get("org") user_name = ev.get("user") channel = ev.get("channel") peers_names = ev.get("peers") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_info(requestor=org_user, channel_name=channel, peers=peers_fqdn, decode=True) logger.info("FABRIC_EV:info_channel: Info channel response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channels(self, ev): logger.info("Event fabric: info_channels") org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_channels(requestor=org_user, peers=peers_fqdn, decode=True) logger.info("FABRIC_EV:info_channels: Info channels response %s", response) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channel_config(self, ev): org_name = ev.get("org") user_name = ev.get("user") channel = ev.get("channel") peers_names = ev.get("peers") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.get_channel_config(requestor=org_user, channel_name=channel, peers=peers_fqdn, decode=True) logger.info( "FABRIC_EV:info_channel_config: Info channel config response %s", response, ) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_channel_chaincodes(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.query_installed_chaincodes( requestor=org_user, peers=peers_fqdn, decode=True) logger.info( "FABRIC_EV:info_channel_chaincodes: Info channel chaincodes response %s", response, ) return response logger.info("unknown org %s and/org peers %s", org_name, peers_names) return None async def event_info_network(self, ev): orderer_name = ev.get("orderer") orderer = self._settings.get("orderers").get(orderer_name) orderer_fqdn = orderer.get("orderer_fqdn") if orderer_fqdn: response = self._cli.get_net_info("organizations", orderer_fqdn, "mspid") logger.info("Info network response %s", response) return response logger.info("unknown orderer %s", orderer_name) return None async def event_chaincode_install(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") chaincode_name = ev.get("chaincode_name") chaincode_path = ev.get("chaincode_path") chaincode_version = ev.get("chaincode_version") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_install( requestor=org_user, peers=peers_fqdn, cc_path=chaincode_path, cc_name=chaincode_name, cc_version=chaincode_version, ) logger.info( "FABRIC_EV:chaincode_install: Chaincode install response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_instantiate(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") chaincode_version = ev.get("chaincode_version") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_instantiate( requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name, cc_version=chaincode_version, ) logger.info( "FABRIC_EV:chaincode_instantiate: Chaincode instantiate response %s", response, ) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_invoke(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_invoke( requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name, ) logger.info( "FABRIC_EV:chaincode_invoke: Chaincode invoke response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None async def event_chaincode_query(self, ev): org_name = ev.get("org") user_name = ev.get("user") peers_names = ev.get("peers") channel = ev.get("channel") chaincode_args = ev.get("chaincode_args") chaincode_name = ev.get("chaincode_name") org = self._settings.get("orgs").get(org_name) org_fqdn = org.get("org_fqdn") peers = org.get("peers") peers_fqdn = [ peer.get("peer_fqdn") for peer in peers.values() if peer.get("name") in peers_names ] if org_fqdn and peers_fqdn: org_user = self._cli.get_user(org_name=org_fqdn, name=user_name) response = await self._cli.chaincode_query( requestor=org_user, channel_name=channel, peers=peers_fqdn, args=chaincode_args, cc_name=chaincode_name, ) logger.info( "FABRIC_EV:chaincode_query: Chaincode query response %s", response) return response logger.info("unknown org %s and/or peers %s", org_name, peers_names) return None