Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: introduce SuperchainERC20 redesign + ICrosschainERC20 #12321

Merged

Conversation

agusduha
Copy link
Contributor

@agusduha agusduha commented Oct 4, 2024

Description

The main idea is migrating the sendERC20 and relayERC20 functions from the SuperchainERC20 standard to a new SuperchainERC20Bridge. Also introducing ICrosschainERC20 interface for mint/burn functions to be cross-chain neutral and extensible to other L2s.

Specs:
ethereum-optimism/specs#384
ethereum-optimism/specs#413

Tests

  • Add SuperchainERC20Bridge tests
  • Refactor the old superchain standard tests

Additional context

The SuperchainERC20Bridge is a new predeploy.

Metadata

Closes #12322

agusduha and others added 15 commits September 25, 2024 15:20
* feat: add superchain erc20 bridge

* fix: interfaces and versions
* refactor: use oz upgradeable erc20 as dependency

* chore: update interfaces

* fix: tests based on changes

* refactor: remove op as dependency

* feat: add check for supererc20 bridge on modifier

* chore: update tests and interfaces

* chore: update stack vars name on test

* chore: remove empty gitmodules file

* chore: update superchain weth errors
* test: add superchain erc20 bridge tests

* test: add optimism superchain erc20 beacon tests

* test: remove unnecessary test

* test: tests fixes

* test: tests fixes
* chore: update missing bridge on natspec

* fix: natspecs

---------

Co-authored-by: agusduha <[email protected]>
* refactor: rename mint and burn functions on superchain erc20

* chore: rename optimism superchain erc20 to superchain erc20

* feat: create optimism superchain erc20 contract

* chore: update natspec and errors

* fix: superchain erc20 tests

* refactor: make superchain erc20 abstract

* refactor: move storage and erc20 metadata functions to implementation

* chore: update interfaces

* chore: update superchain erc20 events

* fix: tests

* fix: natspecs

* fix: add semmver lock and snapshots

* fix: remove unused imports

* fix: natspecs

---------

Co-authored-by: 0xDiscotech <[email protected]>
* fix: semver natspec check failure

* fix: ignore mock contracts in semver natspec script

* fix: error message
* feat: add crosschain erc20 interface

* fix: refactor interfaces
Co-authored-by: 0xng <[email protected]>
Co-authored-by: 0xParticle <[email protected]>
Co-authored-by: gotzenx <[email protected]>
@agusduha agusduha requested a review from a team as a code owner October 4, 2024 14:11
@agusduha agusduha requested a review from maurelian October 4, 2024 14:11
* fix: stop inheriting superchain interfaces

* fix: move events and erros into the implementation

* fix: make superchainERC20 inherits from crosschainERC20
@tynes
Copy link
Contributor

tynes commented Oct 4, 2024

What is the forge-std update from?

Copy link
Contributor

@mds1 mds1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a skim of the diff with a few small comments

* fix: refactor common errors

* fix: remove unused version
@tynes
Copy link
Contributor

tynes commented Oct 14, 2024

Regarding usage of interfaces, will leave it to @smartcontracts to make it simple + straight forward with ensuring that its done correctly. Given there is already a list of ignored files that don't follow the standard, this PR does not need to worry about fixing existing issues or following a particular style, as long as CI passes. ethereum-optimism/design-docs#135 will help to further the efforts of ensuring that the interfaces are used consistently

Copy link
Contributor

@tynes tynes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test coverage is very thorough

Copy link
Contributor

@tynes tynes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test coverage is very thorough

@tynes tynes enabled auto-merge October 15, 2024 18:04
@tynes tynes added this pull request to the merge queue Oct 15, 2024
@tynes tynes removed this pull request from the merge queue due to a manual request Oct 15, 2024
@mslipper mslipper added this pull request to the merge queue Oct 15, 2024
Merged via the queue into ethereum-optimism:develop with commit cb2066b Oct 15, 2024
58 checks passed

/// @notice Mapping of the deployed OptimismSuperchainERC20 to the remote token address.
/// This is used to keep track of the token deployments.
mapping(address _localToken => address remoteToken_) public deployments;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Naming nits:

  1. Is there a benefit for using underscores in named mappings? The name can't be used anywhere AFAIK and is only for readability, so may as well remove the underscores
  2. Naming the second arg in a mapping always seemed redundant to me, because it's the same as the variable. In other words, it feels confusing to me that remoteToken_ and deployments are the same thing—doesn't this mean we're giving two variable names to the same value? Using:
mapping(address _localToken => address) public deployments;

or

mapping(address _localToken => address) public remoteTokens;

feels more clear to me


uint256 source = IL2ToL2CrossDomainMessenger(MESSENGER).crossDomainMessageSource();
emit CrosschainMinted(_to, _amount);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

another naming nit, should this be present tense of CrosschainMint for consistency with the commong methodName/EventNames used in ERC20s of transfer/Transfer and mint/Mint? Guessing we've bikeshed on this before, so this (like my other comments so far) is not super important


emit RelayERC20(_from, _to, _amount, source);
emit CrosschainBurnt(_from, _amount);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

samlaf pushed a commit to samlaf/optimism that referenced this pull request Nov 10, 2024
…-optimism#12321)

* feat: add superchain erc20 bridge (ethereum-optimism#61)

* feat: add superchain erc20 bridge

* fix: interfaces and versions

* refactor: optimism superchain erc20 redesign (ethereum-optimism#62)

* refactor: use oz upgradeable erc20 as dependency

* chore: update interfaces

* fix: tests based on changes

* refactor: remove op as dependency

* feat: add check for supererc20 bridge on modifier

* chore: update tests and interfaces

* chore: update stack vars name on test

* chore: remove empty gitmodules file

* chore: update superchain weth errors

* test: add superchain erc20 bridge tests (ethereum-optimism#65)

* test: add superchain erc20 bridge tests

* test: add optimism superchain erc20 beacon tests

* test: remove unnecessary test

* test: tests fixes

* test: tests fixes

* chore: update missing bridge on natspec (ethereum-optimism#69)

* chore: update missing bridge on natspec

* fix: natspecs

---------

Co-authored-by: agusduha <[email protected]>

* fix: remove superchain erc20 base (ethereum-optimism#70)

* refactor: update isuperchainweth (ethereum-optimism#71)


---------

Co-authored-by: agusduha <[email protected]>

* feat: rename mint/burn and add SuperchainERC20 (ethereum-optimism#74)

* refactor: rename mint and burn functions on superchain erc20

* chore: rename optimism superchain erc20 to superchain erc20

* feat: create optimism superchain erc20 contract

* chore: update natspec and errors

* fix: superchain erc20 tests

* refactor: make superchain erc20 abstract

* refactor: move storage and erc20 metadata functions to implementation

* chore: update interfaces

* chore: update superchain erc20 events

* fix: tests

* fix: natspecs

* fix: add semmver lock and snapshots

* fix: remove unused imports

* fix: natspecs

---------

Co-authored-by: 0xDiscotech <[email protected]>

* fix: refactor zero check (ethereum-optimism#76)

* fix: pre pr

* fix: semver natspec check failure (ethereum-optimism#79)

* fix: semver natspec check failure

* fix: ignore mock contracts in semver natspec script

* fix: error message

* feat: add crosschain erc20 interface (ethereum-optimism#80)

* feat: add crosschain erc20 interface

* fix: refactor interfaces

* fix: superchain bridge natspec (ethereum-optimism#83)

* fix: superchain weth natspec (ethereum-optimism#84)

Co-authored-by: 0xng <[email protected]>
Co-authored-by: 0xParticle <[email protected]>
Co-authored-by: gotzenx <[email protected]>

* fix: stop inheriting superchain interfaces (ethereum-optimism#85)

* fix: stop inheriting superchain interfaces

* fix: move events and erros into the implementation

* fix: make superchainERC20 inherits from crosschainERC20

* fix: superchain bridge rename (ethereum-optimism#86)

* fix: fee vault compiler error (ethereum-optimism#87)

* fix: remove unused imports

* fix: refactor common errors (ethereum-optimism#90)

* fix: refactor common errors

* fix: remove unused version

* fix: reuse unauthorized error (ethereum-optimism#92)

* fix: superchain erc20 factory conflicts

* fix: rename crosschain functions (ethereum-optimism#94)

---------

Co-authored-by: Disco <[email protected]>
Co-authored-by: 0xng <[email protected]>
Co-authored-by: 0xParticle <[email protected]>
Co-authored-by: gotzenx <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

SuperchainERC20: Redesign
7 participants