Commit 4f54bcdb authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge pull request #4879 from ethereum-optimism/fix/mintable-token-versions

contracts-bedrock: add semver to mintable tokens
parents fff7b7d6 1c9b5bca
This diff is collapsed.
This diff is collapsed.
......@@ -124,21 +124,21 @@ L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 122621)
L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 134715)
L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 52578)
L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10524)
L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 26432)
L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 21748)
L2ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 146998)
L2ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 29427)
L2ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 22149)
L2ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 24244)
L2ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 19584)
L2ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 144600)
L2ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 29257)
L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 26454)
L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 21770)
L2ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 146997)
L2ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 29471)
L2ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 22171)
L2ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 24266)
L2ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 19606)
L2ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 144599)
L2ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 29301)
L2ERC721Bridge_Test:test_constructor_succeeds() (gas: 10133)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_alreadyExists_reverts() (gas: 29106)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_alreadyExists_reverts() (gas: 29128)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 19852)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16148)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17637)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 168905)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 168926)
L2OutputOracleTest:test_computeL2Timestamp_succeeds() (gas: 37206)
L2OutputOracleTest:test_constructor_badTimestamp_reverts() (gas: 70767)
L2OutputOracleTest:test_constructor_l2BlockTimeZero_reverts() (gas: 45786)
......@@ -167,32 +167,32 @@ L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 26093)
L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15149)
L2OutputOracleUpgradeable_Test:test_initializeProxy_alreadyInitialized_reverts() (gas: 20131)
L2OutputOracleUpgradeable_Test:test_upgrading_succeeds() (gas: 180413)
L2StandardBridge_BridgeERC20To_Test:test_bridgeERC20To_succeeds() (gas: 387969)
L2StandardBridge_BridgeERC20To_Test:test_withdrawTo_withdrawingERC20_succeeds() (gas: 388200)
L2StandardBridge_BridgeERC20_Test:test_bridgeERC20_succeeds() (gas: 383692)
L2StandardBridge_BridgeERC20_Test:test_withdraw_notEOA_reverts() (gas: 251790)
L2StandardBridge_BridgeERC20_Test:test_withdraw_withdrawingERC20_succeeds() (gas: 383877)
L2StandardBridge_BridgeERC20To_Test:test_bridgeERC20To_succeeds() (gas: 387796)
L2StandardBridge_BridgeERC20To_Test:test_withdrawTo_withdrawingERC20_succeeds() (gas: 388044)
L2StandardBridge_BridgeERC20_Test:test_bridgeERC20_succeeds() (gas: 383520)
L2StandardBridge_BridgeERC20_Test:test_withdraw_notEOA_reverts() (gas: 251687)
L2StandardBridge_BridgeERC20_Test:test_withdraw_withdrawingERC20_succeeds() (gas: 383722)
L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 23798)
L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 23960)
L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23848)
L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingERC20_succeeds() (gas: 90989)
L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingETH_succeeds() (gas: 89821)
L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingERC20_succeeds() (gas: 91011)
L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingETH_succeeds() (gas: 89843)
L2StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 43155)
L2StandardBridge_Test:test_initialize_succeeds() (gas: 24247)
L2StandardBridge_Test:test_receive_succeeds() (gas: 177145)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19615)
L2StandardBridge_Test:test_receive_succeeds() (gas: 177167)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19637)
L2ToL1MessagePasserTest:test_burn_succeeds() (gas: 112572)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract_succeeds() (gas: 70423)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA_succeeds() (gas: 75874)
LegacyERC20ETH_Test:test_approve_doesNotExist_reverts() (gas: 10701)
LegacyERC20ETH_Test:test_burn_doesNotExist_reverts() (gas: 10615)
LegacyERC20ETH_Test:test_crossDomain_succeeds() (gas: 6362)
LegacyERC20ETH_Test:test_decreaseAllowance_doesNotExist_reverts() (gas: 10679)
LegacyERC20ETH_Test:test_burn_doesNotExist_reverts() (gas: 10592)
LegacyERC20ETH_Test:test_crossDomain_succeeds() (gas: 6340)
LegacyERC20ETH_Test:test_decreaseAllowance_doesNotExist_reverts() (gas: 10701)
LegacyERC20ETH_Test:test_increaseAllowance_doesNotExist_reverts() (gas: 10689)
LegacyERC20ETH_Test:test_metadata_succeeds() (gas: 15414)
LegacyERC20ETH_Test:test_metadata_succeeds() (gas: 15492)
LegacyERC20ETH_Test:test_mint_doesNotExist_reverts() (gas: 10649)
LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12890)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10733)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34518)
MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5713)
MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 60653)
......@@ -225,27 +225,28 @@ MintManager_upgrade_Test:test_upgrade_fromNotOwner_reverts() (gas: 10929)
MintManager_upgrade_Test:test_upgrade_fromOwner_succeeds() (gas: 23411)
MintManager_upgrade_Test:test_upgrade_toZeroAddress_reverts() (gas: 10958)
OptimismMintableERC20_Test:test_bridge_succeeds() (gas: 7643)
OptimismMintableERC20_Test:test_burn_notBridge_reverts() (gas: 11165)
OptimismMintableERC20_Test:test_burn_succeeds() (gas: 51013)
OptimismMintableERC20_Test:test_burn_notBridge_reverts() (gas: 11142)
OptimismMintableERC20_Test:test_burn_succeeds() (gas: 50960)
OptimismMintableERC20_Test:test_erc165_supportsInterface_succeeds() (gas: 7742)
OptimismMintableERC20_Test:test_l1Token_succeeds() (gas: 7599)
OptimismMintableERC20_Test:test_l2Bridge_succeeds() (gas: 7665)
OptimismMintableERC20_Test:test_l1Token_succeeds() (gas: 7621)
OptimismMintableERC20_Test:test_l2Bridge_succeeds() (gas: 7621)
OptimismMintableERC20_Test:test_legacy_succeeds() (gas: 14344)
OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11121)
OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63609)
OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7622)
OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11143)
OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63588)
OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7644)
OptimismMintableERC20_Test:test_semver_succeeds() (gas: 8789)
OptimismMintableTokenFactory_Test:test_bridge_succeeds() (gas: 7602)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_remoteIsZero_succeeds() (gas: 9390)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds() (gas: 2176667)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1095273)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds() (gas: 2523203)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1268541)
OptimismMintableERC721_Test:test_burn_notBridge_reverts() (gas: 136922)
OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118779)
OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 24162)
OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118796)
OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 28279)
OptimismMintableERC721_Test:test_safeMint_notBridge_reverts() (gas: 11142)
OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140502)
OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140524)
OptimismMintableERC721_Test:test_tokenURI_succeeds() (gas: 163420)
OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8262)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2276440)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2336687)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9395)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833)
......
......@@ -12,8 +12,8 @@ contract OptimismMintableERC20_Test is Bridge_Initializer {
event Mint(address indexed account, uint256 amount);
event Burn(address indexed account, uint256 amount);
function setUp() public override {
super.setUp();
function test_semver_succeeds() external {
assertEq(L2Token.version(), "1.0.0");
}
function test_remoteToken_succeeds() external {
......
......@@ -44,6 +44,7 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer {
assertEq(L2Token.REMOTE_TOKEN(), address(L1Token));
assertEq(L2Token.BRIDGE(), address(L2Bridge));
assertEq(L2Token.REMOTE_CHAIN_ID(), 1);
assertEq(L2Token.version(), "1.0.0");
}
function test_safeMint_succeeds() external {
......
......@@ -4,6 +4,7 @@ pragma solidity 0.8.15;
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import { ILegacyMintableERC20, IOptimismMintableERC20 } from "./IOptimismMintableERC20.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @title OptimismMintableERC20
......@@ -13,7 +14,7 @@ import { ILegacyMintableERC20, IOptimismMintableERC20 } from "./IOptimismMintabl
* Designed to be backwards compatible with the older StandardL2ERC20 token which was only
* meant for use on L2.
*/
contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20, ERC20 {
contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20, ERC20, Semver {
/**
* @notice Address of the corresponding version of this token on the remote chain.
*/
......@@ -49,6 +50,8 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
}
/**
* @custom:semver 1.0.0
*
* @param _bridge Address of the L2 standard bridge.
* @param _remoteToken Address of the corresponding L1 token.
* @param _name ERC20 name.
......@@ -59,7 +62,7 @@ contract OptimismMintableERC20 is IOptimismMintableERC20, ILegacyMintableERC20,
address _remoteToken,
string memory _name,
string memory _symbol
) ERC20(_name, _symbol) {
) ERC20(_name, _symbol) Semver(1, 0, 0) {
REMOTE_TOKEN = _remoteToken;
BRIDGE = _bridge;
}
......
......@@ -44,11 +44,15 @@ contract OptimismMintableERC20Factory is Semver {
);
/**
* @custom:semver 1.0.0
* @custom:semver 1.1.0
*
* @notice The semver MUST be bumped any time that there is a change in
* the OptimismMintableERC20 token contract since this contract
* is responsible for deploying OptimismMintableERC20 contracts.
*
* @param _bridge Address of the StandardBridge on this chain.
*/
constructor(address _bridge) Semver(1, 0, 0) {
constructor(address _bridge) Semver(1, 1, 0) {
BRIDGE = _bridge;
}
......
......@@ -8,6 +8,7 @@ import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
import { IOptimismMintableERC721 } from "./IOptimismMintableERC721.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @title OptimismMintableERC721
......@@ -15,7 +16,7 @@ import { IOptimismMintableERC721 } from "./IOptimismMintableERC721.sol";
* typically an Optimism representation of an Ethereum-based token. Standard reference
* implementation that can be extended or modified according to your needs.
*/
contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721 {
contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721, Semver {
/**
* @inheritdoc IOptimismMintableERC721
*/
......@@ -45,6 +46,8 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721 {
}
/**
* @custom:semver 1.0.0
*
* @param _bridge Address of the bridge on this network.
* @param _remoteChainId Chain ID where the remote token is deployed.
* @param _remoteToken Address of the corresponding token on the other network.
......@@ -57,7 +60,7 @@ contract OptimismMintableERC721 is ERC721Enumerable, IOptimismMintableERC721 {
address _remoteToken,
string memory _name,
string memory _symbol
) ERC721(_name, _symbol) {
) ERC721(_name, _symbol) Semver(1, 0, 0) {
require(_bridge != address(0), "OptimismMintableERC721: bridge cannot be address(0)");
require(_remoteChainId != 0, "OptimismMintableERC721: remote chain id cannot be zero");
require(
......
......@@ -38,12 +38,15 @@ contract OptimismMintableERC721Factory is Semver {
);
/**
* @custom:semver 1.0.0
* @custom:semver 1.1.0
* @notice The semver MUST be bumped any time that there is a change in
* the OptimismMintableERC721 token contract since this contract
* is responsible for deploying OptimismMintableERC721 contracts.
*
* @param _bridge Address of the ERC721 bridge on this network.
* @param _remoteChainId Chain ID for the remote network.
*/
constructor(address _bridge, uint256 _remoteChainId) Semver(1, 0, 0) {
constructor(address _bridge, uint256 _remoteChainId) Semver(1, 1, 0) {
BRIDGE = _bridge;
REMOTE_CHAIN_ID = _remoteChainId;
}
......
......@@ -382,7 +382,8 @@ const check = {
await assertSemver(
OptimismMintableERC20Factory,
'OptimismMintableERC20Factory'
'OptimismMintableERC20Factory',
'1.1.0'
)
const BRIDGE = await OptimismMintableERC20Factory.BRIDGE()
......@@ -547,7 +548,8 @@ const check = {
await assertSemver(
OptimismMintableERC721Factory,
'OptimismMintableERC721Factory'
'OptimismMintableERC721Factory',
'1.1.0'
)
const BRIDGE = await OptimismMintableERC721Factory.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