code: async def open(self) -> 'NodePool':
          
  
          LOGGER.debug('NodePool.open >>>')
  
          await pool.set_protocol_version(self.protocol.indy())
          LOGGER.info('Pool ledger %s set protocol %s', self.name, self.protocol)
  
          try:
              self._handle = await pool.open_pool_ledger(self.name, json.dumps(self.config))
          except IndyError as x_indy:
              if x_indy.error_code == ErrorCode.PoolLedgerNotCreatedError:
                  LOGGER.debug('NodePool.open <!< Absent node pool %s ledger configuration', self.name)
                  raise AbsentPool('Absent node pool {} ledger configuration'.format(self.name))
              LOGGER.debug(
                  'NodePool.open <!< cannot open node pool %s: indy error code %s',
                  self.name,
                  x_indy.error_code)
              raise
  
          LOGGER.debug('NodePool.open <<<')
          return self
docs: Explicit entry. Opens pool as configured, for later closure via close().
          Creates pool if it does not yet exist, using configured genesis transaction file.
          For use when keeping pool open across multiple calls.
  
          Raise any AbsentPool if node pool ledger configuration is not available.
  
          :return: current object