Execute stored operations

        Parameters:
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
            token (ObjectID): Token ID
        Returns:
            Collection: Results of operations.
        Raises:
            TransactionError: Transaction failed

async def execute(self, dc=None, token=None):
        """Execute stored operations

        Parameters:
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
            token (ObjectID): Token ID
        Returns:
            Collection: Results of operations.
        Raises:
            TransactionError: Transaction failed
        """
        token_id = extract_attr(token, keys=["ID"])
        try:
            response = await self._api.put(
                "/v1/txn",
                data=self.operations,
                params={
                    "dc": dc,
                    "token": token_id
                })
        except ConflictError as error:
            errors = {elt["OpIndex"]: elt for elt in error.value["Errors"]}
            operations = [op["KV"] for op in self.operations]
            meta = error.meta
            raise TransactionError(errors, operations, meta) from error
        except Exception as error:
            raise error
        else:
            self.operations[:] = []

        results = []
        for _ in response.body["Results"]:
            data = _["KV"]
            if data["Value"] is not None:
                data["Value"] = decode_value(data["Value"], data["Flags"])
            results.append(data)
        return results