Announcing: USDC v2.2

USDC

We’re excited to unveil a new v2.2 upgrade to USDC and EURC that significantly reduces gas costs, improves support for account abstraction, and further bolsters security for transactions on EVM blockchains. The upgrade adds to the momentum of USDC innovation after its recent expansion to 6 new blockchain networks.

As USDC and EURC represent the intersection of money and code, their capabilities will continue to evolve as new opportunities arise to add new features and refine existing ones.  We've developed a number of enhancements for v2.2 since the last upgrade to USDC in early 2021.

There will be six new changes to the USDC and EURC smart contracts and they’ll be implemented through a single v2.2 upgrade for each supported EVM blockchain. The upgrade is fully backwards-compatible, does not introduce any breaking changes to existing integrations, and requires no action from developers or users. All code changes have been audited by Halborn, a leading third-party blockchain security firm.1

Here are the details on the improvements we’re making:

 

Enable signature validation from smart contract wallets

USDC and EURC will adopt EIP-1271 to allow authorized transfers to be used from a smart contract wallet in addition to a private key wallet. EIP-1271 has been adopted by over 50 protocols and products to date2, including significant market participants like Uniswap.3

This new change improves USDC and EURC support for account abstraction, a rapidly growing initiative in the EVM ecosystem to usher in simplified user experiences for mainstream audiences.

Importantly, this enables developers to build products that allow users to pay network gas fees in USDC and EURC, as a smart contract wallet can act as a relayer in permit, transferWithAuthorization, receiveWithAuthorization, and cancelAuthorization function calls.

 

Improve efficiency of blocklisting check

The blocklisting feature of the USDC and EURC smart contracts allows Circle to prevent specific addresses from sending and receiving USDC and EURC. The process for using the blocklist remains unchanged and follows Circle’s Access Denial policy (see USDC Terms and EURC Terms).

Most user operations, like transferring USDC between accounts, will require checking the blocklist prior to execution. The need for additional computation results in increased network gas fees compared to a base ERC-20 implementation.

With v2.2, we’ve optimized how the blocklist state is stored for USDC and EURC to yield a more efficient lookup process. The result is a significant reduction of network gas fees for transfer, transferFrom, transferWithAuthorization, receiveWithAuthorization, burn, and mint function calls.

Cost reduction can range between 6-7% for functions invoked in many common use cases, such as making a transfer, payment, or trade with USDC or EURC. Developers and users of Cross-Chain Transfer Protocol (CCTP) can also see a 3-4% reduction in network gas fees when burning and minting USDC across blockchains.

 

Function

Avg # gas change per txn

Avg % gas change per txn

Avg $ gas change per txn

transfer

-3365

-7.18%

-$0.11

transferFrom

-3443

-6.55%

-$0.12

burn

-1863

-3.79%

-$0.06

mint

-1735

-3.02%

-$0.06

Source: Cost estimates calculated via simulations run by Circle.

Assumptions: Ethereum blockchain, gas price of 20 Gwei, and ETH price of $1,700.

 

Improve resiliency against forks

The open nature of public blockchains enables the developer community to create copies, or forks, of a given network at any time. For example, after the Ethereum merge event in late 2022, developers generated a fork of the Ethereum PoS blockchain to create and operate the Ethereum PoW blockchain. In this case, Circle officially supports Ethereum PoS for USDC and EURC native issuance, which means only USDC and EURC held on Ethereum PoS can be redeemed 1:1 for US dollars and euro, respectively.

To protect users from a misuse of funds that could result from future forks of Ethereum and other supported EVM blockchains, we’re implementing a change on the USDC and EURC smart contracts that will now dynamically infer the official chainID instead of setting it manually.

This means if or when an EVM blockchain is forked in the future, validators will be able to automatically verify the official chainID to prevent USDC or EURC transactions from being validated on unofficial forks.

 

Remove blocklist check from functions that don't move funds

The checking of the blocklist occurs predominantly when USDC or EURC is being transferred. However, the v2.1 implementation also prevents the following actions for blocked addresses:

  1. Approving an amount for a future "pull-based" transfer (approve)
  2. Increasing the approved amount (increaseAllowance)
  3. Decreasing the approved amount (decreaseAllowance)
  4. A variation of approve (permitthat does not require gas

These functions do not move funds, but merely allow for funds to move in the future, which means a blocklist check during this operation is not relevant or useful. When an approval is leveraged in the future to move funds, the blocklist will always be checked at that time and will prevent the movement of funds as applicable.

With this change, we are removing the blocklist check on functions that don’t move funds, resulting in a further reduction of network gas fees when using USDC and EURC. We’ve calculated an estimated ~7.34% gas savings for approve, ~3.5% for increaseAllowance and decreaseAllowance, and ~0.85% for permit.

 

Skip timestamp check when deadline is set to maximum amount

In order for USDC and EURC to comply with ERC-4337 and support account abstraction, certain commonly used operations such as checking the current timestamp cannot be run in function calls.

To allow the permit function to be 4337-compatible, we’ve taken a recommendation from the Ethereum community to implement permit in a way that avoids the timestamp check in some instances: “The deadline argument can be set to uint(-1) to create permits that effectively never expire.”

This change means that when permit is called with a deadline of uint(-1), which is the maximum value possible, we interpret that as having no expiry, so the timestamp check is skipped and the operation is compliant with ERC-4337. This approach is sound because it corresponds to a deadline that is several magnitudes larger than billions of years into the future.

 

One-time rename for EURC token symbol

We’ve recently streamlined our product naming construct and corresponding symbols to improve consistency and eliminate confusion when referring to Circle’s stablecoins:

  • USDC (pronounced U-S-D-C) is the official name and symbol for Circle's dollar-backed stablecoin.
  • EURC (pronounced E-U-R-C) is the official name and symbol for Circle's euro-backed stablecoin.

To match these naming improvements in the contract code, we're adding a one-time option during the v2.2 upgrade to rename the token symbol for EURC from “EUROC” to “EURC”.

This change will only happen once as part of this upgrade and will not expose a public function to change the token name or token symbol in the future.

 

Rollout timing

Starting today, we’ll begin a phased rollout of the v2.2 upgrade to USDC and EURC on testnet and mainnet for each supported blockchain, which we plan to complete over the next few months. These upgrades will take place behind the scenes with no downtime, which means no action is needed from developers or users.

 

Planned rollout schedule:

  • Today (11/9/23)
    • Avalanche Fuji testnet

  • Mid-November 2023
    • Avalanche mainnet

  • Late-November through December 2023
    • Arbitrum Goerli testnet and Arbitrum mainnet
    • OP Goerli testnet and OP Mainnet
    • Base Goerli testnet and Base mainnet
    • Polygon PoS Mumbai testnet and Polygon PoS mainnet

  • January 2024
    • Ethereum Goerli testnet and Ethereum mainnet
    • TRON Shasta testnet and TRON mainnet

Note: We’re planning to bring v2.2 to USDC and EURC on Sepolia testnet for supported EVM blockchains starting in January 2024.

 

One global community

USDC v2.2 is the culmination of research conducted by Circle and the broader developer community, who often contribute new ideas and enhancements via PRs to our public repo. Thank you to Alex Kroeger for suggesting gas efficiency improvements and to the many external contributors who have put time and effort into helping make USDC and EURC the most accessible and efficient money protocols on the internet.

If you have questions about the v2.2 upgrade or want to get started building with USDC and EURC, join the conversation in our Discord.

—————

1. Circle contracted with Halborn, a third-party blockchain security firm to perform a code audit on the changeset for USDC v2.2.
2. eip1271.io – Last accessed 11/4/2023
3. Uniswap’s public repo – Last accessed 11/4/2023
Back to top