Commit 68fc10f5 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #7679 from ethereum-optimism/ctb/initialize-unit-tests

contracts-bedrock: initialize tests
parents 9a4d0e03 6f20dad3
This diff is collapsed.
This diff is collapsed.
...@@ -161,6 +161,7 @@ GovernanceToken_Test:test_mint_fromOwner_succeeds() (gas: 108592) ...@@ -161,6 +161,7 @@ GovernanceToken_Test:test_mint_fromOwner_succeeds() (gas: 108592)
GovernanceToken_Test:test_transferFrom_succeeds() (gas: 146273) GovernanceToken_Test:test_transferFrom_succeeds() (gas: 146273)
GovernanceToken_Test:test_transfer_succeeds() (gas: 138108) GovernanceToken_Test:test_transfer_succeeds() (gas: 138108)
Hashing_hashDepositSource_Test:test_hashDepositSource_succeeds() (gas: 633) Hashing_hashDepositSource_Test:test_hashDepositSource_succeeds() (gas: 633)
Initializer_Test:test_cannotReinitializeL1_succeeds() (gas: 98390)
L1BlockNumberTest:test_fallback_succeeds() (gas: 18655) L1BlockNumberTest:test_fallback_succeeds() (gas: 18655)
L1BlockNumberTest:test_getL1BlockNumber_succeeds() (gas: 10625) L1BlockNumberTest:test_getL1BlockNumber_succeeds() (gas: 10625)
L1BlockNumberTest:test_receive_succeeds() (gas: 25384) L1BlockNumberTest:test_receive_succeeds() (gas: 25384)
...@@ -185,21 +186,21 @@ L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 392933) ...@@ -185,21 +186,21 @@ L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 392933)
L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1669172) L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1669172)
L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 86992) L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 86992)
L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253) L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253)
L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 62677) L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 62686)
L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 37273) L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 37285)
L1ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 455254) L1ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 455269)
L1ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 70985) L1ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 70997)
L1ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 35669) L1ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 35681)
L1ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 60552) L1ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 60561)
L1ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 35192) L1ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 35204)
L1ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 454951) L1ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 454966)
L1ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 70811) L1ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 70823)
L1ERC721Bridge_Test:test_constructor_succeeds() (gas: 18861) L1ERC721Bridge_Test:test_constructor_succeeds() (gas: 18861)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notEscrowed_reverts() (gas: 29472) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notEscrowed_reverts() (gas: 29475)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 27217) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 27220)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 23238) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 23241)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 24990) L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 24990)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 425227) L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 425245)
L1StandardBridge_BridgeETHTo_Test:test_bridgeETHTo_succeeds() (gas: 514756) L1StandardBridge_BridgeETHTo_Test:test_bridgeETHTo_succeeds() (gas: 514756)
L1StandardBridge_BridgeETH_Test:test_bridgeETH_succeeds() (gas: 501934) L1StandardBridge_BridgeETH_Test:test_bridgeETH_succeeds() (gas: 501934)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 720272) L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 720272)
...@@ -228,22 +229,22 @@ L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 123957) ...@@ -228,22 +229,22 @@ L2CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 123957)
L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 135812) L2CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 135812)
L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 48371) L2CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 48371)
L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10590) L2CrossDomainMessenger_Test:test_xDomainSender_senderNotSet_reverts() (gas: 10590)
L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 31428) L2ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 31431)
L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 26826) L2ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 26832)
L2ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 157122) L2ERC721Bridge_Test:test_bridgeERC721To_succeeds() (gas: 157134)
L2ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 34461) L2ERC721Bridge_Test:test_bridgeERC721To_wrongOwner_reverts() (gas: 34467)
L2ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 27177) L2ERC721Bridge_Test:test_bridgeERC721_fromContract_reverts() (gas: 27183)
L2ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 29302) L2ERC721Bridge_Test:test_bridgeERC721_localTokenZeroAddress_reverts() (gas: 29305)
L2ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 24635) L2ERC721Bridge_Test:test_bridgeERC721_remoteTokenZeroAddress_reverts() (gas: 24641)
L2ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 154737) L2ERC721Bridge_Test:test_bridgeERC721_succeeds() (gas: 154746)
L2ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 34265) L2ERC721Bridge_Test:test_bridgeERC721_wrongOwner_reverts() (gas: 34271)
L2ERC721Bridge_Test:test_constructor_succeeds() (gas: 21027) L2ERC721Bridge_Test:test_constructor_succeeds() (gas: 21027)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_alreadyExists_reverts() (gas: 38658) L2ERC721Bridge_Test:test_finalizeBridgeERC721_alreadyExists_reverts() (gas: 38661)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_interfaceNotCompliant_reverts() (gas: 246925) L2ERC721Bridge_Test:test_finalizeBridgeERC721_interfaceNotCompliant_reverts() (gas: 246925)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 27205) L2ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (gas: 27208)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 23271) L2ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 23274)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 27124) L2ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 27124)
L2ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 179964) L2ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 179976)
L2OutputOracleUpgradeable_Test:test_initValuesOnImpl_succeeds() (gas: 23902) L2OutputOracleUpgradeable_Test:test_initValuesOnImpl_succeeds() (gas: 23902)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 46800) L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 46800)
L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15216) L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15216)
...@@ -422,10 +423,10 @@ OptimismMintableERC20_Test:test_legacy_succeeds() (gas: 14322) ...@@ -422,10 +423,10 @@ OptimismMintableERC20_Test:test_legacy_succeeds() (gas: 14322)
OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11165) OptimismMintableERC20_Test:test_mint_notBridge_reverts() (gas: 11165)
OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63544) OptimismMintableERC20_Test:test_mint_succeeds() (gas: 63544)
OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7667) OptimismMintableERC20_Test:test_remoteToken_succeeds() (gas: 7667)
OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8351) OptimismMintableERC721Factory_Test:test_constructor_succeeds() (gas: 8381)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_sameTwice_reverts() (gas: 8937393460516800041) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_sameTwice_reverts() (gas: 8937393460516800045)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2316109) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_succeeds() (gas: 2316169)
OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9418) OptimismMintableERC721Factory_Test:test_createOptimismMintableERC721_zeroRemoteToken_reverts() (gas: 9493)
OptimismMintableERC721_Test:test_burn_notBridge_reverts() (gas: 136966) OptimismMintableERC721_Test:test_burn_notBridge_reverts() (gas: 136966)
OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118832) OptimismMintableERC721_Test:test_burn_succeeds() (gas: 118832)
OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 24162) OptimismMintableERC721_Test:test_constructor_succeeds() (gas: 24162)
......
...@@ -447,9 +447,9 @@ contract Bridge_Initializer is Messenger_Initializer { ...@@ -447,9 +447,9 @@ contract Bridge_Initializer is Messenger_Initializer {
} }
} }
contract ERC721Bridge_Initializer is Messenger_Initializer { contract ERC721Bridge_Initializer is Bridge_Initializer {
L1ERC721Bridge L1Bridge; L1ERC721Bridge L1NFTBridge;
L2ERC721Bridge L2Bridge; L2ERC721Bridge L2NFTBridge;
function setUp() public virtual override { function setUp() public virtual override {
super.setUp(); super.setUp();
...@@ -463,10 +463,10 @@ contract ERC721Bridge_Initializer is Messenger_Initializer { ...@@ -463,10 +463,10 @@ contract ERC721Bridge_Initializer is Messenger_Initializer {
address(l1BridgeImpl), abi.encodeCall(L1ERC721Bridge.initialize, (CrossDomainMessenger(L1Messenger))) address(l1BridgeImpl), abi.encodeCall(L1ERC721Bridge.initialize, (CrossDomainMessenger(L1Messenger)))
); );
L1Bridge = L1ERC721Bridge(address(l1BridgeProxy)); L1NFTBridge = L1ERC721Bridge(address(l1BridgeProxy));
// Deploy the implementation for the L2ERC721Bridge and etch it into the predeploy address. // Deploy the implementation for the L2ERC721Bridge and etch it into the predeploy address.
L2ERC721Bridge l2BridgeImpl = new L2ERC721Bridge(address(L1Bridge)); L2ERC721Bridge l2BridgeImpl = new L2ERC721Bridge(address(L1NFTBridge));
Proxy l2BridgeProxy = new Proxy(multisig); Proxy l2BridgeProxy = new Proxy(multisig);
vm.etch(Predeploys.L2_ERC721_BRIDGE, address(l2BridgeProxy).code); vm.etch(Predeploys.L2_ERC721_BRIDGE, address(l2BridgeProxy).code);
...@@ -480,11 +480,11 @@ contract ERC721Bridge_Initializer is Messenger_Initializer { ...@@ -480,11 +480,11 @@ contract ERC721Bridge_Initializer is Messenger_Initializer {
); );
// Set up a reference to the L2ERC721Bridge. // Set up a reference to the L2ERC721Bridge.
L2Bridge = L2ERC721Bridge(Predeploys.L2_ERC721_BRIDGE); L2NFTBridge = L2ERC721Bridge(Predeploys.L2_ERC721_BRIDGE);
// Label the L1 and L2 bridges. // Label the L1 and L2 bridges.
vm.label(address(L1Bridge), "L1ERC721Bridge"); vm.label(address(L1NFTBridge), "L1ERC721Bridge");
vm.label(address(L2Bridge), "L2ERC721Bridge"); vm.label(address(L2NFTBridge), "L2ERC721Bridge");
} }
} }
......
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { ERC721Bridge_Initializer } from "test/CommonTest.t.sol";
import { console } from "forge-std/console.sol";
import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol";
import { L2OutputOracle } from "src/L1/L2OutputOracle.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol";
import { ResourceMetering } from "src/L1/ResourceMetering.sol";
import { OptimismPortal } from "src/L1/OptimismPortal.sol";
/// @title Initializer_Test
/// @dev Ensures that the `initialize()` function on contracts cannot be called more than
/// once. This contract inherits from `ERC721Bridge_Initializer` because it is the
/// deepest contract in the inheritance chain for setting up the system contracts.
contract Initializer_Test is ERC721Bridge_Initializer {
function test_cannotReinitializeL1_succeeds() public {
vm.expectRevert("Initializable: contract is already initialized");
L1Messenger.initialize(OptimismPortal(payable(address(0))));
vm.expectRevert("Initializable: contract is already initialized");
L1Bridge.initialize(CrossDomainMessenger(address(0)));
vm.expectRevert("Initializable: contract is already initialized");
oracle.initialize(0, 0, address(0), address(0));
vm.expectRevert("Initializable: contract is already initialized");
op.initialize(L2OutputOracle(address(0)), address(0), SystemConfig(address(0)), false);
vm.expectRevert("Initializable: contract is already initialized");
systemConfig.initialize({
_owner: address(0xdEaD),
_overhead: 0,
_scalar: 0,
_batcherHash: bytes32(0),
_gasLimit: 1,
_unsafeBlockSigner: address(0),
_config: ResourceMetering.ResourceConfig({
maxResourceLimit: 1,
elasticityMultiplier: 1,
baseFeeMaxChangeDenominator: 2,
minimumBaseFee: 0,
systemTxMaxGas: 0,
maximumBaseFee: 0
}),
_startBlock: type(uint256).max,
_batchInbox: address(0),
_addresses: SystemConfig.Addresses({
l1CrossDomainMessenger: address(0),
l1ERC721Bridge: address(0),
l1StandardBridge: address(0),
l2OutputOracle: address(0),
optimismPortal: address(0),
optimismMintableERC20Factory: address(0)
})
});
vm.expectRevert("Initializable: contract is already initialized");
L1NFTBridge.initialize(CrossDomainMessenger(address(0)));
}
}
...@@ -9,8 +9,8 @@ import { ERC721Bridge_Initializer } from "./CommonTest.t.sol"; ...@@ -9,8 +9,8 @@ import { ERC721Bridge_Initializer } from "./CommonTest.t.sol";
import { OptimismMintableERC721, IOptimismMintableERC721 } from "../src/universal/OptimismMintableERC721.sol"; import { OptimismMintableERC721, IOptimismMintableERC721 } from "../src/universal/OptimismMintableERC721.sol";
contract OptimismMintableERC721_Test is ERC721Bridge_Initializer { contract OptimismMintableERC721_Test is ERC721Bridge_Initializer {
ERC721 internal L1Token; ERC721 internal L1NFT;
OptimismMintableERC721 internal L2Token; OptimismMintableERC721 internal L2NFT;
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
...@@ -22,41 +22,41 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer { ...@@ -22,41 +22,41 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer {
super.setUp(); super.setUp();
// Set up the token pair. // Set up the token pair.
L1Token = new ERC721("L1Token", "L1T"); L1NFT = new ERC721("L1NFT", "L1T");
L2Token = new OptimismMintableERC721( L2NFT = new OptimismMintableERC721(
address(L2Bridge), address(L2NFTBridge),
1, 1,
address(L1Token), address(L1NFT),
"L2Token", "L2NFT",
"L2T" "L2T"
); );
// Label the addresses for nice traces. // Label the addresses for nice traces.
vm.label(address(L1Token), "L1ERC721Token"); vm.label(address(L1NFT), "L1ERC721Token");
vm.label(address(L2Token), "L2ERC721Token"); vm.label(address(L2NFT), "L2ERC721Token");
} }
function test_constructor_succeeds() external { function test_constructor_succeeds() external {
assertEq(L2Token.name(), "L2Token"); assertEq(L2NFT.name(), "L2NFT");
assertEq(L2Token.symbol(), "L2T"); assertEq(L2NFT.symbol(), "L2T");
assertEq(L2Token.remoteToken(), address(L1Token)); assertEq(L2NFT.remoteToken(), address(L1NFT));
assertEq(L2Token.bridge(), address(L2Bridge)); assertEq(L2NFT.bridge(), address(L2NFTBridge));
assertEq(L2Token.remoteChainId(), 1); assertEq(L2NFT.remoteChainId(), 1);
assertEq(L2Token.REMOTE_TOKEN(), address(L1Token)); assertEq(L2NFT.REMOTE_TOKEN(), address(L1NFT));
assertEq(L2Token.BRIDGE(), address(L2Bridge)); assertEq(L2NFT.BRIDGE(), address(L2NFTBridge));
assertEq(L2Token.REMOTE_CHAIN_ID(), 1); assertEq(L2NFT.REMOTE_CHAIN_ID(), 1);
} }
/// @notice Ensure that the contract supports the expected interfaces. /// @notice Ensure that the contract supports the expected interfaces.
function test_supportsInterfaces_succeeds() external { function test_supportsInterfaces_succeeds() external {
// Checks if the contract supports the IOptimismMintableERC721 interface. // Checks if the contract supports the IOptimismMintableERC721 interface.
assertTrue(L2Token.supportsInterface(type(IOptimismMintableERC721).interfaceId)); assertTrue(L2NFT.supportsInterface(type(IOptimismMintableERC721).interfaceId));
// Checks if the contract supports the IERC721Enumerable interface. // Checks if the contract supports the IERC721Enumerable interface.
assertTrue(L2Token.supportsInterface(type(IERC721Enumerable).interfaceId)); assertTrue(L2NFT.supportsInterface(type(IERC721Enumerable).interfaceId));
// Checks if the contract supports the IERC721 interface. // Checks if the contract supports the IERC721 interface.
assertTrue(L2Token.supportsInterface(type(IERC721).interfaceId)); assertTrue(L2NFT.supportsInterface(type(IERC721).interfaceId));
// Checks if the contract supports the IERC165 interface. // Checks if the contract supports the IERC165 interface.
assertTrue(L2Token.supportsInterface(type(IERC165).interfaceId)); assertTrue(L2NFT.supportsInterface(type(IERC165).interfaceId));
} }
function test_safeMint_succeeds() external { function test_safeMint_succeeds() external {
...@@ -69,24 +69,24 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer { ...@@ -69,24 +69,24 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer {
emit Mint(alice, 1); emit Mint(alice, 1);
// Mint the token. // Mint the token.
vm.prank(address(L2Bridge)); vm.prank(address(L2NFTBridge));
L2Token.safeMint(alice, 1); L2NFT.safeMint(alice, 1);
// Token should be owned by alice. // Token should be owned by alice.
assertEq(L2Token.ownerOf(1), alice); assertEq(L2NFT.ownerOf(1), alice);
} }
function test_safeMint_notBridge_reverts() external { function test_safeMint_notBridge_reverts() external {
// Try to mint the token. // Try to mint the token.
vm.expectRevert("OptimismMintableERC721: only bridge can call this function"); vm.expectRevert("OptimismMintableERC721: only bridge can call this function");
vm.prank(address(alice)); vm.prank(address(alice));
L2Token.safeMint(alice, 1); L2NFT.safeMint(alice, 1);
} }
function test_burn_succeeds() external { function test_burn_succeeds() external {
// Mint the token first. // Mint the token first.
vm.prank(address(L2Bridge)); vm.prank(address(L2NFTBridge));
L2Token.safeMint(alice, 1); L2NFT.safeMint(alice, 1);
// Expect a transfer event. // Expect a transfer event.
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
...@@ -97,37 +97,37 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer { ...@@ -97,37 +97,37 @@ contract OptimismMintableERC721_Test is ERC721Bridge_Initializer {
emit Burn(alice, 1); emit Burn(alice, 1);
// Burn the token. // Burn the token.
vm.prank(address(L2Bridge)); vm.prank(address(L2NFTBridge));
L2Token.burn(alice, 1); L2NFT.burn(alice, 1);
// Token should be owned by address(0). // Token should be owned by address(0).
vm.expectRevert("ERC721: invalid token ID"); vm.expectRevert("ERC721: invalid token ID");
L2Token.ownerOf(1); L2NFT.ownerOf(1);
} }
function test_burn_notBridge_reverts() external { function test_burn_notBridge_reverts() external {
// Mint the token first. // Mint the token first.
vm.prank(address(L2Bridge)); vm.prank(address(L2NFTBridge));
L2Token.safeMint(alice, 1); L2NFT.safeMint(alice, 1);
// Try to burn the token. // Try to burn the token.
vm.expectRevert("OptimismMintableERC721: only bridge can call this function"); vm.expectRevert("OptimismMintableERC721: only bridge can call this function");
vm.prank(address(alice)); vm.prank(address(alice));
L2Token.burn(alice, 1); L2NFT.burn(alice, 1);
} }
function test_tokenURI_succeeds() external { function test_tokenURI_succeeds() external {
// Mint the token first. // Mint the token first.
vm.prank(address(L2Bridge)); vm.prank(address(L2NFTBridge));
L2Token.safeMint(alice, 1); L2NFT.safeMint(alice, 1);
// Token URI should be correct. // Token URI should be correct.
assertEq( assertEq(
L2Token.tokenURI(1), L2NFT.tokenURI(1),
string( string(
abi.encodePacked( abi.encodePacked(
"ethereum:", "ethereum:",
Strings.toHexString(uint160(address(L1Token)), 20), Strings.toHexString(uint160(address(L1NFT)), 20),
"@", "@",
Strings.toString(1), Strings.toString(1),
"/tokenURI?uint256=", "/tokenURI?uint256=",
......
...@@ -15,14 +15,14 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer { ...@@ -15,14 +15,14 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer {
super.setUp(); super.setUp();
// Set up the token pair. // Set up the token pair.
factory = new OptimismMintableERC721Factory(address(L2Bridge), 1); factory = new OptimismMintableERC721Factory(address(L2NFTBridge), 1);
// Label the addresses for nice traces. // Label the addresses for nice traces.
vm.label(address(factory), "OptimismMintableERC721Factory"); vm.label(address(factory), "OptimismMintableERC721Factory");
} }
function test_constructor_succeeds() external { function test_constructor_succeeds() external {
assertEq(factory.BRIDGE(), address(L2Bridge)); assertEq(factory.BRIDGE(), address(L2NFTBridge));
assertEq(factory.REMOTE_CHAIN_ID(), 1); assertEq(factory.REMOTE_CHAIN_ID(), 1);
} }
...@@ -49,7 +49,7 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer { ...@@ -49,7 +49,7 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer {
assertEq(created.name(), "L2Token"); assertEq(created.name(), "L2Token");
assertEq(created.symbol(), "L2T"); assertEq(created.symbol(), "L2T");
assertEq(created.REMOTE_TOKEN(), remote); assertEq(created.REMOTE_TOKEN(), remote);
assertEq(created.BRIDGE(), address(L2Bridge)); assertEq(created.BRIDGE(), address(L2NFTBridge));
assertEq(created.REMOTE_CHAIN_ID(), 1); assertEq(created.REMOTE_CHAIN_ID(), 1);
} }
...@@ -80,7 +80,7 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer { ...@@ -80,7 +80,7 @@ contract OptimismMintableERC721Factory_Test is ERC721Bridge_Initializer {
view view
returns (address) returns (address)
{ {
bytes memory constructorArgs = abi.encode(address(L2Bridge), 1, _remote, _name, _symbol); bytes memory constructorArgs = abi.encode(address(L2NFTBridge), 1, _remote, _name, _symbol);
bytes memory bytecode = abi.encodePacked(type(OptimismMintableERC721).creationCode, constructorArgs); bytes memory bytecode = abi.encodePacked(type(OptimismMintableERC721).creationCode, constructorArgs);
bytes32 salt = keccak256(abi.encode(_remote, _name, _symbol)); bytes32 salt = keccak256(abi.encode(_remote, _name, _symbol));
bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(factory), salt, keccak256(bytecode))); bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(factory), salt, keccak256(bytecode)));
......
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