Skip to content

EIP-2612 permit support on USDC not documented — critical for gasless DApp development #93

@osr21

Description

@osr21

Summary

The USDC contract deployed on Arc Testnet (0x3600000000000000000000000000000000000000) supports EIP-2612 permit — the off-chain approval mechanism that enables gasless token transfers. This capability is not mentioned anywhere in the Arc Network developer documentation.

Why This Matters

EIP-2612 permit is the foundation of gasless DApp UX on EVM chains. It allows:

  • Users to approve token transfers with an off-chain signature (no gas required for the approval)
  • A relayer to call transferFrom on the user's behalf using that signature
  • True "sign once, send" UX where users never need a separate approval transaction

This is especially significant on Arc because USDC is the gas token. A DApp that uses permit + relay can offer completely gasless UX — users only need USDC (which they already have), not a separate gas token.

Discovery Method

We discovered permit support by reading the USDC contract ABI directly on the block explorer. There was no documentation, tutorial, or mention of EIP-2612 in any Arc Network resource.

What We Built

Based on this discovery, we implemented a full EIP-2612 relay in Arc Pay:

  • User signs a permit message off-chain (free)
  • Our relay server calls transferFrom using the permit signature
  • Full flow documented in docs/RELAY.md

This works correctly on Arc Testnet. The permit domain separator, nonce, and deadline all behave as per the EIP-2612 spec.

Suggested Documentation Addition

Add a section to the USDC contract documentation confirming:

  • EIP-2612 permit is supported on the Arc Testnet USDC contract
  • The domain separator parameters (name, version, chainId, verifyingContract)
  • A minimal code example showing how to sign and submit a permit
  • Guidance on building gasless relays on Arc

Context

This is one of Arc's strongest differentiators — the ability to build fully gasless DApps using only USDC. It should be front and center in the developer docs, not a hidden implementation detail.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions