async def _sign_submit(self, req_json: str) -> str:
LOGGER.debug('<STR_LIT>', req_json)<EOL>if not self.pool.handle:<EOL><INDENT>LOGGER.debug('<STR_LIT>', self.pool.name)<EOL>raise ClosedPool('<STR_LIT>'.format(self.pool.name))<EOL><DEDENT>try:<EOL><INDENT>rv_json = await ledger.sign_and_submit_request(self.pool.handle, self.wallet.handle, self.did, req_json)<EOL>await asyncio.sleep(<NUM_LIT:0>)<EOL><DEDENT>except IndyError as x_indy:<EOL><INDENT>if x_indy.error_code == ErrorCode.WalletIncompatiblePoolError:<EOL><INDENT>LOGGER.debug(<EOL>'<STR_LIT>',<EOL>self.wallet.name,<EOL>self.pool.name)<EOL>raise CorruptWallet(<EOL>'<STR_LIT>'.format(self.wallet.name, self.pool.name))<EOL><DEDENT>else:<EOL><INDENT>LOGGER.debug(<EOL>'<STR_LIT>',<EOL>self.wallet.name)<EOL>raise BadLedgerTxn('<STR_LIT>'.format(<EOL>x_indy.error_code))<EOL><DEDENT><DEDENT>resp = json.loads(rv_json)<EOL>if ('<STR_LIT>' in resp) and (resp['<STR_LIT>'] in ('<STR_LIT>', '<STR_LIT>')):<EOL><INDENT>LOGGER.debug('<STR_LIT>', resp['<STR_LIT>'])<EOL>raise BadLedgerTxn('<STR_LIT>'.format(resp['<STR_LIT>']))<EOL><DEDENT>if '<STR_LIT>' in resp and '<STR_LIT:result>' in resp and resp['<STR_LIT:result>'].get('<STR_LIT>', None) is None:<EOL><INDENT>LOGGER.debug('<STR_LIT>', resp['<STR_LIT>'])<EOL>raise BadLedgerTxn('<STR_LIT>'.format(resp['<STR_LIT>']))<EOL><DEDENT>LOGGER.debug('<STR_LIT>', rv_json)<EOL>return rv_json<EOL>
Sign and submit (json) request to ledger; return (json) result.

Raise ClosedPool if pool is not yet open, CorruptWallet if existing wallet's
pool is no longer extant, or BadLedgerTxn on any other failure.

:param req_json: json of request to sign and submit
:return: json response