    async execute(vmFunctionName, timeout, ...args) {
        return await Promise.race([
            (async () => {
                const vmFunctions = await this.deferredVmFunctions.promise;
                const vmFunction = vmFunctions[vmFunctionName];
                if (!vmFunction)
                    throw new BgError(`${vmFunctionName} function not found`);
                return vmFunction(...args);
            })(),
            new Promise((_, reject) => setTimeout(() => reject(new BgError('VM operation timed out')), timeout))
        ]);
    }
