Skip to content

Sequence diagram for explicit sponsorship check via DappClient.isSponsored #637

@Dargon789

Description

@Dargon789

Reviewer's Guide

Adds explicit sponsorship and failure signalling to relayer fee APIs, wires them through wallet types and clients, and introduces high-level isSponsored helpers while bumping turbo and aligning package versions/changelogs.

Sequence diagram for explicit sponsorship check via DappClient.isSponsored

sequenceDiagram
  actor DappClientUser
  participant DappClient
  participant ChainSessionManager
  participant Relayer

  DappClientUser->>DappClient: isSponsored(chainId, transactions)
  DappClient->>DappClient: getOrInitializeChainManager(chainId)
  DappClient->>ChainSessionManager: isSponsored(calls)
  ChainSessionManager->>ChainSessionManager: _buildAndSignCalls(callsToSend)
  ChainSessionManager->>ChainSessionManager: _fingerprintCalls(callsToSend)
  ChainSessionManager->>Relayer: feeOptions(walletAddress, chainId, signedCall.to, callsToSend, signedCall.data)
  Relayer-->>ChainSessionManager: { options, quote, sponsored, failed }

  alt [feeOptions.sponsored === true && !feeOptions.failed]
    ChainSessionManager-->>DappClient: true
    DappClient-->>DappClientUser: true
  else [error, failed quote, or no sponsorship]
    ChainSessionManager-->>DappClient: false
    DappClient-->>DappClientUser: false
  end
Loading

File-Level Changes

Change Details Files
Expose explicit sponsorship and failure flags from relayer fee endpoints and propagate them through all relayer implementations.
  • Extend Relayer.feeTokens and Relayer.feeOptions return types to include failed and sponsored flags.
  • Update RpcRelayer, SequenceRelayer, LocalRelayer, EIP6963Relayer, and PkRelayer to implement the new signatures and behaviours.
  • Ensure feeOptions propagates server-sponsored value and returns a failed marker with default values when errors are swallowed.
packages/services/relayer/src/relayer/relayer.ts
packages/services/relayer/src/relayer/rpc-relayer/index.ts
packages/services/relayer/src/relayer/standard/sequence.ts
packages/services/relayer/src/relayer/standard/local.ts
packages/services/relayer/src/relayer/standard/eip6963.ts
packages/services/relayer/src/relayer/standard/pk-relayer.ts
Wire sponsorship and failure metadata into wallet transaction relayer options and expose runtime guards.
  • Augment StandardRelayerOption with sponsored and failed fields and re-export isStandardRelayerOption/isERC4337RelayerOption.
  • Populate sponsored and failed on StandardRelayerOption instances when building relayer options in Transactions.
  • Add tests to assert non-sponsoring relayers set sponsored to false and leave failed undefined.
packages/wallet/wdk/src/sequence/types/transaction-request.ts
packages/wallet/wdk/src/sequence/types/index.ts
packages/wallet/wdk/src/sequence/transactions.ts
packages/wallet/wdk/test/transactions.test.ts
Introduce explicit isSponsored helpers in the dapp client and chain session manager to safely surface free-gas UX.
  • Add ChainSessionManager.isSponsored to build/sign calls, query relayer.feeOptions, and return true only on explicit sponsorship without failure.
  • Add DappClient.isSponsored(chainId, transactions) delegating to ChainSessionManager.isSponsored.
  • Log and safely downgrade to false on any error during sponsorship checks.
packages/wallet/dapp-client/src/ChainSessionManager.ts
packages/wallet/dapp-client/src/DappClient.ts
Strengthen tests to cover sponsorship and failure behaviour for relayer feeOptions and feeTokens.
  • Update relayer tests to expect sponsored in successful mocked feeOptions responses.
  • Add tests to ensure RpcRelayer.feeOptions and feeTokens set sponsored/failed correctly on server errors and propagate server-sponsored booleans.
packages/services/relayer/test/relayer/relayer.test.ts
Align package metadata and changelogs for the new sponsorship behaviour and bump turbo.
  • Update changelogs in affected packages to document sponsorship signalling and isSponsored helpers.
  • Bump versions of services, wallet, and utils packages to 3.0.11/3.1.0 as appropriate and update dependency ranges.
  • Update root turbo devDependency from 2.9.8 to 2.9.14 and refresh pnpm-lock.yaml.
package.json
pnpm-lock.yaml
packages/services/relayer/package.json
packages/wallet/dapp-client/package.json
packages/wallet/wdk/package.json
packages/wallet/core/package.json
packages/services/api/package.json
packages/services/builder/package.json
packages/services/guard/package.json
packages/services/identity-instrument/package.json
packages/services/indexer/package.json
packages/services/marketplace/package.json
packages/services/metadata/package.json
packages/services/userdata/package.json
packages/utils/abi/package.json
packages/wallet/primitives/package.json
packages/services/relayer/CHANGELOG.md
packages/wallet/dapp-client/CHANGELOG.md
packages/wallet/wdk/CHANGELOG.md
packages/wallet/core/CHANGELOG.md
packages/services/api/CHANGELOG.md
packages/services/builder/CHANGELOG.md
packages/services/guard/CHANGELOG.md
packages/services/identity-instrument/CHANGELOG.md
packages/services/indexer/CHANGELOG.md
packages/services/marketplace/CHANGELOG.md
packages/services/metadata/CHANGELOG.md
packages/services/userdata/CHANGELOG.md
packages/utils/abi/CHANGELOG.md
packages/wallet/primitives/CHANGELOG.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Originally posted by @sourcery-ai[bot] in #636 (comment)

Metadata

Metadata

Assignees

Labels

dependenciesPull requests that update a dependency filedocumentationImprovements or additions to documentation

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions