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

Merge branch 'develop' into sc/ctb-unnecessary-erc20-factory-code

parents 4f7f0ac8 71d3db71
...@@ -108,7 +108,7 @@ describe('ERC721 Bridge', () => { ...@@ -108,7 +108,7 @@ describe('ERC721 Bridge', () => {
expect(await L1ERC721Bridge.otherBridge()).to.equal(L2ERC721Bridge.address) expect(await L1ERC721Bridge.otherBridge()).to.equal(L2ERC721Bridge.address)
expect(await L2ERC721Bridge.otherBridge()).to.equal(L1ERC721Bridge.address) expect(await L2ERC721Bridge.otherBridge()).to.equal(L1ERC721Bridge.address)
expect(await OptimismMintableERC721Factory.bridge()).to.equal( expect(await OptimismMintableERC721Factory.BRIDGE()).to.equal(
L2ERC721Bridge.address L2ERC721Bridge.address
) )
......
...@@ -16,14 +16,14 @@ Bytes_Test:test_slice_fromZeroIdx_works() (gas: 20826) ...@@ -16,14 +16,14 @@ Bytes_Test:test_slice_fromZeroIdx_works() (gas: 20826)
Bytes_Test:test_toNibbles_expectedResult128Bytes_works() (gas: 129885) Bytes_Test:test_toNibbles_expectedResult128Bytes_works() (gas: 129885)
Bytes_Test:test_toNibbles_expectedResult5Bytes_works() (gas: 6132) Bytes_Test:test_toNibbles_expectedResult5Bytes_works() (gas: 6132)
Bytes_Test:test_toNibbles_zeroLengthInput_works() (gas: 966) Bytes_Test:test_toNibbles_zeroLengthInput_works() (gas: 966)
CrossDomainMessenger_BaseGas_Test:test_baseGas_succeeds() (gas: 20098) CrossDomainMessenger_BaseGas_Test:test_baseGas_succeeds() (gas: 20120)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner_succeeds() (gas: 61806) CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner_succeeds() (gas: 61806)
CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10530) CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10530)
CrossDomainOwnable_Test:test_onlyOwner_succeeds() (gas: 34861) CrossDomainOwnable_Test:test_onlyOwner_succeeds() (gas: 34861)
CrossDomainOwnable2_Test:test_onlyOwner_notMessenger_reverts() (gas: 8416) CrossDomainOwnable2_Test:test_onlyOwner_notMessenger_reverts() (gas: 8416)
CrossDomainOwnable2_Test:test_onlyOwner_notOwner2_reverts() (gas: 61783) CrossDomainOwnable2_Test:test_onlyOwner_notOwner2_reverts() (gas: 61738)
CrossDomainOwnable2_Test:test_onlyOwner_notOwner_reverts() (gas: 16588) CrossDomainOwnable2_Test:test_onlyOwner_notOwner_reverts() (gas: 16588)
CrossDomainOwnable2_Test:test_onlyOwner_succeeds() (gas: 77811) CrossDomainOwnable2_Test:test_onlyOwner_succeeds() (gas: 77766)
DeployerWhitelist_Test:test_owner_succeeds() (gas: 7538) DeployerWhitelist_Test:test_owner_succeeds() (gas: 7538)
DeployerWhitelist_Test:test_storageSlots_succeeds() (gas: 33395) DeployerWhitelist_Test:test_storageSlots_succeeds() (gas: 33395)
FeeVault_Test:test_constructor_succeeds() (gas: 10647) FeeVault_Test:test_constructor_succeeds() (gas: 10647)
...@@ -56,26 +56,26 @@ L1BlockTest:test_updateValues_succeeds() (gas: 60481) ...@@ -56,26 +56,26 @@ L1BlockTest:test_updateValues_succeeds() (gas: 60481)
L1BlockNumberTest:test_fallback_succeeds() (gas: 18633) L1BlockNumberTest:test_fallback_succeeds() (gas: 18633)
L1BlockNumberTest:test_getL1BlockNumber_succeeds() (gas: 10603) L1BlockNumberTest:test_getL1BlockNumber_succeeds() (gas: 10603)
L1BlockNumberTest:test_receive_succeeds() (gas: 25340) L1BlockNumberTest:test_receive_succeeds() (gas: 25340)
L1CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 24759) L1CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 24781)
L1CrossDomainMessenger_Test:test_pause_callerIsNotOwner_reverts() (gas: 24517) L1CrossDomainMessenger_Test:test_pause_callerIsNotOwner_reverts() (gas: 24517)
L1CrossDomainMessenger_Test:test_pause_succeeds() (gas: 52942) L1CrossDomainMessenger_Test:test_pause_succeeds() (gas: 52942)
L1CrossDomainMessenger_Test:test_relayMessage_legacyOldReplay_reverts() (gas: 56662) L1CrossDomainMessenger_Test:test_relayMessage_legacyOldReplay_reverts() (gas: 56574)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailureThenSuccess_reverts() (gas: 212695) L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailureThenSuccess_reverts() (gas: 212474)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailure_succeeds() (gas: 203380) L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailure_succeeds() (gas: 203204)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterSuccess_reverts() (gas: 126553) L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterSuccess_reverts() (gas: 126420)
L1CrossDomainMessenger_Test:test_relayMessage_legacy_succeeds() (gas: 76688) L1CrossDomainMessenger_Test:test_relayMessage_legacy_succeeds() (gas: 76600)
L1CrossDomainMessenger_Test:test_relayMessage_paused_reverts() (gas: 60521) L1CrossDomainMessenger_Test:test_relayMessage_paused_reverts() (gas: 60476)
L1CrossDomainMessenger_Test:test_relayMessage_reentrancy_reverts() (gas: 190932) L1CrossDomainMessenger_Test:test_relayMessage_reentrancy_reverts() (gas: 190799)
L1CrossDomainMessenger_Test:test_relayMessage_retryAfterFailure_succeeds() (gas: 197320) L1CrossDomainMessenger_Test:test_relayMessage_retryAfterFailure_succeeds() (gas: 197144)
L1CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 73646) L1CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 73558)
L1CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 65917) L1CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 65827)
L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 19545) L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 19500)
L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 38265) L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 38220)
L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 299568) L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 299678)
L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1490458) L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1490502)
L1CrossDomainMessenger_Test:test_unpause_callerIsNotOwner_reverts() (gas: 24516) L1CrossDomainMessenger_Test:test_unpause_callerIsNotOwner_reverts() (gas: 24516)
L1CrossDomainMessenger_Test:test_unpause_succeeds() (gas: 45185) L1CrossDomainMessenger_Test:test_unpause_succeeds() (gas: 45185)
L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 84065) L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 84020)
L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24274) L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24274)
L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 52730) L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 52730)
L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 27332) L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 27332)
...@@ -108,18 +108,18 @@ L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal_succeeds( ...@@ -108,18 +108,18 @@ L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal_succeeds(
L1StandardBridge_Getter_Test:test_getters_succeeds() (gas: 31449) L1StandardBridge_Getter_Test:test_getters_succeeds() (gas: 31449)
L1StandardBridge_Initialize_Test:test_initialize_succeeds() (gas: 22005) L1StandardBridge_Initialize_Test:test_initialize_succeeds() (gas: 22005)
L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 514475) L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 514475)
L2CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 8367) L2CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 8389)
L2CrossDomainMessenger_Test:test_pause_notOwner_reverts() (gas: 10837) L2CrossDomainMessenger_Test:test_pause_notOwner_reverts() (gas: 10837)
L2CrossDomainMessenger_Test:test_pause_succeeds() (gas: 31846) L2CrossDomainMessenger_Test:test_pause_succeeds() (gas: 31846)
L2CrossDomainMessenger_Test:test_relayMessage_paused_reverts() (gas: 41596) L2CrossDomainMessenger_Test:test_relayMessage_paused_reverts() (gas: 41551)
L2CrossDomainMessenger_Test:test_relayMessage_reentrancy_reverts() (gas: 167794) L2CrossDomainMessenger_Test:test_relayMessage_reentrancy_reverts() (gas: 167727)
L2CrossDomainMessenger_Test:test_relayMessage_retry_succeeds() (gas: 168371) L2CrossDomainMessenger_Test:test_relayMessage_retry_succeeds() (gas: 168327)
L2CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 53212) L2CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 53190)
L2CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 36246) L2CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 36201)
L2CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 18913) L2CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 18868)
L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 122533) L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 122621)
L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 134671) L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 134715)
L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 52623) L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 52578)
L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10524) L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10524)
L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 26432) L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 26432)
L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 21748) L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 21748)
...@@ -236,11 +236,9 @@ OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 24162) ...@@ -236,11 +236,9 @@ OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 24162)
OptimismMintableERC721_Test:test_safeMint_notBridge_reverts() (gas: 11142) OptimismMintableERC721_Test:test_safeMint_notBridge_reverts() (gas: 11142)
OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140502) OptimismMintableERC721_Test:test_safeMint_succeeds() (gas: 140502)
OptimismMintableERC721_Test:test_tokenURI_succeeds() (gas: 163420) OptimismMintableERC721_Test:test_tokenURI_succeeds() (gas: 163420)
OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 10005) OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8262)
OptimismMintableERC721Factory_Test:test_constructor_zeroBridge_reverts() (gas: 39114) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2276440)
OptimismMintableERC721Factory_Test:test_constructor_zeroRemoteChainId_reverts() (gas: 41287) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9395)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2276374)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9373)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791) OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10791)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833) OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16011) OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16011)
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| msgNonce | uint240 | 205 | 0 | 30 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | msgNonce | uint240 | 205 | 0 | 30 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| receivedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | failedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| __gap | uint256[42] | 207 | 0 | 1344 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | __gap | uint256[42] | 207 | 0 | 1344 | contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
+--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+ +--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+
...@@ -228,7 +228,7 @@ ...@@ -228,7 +228,7 @@
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| msgNonce | uint240 | 205 | 0 | 30 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger | | msgNonce | uint240 | 205 | 0 | 30 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| receivedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger | | failedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
|--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------| |--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------|
| __gap | uint256[42] | 207 | 0 | 1344 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger | | __gap | uint256[42] | 207 | 0 | 1344 | contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
+--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+ +--------------------+--------------------------+------+--------+-------+----------------------------------------------------------------+
......
...@@ -13,6 +13,8 @@ import { FeeVault } from "../universal/FeeVault.sol"; ...@@ -13,6 +13,8 @@ import { FeeVault } from "../universal/FeeVault.sol";
contract BaseFeeVault is FeeVault, Semver { contract BaseFeeVault is FeeVault, Semver {
/** /**
* @custom:semver 0.0.1 * @custom:semver 0.0.1
*
* @param _recipient Address that will receive the accumulated fees.
*/ */
constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {} constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {}
} }
...@@ -13,6 +13,8 @@ import { FeeVault } from "../universal/FeeVault.sol"; ...@@ -13,6 +13,8 @@ import { FeeVault } from "../universal/FeeVault.sol";
contract L1FeeVault is FeeVault, Semver { contract L1FeeVault is FeeVault, Semver {
/** /**
* @custom:semver 0.0.1 * @custom:semver 0.0.1
*
* @param _recipient Address that will receive the accumulated fees.
*/ */
constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {} constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {}
} }
...@@ -32,6 +32,8 @@ contract SequencerFeeVaultLegacySpacer { ...@@ -32,6 +32,8 @@ contract SequencerFeeVaultLegacySpacer {
contract SequencerFeeVault is SequencerFeeVaultLegacySpacer, FeeVault, Semver { contract SequencerFeeVault is SequencerFeeVaultLegacySpacer, FeeVault, Semver {
/** /**
* @custom:semver 0.0.1 * @custom:semver 0.0.1
*
* @param _recipient Address that will receive the accumulated fees.
*/ */
constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {} constructor(address _recipient) FeeVault(_recipient, 10 ether) Semver(0, 0, 1) {}
......
...@@ -200,7 +200,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -200,7 +200,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
// the message hash is in the successfulMessages mapping // the message hash is in the successfulMessages mapping
assert(L1Messenger.successfulMessages(hash)); assert(L1Messenger.successfulMessages(hash));
// it is not in the received messages mapping // it is not in the received messages mapping
assertEq(L1Messenger.receivedMessages(hash), false); assertEq(L1Messenger.failedMessages(hash), false);
} }
// relayMessage: should revert if attempting to relay a message sent to an L1 system contract // relayMessage: should revert if attempting to relay a message sent to an L1 system contract
...@@ -317,7 +317,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -317,7 +317,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, value); assertEq(address(L1Messenger).balance, value);
assertEq(address(target).balance, 0); assertEq(address(target).balance, 0);
assertEq(L1Messenger.successfulMessages(hash), false); assertEq(L1Messenger.successfulMessages(hash), false);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
...@@ -337,7 +337,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -337,7 +337,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, 0); assertEq(address(L1Messenger).balance, 0);
assertEq(address(target).balance, value); assertEq(address(target).balance, value);
assertEq(L1Messenger.successfulMessages(hash), true); assertEq(L1Messenger.successfulMessages(hash), true);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
} }
// relayMessage: should revert if recipient is trying to reenter // relayMessage: should revert if recipient is trying to reenter
...@@ -385,7 +385,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -385,7 +385,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
); );
assertEq(L1Messenger.successfulMessages(hash), false); assertEq(L1Messenger.successfulMessages(hash), false);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
} }
function test_relayMessage_legacy_succeeds() external { function test_relayMessage_legacy_succeeds() external {
...@@ -426,7 +426,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -426,7 +426,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
// Message was successfully relayed. // Message was successfully relayed.
assertEq(L1Messenger.successfulMessages(hash), true); assertEq(L1Messenger.successfulMessages(hash), true);
assertEq(L1Messenger.receivedMessages(hash), false); assertEq(L1Messenger.failedMessages(hash), false);
} }
function test_relayMessage_legacyOldReplay_reverts() external { function test_relayMessage_legacyOldReplay_reverts() external {
...@@ -469,7 +469,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -469,7 +469,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
// Message was not relayed. // Message was not relayed.
assertEq(L1Messenger.successfulMessages(hash), false); assertEq(L1Messenger.successfulMessages(hash), false);
assertEq(L1Messenger.receivedMessages(hash), false); assertEq(L1Messenger.failedMessages(hash), false);
} }
function test_relayMessage_legacyRetryAfterFailure_succeeds() external { function test_relayMessage_legacyRetryAfterFailure_succeeds() external {
...@@ -517,7 +517,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -517,7 +517,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, value); assertEq(address(L1Messenger).balance, value);
assertEq(address(target).balance, 0); assertEq(address(target).balance, 0);
assertEq(L1Messenger.successfulMessages(hash), false); assertEq(L1Messenger.successfulMessages(hash), false);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
// Make the target not revert anymore. // Make the target not revert anymore.
vm.etch(target, address(0).code); vm.etch(target, address(0).code);
...@@ -544,7 +544,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -544,7 +544,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, 0); assertEq(address(L1Messenger).balance, 0);
assertEq(address(target).balance, value); assertEq(address(target).balance, value);
assertEq(L1Messenger.successfulMessages(hash), true); assertEq(L1Messenger.successfulMessages(hash), true);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
} }
function test_relayMessage_legacyRetryAfterSuccess_reverts() external { function test_relayMessage_legacyRetryAfterSuccess_reverts() external {
...@@ -589,7 +589,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -589,7 +589,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, 0); assertEq(address(L1Messenger).balance, 0);
assertEq(address(target).balance, value); assertEq(address(target).balance, value);
assertEq(L1Messenger.successfulMessages(hash), true); assertEq(L1Messenger.successfulMessages(hash), true);
assertEq(L1Messenger.receivedMessages(hash), false); assertEq(L1Messenger.failedMessages(hash), false);
// Expect a revert. // Expect a revert.
vm.expectRevert("CrossDomainMessenger: message cannot be replayed"); vm.expectRevert("CrossDomainMessenger: message cannot be replayed");
...@@ -647,7 +647,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -647,7 +647,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, value); assertEq(address(L1Messenger).balance, value);
assertEq(address(target).balance, 0); assertEq(address(target).balance, 0);
assertEq(L1Messenger.successfulMessages(hash), false); assertEq(L1Messenger.successfulMessages(hash), false);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
// Make the target not revert anymore. // Make the target not revert anymore.
vm.etch(target, address(0).code); vm.etch(target, address(0).code);
...@@ -674,7 +674,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -674,7 +674,7 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L1Messenger).balance, 0); assertEq(address(L1Messenger).balance, 0);
assertEq(address(target).balance, value); assertEq(address(target).balance, value);
assertEq(L1Messenger.successfulMessages(hash), true); assertEq(L1Messenger.successfulMessages(hash), true);
assertEq(L1Messenger.receivedMessages(hash), true); assertEq(L1Messenger.failedMessages(hash), true);
// Expect a revert. // Expect a revert.
vm.expectRevert("CrossDomainMessenger: message has already been relayed"); vm.expectRevert("CrossDomainMessenger: message has already been relayed");
......
...@@ -149,7 +149,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -149,7 +149,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer {
// the message hash is in the successfulMessages mapping // the message hash is in the successfulMessages mapping
assert(L2Messenger.successfulMessages(hash)); assert(L2Messenger.successfulMessages(hash));
// it is not in the received messages mapping // it is not in the received messages mapping
assertEq(L2Messenger.receivedMessages(hash), false); assertEq(L2Messenger.failedMessages(hash), false);
} }
// relayMessage: should revert if attempting to relay a message sent to an L1 system contract // relayMessage: should revert if attempting to relay a message sent to an L1 system contract
...@@ -232,7 +232,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -232,7 +232,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L2Messenger).balance, value); assertEq(address(L2Messenger).balance, value);
assertEq(address(target).balance, 0); assertEq(address(target).balance, 0);
assertEq(L2Messenger.successfulMessages(hash), false); assertEq(L2Messenger.successfulMessages(hash), false);
assertEq(L2Messenger.receivedMessages(hash), true); assertEq(L2Messenger.failedMessages(hash), true);
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
...@@ -252,7 +252,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -252,7 +252,7 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer {
assertEq(address(L2Messenger).balance, 0); assertEq(address(L2Messenger).balance, 0);
assertEq(address(target).balance, value); assertEq(address(target).balance, value);
assertEq(L2Messenger.successfulMessages(hash), true); assertEq(L2Messenger.successfulMessages(hash), true);
assertEq(L2Messenger.receivedMessages(hash), true); assertEq(L2Messenger.failedMessages(hash), true);
} }
// relayMessage: should revert if recipient is trying to reenter // relayMessage: should revert if recipient is trying to reenter
...@@ -300,6 +300,6 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer { ...@@ -300,6 +300,6 @@ contract L2CrossDomainMessenger_Test is Messenger_Initializer {
); );
assertEq(L2Messenger.successfulMessages(hash), false); assertEq(L2Messenger.successfulMessages(hash), false);
assertEq(L2Messenger.receivedMessages(hash), true); assertEq(L2Messenger.failedMessages(hash), true);
} }
} }
...@@ -27,22 +27,10 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer { ...@@ -27,22 +27,10 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer {
} }
function test_constructor_succeeds() external { function test_constructor_succeeds() external {
assertEq(factory.bridge(), address(L2Bridge));
assertEq(factory.remoteChainId(), 1);
assertEq(factory.BRIDGE(), address(L2Bridge)); assertEq(factory.BRIDGE(), address(L2Bridge));
assertEq(factory.REMOTE_CHAIN_ID(), 1); assertEq(factory.REMOTE_CHAIN_ID(), 1);
} }
function test_constructor_zeroBridge_reverts() external {
vm.expectRevert("OptimismMintableERC721Factory: bridge cannot be address(0)");
new OptimismMintableERC721Factory(address(0), 1);
}
function test_constructor_zeroRemoteChainId_reverts() external {
vm.expectRevert("OptimismMintableERC721Factory: remote chain id cannot be zero");
new OptimismMintableERC721Factory(address(L2Bridge), 0);
}
function test_createOptimismMintableERC721_succeeds() external { function test_createOptimismMintableERC721_succeeds() external {
// Predict the address based on the factory address and nonce. // Predict the address based on the factory address and nonce.
address predicted = LibRLP.computeAddress(address(factory), 1); address predicted = LibRLP.computeAddress(address(factory), 1);
......
...@@ -123,12 +123,11 @@ abstract contract CrossDomainMessenger is ...@@ -123,12 +123,11 @@ abstract contract CrossDomainMessenger is
uint240 internal msgNonce; uint240 internal msgNonce;
/** /**
* @notice Mapping of message hashes to boolean receipt values. Note that a message will only * @notice Mapping of message hashes to a boolean if and only if the message has failed to be
* be present in this mapping if it failed to be relayed on this chain at least once. * executed at least once. A message will not be present in this mapping if it
* If a message is successfully relayed on the first attempt, then it will only be * successfully executed on the first attempt.
* present within the successfulMessages mapping.
*/ */
mapping(bytes32 => bool) public receivedMessages; mapping(bytes32 => bool) public failedMessages;
/** /**
* @notice Reserve extra slots in the storage layout for future upgrades. * @notice Reserve extra slots in the storage layout for future upgrades.
...@@ -293,7 +292,7 @@ abstract contract CrossDomainMessenger is ...@@ -293,7 +292,7 @@ abstract contract CrossDomainMessenger is
// These properties should always hold when the message is first submitted (as // These properties should always hold when the message is first submitted (as
// opposed to being replayed). // opposed to being replayed).
assert(msg.value == _value); assert(msg.value == _value);
assert(!receivedMessages[versionedHash]); assert(!failedMessages[versionedHash]);
} else { } else {
require( require(
msg.value == 0, msg.value == 0,
...@@ -301,7 +300,7 @@ abstract contract CrossDomainMessenger is ...@@ -301,7 +300,7 @@ abstract contract CrossDomainMessenger is
); );
require( require(
receivedMessages[versionedHash], failedMessages[versionedHash],
"CrossDomainMessenger: message cannot be replayed" "CrossDomainMessenger: message cannot be replayed"
); );
} }
...@@ -329,7 +328,7 @@ abstract contract CrossDomainMessenger is ...@@ -329,7 +328,7 @@ abstract contract CrossDomainMessenger is
successfulMessages[versionedHash] = true; successfulMessages[versionedHash] = true;
emit RelayedMessage(versionedHash); emit RelayedMessage(versionedHash);
} else { } else {
receivedMessages[versionedHash] = true; failedMessages[versionedHash] = true;
emit FailedRelayedMessage(versionedHash); emit FailedRelayedMessage(versionedHash);
// Revert in this case if the transaction was triggered by the estimation address. This // Revert in this case if the transaction was triggered by the estimation address. This
......
...@@ -6,11 +6,16 @@ import { Predeploys } from "../libraries/Predeploys.sol"; ...@@ -6,11 +6,16 @@ import { Predeploys } from "../libraries/Predeploys.sol";
/** /**
* @title FeeVault * @title FeeVault
* @notice The FeeVault contract has the base logic for handling transaction fees. * @notice The FeeVault contract contains the basic logic for the various different vault contracts
* used to hold fee revenue generated by the L2 system.
*/ */
abstract contract FeeVault { abstract contract FeeVault {
/** /**
* @notice Emits each time that a withdrawal occurs * @notice Emits each time that a withdrawal occurs.
*
* @param value Amount that was withdrawn (in wei).
* @param to Address that the funds were sent to.
* @param from Address that triggered the withdrawal.
*/ */
event Withdrawal(uint256 value, address to, address from); event Withdrawal(uint256 value, address to, address from);
...@@ -30,9 +35,8 @@ abstract contract FeeVault { ...@@ -30,9 +35,8 @@ abstract contract FeeVault {
uint256 public totalProcessed; uint256 public totalProcessed;
/** /**
* @param _recipient - The L1 account that funds can be withdrawn to. * @param _recipient Wallet that will receive the fees on L1.
* @param _minWithdrawalAmount - The min amount of funds before a withdrawal * @param _minWithdrawalAmount Minimum balance before a withdrawal can be triggered.
* can be triggered.
*/ */
constructor(address _recipient, uint256 _minWithdrawalAmount) { constructor(address _recipient, uint256 _minWithdrawalAmount) {
MIN_WITHDRAWAL_AMOUNT = _minWithdrawalAmount; MIN_WITHDRAWAL_AMOUNT = _minWithdrawalAmount;
......
...@@ -41,41 +41,13 @@ contract OptimismMintableERC721Factory is Semver { ...@@ -41,41 +41,13 @@ contract OptimismMintableERC721Factory is Semver {
* @custom:semver 1.0.0 * @custom:semver 1.0.0
* *
* @param _bridge Address of the ERC721 bridge on this network. * @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, 0, 0) {
require(
_bridge != address(0),
"OptimismMintableERC721Factory: bridge cannot be address(0)"
);
require(
_remoteChainId != 0,
"OptimismMintableERC721Factory: remote chain id cannot be zero"
);
BRIDGE = _bridge; BRIDGE = _bridge;
REMOTE_CHAIN_ID = _remoteChainId; REMOTE_CHAIN_ID = _remoteChainId;
} }
/**
* @custom:legacy
* @notice Legacy getter for ERC721 bridge address.
*
* @return Address of the ERC721 bridge on this network.
*/
function bridge() external view returns (address) {
return BRIDGE;
}
/**
* @custom:legacy
* @notice Legacy getter for remote chain ID.
*
* @notice Chain ID for the remote network.
*/
function remoteChainId() external view returns (uint256) {
return REMOTE_CHAIN_ID;
}
/** /**
* @notice Creates an instance of the standard ERC721. * @notice Creates an instance of the standard ERC721.
* *
......
...@@ -36,7 +36,7 @@ interface CrossDomainMessenger { ...@@ -36,7 +36,7 @@ interface CrossDomainMessenger {
function MESSAGE_VERSION() view external returns (uint16); function MESSAGE_VERSION() view external returns (uint16);
function messageNonce() view external returns (uint256); function messageNonce() view external returns (uint256);
function otherMessenger() view external returns (address); function otherMessenger() view external returns (address);
function receivedMessages(bytes32) view external returns (bool); function failedMessages(bytes32) view external returns (bool);
function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes memory _message) payable external; function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes memory _message) payable external;
function sendMessage(address _target, bytes memory _message, uint32 _minGasLimit) payable external; function sendMessage(address _target, bytes memory _message, uint32 _minGasLimit) payable external;
function successfulMessages(bytes32) view external returns (bool); function successfulMessages(bytes32) view external returns (bool);
...@@ -49,7 +49,7 @@ interface CrossDomainMessenger { ...@@ -49,7 +49,7 @@ interface CrossDomainMessenger {
The `sendMessage` function is used to send a cross domain message. To trigger The `sendMessage` function is used to send a cross domain message. To trigger
the execution on the other side, the `relayMessage` function is called. the execution on the other side, the `relayMessage` function is called.
Successful messages have their hash stored in the `successfulMessages` mapping Successful messages have their hash stored in the `successfulMessages` mapping
while unsuccessful messages have their hash stored in the `receivedMessages` while unsuccessful messages have their hash stored in the `failedMessages`
mapping. mapping.
The user experience when sending from L1 to L2 is a bit different than when The user experience when sending from L1 to L2 is a bit different than when
......
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