XIP-91

Infinex Account V4

authoraxe, kmao
typecore-upgrade
networkBase, Optimism, Ethereum, Solana, Arbitrum, Polygon, Blast
statusApproved
created2024-12-02

Proposal Summary

This XIP proposes the upgrade of the Infinex Account to the next version, with the ability to send assets to a specified address and allowing users to update their recovery address.

Specification

Overview

We propose the following changes to the Infinex account:

  • The ability to send assets to a specified address, as long as the Infinex platform co-signs the transactions
  • Allow users to update their recovery address, also requires Infinex platform co-signing.

These two changes supercedes Send V1, and previous related security updates. They will be implemented as Account Upgrade V4 (EVM) and V3 (Solana).In addition, the EVM account upgrade will also include:

  • EIP1271 smart contract signing support for Main Accounts
  • Functions to support ERC721A and Cryptopunks/Etherrocks
  • The Curve Stable Swap App to include support for legacy ERC-20 tokens.

Rationale

Sending assets to any specified address

This feature was proposed in the XIP-39: Send V1, however has been superseded by this XIP. The new proposed implementation of Send V2 will provide greater flexibility, as well as solving challenges with cross-chain address book syncing.

Updating the Recovery Address

One of the biggest quality of life improvements Infinex can make is allowing users to update their recovery address - this will allow users to continue to use funds recovery functionality if they lose access to their existing funds recovery address.

EIP1271

As support for smart contract signing improves, this allows users to validate that they are the owner of an Infinex account when integrating with third parties that require EOA signatures for things such as claims.

ERC721A & Other NFT Support

This extends both support for legacy NFTs that do not conform to the NFT standard, as well as adding batch transfer functionality (ERC721A, such as the Patron NFT), which will see significant gas savings when transferring multiple NFTs.

Curve Stable Swap Updates

The update will allow Curve Stableswap pools that include legacy ERC20 tokens that do not conform to the ERC20 standard

Technical Specification

The Main Account V4 upgrade includes the following changes to the contracts.

Base Module

  • ~ bump account version to 4
  • + isValidSignature(bytes32 hash, bytes memory signature) - returns the EIP1271 magic value if the signature is valid

App Module

  • + transferERC721ABatchToApp() - allows the main account to transfer multiple ERC721As to an app account
  • + transferNonStandardNFTToApp() - allows the main account to transfer Cryptopunks and Etherrocks to an app account

Recovery Module

  • ~ error NullAddress() -> error RecoveryAddressNotSet() - renamed error message for when the recovery address is not set
  • + recoverERC721ABatch() - recovers multiple ERC721As to the recovery address
  • + recoverNonStandardNFT() - recovers Cryptopunks and Etherrocks to the recovery address
  • + modifyFundsRecoveryAddress() - allows the recovery address to be updated

Withdraw Module

  • + withdrawERC721ABatchToAllowlistedAddress() - allows the main account to withdraw ERC721As to an allowlisted address
  • + withdrawNonStandardNFTToAllowlistedAddress() - allows the main account to withdraw Cryptopunks and Etherrocks to an allowlisted address
  • + recoverERC721ABatch() - recovers multiple ERC721As to the recovery address
  • + recoverNonStandardNFT() - recovers non-standard NFTs to the recovery address

Transfer Module

  • + transferEther() - transfers Ether to a destination address with platform co-signing
  • + transferERC20() - transfers ERC20 tokens to a destination address with platform co-signing
  • + transferERC721() - transfers ERC721 tokens to a destination address with platform co-signing
  • + transferERC721ABatch() - transfers multiple ERC721A tokens to a destination address with platform co-signing
  • + transferERC1155() - transfers ERC1155 tokens to a destination address with platform co-signing
  • + transferERC1155Batch() - transfers multiple ERC1155 tokens to a destination address with platform co-signing
  • + transferNonStandardToken() - transfers non-standard tokens (e.g. Cryptopunks, Etherrocks) to a destination address with platform co-signing

Infinex Protocol Config Beacon

  • + setPlatformKey() - sets the platform key used for co-signing transfers

Copyright

Copyright and related rights waived via CC0.

Contribute to Proposals on GitHub