Create wallet as configured and store DID, or else re-use any existing configuration.
        Operation sequence create/store-DID/close does not auto-remove the wallet on close,
        even if so configured.

        :return: current object

async def create(self) -> 'Wallet':
        """
        Create wallet as configured and store DID, or else re-use any existing configuration.
        Operation sequence create/store-DID/close does not auto-remove the wallet on close,
        even if so configured.

        :return: current object
        """

        LOGGER.debug('Wallet.create >>>')

        try:
            await wallet.create_wallet(
                config=json.dumps(self.cfg),
                credentials=json.dumps(self.access_creds))
            self._created = True
            LOGGER.info('Created wallet %s', self.name)
        except IndyError as x_indy:
            if x_indy.error_code == ErrorCode.WalletAlreadyExistsError:
                LOGGER.info('Wallet already exists: %s', self.name)
            else:
                LOGGER.debug(
                    'Wallet.create: <!< indy error code %s on creation of wallet %s',
                    x_indy.error_code,
                    self.name)
                raise

        LOGGER.debug('Attempting to open wallet %s', self.name)
        self._handle = await wallet.open_wallet(
            json.dumps(self.cfg),
            json.dumps(self.access_creds))
        LOGGER.info('Opened wallet %s on handle %s', self.name, self.handle)

        if self._created:
            (self._did, self._verkey) = await did.create_and_store_my_did(
                self.handle,
                json.dumps({'seed': self._seed}))
            LOGGER.debug('Wallet %s stored new DID %s, verkey %s from seed', self.name, self.did, self.verkey)
            await did.set_did_metadata(self.handle, self.did, json.dumps({'seed': self._seed}))
        else:
            self._created = True
            LOGGER.debug('Attempting to derive seed to did for wallet %s', self.name)
            self._did = await self._seed2did()
            try:
                self._verkey = await did.key_for_local_did(self.handle, self.did)
            except IndyError:
                LOGGER.debug(
                    'Wallet.create: <!< no verkey for DID %s on ledger, wallet %s may pertain to another',
                    self.did,
                    self.name)
                raise CorruptWallet(
                    'No verkey for DID {} on ledger, wallet {} may pertain to another'.format(
                        self.did,
                        self.name))
            LOGGER.info('Wallet %s got verkey %s for existing DID %s', self.name, self.verkey, self.did)

        await wallet.close_wallet(self.handle)

        LOGGER.debug('Wallet.create <<<')
        return self