Commit 66f7de23 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge pull request #3932 from ethereum-optimism/fix/mintable-erc20-immutable

contracts-bedrock: OptimismMintableERC20 immutables
parents c9e38c1a 51ccc0e8
......@@ -12,7 +12,7 @@ bindings: l1block-bindings \
optimism-portal-bindings \
l2-output-oracle-bindings \
gas-price-oracle-bindings \
legacy-message-passer-bindings \
legacy-message-passer-bindings \
address-manager-bindings \
l2-cross-domain-messenger-bindings \
l2-standard-bridge-bindings \
......@@ -28,7 +28,8 @@ bindings: l1block-bindings \
l1-erc721-bridge-bindings \
optimism-mintable-erc721-factory-bindings \
l1-fee-vault-bindings \
basefee-vault-bindings
basefee-vault-bindings \
legacy-erc20-eth-bindings
version:
forge --version
......@@ -95,6 +96,9 @@ optimism-mintable-erc20-factory-bindings: compile
optimism-mintable-erc20-bindings: compile
./gen_bindings.sh contracts/universal/OptimismMintableERC20.sol:OptimismMintableERC20 $(pkg)
legacy-erc20-eth-bindings: compile
./gen_bindings.sh contracts/legacy/LegacyERC20ETH.sol:LegacyERC20ETH $(pkg)
proxy-bindings: compile
./gen_bindings.sh contracts/universal/Proxy.sol:Proxy $(pkg)
......
This diff is collapsed.
This diff is collapsed.
......@@ -350,10 +350,8 @@ func NewL2StorageConfig(config *DeployConfig, block *types.Block) (state.Storage
"l1FeeScalar": config.GasPriceOracleScalar,
}
storage["LegacyERC20ETH"] = state.StorageValues{
"bridge": predeploys.L2StandardBridge,
"remoteToken": common.Address{},
"_name": "Ether",
"_symbol": "ETH",
"_name": "Ether",
"_symbol": "ETH",
}
storage["WETH9"] = state.StorageValues{
"name": "Wrapped Ether",
......
......@@ -97,6 +97,9 @@ func BuildOptimism(immutable ImmutableConfig) (DeploymentResults, error) {
immutable["OptimismMintableERC721Factory"]["remoteChainId"],
},
},
{
Name: "LegacyERC20ETH",
},
}
return BuildL2(deployments)
}
......@@ -187,6 +190,8 @@ func l2Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep
return nil, fmt.Errorf("invalid type for remoteChainId")
}
_, tx, _, err = bindings.DeployOptimismMintableERC721Factory(opts, backend, bridge, remoteChainId)
case "LegacyERC20ETH":
_, tx, _, err = bindings.DeployLegacyERC20ETH(opts, backend)
default:
return tx, fmt.Errorf("unknown contract: %s", deployment.Name)
}
......
......@@ -51,6 +51,7 @@ func TestBuildOptimism(t *testing.T) {
"L1BlockNumber": true,
"L2ERC721Bridge": true,
"OptimismMintableERC721Factory": true,
"LegacyERC20ETH": true,
}
// Only the exact contracts that we care about are being
......
......@@ -108,41 +108,42 @@ L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 15171)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 20152)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 26095)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 180457)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21749)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 19621)
L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 23733)
L2StandardBridge_Test:test_finalizeBridgeETH_sendToMessengerReverts() (gas: 23960)
L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelfReverts() (gas: 23793)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93522)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 89363)
L2StandardBridge_Test:test_initialize() (gas: 10536)
L2StandardBridge_Test:test_receive() (gas: 131820)
L2StandardBridge_Test:test_withdraw() (gas: 347362)
L2StandardBridge_Test:test_withdrawTo() (gas: 348091)
L2StandardBridge_Test:test_withdraw() (gas: 343951)
L2StandardBridge_Test:test_withdrawTo() (gas: 344680)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251816)
L2ToL1MessagePasserTest:test_burn() (gas: 112530)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 70246)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA() (gas: 75764)
LegacyERC20ETH_Test:test_approve() (gas: 10723)
LegacyERC20ETH_Test:test_burn() (gas: 10592)
LegacyERC20ETH_Test:test_crossDomain() (gas: 10518)
LegacyERC20ETH_Test:test_decreaseAllowance() (gas: 10679)
LegacyERC20ETH_Test:test_burn() (gas: 10615)
LegacyERC20ETH_Test:test_crossDomain() (gas: 6339)
LegacyERC20ETH_Test:test_decreaseAllowance() (gas: 10657)
LegacyERC20ETH_Test:test_increaseAllowance() (gas: 10667)
LegacyERC20ETH_Test:test_metadata() (gas: 15391)
LegacyERC20ETH_Test:test_metadata() (gas: 15414)
LegacyERC20ETH_Test:test_mint() (gas: 10649)
LegacyERC20ETH_Test:test_transfer() (gas: 10733)
LegacyERC20ETH_Test:test_transfer() (gas: 10711)
LegacyERC20ETH_Test:test_transferFrom() (gas: 12887)
LegacyMessagePasser_Test:test_LegacyMessagePasser_passMessageToL1_Succeeds() (gas: 34519)
OptimismMintableERC20_Test:test_bridge() (gas: 9733)
OptimismMintableERC20_Test:test_burn() (gas: 52772)
OptimismMintableERC20_Test:test_burnRevertsFromNotBridge() (gas: 13241)
OptimismMintableERC20_Test:test_erc165_supportsInterface() (gas: 7696)
OptimismMintableERC20_Test:test_l1Token() (gas: 9728)
OptimismMintableERC20_Test:test_l2Bridge() (gas: 9739)
OptimismMintableERC20_Test:test_mint() (gas: 65709)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13198)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9733)
OptimismMintableERC20_Test:test_bridge() (gas: 7599)
OptimismMintableERC20_Test:test_burn() (gas: 51031)
OptimismMintableERC20_Test:test_burnRevertsFromNotBridge() (gas: 11164)
OptimismMintableERC20_Test:test_erc165_supportsInterface() (gas: 7765)
OptimismMintableERC20_Test:test_l1Token() (gas: 7622)
OptimismMintableERC20_Test:test_l2Bridge() (gas: 7688)
OptimismMintableERC20_Test:test_legacy() (gas: 14300)
OptimismMintableERC20_Test:test_mint() (gas: 63609)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 11098)
OptimismMintableERC20_Test:test_remoteToken() (gas: 7644)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 7577)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1109783)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2205709)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1095274)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2176691)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9413)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15767)
......
......@@ -277,10 +277,6 @@
| _name | string | 3 | 0 | 32 | contracts/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
|--------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| _symbol | string | 4 | 0 | 32 | contracts/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
|--------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| remoteToken | address | 5 | 0 | 20 | contracts/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
|--------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------|
| bridge | address | 6 | 0 | 20 | contracts/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
+--------------+-------------------------------------------------+------+--------+-------+----------------------------------------------------+
=======================
......@@ -363,10 +359,6 @@
| _name | string | 3 | 0 | 32 | contracts/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
|--------------+-------------------------------------------------+------+--------+-------+---------------------------------------------------------------------|
| _symbol | string | 4 | 0 | 32 | contracts/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
|--------------+-------------------------------------------------+------+--------+-------+---------------------------------------------------------------------|
| remoteToken | address | 5 | 0 | 20 | contracts/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
|--------------+-------------------------------------------------+------+--------+-------+---------------------------------------------------------------------|
| bridge | address | 6 | 0 | 20 | contracts/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
+--------------+-------------------------------------------------+------+--------+-------+---------------------------------------------------------------------+
=======================
......
......@@ -29,6 +29,17 @@ contract OptimismMintableERC20_Test is Bridge_Initializer {
assertEq(L2Token.l2Bridge(), address(L2Bridge));
}
function test_legacy() external {
// Getters for the remote token
assertEq(L2Token.REMOTE_TOKEN(), address(L1Token));
assertEq(L2Token.remoteToken(), address(L1Token));
assertEq(L2Token.l1Token(), address(L1Token));
// Getters for the bridge
assertEq(L2Token.BRIDGE(), address(L2Bridge));
assertEq(L2Token.bridge(), address(L2Bridge));
assertEq(L2Token.l2Bridge(), address(L2Bridge));
}
function test_mint() external {
vm.expectEmit(true, true, true, true);
emit Mint(alice, 100);
......
......@@ -16,12 +16,12 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
/**
* @notice Address of the corresponding version of this token on the remote chain.
*/
address public remoteToken;
address public immutable REMOTE_TOKEN;
/**
* @notice Address of the StandardBridge on this network.
*/
address public bridge;
address public immutable BRIDGE;
/**
* @notice Emitted whenever tokens are minted for an account.
......@@ -43,7 +43,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
* @notice A modifier that only allows the bridge to call
*/
modifier onlyBridge() {
require(msg.sender == bridge, "OptimismMintableERC20: only bridge can mint and burn");
require(msg.sender == BRIDGE, "OptimismMintableERC20: only bridge can mint and burn");
_;
}
......@@ -59,8 +59,8 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
string memory _name,
string memory _symbol
) ERC20(_name, _symbol) {
remoteToken = _remoteToken;
bridge = _bridge;
REMOTE_TOKEN = _remoteToken;
BRIDGE = _bridge;
}
/**
......@@ -113,17 +113,33 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
/**
* @custom:legacy
* @notice Legacy getter for the remote token. Use remoteToken going forward.
* @notice Legacy getter for the remote token. Use REMOTE_TOKEN going forward.
*/
function l1Token() public view returns (address) {
return remoteToken;
return REMOTE_TOKEN;
}
/**
* @custom:legacy
* @notice Legacy getter for the bridge. Use bridge going forward.
* @notice Legacy getter for the bridge. Use BRIDGE going forward.
*/
function l2Bridge() public view returns (address) {
return bridge;
return BRIDGE;
}
/**
* @custom:legacy
* @notice Legacy getter for REMOTE_TOKEN.
*/
function remoteToken() public view returns (address) {
return REMOTE_TOKEN;
}
/**
* @custom:legacy
* @notice Legacy getter for BRIDGE.
*/
function bridge() public view returns (address) {
return BRIDGE;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment