Skip to content
This repository was archived by the owner on Oct 20, 2024. It is now read-only.

Support middleware concurrent #105

@alberthuang24

Description

@alberthuang24

Question

Now let's assume we have a builder like this one.

        return instance
            .useDefaults({
                sender: instance.proxyImpl.address,
                verificationGasLimit: 200000,
                preVerificationGas: 21000
            })
            .useMiddleware(instance.resolveAccount)
            .useMiddleware(Presets.Middleware.getGasPrice(provider))
            .useMiddleware(SodiumCallData(instance, signer))
            .useMiddleware(instance.paymasterMiddleware())
            .useMiddleware(estimateUserOperationGas(instance.provider))
-> resolveAccount(100ms) -> getGasPrice (100ms) -> setupCalldata (100ms) -> paymasterMiddleware(100ms) -> estimateUserOperationGas(100ms).

The buildOp execution will be very slow because they are executed synchronously.

Maybe we can optimize them this way

        return instance
            .useDefaults({
                sender: instance.proxyImpl.address,
                verificationGasLimit: 200000,
                preVerificationGas: 21000
            })
            .useConcurrentMiddleware(instance.resolveAccount)
            .useConcurrentMiddleware(Presets.Middleware.getGasPrice(provider))
            .useConcurrentMiddleware(SodiumCallData(instance, signer))
            .useConcurrentMiddleware(instance.paymasterMiddleware())
            .useMiddleware(estimateUserOperationGas(instance.provider))
  async buildOp(entryPoint: string, chainId: BigNumberish) {
    const ctx = new UserOperationMiddlewareCtx(
      this.currOp,
      entryPoint,
      chainId
    );

    await Promise.all(this.concurrentMiddlewareStack.map(fn));
    for (const fn of this.middlewareStack) {
      await fn(ctx);
    }
    this.setPartial(ctx.op);

    return OpToJSON(this.currOp);
  }
(resolveAccount, getGasPrice, setupCalldata, paymasterMiddleware)(100ms) -> estimateUserOperationGas(100ms);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions